diff options
author | Kevin Enderby <enderby@apple.com> | 2010-05-03 20:45:05 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2010-05-03 20:45:05 +0000 |
commit | 3c979b06c041544b97b13c5adac1a91d6cde6582 (patch) | |
tree | c0f1edec0f5a24e5a24691945dbbc2c071faf5d9 | |
parent | 5f84c0293f2150ac0f8fab8b7fb14f87161c8bf2 (diff) |
Fixed the encoding of the x86 push instructions. Using a 32-bit immediate value
caused the a pushl instruction to be incorrectly encoding using only two bytes
of immediate, causing the following 2 instruction bytes to be part of the 32-bit
immediate value. Also fixed the one byte form of push to be used when the
immediate would fit in a signed extended byte. Lastly changed the names to not
include the 32 of PUSH32 since they actually push the size of the stack pointer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102951 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86InstrInfo.td | 8 | ||||
-rw-r--r-- | test/MC/AsmParser/X86/x86_32-encoding.s | 13 |
2 files changed, 17 insertions, 4 deletions
diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index befff27dd6..a2754eac21 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -753,11 +753,11 @@ def PUSH32rmm: I<0xFF, MRM6m, (outs), (ins i32mem:$src), "push{l}\t$src",[]>; } let Defs = [ESP], Uses = [ESP], neverHasSideEffects = 1, mayStore = 1 in { -def PUSH32i8 : Ii8<0x6a, RawFrm, (outs), (ins i8imm:$imm), - "push{l}\t$imm", []>; -def PUSH32i16 : Ii16<0x68, RawFrm, (outs), (ins i16imm:$imm), +def PUSHi8 : Ii8<0x6a, RawFrm, (outs), (ins i32i8imm:$imm), "push{l}\t$imm", []>; -def PUSH32i32 : Ii32<0x68, RawFrm, (outs), (ins i32imm:$imm), +def PUSHi16 : Ii16<0x68, RawFrm, (outs), (ins i16imm:$imm), + "push{w}\t$imm", []>, OpSize; +def PUSHi32 : Ii32<0x68, RawFrm, (outs), (ins i32imm:$imm), "push{l}\t$imm", []>; } diff --git a/test/MC/AsmParser/X86/x86_32-encoding.s b/test/MC/AsmParser/X86/x86_32-encoding.s index b5472ca49c..475632cb78 100644 --- a/test/MC/AsmParser/X86/x86_32-encoding.s +++ b/test/MC/AsmParser/X86/x86_32-encoding.s @@ -9984,3 +9984,16 @@ pshufb CPI1_0(%rip), %xmm1 // CHECK: bsrw 305419896, %bx // CHECK: encoding: [0x66,0x0f,0xbd,0x1d,0x78,0x56,0x34,0x12] bsrw 305419896, %bx + +// radr://7901779 +// CHECK: pushl $127 +// CHECK: encoding: [0x6a,0xfe] + pushl $127 + +// CHECK: pushw $254 +// CHECK: encoding: [0x66,0x68,0xfe,0x00] + pushw $254 + +// CHECK: pushl $254 +// CHECK: encoding: [0x68,0xfe,0x00,0x00,0x00] + pushl $254 |