Browse Source
based on v-spec 0.7.1, support sections: 14/15.3 ~ 15.4 element size: 32 Signed-off-by: Bruce Hoult <bruce@hoult.org> Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com> Signed-off-by: Dave Wen <dave.wen@sifive.com>pull/303/head
83 changed files with 869 additions and 1 deletions
@ -0,0 +1,5 @@ |
|||
// vfadd.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_add(rs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfadd.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_add(vs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfclass.v vd, vs2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd.v = f32_classify(vs2); |
|||
}) |
|||
@ -0,0 +1,6 @@ |
|||
// vfcvt.f.x.v vd, vd2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
auto vs2_i = P.VU.elt<int32_t>(rs2_num, i); |
|||
vd = i32_to_f32(vs2_i); |
|||
}) |
|||
@ -0,0 +1,6 @@ |
|||
// vfcvt.f.xu.v vd, vd2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
auto vs2_u = P.VU.elt<uint32_t>(rs2_num, i); |
|||
vd = ui32_to_f32(vs2_u); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfcvt.x.f.v vd, vd2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
P.VU.elt<int32_t>(rd_num, i) = f32_to_i32(vs2, STATE.frm, true); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfcvt.xu.f.v vd, vd2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
P.VU.elt<uint32_t>(rd_num, i) = f32_to_ui32(vs2, STATE.frm, true); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfdiv.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_div(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfdiv.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_div(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfdot.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_add(vd, f32_mul(vs2, vs1)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmacc.vf vd, rs1, vs2, vm # vd[i] = +(vs2[i] * x[rs1]) + vd[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(rs1, vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmacc.vv vd, rs1, vs2, vm # vd[i] = +(vs2[i] * vs1[i]) + vd[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vs1, vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmadd: vd[i] = +(vd[i] * f[rs1]) + vs2[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vd, rs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmadd: vd[i] = +(vd[i] * vs1[i]) + vs2[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vd, vs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmax
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_max(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmax
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_max(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,25 @@ |
|||
// vfmerge_vf vd, vs2, vs1, vm
|
|||
require_extension('F'); |
|||
require_fp; |
|||
require(P.VU.vsew == 32); |
|||
require(!P.VU.vill); |
|||
reg_t vl = P.VU.vl; |
|||
reg_t sew = P.VU.vsew; |
|||
reg_t rd_num = insn.rd(); |
|||
reg_t rs1_num = insn.rs1(); |
|||
reg_t rs2_num = insn.rs2(); |
|||
for (reg_t i=P.VU.vstart; i<vl; ++i) { |
|||
auto &vd = P.VU.elt<float32_t>(rd_num, i); |
|||
auto rs1 = f32(READ_FREG(rs1_num)); |
|||
auto vs2 = P.VU.elt<float32_t>(rs2_num, i); |
|||
|
|||
int midx = (P.VU.vmlen * i) / 64; |
|||
int mpos = (P.VU.vmlen * i) % 64; |
|||
bool use_first = (P.VU.elt<uint64_t>(0, midx) >> mpos) & 0x1; |
|||
|
|||
vd = use_first ? rs1 : vs2; |
|||
} |
|||
|
|||
VI_TAIL_ZERO(1); |
|||
P.VU.vstart = 0; |
|||
set_fp_exceptions; |
|||
@ -0,0 +1,5 @@ |
|||
// vfmin vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_min(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmin vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_min(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmsac: vd[i] = +(f[rs1] * vs2[i]) - vd[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(rs1, vs2, f32(vd.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmsac: vd[i] = +(vs1[i] * vs2[i]) - vd[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vs1, vs2, f32(vd.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmsub: vd[i] = +(vd[i] * f[rs1]) - vs2[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vd, rs1, f32(vs2.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmsub: vd[i] = +(vd[i] * vs1[i]) - vs2[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(vd, vs1, f32(vs2.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmul.vf vd, vs2, rs1, vm
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mul(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfmul.vv vd, vs1, vs2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mul(vs1, vs2); |
|||
}) |
|||
@ -0,0 +1,33 @@ |
|||
// vfmv_f_s: rd = vs2[0] (rs1=0)
|
|||
require(insn.v_vm() == 1); |
|||
require_fp; |
|||
require(P.VU.vsew == e8 || P.VU.vsew == e16 || P.VU.vsew == e32 || P.VU.vsew == e64); |
|||
|
|||
reg_t rs2_num = insn.rs2(); |
|||
uint64_t vs2_0 = 0; |
|||
const reg_t sew = P.VU.vsew; |
|||
switch(sew) { |
|||
case e8: |
|||
vs2_0 = P.VU.elt<uint8_t>(rs2_num, 0); |
|||
break; |
|||
case e16: |
|||
vs2_0 = P.VU.elt<uint16_t>(rs2_num, 0); |
|||
break; |
|||
case e32: |
|||
vs2_0 = P.VU.elt<uint32_t>(rs2_num, 0); |
|||
break; |
|||
default: |
|||
vs2_0 = P.VU.elt<uint64_t>(rs2_num, 0); |
|||
break; |
|||
} |
|||
|
|||
// nan_extened
|
|||
if (FLEN > sew) { |
|||
vs2_0 = vs2_0 | ~((1ul << sew) - 1); |
|||
} |
|||
|
|||
if (FLEN == 64) { |
|||
WRITE_FRD(f64(vs2_0)); |
|||
} else { |
|||
WRITE_FRD(f32(vs2_0)); |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
// vfmv_s_f: vd[0] = rs1 (vs2=0)
|
|||
require(insn.v_vm() == 1); |
|||
require_fp; |
|||
require(P.VU.vsew == e32); |
|||
reg_t vl = P.VU.vl; |
|||
|
|||
if (vl > 0) { |
|||
reg_t rd_num = insn.rd(); |
|||
reg_t sew = P.VU.vsew; |
|||
|
|||
if (FLEN == 64) |
|||
P.VU.elt<uint32_t>(rd_num, 0) = f64(FRS1).v; |
|||
else |
|||
P.VU.elt<uint32_t>(rd_num, 0) = f32(FRS1).v; |
|||
|
|||
const reg_t max_len = P.VU.VLEN / sew; |
|||
for (reg_t i = 1; i < max_len; ++i) { |
|||
switch(sew) { |
|||
case e32: |
|||
P.VU.elt<uint32_t>(rd_num, i) = 0; |
|||
break; |
|||
default: |
|||
require(false); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
vl = 0; |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
// vfmerge_vf vd, vs2, vs1, vm
|
|||
require_extension('F'); |
|||
require_fp; |
|||
require(P.VU.vsew == 32); |
|||
require(!P.VU.vill); |
|||
reg_t vl = P.VU.vl; |
|||
reg_t sew = P.VU.vsew; |
|||
reg_t rd_num = insn.rd(); |
|||
reg_t rs1_num = insn.rs1(); |
|||
reg_t rs2_num = insn.rs2(); |
|||
for (reg_t i=P.VU.vstart; i<vl; ++i) { |
|||
auto &vd = P.VU.elt<float32_t>(rd_num, i); |
|||
auto rs1 = f32(READ_FREG(rs1_num)); |
|||
|
|||
vd = rs1; |
|||
} |
|||
|
|||
VI_TAIL_ZERO(1); |
|||
P.VU.vstart = 0; |
|||
set_fp_exceptions; |
|||
@ -0,0 +1,6 @@ |
|||
// vfncvt.f.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_SD; |
|||
auto vs2 = P.VU.elt<float64_t>(rs2_num, i); |
|||
P.VU.elt<float32_t>(rd_num, i) = f64_to_f32(vs2); |
|||
VI_VFP_LOOP_END |
|||
@ -0,0 +1,6 @@ |
|||
// vfncvt.f.x.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_SD; |
|||
auto vs2 = P.VU.elt<int64_t>(rs2_num, i); |
|||
P.VU.elt<float32_t>(rd_num, i) = i64_to_f32(vs2); |
|||
VI_VFP_LOOP_END |
|||
@ -0,0 +1,6 @@ |
|||
// vfncvt.f.xu.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_SD; |
|||
auto vs2 = P.VU.elt<uint64_t>(rs2_num, i); |
|||
P.VU.elt<float32_t>(rd_num, i) = ui64_to_f32(vs2); |
|||
VI_VFP_LOOP_END |
|||
@ -0,0 +1,6 @@ |
|||
// vfncvt.x.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_SD; |
|||
auto vs2 = P.VU.elt<float64_t>(rs2_num, i); |
|||
P.VU.elt<int32_t>(rd_num, i) = f64_to_i32(vs2, STATE.frm, true); |
|||
VI_VFP_LOOP_END |
|||
@ -0,0 +1,6 @@ |
|||
// vfncvt.xu.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_SD; |
|||
auto vs2 = P.VU.elt<float64_t>(rs2_num, i); |
|||
P.VU.elt<uint32_t>(rd_num, i) = f64_to_ui32(vs2, STATE.frm, true); |
|||
VI_VFP_LOOP_END |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmacc: vd[i] = -(f[rs1] * vs2[i]) - vd[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(rs1, f32(vs2.v ^ F32_SIGN), f32(vd.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmacc: vd[i] = -(vs1[i] * vs2[i]) - vd[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vs2.v ^ F32_SIGN), vs1, f32(vd.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmadd: vd[i] = -(vd[i] * f[rs1]) - vs2[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vd.v ^ F32_SIGN), rs1, f32(vs2.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmadd: vd[i] = -(vd[i] * vs1[i]) - vs2[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vd.v ^ F32_SIGN), vs1, f32(vs2.v ^ F32_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmsac: vd[i] = -(f[rs1] * vs2[i]) + vd[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(rs1, f32(vs2.v ^ F32_SIGN), vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmsac.vv vd, vs1, vs2, vm # vd[i] = -(vs2[i] * vs1[i]) + vd[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vs1.v ^ F32_SIGN), vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmsub: vd[i] = -(vd[i] * f[rs1]) + vs2[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vd.v ^ F32_SIGN), rs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfnmsub: vd[i] = -(vd[i] * vs1[i]) + vs2[i]
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_mulAdd(f32(vd.v ^ F32_SIGN), vs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfrdiv.vf vd, vs2, rs1, vm # scalar-vector, vd[i] = f[rs1]/vs2[i]
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_div(rs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfredmax vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_REDUCTION |
|||
({ |
|||
vd_0 = f32_max(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfredmin vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_REDUCTION |
|||
({ |
|||
vd_0 = f32_min(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfredosum: vd[0] = sum( vs2[*] , vs1[0] )
|
|||
VI_VFP_VV_LOOP_REDUCTION |
|||
({ |
|||
vd_0 = f32_add(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfredsum: vd[0] = sum( vs2[*] , vs1[0] )
|
|||
VI_VFP_VV_LOOP_REDUCTION |
|||
({ |
|||
vd_0 = f32_add(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsub.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_sub(rs1, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnj vd, vs2, vs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = fsgnj32(rs1.v, vs2.v, false, false); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnj
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = fsgnj32(vs1.v, vs2.v, false, false); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnn
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = fsgnj32(rs1.v, vs2.v, true, false); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnn
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = fsgnj32(vs1.v, vs2.v, true, false); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnx
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = fsgnj32(rs1.v, vs2.v, false, true); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsgnx
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = fsgnj32(vs1.v, vs2.v, false, true); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vsqrt.v vd, vd2, vm
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_sqrt(vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsub.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP |
|||
({ |
|||
vd = f32_sub(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfsub.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP |
|||
({ |
|||
vd = f32_sub(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwadd.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_add(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwadd.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_add(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwadd.wf vd, vs2, vs1
|
|||
VI_VFP_WF_LOOP_WIDE |
|||
({ |
|||
vd = f64_add(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwadd.wv vd, vs2, vs1
|
|||
VI_VFP_WV_LOOP_WIDE |
|||
({ |
|||
vd = f64_add(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,7 @@ |
|||
// vfwcvt.f.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_DSS(false); |
|||
auto vs2 = P.VU.elt<float32_t>(rs2_num, i); |
|||
P.VU.elt<float64_t>(rd_num, i) = f32_to_f64(vs2); |
|||
set_fp_exceptions; |
|||
VI_VFP_LOOP_WIDE_END |
|||
@ -0,0 +1,7 @@ |
|||
// vfwcvt.f.x.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_DSS(false); |
|||
auto vs2 = P.VU.elt<int32_t>(rs2_num, i); |
|||
P.VU.elt<float64_t>(rd_num, i) = i32_to_f64(vs2); |
|||
set_fp_exceptions; |
|||
VI_VFP_LOOP_WIDE_END |
|||
@ -0,0 +1,7 @@ |
|||
// vfwcvt.f.xu.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_DSS(false); |
|||
auto vs2 = P.VU.elt<uint32_t>(rs2_num, i); |
|||
P.VU.elt<float64_t>(rd_num, i) = ui32_to_f64(vs2); |
|||
set_fp_exceptions; |
|||
VI_VFP_LOOP_WIDE_END |
|||
@ -0,0 +1,7 @@ |
|||
// vfwcvt.x.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_DSS(false); |
|||
auto vs2 = P.VU.elt<float32_t>(rs2_num, i); |
|||
P.VU.elt<int64_t>(rd_num, i) = f32_to_i64(vs2, STATE.frm, true); |
|||
set_fp_exceptions; |
|||
VI_VFP_LOOP_WIDE_END |
|||
@ -0,0 +1,7 @@ |
|||
// vfwcvt.xu.f.v vd, vs2, vm
|
|||
VI_VFP_LOOP_BASE |
|||
VI_CHECK_DSS(false); |
|||
auto vs2 = P.VU.elt<float32_t>(rs2_num, i); |
|||
P.VU.elt<uint64_t>(rd_num, i) = f32_to_ui64(vs2, STATE.frm, true); |
|||
set_fp_exceptions; |
|||
VI_VFP_LOOP_WIDE_END |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmacc.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(rs1, vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmacc.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(vs1, vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmsac.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(rs1, vs2, f64(vd.v ^ F64_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmsac.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(vs1, vs2, f64(vd.v ^ F64_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmul.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_mul(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwmul.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_mul(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwnmacc.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(f64(rs1.v ^ F64_SIGN), vs2, f64(vd.v ^ F64_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwnmacc.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(f64(vs1.v ^ F64_SIGN), vs2, f64(vd.v ^ F64_SIGN)); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwnmacc.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(f64(rs1.v ^ F64_SIGN), vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwnmsac.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_mulAdd(f64(vs1.v ^ F64_SIGN), vs2, vd); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwredosum.vs vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE_REDUCTION |
|||
({ |
|||
vd_0 = f64_add(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwredsum.vs vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE_REDUCTION |
|||
({ |
|||
vd_0 = f64_add(vd_0, vs2); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwsub.vf vd, vs2, rs1
|
|||
VI_VFP_VF_LOOP_WIDE |
|||
({ |
|||
vd = f64_sub(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwsub.vv vd, vs2, vs1
|
|||
VI_VFP_VV_LOOP_WIDE |
|||
({ |
|||
vd = f64_sub(vs2, vs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwsub.wf vd, vs2, rs1
|
|||
VI_VFP_WF_LOOP_WIDE |
|||
({ |
|||
vd = f64_sub(vs2, rs1); |
|||
}) |
|||
@ -0,0 +1,5 @@ |
|||
// vfwsub.wv vd, vs2, vs1
|
|||
VI_VFP_WV_LOOP_WIDE |
|||
({ |
|||
vd = f64_sub(vs2, vs1); |
|||
}) |
|||
Loading…
Reference in new issue