@@ -15,6 +15,17 @@ define i64 @clmul64(i64 %a, i64 %b) nounwind {
15
15
ret i64 %tmp
16
16
}
17
17
18
+ declare i64 @llvm.clmul.i64 (i64 %a , i64 %b )
19
+
20
+ define i64 @generic_clmul64 (i64 %a , i64 %b ) nounwind {
21
+ ; RV64ZBC-ZBKC-LABEL: clmul64:
22
+ ; RV64ZBC-ZBKC: # %bb.0:
23
+ ; RV64ZBC-ZBKC-NEXT: clmul a0, a0, a1
24
+ ; RV64ZBC-ZBKC-NEXT: ret
25
+ %tmp = call i64 @llvm.clmul.i64 (i64 %a , i64 %b )
26
+ ret i64 %tmp
27
+ }
28
+
18
29
declare i64 @llvm.riscv.clmulh.i64 (i64 %a , i64 %b )
19
30
20
31
define i64 @clmul64h (i64 %a , i64 %b ) nounwind {
@@ -37,6 +48,17 @@ define signext i32 @clmul32(i32 signext %a, i32 signext %b) nounwind {
37
48
%tmp = call i32 @llvm.riscv.clmul.i32 (i32 %a , i32 %b )
38
49
ret i32 %tmp
39
50
}
51
+ declare i32 @llvm.clmul.i32 (i32 %a , i32 %b )
52
+
53
+ define signext i32 @generic_clmul32 (i32 signext %a , i32 signext %b ) nounwind {
54
+ ; RV64ZBC-ZBKC-LABEL: clmul32:
55
+ ; RV64ZBC-ZBKC: # %bb.0:
56
+ ; RV64ZBC-ZBKC-NEXT: clmul a0, a0, a1
57
+ ; RV64ZBC-ZBKC-NEXT: sext.w a0, a0
58
+ ; RV64ZBC-ZBKC-NEXT: ret
59
+ %tmp = call i32 @llvm.clmul.i32 (i32 %a , i32 %b )
60
+ ret i32 %tmp
61
+ }
40
62
41
63
declare i32 @llvm.riscv.clmulh.i32 (i32 %a , i32 %b )
42
64
0 commit comments