Add XCore intrinsic for crc32.
authorRichard Osborne <richard@xmos.com>
Tue, 31 May 2011 14:47:36 +0000 (14:47 +0000)
committerRichard Osborne <richard@xmos.com>
Tue, 31 May 2011 14:47:36 +0000 (14:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132336 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/IntrinsicsXCore.td
lib/Target/XCore/XCoreInstrInfo.td
test/CodeGen/XCore/bitrev.ll [deleted file]
test/CodeGen/XCore/misc-intrinsics.ll [new file with mode: 0644]

index e633af045c3399f10432b86f7872161296fd7150..951f7dd700c358ba0cf507933a86b13af819fa46 100644 (file)
@@ -11,6 +11,7 @@
 let TargetPrefix = "xcore" in {  // All intrinsics start with "llvm.xcore.".
   // Miscellaneous instructions.
   def int_xcore_bitrev : Intrinsic<[llvm_i32_ty],[llvm_i32_ty],[IntrNoMem]>;
+  def int_xcore_crc32 : Intrinsic<[llvm_i32_ty],[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]>;
index 789546ed304b3d2dcbb3822ecc7b291623b00b0d..1647db5d787fb346fcb7c7a2b6fd6002a6439a18 100644 (file)
@@ -472,7 +472,13 @@ def REMU_l3r : FL3R<"remu", urem>;
 }
 def XOR_l3r : FL3R<"xor", xor>;
 defm ASHR : FL3R_L2RBITP<"ashr", sra>;
-// TODO crc32, crc8, inpw, outpw
+
+let Constraints = "$src1 = $dst" in
+def CRC_l3r : _FL3R<(outs GRRegs:$dst), (ins GRRegs:$src1, GRRegs:$src2, GRRegs:$src3),
+                     "crc32 $dst, $src2, $src3",
+                     [(set GRRegs:$dst, (int_xcore_crc32 GRRegs:$src1, GRRegs:$src2, GRRegs:$src3))]>;
+
+// TODO inpw, outpw
 let mayStore=1 in {
 def ST16_l3r : _FL3R<(outs), (ins GRRegs:$val, GRRegs:$addr, GRRegs:$offset),
                 "st16 $val, $addr[$offset]",
diff --git a/test/CodeGen/XCore/bitrev.ll b/test/CodeGen/XCore/bitrev.ll
deleted file mode 100644 (file)
index 9f0dc39..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-; RUN: llc < %s -march=xcore | FileCheck %s
-declare i32 @llvm.xcore.bitrev(i32)
-
-define i32 @bitrev(i32 %val) {
-; CHECK: bitrev:
-; CHECK: bitrev r0, r0
-       %result = call i32 @llvm.xcore.bitrev(i32 %val)
-       ret i32 %result
-}
diff --git a/test/CodeGen/XCore/misc-intrinsics.ll b/test/CodeGen/XCore/misc-intrinsics.ll
new file mode 100644 (file)
index 0000000..0c68488
--- /dev/null
@@ -0,0 +1,17 @@
+; RUN: llc < %s -march=xcore | FileCheck %s
+declare i32 @llvm.xcore.bitrev(i32)
+declare i32 @llvm.xcore.crc32(i32, i32, i32)
+
+define i32 @bitrev(i32 %val) {
+; CHECK: bitrev:
+; CHECK: bitrev r0, r0
+       %result = call i32 @llvm.xcore.bitrev(i32 %val)
+       ret i32 %result
+}
+
+define i32 @crc32(i32 %crc, i32 %data, i32 %poly) {
+; CHECK: crc32:
+; CHECK: crc32 r0, r1, r2
+       %result = call i32 @llvm.xcore.crc32(i32 %crc, i32 %data, i32 %poly)
+       ret i32 %result
+}