Browse Source

[xcc, sim] added rvc insn c.li; misc fixes

cs250
Andrew Waterman 16 years ago
parent
commit
c8de0ef0fa
  1. 20
      riscv/execute.h
  2. 2
      riscv/insns/c_li.h
  3. 5
      riscv/mmu.h

20
riscv/execute.h

@ -6,6 +6,11 @@ switch((insn.bits >> 0x0) & 0x7f)
#include "insns/c_addi.h"
break;
}
case 0x1:
{
#include "insns/c_li.h"
break;
}
case 0x3:
{
switch((insn.bits >> 0x7) & 0x7)
@ -599,6 +604,11 @@ switch((insn.bits >> 0x0) & 0x7f)
#include "insns/c_addi.h"
break;
}
case 0x21:
{
#include "insns/c_li.h"
break;
}
case 0x23:
{
switch((insn.bits >> 0x7) & 0x7)
@ -1019,6 +1029,11 @@ switch((insn.bits >> 0x0) & 0x7f)
#include "insns/c_addi.h"
break;
}
case 0x41:
{
#include "insns/c_li.h"
break;
}
case 0x43:
{
switch((insn.bits >> 0x7) & 0x7)
@ -1550,6 +1565,11 @@ switch((insn.bits >> 0x0) & 0x7f)
#include "insns/c_addi.h"
break;
}
case 0x61:
{
#include "insns/c_li.h"
break;
}
case 0x63:
{
switch((insn.bits >> 0x7) & 0x7)

2
riscv/insns/c_li.h

@ -0,0 +1,2 @@
require_rvc;
CRD = SIMM;

5
riscv/mmu.h

@ -25,7 +25,10 @@ public:
uint16_t hi = *(uint16_t*)(mem+addr+2);
insn_t insn;
insn.bits = ((uint32_t)hi << 16) | lo;
insn.bits = lo;
if((lo & 0x3) == 0x3)
insn.bits |= (uint32_t)hi << 16;
return insn;
}

Loading…
Cancel
Save