mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
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
This commit is contained in:
parent
5f84c0293f
commit
3c979b06c0
@ -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", []>;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user