forked from OSchip/llvm-project
implement the iret suite of instructions properly,
fixing rdar://8403974 llvm-svn: 113349
This commit is contained in:
parent
086a83afb1
commit
063363fa80
|
@ -627,6 +627,7 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||||
.Case("repe", "rep")
|
.Case("repe", "rep")
|
||||||
.Case("repz", "rep")
|
.Case("repz", "rep")
|
||||||
.Case("repnz", "repne")
|
.Case("repnz", "repne")
|
||||||
|
.Case("iret", "iretl")
|
||||||
.Case("push", Is64Bit ? "pushq" : "pushl")
|
.Case("push", Is64Bit ? "pushq" : "pushl")
|
||||||
.Case("pushf", Is64Bit ? "pushfq" : "pushfl")
|
.Case("pushf", Is64Bit ? "pushfq" : "pushfl")
|
||||||
.Case("popf", Is64Bit ? "popfq" : "popfl")
|
.Case("popf", Is64Bit ? "popfq" : "popfl")
|
||||||
|
|
|
@ -117,7 +117,8 @@ def ADJCALLSTACKUP64 : I<0, Pseudo, (outs), (ins i32imm:$amt1, i32imm:$amt2),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interrupt Instructions
|
// Interrupt Instructions
|
||||||
def IRET64 : RI<0xcf, RawFrm, (outs), (ins), "iret{q}", []>;
|
def IRET64 : RI<0xcf, RawFrm, (outs), (ins), "iretq", []>,
|
||||||
|
Requires<[In64BitMode]>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Call Instructions...
|
// Call Instructions...
|
||||||
|
|
|
@ -601,8 +601,8 @@ def INT3 : I<0xcc, RawFrm, (outs), (ins), "int3",
|
||||||
[(int_x86_int (i8 3))]>;
|
[(int_x86_int (i8 3))]>;
|
||||||
def INT : Ii8<0xcd, RawFrm, (outs), (ins i8imm:$trap), "int\t$trap",
|
def INT : Ii8<0xcd, RawFrm, (outs), (ins i8imm:$trap), "int\t$trap",
|
||||||
[(int_x86_int imm:$trap)]>;
|
[(int_x86_int imm:$trap)]>;
|
||||||
def IRET16 : I<0xcf, RawFrm, (outs), (ins), "iret{w}", []>, OpSize;
|
def IRET16 : I<0xcf, RawFrm, (outs), (ins), "iretw", []>, OpSize;
|
||||||
def IRET32 : I<0xcf, RawFrm, (outs), (ins), "iret{l}", []>;
|
def IRET32 : I<0xcf, RawFrm, (outs), (ins), "iret{l|d}", []>;
|
||||||
|
|
||||||
// PIC base construction. This expands to code that looks like this:
|
// PIC base construction. This expands to code that looks like this:
|
||||||
// call $next_inst
|
// call $next_inst
|
||||||
|
|
|
@ -434,3 +434,13 @@ L1:
|
||||||
// CHECK: jecxz L1
|
// CHECK: jecxz L1
|
||||||
// CHECK: encoding: [0xe3,A]
|
// CHECK: encoding: [0xe3,A]
|
||||||
|
|
||||||
|
// rdar://8403974
|
||||||
|
iret
|
||||||
|
// CHECK: iretl
|
||||||
|
// CHECK: encoding: [0xcf]
|
||||||
|
iretw
|
||||||
|
// CHECK: iretw
|
||||||
|
// CHECK: encoding: [0x66,0xcf]
|
||||||
|
iretl
|
||||||
|
// CHECK: iretl
|
||||||
|
// CHECK: encoding: [0xcf]
|
||||||
|
|
|
@ -185,3 +185,20 @@ rep movsl
|
||||||
// CHECK: encoding: [0xf3]
|
// CHECK: encoding: [0xf3]
|
||||||
// CHECK: movsl
|
// CHECK: movsl
|
||||||
// CHECK: encoding: [0xa5]
|
// CHECK: encoding: [0xa5]
|
||||||
|
|
||||||
|
|
||||||
|
// rdar://8403974
|
||||||
|
iret
|
||||||
|
// CHECK: iretl
|
||||||
|
// CHECK: encoding: [0xcf]
|
||||||
|
iretw
|
||||||
|
// CHECK: iretw
|
||||||
|
// CHECK: encoding: [0x66,0xcf]
|
||||||
|
iretl
|
||||||
|
// CHECK: iretl
|
||||||
|
// CHECK: encoding: [0xcf]
|
||||||
|
iretq
|
||||||
|
// CHECK: iretq
|
||||||
|
// CHECK: encoding: [0x48,0xcf]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue