[llvm-commits] [llvm] r76883 - in /llvm/trunk/lib/Target/ARM: ARMBaseInstrInfo.h ARMBaseRegisterInfo.cpp ARMBaseRegisterInfo.h ARMInstrInfo.cpp ARMInstrInfo.h ARMInstrThumb2.td Thumb1InstrInfo.cpp Thumb1InstrInfo.h Thumb2InstrInfo.cpp Thumb2InstrInfo.h
Evan Cheng
evan.cheng at apple.com
Thu Jul 23 11:35:27 PDT 2009
On Jul 23, 2009, at 10:06 AM, David Goodwin wrote:
>
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original)
> +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Thu Jul 23 12:06:46
> 2009
> @@ -109,7 +109,7 @@
> let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm);
> }
>
> -// t2addrmode_imm8 := reg - imm8
> +// t2addrmode_imm8 := reg +/- imm8
> def t2addrmode_imm8 : Operand<i32>,
> ComplexPattern<i32, 2, "SelectT2AddrModeImm8",
> []> {
> let PrintMethod = "printT2AddrModeImm8Operand";
Hi David,
This looks wrong (SelectT2AddrModeImm8 looks wrong too). According to
the manual:
LDR (immediate, Thumb) encoding T4 is
LDR<c> <Rt>, [<Rn>,#-<imm8>]
LDR<c> <Rt>, [<Rn>,#+/-<imm8>]
LDR<c> <Rd>, [<Rn>,#+/-<imm8>]!
That is, it only allows + offset when it's a pre- / post- index LDR
(ditto for STR). This means sense since T3 allows for positive 12-bit
immediate offset.
Evan
>
> Modified: llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.cpp?rev=76883&r1=76882&r2=76883&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.cpp Thu Jul 23
> 12:06:46 2009
> @@ -30,6 +30,12 @@
> return 0;
> }
>
> +unsigned
> +Thumb1InstrInfo::unsignedOffsetOpcodeToSigned(unsigned opcode,
> + unsigned *NumBits)
> const {
> + return 0;
> +}
> +
> unsigned Thumb1InstrInfo::getOpcode(ARMII::Op Op) const {
> switch (Op) {
> case ARMII::ADDri: return ARM::tADDi8;
>
> Modified: llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.h?rev=76883&r1=76882&r2=76883&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/Thumb1InstrInfo.h Thu Jul 23 12:06:46
> 2009
> @@ -34,6 +34,13 @@
> // Return the opcode that implements 'Op', or 0 if no opcode
> unsigned getOpcode(ARMII::Op Op) const;
>
> + // If 'opcode' is an instruction with an unsigned offset that also
> + // has a version with a signed offset, return the opcode for the
> + // version with the signed offset. In 'NumBits' return the number
> of
> + // bits for the signed offset.
> + unsigned unsignedOffsetOpcodeToSigned(unsigned opcode,
> + unsigned *NumBits) const;
> +
> // Return true if the block does not fall through.
> bool BlockHasNoFallThrough(const MachineBasicBlock &MBB) const;
>
>
> Modified: llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp?rev=76883&r1=76882&r2=76883&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp Thu Jul 23
> 12:06:46 2009
> @@ -88,6 +88,29 @@
> return false;
> }
>
> +unsigned
> +Thumb2InstrInfo::unsignedOffsetOpcodeToSigned(unsigned opcode,
> + unsigned *NumBits)
> const
> +{
> + if (NumBits != NULL)
> + *NumBits = 8;
> +
> + switch (opcode) {
> + case ARM::t2LDRi12: return ARM::t2LDRi8;
> + case ARM::t2LDRHi12: return ARM::t2LDRHi8;
> + case ARM::t2LDRBi12: return ARM::t2LDRBi8;
> + case ARM::t2LDRSHi12: return ARM::t2LDRSHi8;
> + case ARM::t2LDRSBi12: return ARM::t2LDRSBi8;
> + case ARM::t2STRi12: return ARM::t2STRi8;
> + case ARM::t2STRBi12: return ARM::t2STRBi8;
> + case ARM::t2STRHi12: return ARM::t2STRHi8;
> + default:
> + break;
> + }
> +
> + return 0;
> +}
> +
> bool
> Thumb2InstrInfo::copyRegToReg(MachineBasicBlock &MBB,
> MachineBasicBlock::iterator I,
>
> Modified: llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.h?rev=76883&r1=76882&r2=76883&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.h Thu Jul 23 12:06:46
> 2009
> @@ -34,6 +34,13 @@
> // Return the opcode that implements 'Op', or 0 if no opcode
> unsigned getOpcode(ARMII::Op Op) const;
>
> + // If 'opcode' is an instruction with an unsigned offset that also
> + // has a version with a signed offset, return the opcode for the
> + // version with the signed offset. In 'NumBits' return the number
> of
> + // bits for the signed offset.
> + unsigned unsignedOffsetOpcodeToSigned(unsigned opcode,
> + unsigned *NumBits) const;
> +
> // Return true if the block does not fall through.
> bool BlockHasNoFallThrough(const MachineBasicBlock &MBB) const;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list