Commit 2ea2ea77 authored by Lu Yahan's avatar Lu Yahan Committed by V8 LUCI CQ

[riscv64] Implement VSADDU

Change-Id: Ifa2236b650f78ad851930e69e0387d8952f197c1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3178142
Commit-Queue: Yahan Lu <yahan@iscas.ac.cn>
Reviewed-by: 's avatarBrice Dobry <brice.dobry@futurewei.com>
Cr-Commit-Position: refs/heads/main@{#77072}
parent 18589f30
...@@ -2569,9 +2569,9 @@ DEFINE_OPIVX(vsub, VSUB_FUNCT6) ...@@ -2569,9 +2569,9 @@ DEFINE_OPIVX(vsub, VSUB_FUNCT6)
DEFINE_OPIVX(vsadd, VSADD_FUNCT6) DEFINE_OPIVX(vsadd, VSADD_FUNCT6)
DEFINE_OPIVV(vsadd, VSADD_FUNCT6) DEFINE_OPIVV(vsadd, VSADD_FUNCT6)
DEFINE_OPIVI(vsadd, VSADD_FUNCT6) DEFINE_OPIVI(vsadd, VSADD_FUNCT6)
DEFINE_OPIVX(vsaddu, VSADD_FUNCT6) DEFINE_OPIVX(vsaddu, VSADDU_FUNCT6)
DEFINE_OPIVV(vsaddu, VSADD_FUNCT6) DEFINE_OPIVV(vsaddu, VSADDU_FUNCT6)
DEFINE_OPIVI(vsaddu, VSADD_FUNCT6) DEFINE_OPIVI(vsaddu, VSADDU_FUNCT6)
DEFINE_OPIVX(vssub, VSSUB_FUNCT6) DEFINE_OPIVX(vssub, VSSUB_FUNCT6)
DEFINE_OPIVV(vssub, VSSUB_FUNCT6) DEFINE_OPIVV(vssub, VSSUB_FUNCT6)
DEFINE_OPIVX(vssubu, VSSUBU_FUNCT6) DEFINE_OPIVX(vssubu, VSSUBU_FUNCT6)
......
...@@ -790,8 +790,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { ...@@ -790,8 +790,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase {
DEFINE_OPIVV(vsadd, VSADD_FUNCT6) DEFINE_OPIVV(vsadd, VSADD_FUNCT6)
DEFINE_OPIVI(vsadd, VSADD_FUNCT6) DEFINE_OPIVI(vsadd, VSADD_FUNCT6)
DEFINE_OPIVX(vsaddu, VSADD_FUNCT6) DEFINE_OPIVX(vsaddu, VSADD_FUNCT6)
DEFINE_OPIVV(vsaddu, VSADD_FUNCT6) DEFINE_OPIVV(vsaddu, VSADDU_FUNCT6)
DEFINE_OPIVI(vsaddu, VSADD_FUNCT6) DEFINE_OPIVI(vsaddu, VSADDU_FUNCT6)
DEFINE_OPIVX(vssub, VSSUB_FUNCT6) DEFINE_OPIVX(vssub, VSSUB_FUNCT6)
DEFINE_OPIVV(vssub, VSSUB_FUNCT6) DEFINE_OPIVV(vssub, VSSUB_FUNCT6)
DEFINE_OPIVX(vssubu, VSSUBU_FUNCT6) DEFINE_OPIVX(vssubu, VSSUBU_FUNCT6)
......
...@@ -1914,6 +1914,9 @@ void Decoder::DecodeRvvIVV(Instruction* instr) { ...@@ -1914,6 +1914,9 @@ void Decoder::DecodeRvvIVV(Instruction* instr) {
case RO_V_VSADD_VV: case RO_V_VSADD_VV:
Format(instr, "vsadd.vv 'vd, 'vs2, 'vs1'vm"); Format(instr, "vsadd.vv 'vd, 'vs2, 'vs1'vm");
break; break;
case RO_V_VSADDU_VV:
Format(instr, "vsaddu.vv 'vd, 'vs2, 'vs1'vm");
break;
case RO_V_VSUB_VV: case RO_V_VSUB_VV:
Format(instr, "vsub.vv 'vd, 'vs2, 'vs1'vm"); Format(instr, "vsub.vv 'vd, 'vs2, 'vs1'vm");
break; break;
...@@ -1998,6 +2001,9 @@ void Decoder::DecodeRvvIVI(Instruction* instr) { ...@@ -1998,6 +2001,9 @@ void Decoder::DecodeRvvIVI(Instruction* instr) {
case RO_V_VSADD_VI: case RO_V_VSADD_VI:
Format(instr, "vsadd.vi 'vd, 'vs2, 'simm5'vm"); Format(instr, "vsadd.vi 'vd, 'vs2, 'simm5'vm");
break; break;
case RO_V_VSADDU_VI:
Format(instr, "vsaddu.vi 'vd, 'vs2, 'simm5'vm");
break;
case RO_V_VRSUB_VI: case RO_V_VRSUB_VI:
Format(instr, "vrsub.vi 'vd, 'vs2, 'simm5'vm"); Format(instr, "vrsub.vi 'vd, 'vs2, 'simm5'vm");
break; break;
...@@ -2076,6 +2082,9 @@ void Decoder::DecodeRvvIVX(Instruction* instr) { ...@@ -2076,6 +2082,9 @@ void Decoder::DecodeRvvIVX(Instruction* instr) {
case RO_V_VSADD_VX: case RO_V_VSADD_VX:
Format(instr, "vsadd.vx 'vd, 'vs2, 'rs1'vm"); Format(instr, "vsadd.vx 'vd, 'vs2, 'rs1'vm");
break; break;
case RO_V_VSADDU_VX:
Format(instr, "vsaddu.vx 'vd, 'vs2, 'rs1'vm");
break;
case RO_V_VSUB_VX: case RO_V_VSUB_VX:
Format(instr, "vsub.vx 'vd, 'vs2, 'rs1'vm"); Format(instr, "vsub.vx 'vd, 'vs2, 'rs1'vm");
break; break;
......
...@@ -4316,6 +4316,12 @@ void Simulator::DecodeRvvIVV() { ...@@ -4316,6 +4316,12 @@ void Simulator::DecodeRvvIVV() {
RVV_VI_LOOP_END RVV_VI_LOOP_END
break; break;
} }
case RO_V_VSADDU_VV:
RVV_VI_VV_ULOOP({
vd = vs2 + vs1;
vd |= -(vd < vs2);
})
break;
case RO_V_VSUB_VV: { case RO_V_VSUB_VV: {
RVV_VI_VV_LOOP({ vd = vs2 - vs1; }) RVV_VI_VV_LOOP({ vd = vs2 - vs1; })
break; break;
...@@ -4543,6 +4549,13 @@ void Simulator::DecodeRvvIVI() { ...@@ -4543,6 +4549,13 @@ void Simulator::DecodeRvvIVI() {
RVV_VI_LOOP_END RVV_VI_LOOP_END
break; break;
} }
case RO_V_VSADDU_VI:{
RVV_VI_VI_ULOOP({
vd = vs2 + uimm5;
vd |= -(vd < vs2);
})
break;
}
case RO_V_VRSUB_VI: { case RO_V_VRSUB_VI: {
RVV_VI_VI_LOOP({ vd = vs2 - simm5; }) RVV_VI_VI_LOOP({ vd = vs2 - simm5; })
break; break;
...@@ -4681,6 +4694,13 @@ void Simulator::DecodeRvvIVX() { ...@@ -4681,6 +4694,13 @@ void Simulator::DecodeRvvIVX() {
RVV_VI_LOOP_END RVV_VI_LOOP_END
break; break;
} }
case RO_V_VSADDU_VX: {
RVV_VI_VX_ULOOP({
vd = vs2 + rs1;
vd |= -(vd < vs2);
})
break;
}
case RO_V_VSUB_VX: { case RO_V_VSUB_VX: {
RVV_VI_VX_LOOP({ vd = vs2 - rs1; }) RVV_VI_VX_LOOP({ vd = vs2 - rs1; })
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment