Browse Source

clean up shift instruction implementation

pull/34/head
Andrew Waterman 11 years ago
parent
commit
82372d0039
  1. 3
      riscv/insns/slli.h
  2. 10
      riscv/insns/srai.h
  3. 5
      riscv/insns/srl.h
  4. 10
      riscv/insns/srli.h

3
riscv/insns/slli.h

@ -1,3 +1,2 @@
if (SHAMT >= xlen)
throw trap_illegal_instruction();
require(SHAMT < xlen);
WRITE_RD(sext_xlen(RS1 << SHAMT));

10
riscv/insns/srai.h

@ -1,8 +1,2 @@
if (xlen == 64)
WRITE_RD(sreg_t(RS1) >> SHAMT);
else
{
if(SHAMT & 0x20)
throw trap_illegal_instruction();
WRITE_RD(sext32(int32_t(RS1) >> SHAMT));
}
require(SHAMT < xlen);
WRITE_RD(sext_xlen(sext_xlen(RS1) >> SHAMT));

5
riscv/insns/srl.h

@ -1,4 +1 @@
if (xlen == 64)
WRITE_RD(RS1 >> (RS2 & 0x3F));
else
WRITE_RD(sext32((uint32_t)RS1 >> (RS2 & 0x1F)));
WRITE_RD(sext_xlen(zext_xlen(RS1) >> (RS2 & (xlen-1))));

10
riscv/insns/srli.h

@ -1,8 +1,2 @@
if (xlen == 64)
WRITE_RD(RS1 >> SHAMT);
else
{
if(SHAMT & 0x20)
throw trap_illegal_instruction();
WRITE_RD(sext32((uint32_t)RS1 >> SHAMT));
}
require(SHAMT < xlen);
WRITE_RD(sext_xlen(zext_xlen(RS1) >> SHAMT));

Loading…
Cancel
Save