@@ -15,6 +15,17 @@ define i64 @clmul64(i64 %a, i64 %b) nounwind {
1515 ret i64 %tmp
1616}
1717
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+
1829declare i64 @llvm.riscv.clmulh.i64 (i64 %a , i64 %b )
1930
2031define i64 @clmul64h (i64 %a , i64 %b ) nounwind {
@@ -37,6 +48,17 @@ define signext i32 @clmul32(i32 signext %a, i32 signext %b) nounwind {
3748 %tmp = call i32 @llvm.riscv.clmul.i32 (i32 %a , i32 %b )
3849 ret i32 %tmp
3950}
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+ }
4062
4163declare i32 @llvm.riscv.clmulh.i32 (i32 %a , i32 %b )
4264
0 commit comments