mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-16 11:24:39 +00:00
Add a new llvm.x86.int intrinsic, allowing access to the
x86 int and int3 instructions. Patch by Peter Housel! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111831 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -11,6 +11,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Interrupt traps
|
||||||
|
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||||
|
def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// SSE1
|
// SSE1
|
||||||
|
@@ -595,10 +595,14 @@ let neverHasSideEffects = 1 in {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trap
|
// Trap
|
||||||
def INTO : I<0xce, RawFrm, (outs), (ins), "into", []>;
|
let Uses = [EFLAGS] in {
|
||||||
def INT3 : I<0xcc, RawFrm, (outs), (ins), "int3", []>;
|
def INTO : I<0xce, RawFrm, (outs), (ins), "into", []>;
|
||||||
|
}
|
||||||
|
def INT3 : I<0xcc, RawFrm, (outs), (ins), "int3",
|
||||||
|
[(int_x86_int (i8 3))]>;
|
||||||
// FIXME: need to make sure that "int $3" matches int3
|
// FIXME: need to make sure that "int $3" matches int3
|
||||||
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)]>;
|
||||||
def IRET16 : I<0xcf, RawFrm, (outs), (ins), "iret{w}", []>, OpSize;
|
def IRET16 : I<0xcf, RawFrm, (outs), (ins), "iret{w}", []>, OpSize;
|
||||||
def IRET32 : I<0xcf, RawFrm, (outs), (ins), "iret{l}", []>;
|
def IRET32 : I<0xcf, RawFrm, (outs), (ins), "iret{l}", []>;
|
||||||
|
|
||||||
|
20
test/CodeGen/X86/int-intrinsic.ll
Normal file
20
test/CodeGen/X86/int-intrinsic.ll
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
; RUN: llc < %s -march=x86 | FileCheck %s
|
||||||
|
; RUN: llc < %s -march=x86-64 | FileCheck %s
|
||||||
|
|
||||||
|
declare void @llvm.x86.int(i8) nounwind
|
||||||
|
|
||||||
|
; CHECK: int3
|
||||||
|
; CHECK: ret
|
||||||
|
define void @primitive_int3 () {
|
||||||
|
bb.entry:
|
||||||
|
call void @llvm.x86.int(i8 3) nounwind
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK: int $-128
|
||||||
|
; CHECK: ret
|
||||||
|
define void @primitive_int128 () {
|
||||||
|
bb.entry:
|
||||||
|
call void @llvm.x86.int(i8 128) nounwind
|
||||||
|
ret void
|
||||||
|
}
|
Reference in New Issue
Block a user