Browse Source
also refine writing path to RD Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>pull/2310/head
8 changed files with 32 additions and 25 deletions
@ -1,5 +1,8 @@ |
|||
require_extension('P'); |
|||
require_rv32; |
|||
reg_t tmp = (reg_t)P_RS1_PAIR >> insn.shamtd(); |
|||
uint32_t result = P_USAT_FULL(32, (sreg_t)tmp); |
|||
WRITE_RD(result); |
|||
if (tmp > UINT32_MAX) { |
|||
tmp = UINT32_MAX; |
|||
P.set_vxsat(); |
|||
} |
|||
WRITE_RD(sext32(tmp)); |
|||
|
|||
@ -1,11 +1,11 @@ |
|||
require_extension('P'); |
|||
require_rv32; |
|||
reg_t val = (reg_t)P_RS1_PAIR; |
|||
uint32_t shamt = insn.shamtd(); |
|||
reg_t result; |
|||
if (shamt == 0) { |
|||
result = P_USAT_FULL(32, (sreg_t)val); |
|||
} else { |
|||
result = P_USAT_FULL(32, (sreg_t)((val >> shamt) + ((val >> (shamt - 1)) & 1))); |
|||
reg_t tmp = ((((uint128_t)P_RS1_PAIR << 1) >> shamt) + 1) >> 1; |
|||
|
|||
if (tmp > UINT32_MAX) { |
|||
tmp = UINT32_MAX; |
|||
P.set_vxsat(); |
|||
} |
|||
WRITE_RD(result); |
|||
WRITE_RD(sext32(tmp)); |
|||
|
|||
|
|||
@ -1,11 +1,11 @@ |
|||
require_extension('P'); |
|||
require_rv32; |
|||
reg_t val = (reg_t)P_RS1_PAIR; |
|||
uint32_t shamt = RS2 & 0x3f; |
|||
reg_t result; |
|||
if (shamt == 0) { |
|||
result = P_USAT_FULL(32, (sreg_t)val); |
|||
} else { |
|||
result = P_USAT_FULL(32, (sreg_t)((val >> shamt) + ((val >> (shamt - 1)) & 1))); |
|||
reg_t tmp = ((((uint128_t)P_RS1_PAIR << 1) >> shamt) + 1) >> 1; |
|||
|
|||
if (tmp > UINT32_MAX) { |
|||
tmp = UINT32_MAX; |
|||
P.set_vxsat(); |
|||
} |
|||
WRITE_RD(result); |
|||
WRITE_RD(sext32(tmp)); |
|||
|
|||
|
|||
@ -1,5 +1,9 @@ |
|||
require_extension('P'); |
|||
require_rv32; |
|||
reg_t tmp = (reg_t)P_RS1_PAIR >> (RS2 & 0x3f); |
|||
uint32_t result = P_USAT_FULL(32, (sreg_t)tmp); |
|||
WRITE_RD(result); |
|||
if (tmp > UINT32_MAX) { |
|||
tmp = UINT32_MAX; |
|||
P.set_vxsat(); |
|||
} |
|||
|
|||
WRITE_RD(sext32(tmp)); |
|||
|
|||
Loading…
Reference in new issue