Skip to content

Commit 96cc891

Browse files
committed
[Clang][XTHeadVector] Implement 12.3 vadc/vsbc/vmadc/vmsbc (llvm#69)
* [Clang][XTHeadVector] Define `vadc/vsbc/vmadc/vmsbc` Reference: ruyisdk#52 * [Clang][XTHeadVector] Test `vadc/vsbc/vmadc/vmsbc`
1 parent adbbc21 commit 96cc891

File tree

5 files changed

+2621
-8
lines changed

5 files changed

+2621
-8
lines changed

clang/include/clang/Basic/riscv_vector_xtheadv.td

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ multiclass RVVOutOp1BuiltinSet<string intrinsic_name, string type_range,
4949
list<list<string>> suffixes_prototypes>
5050
: RVVBuiltinSet<intrinsic_name, type_range, suffixes_prototypes, [-1, 1]>;
5151

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+
5256
multiclass RVVSignedBinBuiltinSet
5357
: RVVOutOp1BuiltinSet<NAME, "csil",
5458
[["vv", "v", "vvv"],
@@ -120,6 +124,20 @@ defvar EEWList = [["8", "(Log2EEW:3)"],
120124
["32", "(Log2EEW:5)"],
121125
["64", "(Log2EEW:6)"]];
122126

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+
123141
//===----------------------------------------------------------------------===//
124142
// 6. Configuration-Setting and Utility
125143
//===----------------------------------------------------------------------===//
@@ -882,15 +900,24 @@ defm th_vneg_v : RVVPseudoUnaryBuiltin<"th_vrsub", "csil">;
882900

883901
// 12.2. Vector Widening Integer Add/Subtract Operations
884902
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;
893911
}
894912

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+
}
895922

896923
include "riscv_vector_xtheadv_wrappers.td"

0 commit comments

Comments
 (0)