mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Add intrinsics for the zext / sext instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135476 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
829bef1a46
commit
c8007ab582
@ -17,6 +17,10 @@ let TargetPrefix = "xcore" in { // All intrinsics start with "llvm.xcore.".
|
||||
def int_xcore_crc32 : Intrinsic<[llvm_i32_ty],
|
||||
[llvm_i32_ty,llvm_i32_ty,llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_xcore_sext : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_xcore_zext : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_xcore_getid : Intrinsic<[llvm_i32_ty],[],[IntrNoMem]>;
|
||||
def int_xcore_getps : Intrinsic<[llvm_i32_ty],[llvm_i32_ty]>;
|
||||
def int_xcore_setps : Intrinsic<[],[llvm_i32_ty, llvm_i32_ty]>;
|
||||
|
@ -754,7 +754,7 @@ def BL_lu10 : _FLU10<
|
||||
}
|
||||
|
||||
// Two operand short
|
||||
// TODO eet, eef, tsetmr, sext (reg), zext (reg)
|
||||
// TODO eet, eef, tsetmr
|
||||
def NOT : _F2R<(outs GRRegs:$dst), (ins GRRegs:$b),
|
||||
"not $dst, $b",
|
||||
[(set GRRegs:$dst, (not GRRegs:$b))]>;
|
||||
@ -764,15 +764,21 @@ def NEG : _F2R<(outs GRRegs:$dst), (ins GRRegs:$b),
|
||||
[(set GRRegs:$dst, (ineg GRRegs:$b))]>;
|
||||
|
||||
let Constraints = "$src1 = $dst" in {
|
||||
let neverHasSideEffects = 1 in
|
||||
def SEXT_rus : _FRUS<(outs GRRegs:$dst), (ins GRRegs:$src1, i32imm:$src2),
|
||||
"sext $dst, $src2",
|
||||
[]>;
|
||||
"sext $dst, $src2",
|
||||
[(set GRRegs:$dst, (int_xcore_sext GRRegs:$src1, immBitp:$src2))]>;
|
||||
|
||||
def SEXT_2r : _FRUS<(outs GRRegs:$dst), (ins GRRegs:$src1, GRRegs:$src2),
|
||||
"sext $dst, $src2",
|
||||
[(set GRRegs:$dst, (int_xcore_sext GRRegs:$src1, GRRegs:$src2))]>;
|
||||
|
||||
let neverHasSideEffects = 1 in
|
||||
def ZEXT_rus : _FRUS<(outs GRRegs:$dst), (ins GRRegs:$src1, i32imm:$src2),
|
||||
"zext $dst, $src2",
|
||||
[]>;
|
||||
"zext $dst, $src2",
|
||||
[(set GRRegs:$dst, (int_xcore_zext GRRegs:$src1, immBitp:$src2))]>;
|
||||
|
||||
def ZEXT_2r : _FRUS<(outs GRRegs:$dst), (ins GRRegs:$src1, GRRegs:$src2),
|
||||
"zext $dst, $src2",
|
||||
[(set GRRegs:$dst, (int_xcore_zext GRRegs:$src1, GRRegs:$src2))]>;
|
||||
|
||||
def ANDNOT_2r : _F2R<(outs GRRegs:$dst), (ins GRRegs:$src1, GRRegs:$src2),
|
||||
"andnot $dst, $src2",
|
||||
|
@ -4,6 +4,8 @@
|
||||
declare i32 @llvm.xcore.bitrev(i32)
|
||||
declare i32 @llvm.xcore.crc32(i32, i32, i32)
|
||||
declare %0 @llvm.xcore.crc8(i32, i32, i32)
|
||||
declare i32 @llvm.xcore.zext(i32, i32)
|
||||
declare i32 @llvm.xcore.sext(i32, i32)
|
||||
|
||||
define i32 @bitrev(i32 %val) {
|
||||
; CHECK: bitrev:
|
||||
@ -25,3 +27,31 @@ define %0 @crc8(i32 %crc, i32 %data, i32 %poly) {
|
||||
%result = call %0 @llvm.xcore.crc8(i32 %crc, i32 %data, i32 %poly)
|
||||
ret %0 %result
|
||||
}
|
||||
|
||||
define i32 @zext(i32 %a, i32 %b) {
|
||||
; CHECK: zext:
|
||||
; CHECK: zext r0, r1
|
||||
%result = call i32 @llvm.xcore.zext(i32 %a, i32 %b)
|
||||
ret i32 %result
|
||||
}
|
||||
|
||||
define i32 @zexti(i32 %a) {
|
||||
; CHECK: zexti:
|
||||
; CHECK: zext r0, 4
|
||||
%result = call i32 @llvm.xcore.zext(i32 %a, i32 4)
|
||||
ret i32 %result
|
||||
}
|
||||
|
||||
define i32 @sext(i32 %a, i32 %b) {
|
||||
; CHECK: sext:
|
||||
; CHECK: sext r0, r1
|
||||
%result = call i32 @llvm.xcore.sext(i32 %a, i32 %b)
|
||||
ret i32 %result
|
||||
}
|
||||
|
||||
define i32 @sexti(i32 %a) {
|
||||
; CHECK: sexti:
|
||||
; CHECK: sext r0, 4
|
||||
%result = call i32 @llvm.xcore.sext(i32 %a, i32 4)
|
||||
ret i32 %result
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user