forked from OSchip/llvm-project
"The Intel instruction tables should include the 64-bit and 32-bit instructions
that push immediate operands of 1, 2, and 4 bytes (extended to the native register size in each case). The assembly mnemonics are "pushl" and "pushq." One such instruction appears at the beginning of the "start" function , so this is essential for accurate disassembly when unwinding." Patch by Sean Callanan! llvm-svn: 73407
This commit is contained in:
parent
1cf0f193b0
commit
e790614fa5
|
@ -177,6 +177,15 @@ def PUSH64r : I<0x50, AddRegFrm,
|
||||||
(outs), (ins GR64:$reg), "push{q}\t$reg", []>;
|
(outs), (ins GR64:$reg), "push{q}\t$reg", []>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let Defs = [RSP], Uses = [RSP], neverHasSideEffects = 1, mayStore = 1 in {
|
||||||
|
def PUSH64i8 : Ii8<0x6a, RawFrm, (outs), (ins i8imm:$imm),
|
||||||
|
"push{l}\t$imm", []>;
|
||||||
|
def PUSH64i16 : Ii16<0x68, RawFrm, (outs), (ins i16imm:$imm),
|
||||||
|
"push{l}\t$imm", []>;
|
||||||
|
def PUSH64i32 : Ii32<0x68, RawFrm, (outs), (ins i32imm:$imm),
|
||||||
|
"push{l}\t$imm", []>;
|
||||||
|
}
|
||||||
|
|
||||||
let Defs = [RSP, EFLAGS], Uses = [RSP], mayLoad = 1 in
|
let Defs = [RSP, EFLAGS], Uses = [RSP], mayLoad = 1 in
|
||||||
def POPFQ : I<0x9D, RawFrm, (outs), (ins), "popf", []>, REX_W;
|
def POPFQ : I<0x9D, RawFrm, (outs), (ins), "popf", []>, REX_W;
|
||||||
let Defs = [RSP], Uses = [RSP, EFLAGS], mayStore = 1 in
|
let Defs = [RSP], Uses = [RSP, EFLAGS], mayStore = 1 in
|
||||||
|
|
|
@ -611,6 +611,15 @@ let mayStore = 1 in
|
||||||
def PUSH32r : I<0x50, AddRegFrm, (outs), (ins GR32:$reg), "push{l}\t$reg",[]>;
|
def PUSH32r : I<0x50, AddRegFrm, (outs), (ins GR32:$reg), "push{l}\t$reg",[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let Defs = [ESP], Uses = [ESP], neverHasSideEffects = 1, mayStore = 1 in {
|
||||||
|
def PUSH32i8 : Ii8<0x6a, RawFrm, (outs), (ins i8imm:$imm),
|
||||||
|
"push{q}\t$imm", []>;
|
||||||
|
def PUSH32i16 : Ii16<0x68, RawFrm, (outs), (ins i16imm:$imm),
|
||||||
|
"push{q}\t$imm", []>;
|
||||||
|
def PUSH32i32 : Ii32<0x68, RawFrm, (outs), (ins i32imm:$imm),
|
||||||
|
"push{q}\t$imm", []>;
|
||||||
|
}
|
||||||
|
|
||||||
let Defs = [ESP, EFLAGS], Uses = [ESP], mayLoad = 1, neverHasSideEffects=1 in
|
let Defs = [ESP, EFLAGS], Uses = [ESP], mayLoad = 1, neverHasSideEffects=1 in
|
||||||
def POPFD : I<0x9D, RawFrm, (outs), (ins), "popf", []>;
|
def POPFD : I<0x9D, RawFrm, (outs), (ins), "popf", []>;
|
||||||
let Defs = [ESP], Uses = [ESP, EFLAGS], mayStore = 1, neverHasSideEffects=1 in
|
let Defs = [ESP], Uses = [ESP, EFLAGS], mayStore = 1, neverHasSideEffects=1 in
|
||||||
|
|
Loading…
Reference in New Issue