Browse Source
Add the following categories * packed zip and unzip instructions * packed basic arithmetic and data-move * packed multiply instructions (_w suffix only) * packed accumulate instructions (_w suffix * packed multiply-add instructions (_w/_h suffix * packed sati/usati/srari for rv64 Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>pull/2246/head
committed by
Chih-Min Chao
104 changed files with 675 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
require_extension('P'); |
|||
reg_t s1_w = sext32(RS1); |
|||
reg_t result = (int32_t(s1_w) < 0) ? -s1_w : s1_w; |
|||
WRITE_RD(sext_xlen(result)); |
|||
@ -0,0 +1,11 @@ |
|||
require_rv64; |
|||
require_extension('P'); |
|||
reg_t x = 32 - 1; |
|||
reg_t msb = (RS1 >> (32 - 1)) & 1; |
|||
for (int i = 0; i < 32 - 1; i++) { |
|||
if (msb != ((RS1 >> (32 - i - 2)) & 1)) { |
|||
x = i; |
|||
break; |
|||
} |
|||
} |
|||
WRITE_RD(sext_xlen(x)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + sext32(RS1) * sext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + sext32(RS1) * sext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + sext32(RS1 >> 32) * sext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + sext32(RS1) * zext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + sext32(RS1 >> 32) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + zext32(RS1) * zext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + zext32(RS1) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + zext32(RS1 >> 32) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 0, 32) * P_FIELD(RS2, 0, 32)) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 0, 32) * P_FIELD(RS2, 1, 32)) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 1, 32) * P_FIELD(RS2, 1, 32)) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 0, 32) * P_FIELD(RS2, 0, 32) + 0x40000000) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 0, 32) * P_FIELD(RS2, 1, 32) + 0x40000000) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(RD + (((sreg_t)P_FIELD(RS1, 1, 32) * P_FIELD(RS2, 1, 32) + 0x40000000) >> 31)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(sext32(RS1) * sext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(sext32(RS1) * sext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(sext32(RS1 >> 32) * sext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(sext32(RS1) * zext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(sext32(RS1 >> 32) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(zext32(RS1) * zext32(RS2)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(zext32(RS1) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(zext32(RS1 >> 32) * zext32(RS2 >> 32)); |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, false, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_CROSS_LOOP(64, 32, false, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, true, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_CROSS_LOOP(64, 32, true, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_SULOOP(64, 32, true, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_ULOOP(64, 32, true, false, { |
|||
p_res += (reg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_SULOOP(64, 32, false, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_ULOOP(64, 32, false, false, { |
|||
p_res += (reg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,8 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, false, false, { |
|||
if (j & 1) |
|||
p_res -= (sreg_t)p_rs1 * p_rs2; |
|||
else |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,8 @@ |
|||
require_rv64; |
|||
P_REDUCTION_CROSS_LOOP(64, 32, false, false, { |
|||
if (j & 1) |
|||
p_res -= (sreg_t)p_rs1 * p_rs2; |
|||
else |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,8 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, true, false, { |
|||
if (j & 1) |
|||
p_res -= (sreg_t)p_rs1 * p_rs2; |
|||
else |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,8 @@ |
|||
require_rv64; |
|||
P_REDUCTION_CROSS_LOOP(64, 32, true, false, { |
|||
if (j & 1) |
|||
p_res -= (sreg_t)p_rs1 * p_rs2; |
|||
else |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 16, false, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 16, true, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_SULOOP(64, 16, true, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_ULOOP(64, 16, true, false, { |
|||
p_res += (reg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_SULOOP(64, 16, false, false, { |
|||
p_res += (sreg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_ULOOP(64, 16, false, false, { |
|||
p_res += (reg_t)p_rs1 * p_rs2; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_LOOP(32, 16, 16, { |
|||
p_rd += sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_LOOP(32, 16, 16, { |
|||
p_rd += sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_LOOP(32, 16, 16, { |
|||
p_rd += sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_SULOOP(32, 16, 16, { |
|||
p_rd += sext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_SULOOP(32, 16, 16, { |
|||
p_rd += sext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_ULOOP(32, 16, 16, { |
|||
p_rd += zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_ULOOP(32, 16, 16, { |
|||
p_rd += zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_ULOOP(32, 16, 16, { |
|||
p_rd += zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_E_LOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_O_LOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_SULOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_E_SULOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_O_SULOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ULOOP(32,32,32, { |
|||
reg_t mres = zext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd += mres>>32; |
|||
} |
|||
) |
|||
@ -0,0 +1,7 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
int32_t round = ((mres >> 31) + 1) >> 1; |
|||
p_rd += round; |
|||
} |
|||
) |
|||
@ -0,0 +1,7 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_SULOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
int32_t round = ((mres >> 31) + 1) >> 1; |
|||
p_rd += round; |
|||
} |
|||
) |
|||
@ -0,0 +1,7 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ULOOP(32,32,32, { |
|||
reg_t mres = zext(p_rs1,64) * zext(p_rs2,64); |
|||
uint32_t round = ((mres >> 31) + 1) >> 1; |
|||
p_rd += round; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, false, false, { |
|||
p_res += ((sreg_t)p_rs1 * p_rs2) >> 31; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, true, false, { |
|||
p_res += ((sreg_t)p_rs1 * p_rs2) >> 31; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2) >> 15; |
|||
}) |
|||
|
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2) >> 15; |
|||
}) |
|||
|
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2) >> 15; |
|||
}) |
|||
|
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, false, false, { |
|||
p_res += (((sreg_t)p_rs1 * p_rs2) + 0x40000000) >> 31; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_REDUCTION_LOOP(64, 32, true, false, { |
|||
p_res += (((sreg_t)p_rs1 * p_rs2) + 0x40000000) >> 31; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2 + 0x4000) >> 15; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2 + 0x4000) >> 15; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_LOOP(32, 16, 16, { |
|||
p_rd += (p_rs1 * p_rs2 + 0x4000) >> 15; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_LOOP(32, 16, 16, { |
|||
p_rd = sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_LOOP(32, 16, 16, { |
|||
p_rd = sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_LOOP(32, 16, 16, { |
|||
p_rd = sext32(p_rs1) * sext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
int64_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_E_LOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_O_LOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * sext(p_rs2,64); |
|||
p_rd = ((mres >> 31) + 1) >> 1; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_SULOOP(32,32,32, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = ((mres >> 31) + 1) >> 1; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ULOOP(32,32,32, { |
|||
reg_t mres = zext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = ((mres >> 31) + 1) >> 1; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_SULOOP(32,32,32, { |
|||
int64_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_E_SULOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_O_SULOOP(32,32,16, { |
|||
sreg_t mres = sext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ULOOP(32,32,32, { |
|||
uint64_t mres = zext(p_rs1,64) * zext(p_rs2,64); |
|||
p_rd = mres >> 32; |
|||
} |
|||
) |
|||
@ -0,0 +1,9 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
if ((p_rs1 != INT32_MIN) | (p_rs2 != INT32_MIN)) { |
|||
p_rd = ((int64_t)p_rs1 * (int64_t)p_rs2) >> 31; |
|||
} else { |
|||
p_rd = INT32_MAX; |
|||
} |
|||
} |
|||
) |
|||
@ -0,0 +1,9 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_LOOP(32,32,32, { |
|||
if ((p_rs1 != INT32_MIN) | (p_rs2 != INT32_MIN)) { |
|||
p_rd = ((((int64_t)p_rs1 * (int64_t)p_rs2) >> 30) + 1) >> 1; |
|||
} else { |
|||
p_rd = INT32_MAX; |
|||
} |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_SULOOP(32, 16, 16, { |
|||
p_rd = sext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_SULOOP(32, 16, 16, { |
|||
p_rd = sext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EE_ULOOP(32, 16, 16, { |
|||
p_rd = zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_EO_ULOOP(32, 16, 16, { |
|||
p_rd = zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_rv64; |
|||
P_RD_RS1_RS2_OO_ULOOP(32, 16, 16, { |
|||
p_rd = zext32(p_rs1) * zext32(p_rs2); |
|||
} |
|||
) |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(P_SAT(insn.shamtd() + 1, (sreg_t)RS1)); |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(insn.shamtd() ? ((sext_xlen(RS1) >> insn.shamtd()) + ((sext_xlen(RS1) >> (insn.shamtd() - 1)) & 1)) : RS1); |
|||
@ -0,0 +1 @@ |
|||
P_UNZIP(16, 1) |
|||
@ -0,0 +1 @@ |
|||
P_UNZIP(16, 0) |
|||
@ -0,0 +1 @@ |
|||
P_UNZIP(8, 1) |
|||
@ -0,0 +1 @@ |
|||
P_UNZIP(8, 0) |
|||
@ -0,0 +1,3 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
WRITE_RD(P_USAT(insn.shamtd() + 1, (sreg_t)RS1)); |
|||
@ -0,0 +1,6 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ZIP_LOOP(16, 16, 16, 1, { |
|||
p_rd = i % 2 ? p_rs2 : p_rs1; |
|||
} |
|||
) |
|||
@ -0,0 +1,6 @@ |
|||
require_extension('P'); |
|||
require_rv64; |
|||
P_RD_RS1_RS2_ZIP_LOOP(16, 16, 16, 0, { |
|||
p_rd = i % 2 ? p_rs2 : p_rs1; |
|||
} |
|||
) |
|||
@ -0,0 +1,5 @@ |
|||
require_extension('P'); |
|||
P_RD_RS1_RS2_ZIP_LOOP(8, 8, 8, 1, { |
|||
p_rd = i % 2 ? p_rs2 : p_rs1; |
|||
} |
|||
) |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue