@@ -49,6 +49,10 @@ multiclass RVVOutOp1BuiltinSet<string intrinsic_name, string type_range,
49
49
list<list<string>> suffixes_prototypes>
50
50
: RVVBuiltinSet<intrinsic_name, type_range, suffixes_prototypes, [-1, 1]>;
51
51
52
+ multiclass RVVOp0Op1BuiltinSet<string intrinsic_name, string type_range,
53
+ list<list<string>> suffixes_prototypes>
54
+ : RVVBuiltinSet<intrinsic_name, type_range, suffixes_prototypes, [0, 1]>;
55
+
52
56
multiclass RVVSignedBinBuiltinSet
53
57
: RVVOutOp1BuiltinSet<NAME, "csil",
54
58
[["vv", "v", "vvv"],
@@ -120,6 +124,20 @@ defvar EEWList = [["8", "(Log2EEW:3)"],
120
124
["32", "(Log2EEW:5)"],
121
125
["64", "(Log2EEW:6)"]];
122
126
127
+ multiclass RVVCarryinBuiltinSet
128
+ : RVVOutOp1BuiltinSet<NAME, "csil",
129
+ [["vvm", "v", "vvvm"],
130
+ ["vxm", "v", "vvem"],
131
+ ["vvm", "Uv", "UvUvUvm"],
132
+ ["vxm", "Uv", "UvUvUem"]]>;
133
+
134
+ multiclass RVVCarryOutInBuiltinSet<string intrinsic_name>
135
+ : RVVOp0Op1BuiltinSet<intrinsic_name, "csil",
136
+ [["vvm", "vm", "mvvm"],
137
+ ["vxm", "vm", "mvem"],
138
+ ["vvm", "Uvm", "mUvUvm"],
139
+ ["vxm", "Uvm", "mUvUem"]]>;
140
+
123
141
//===----------------------------------------------------------------------===//
124
142
// 6. Configuration-Setting and Utility
125
143
//===----------------------------------------------------------------------===//
@@ -882,15 +900,24 @@ defm th_vneg_v : RVVPseudoUnaryBuiltin<"th_vrsub", "csil">;
882
900
883
901
// 12.2. Vector Widening Integer Add/Subtract Operations
884
902
let UnMaskedPolicyScheme = HasPassthruOperand in {
885
- defm th_vwaddu : RVVUnsignedWidenBinBuiltinSet;
886
- defm th_vwaddu : RVVUnsignedWidenOp0BinBuiltinSet;
887
- defm th_vwsubu : RVVUnsignedWidenBinBuiltinSet;
888
- defm th_vwsubu : RVVUnsignedWidenOp0BinBuiltinSet;
889
- defm th_vwadd : RVVSignedWidenBinBuiltinSet;
890
- defm th_vwadd : RVVSignedWidenOp0BinBuiltinSet;
891
- defm th_vwsub : RVVSignedWidenBinBuiltinSet;
892
- defm th_vwsub : RVVSignedWidenOp0BinBuiltinSet;
903
+ defm th_vwaddu : RVVUnsignedWidenBinBuiltinSet;
904
+ defm th_vwaddu : RVVUnsignedWidenOp0BinBuiltinSet;
905
+ defm th_vwsubu : RVVUnsignedWidenBinBuiltinSet;
906
+ defm th_vwsubu : RVVUnsignedWidenOp0BinBuiltinSet;
907
+ defm th_vwadd : RVVSignedWidenBinBuiltinSet;
908
+ defm th_vwadd : RVVSignedWidenOp0BinBuiltinSet;
909
+ defm th_vwsub : RVVSignedWidenBinBuiltinSet;
910
+ defm th_vwsub : RVVSignedWidenOp0BinBuiltinSet;
893
911
}
894
912
913
+ // 12.3. Vector Integer Add-with-Carry / Subtract-with-Borrow Operations
914
+ let HasMasked = false, MaskedPolicyScheme = NonePolicy in {
915
+ let UnMaskedPolicyScheme = HasPassthruOperand in {
916
+ defm th_vadc : RVVCarryinBuiltinSet;
917
+ defm th_vsbc : RVVCarryinBuiltinSet;
918
+ }
919
+ defm th_vmadc : RVVCarryOutInBuiltinSet<"th_vmadc_carry_in">;
920
+ defm th_vmsbc : RVVCarryOutInBuiltinSet<"th_vmsbc_borrow_in">;
921
+ }
895
922
896
923
include "riscv_vector_xtheadv_wrappers.td"
0 commit comments