Browse Source
Massive changes to gcc, binutils to support new instruction encoding. Simulator reflects these changes.cs250
83 changed files with 1223 additions and 668 deletions
File diff suppressed because it is too large
@ -1,2 +1,2 @@ |
|||
RD = sext32(RS + RT); |
|||
RC = sext32(RA + RB); |
|||
|
|||
|
|||
@ -1 +1 @@ |
|||
RT = sext32(RS + SIMM); |
|||
RA = sext32(SIMM + RB); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = RS & RT; |
|||
RC = RA & RB; |
|||
|
|||
@ -1 +1 @@ |
|||
RT = RS & IMM; |
|||
RA = IMM & RB; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(cmp_trunc(RS) == cmp_trunc(RT)) |
|||
if(cmp_trunc(RA) == cmp_trunc(RB)) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(sreg_t(cmp_trunc(RS)) <= sreg_t(cmp_trunc(RT))) |
|||
if(sreg_t(cmp_trunc(RA)) <= sreg_t(cmp_trunc(RB))) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(cmp_trunc(RS) <= cmp_trunc(RT)) |
|||
if(cmp_trunc(RA) <= cmp_trunc(RB)) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(sreg_t(cmp_trunc(RS)) < sreg_t(cmp_trunc(RT))) |
|||
if(sreg_t(cmp_trunc(RA)) < sreg_t(cmp_trunc(RB))) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(cmp_trunc(RS) < cmp_trunc(RT)) |
|||
if(cmp_trunc(RA) < cmp_trunc(RB)) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
if(cmp_trunc(RS) != cmp_trunc(RT)) |
|||
if(cmp_trunc(RA) != cmp_trunc(RB)) |
|||
npc = BRANCH_TARGET; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RS + RT; |
|||
RC = RA + RB; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RT = RS + SIMM; |
|||
RA = SIMM + RB; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = sreg_t(RS) / sreg_t(RT); |
|||
RC = sreg_t(RA) / sreg_t(RB); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RS / RT; |
|||
RC = RA / RB; |
|||
|
|||
@ -1,4 +1,4 @@ |
|||
require_supervisor; |
|||
uint32_t temp = sr; |
|||
set_sr(sr & ~SR_ET); |
|||
RT = temp; |
|||
RA = temp; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
RD = sext32(int32_t(RS)/int32_t(RT)); |
|||
RC = sext32(int32_t(RA)/int32_t(RB)); |
|||
|
|||
|
|||
@ -1,2 +1,2 @@ |
|||
RD = sext32(uint32_t(RS)/uint32_t(RT)); |
|||
RC = sext32(uint32_t(RA)/uint32_t(RB)); |
|||
|
|||
|
|||
@ -1,29 +1,29 @@ |
|||
require_supervisor; |
|||
require64; |
|||
|
|||
switch(insn.rtype.rs) |
|||
switch(insn.rtype.rb) |
|||
{ |
|||
case 0: |
|||
RT = sr; |
|||
RA = sr; |
|||
break; |
|||
case 1: |
|||
RT = epc; |
|||
RA = epc; |
|||
break; |
|||
case 2: |
|||
RT = badvaddr; |
|||
RA = badvaddr; |
|||
break; |
|||
case 3: |
|||
RT = ebase; |
|||
RA = ebase; |
|||
break; |
|||
|
|||
case 8: |
|||
RT = MEMSIZE >> 12; |
|||
RA = MEMSIZE >> 12; |
|||
break; |
|||
|
|||
case 17: |
|||
RT = sim->get_fromhost(); |
|||
RA = sim->get_fromhost(); |
|||
break; |
|||
|
|||
default: |
|||
RT = -1; |
|||
RA = -1; |
|||
} |
|||
|
|||
@ -1,19 +1,19 @@ |
|||
require_supervisor; |
|||
require64; |
|||
|
|||
switch(insn.rtype.rs) |
|||
switch(insn.rtype.rb) |
|||
{ |
|||
case 0: |
|||
set_sr(RT); |
|||
set_sr(RA); |
|||
break; |
|||
case 1: |
|||
epc = RT; |
|||
epc = RA; |
|||
break; |
|||
case 3: |
|||
ebase = RT & ~0xFFF; |
|||
ebase = RA & ~0xFFF; |
|||
break; |
|||
|
|||
case 16: |
|||
sim->set_tohost(RT); |
|||
sim->set_tohost(RA); |
|||
break; |
|||
} |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RS * RT; |
|||
RC = RA * RB; |
|||
|
|||
@ -0,0 +1,4 @@ |
|||
require64; |
|||
int64_t rb = RA; |
|||
int64_t ra = RB; |
|||
RC = (int128_t(rb) * int128_t(ra)) >> 64; |
|||
@ -0,0 +1,2 @@ |
|||
require64; |
|||
RC = (uint128_t(RA) * uint128_t(RB)) >> 64; |
|||
@ -0,0 +1,2 @@ |
|||
require64; |
|||
RC = sreg_t(RA) % sreg_t(RB); |
|||
@ -0,0 +1,2 @@ |
|||
require64; |
|||
RC = RA % RB; |
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT << SHAMT; |
|||
RC = RB << SHAMT; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT << (32+SHAMT); |
|||
RC = RB << (32+SHAMT); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT << (RS & 0x3F); |
|||
RC = RB << (RA & 0x3F); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = sreg_t(RT) >> SHAMT; |
|||
RC = sreg_t(RB) >> SHAMT; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = sreg_t(RT) >> (32+SHAMT); |
|||
RC = sreg_t(RB) >> (32+SHAMT); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT >> (RS & 0x3F); |
|||
RC = RB >> (RA & 0x3F); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT >> SHAMT; |
|||
RC = RB >> SHAMT; |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT >> (32+SHAMT); |
|||
RC = RB >> (32+SHAMT); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RT >> (RS & 0x3F); |
|||
RC = RB >> (RA & 0x3F); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RD = RS - RT; |
|||
RC = RA - RB; |
|||
|
|||
@ -1,4 +1,4 @@ |
|||
require_supervisor; |
|||
uint32_t temp = sr; |
|||
set_sr(sr | SR_ET); |
|||
RT = temp; |
|||
RA = temp; |
|||
|
|||
@ -0,0 +1,3 @@ |
|||
uint32_t temp = npc; |
|||
npc = RA; |
|||
RC = temp; |
|||
@ -0,0 +1 @@ |
|||
#include "jalr_c.h" |
|||
@ -0,0 +1 @@ |
|||
#include "jalr_c.h" |
|||
@ -1 +1 @@ |
|||
RT = mmu.load_int8(RS+SIMM); |
|||
RA = mmu.load_int8(RB+SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = mmu.load_uint8(RS+SIMM); |
|||
RA = mmu.load_uint8(RB+SIMM); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
RT = mmu.load_int64(RS+SIMM); |
|||
RA = mmu.load_int64(RB+SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = mmu.load_int16(RS+SIMM); |
|||
RA = mmu.load_int16(RB+SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = mmu.load_uint16(RS+SIMM); |
|||
RA = mmu.load_uint16(RB+SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = IMM << 16; |
|||
RA = sext32(BIGIMM << IMM_BITS); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = mmu.load_int32(RS+SIMM); |
|||
RA = mmu.load_int32(RB+SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = mmu.load_uint32(RS+SIMM); |
|||
RA = mmu.load_uint32(RB+SIMM); |
|||
|
|||
@ -1,28 +1,28 @@ |
|||
require_supervisor; |
|||
|
|||
switch(insn.rtype.rs) |
|||
switch(insn.rtype.rb) |
|||
{ |
|||
case 0: |
|||
RT = sext32(sr); |
|||
RA = sext32(sr); |
|||
break; |
|||
case 1: |
|||
RT = sext32(epc); |
|||
RA = sext32(epc); |
|||
break; |
|||
case 2: |
|||
RT = sext32(badvaddr); |
|||
RA = sext32(badvaddr); |
|||
break; |
|||
case 3: |
|||
RT = sext32(ebase); |
|||
RA = sext32(ebase); |
|||
break; |
|||
|
|||
case 8: |
|||
RT = sext32(MEMSIZE >> 12); |
|||
RA = sext32(MEMSIZE >> 12); |
|||
break; |
|||
|
|||
case 17: |
|||
RT = sext32(sim->get_fromhost()); |
|||
RA = sext32(sim->get_fromhost()); |
|||
break; |
|||
|
|||
default: |
|||
RT = -1; |
|||
RA = -1; |
|||
} |
|||
|
|||
@ -1 +1 @@ |
|||
if(RT) RD = RS; |
|||
if(RB) RC = RA; |
|||
|
|||
@ -1 +1 @@ |
|||
if(!RT) RD = RS; |
|||
if(!RB) RC = RA; |
|||
|
|||
@ -1,18 +1,18 @@ |
|||
require_supervisor; |
|||
|
|||
switch(insn.rtype.rs) |
|||
switch(insn.rtype.rb) |
|||
{ |
|||
case 0: |
|||
set_sr(sext32(RT)); |
|||
set_sr(sext32(RA)); |
|||
break; |
|||
case 1: |
|||
epc = sext32(RT); |
|||
epc = sext32(RA); |
|||
break; |
|||
case 3: |
|||
ebase = sext32(RT & ~0xFFF); |
|||
ebase = sext32(RA & ~0xFFF); |
|||
break; |
|||
|
|||
case 16: |
|||
sim->set_tohost(sext32(RT)); |
|||
sim->set_tohost(sext32(RA)); |
|||
break; |
|||
} |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
RD = sext32(RS * RT); |
|||
RC = sext32(RA * RB); |
|||
|
|||
|
|||
@ -0,0 +1,2 @@ |
|||
RC = sext32((sreg_t(RA) * sreg_t(RB)) >> 32); |
|||
|
|||
@ -0,0 +1,2 @@ |
|||
RC = sext32((RA * RB) >> 32); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = ~(RS | RT); |
|||
RC = ~(RA | RB); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = RS | RT; |
|||
RC = RA | RB; |
|||
|
|||
@ -1 +1 @@ |
|||
RT = RS | IMM; |
|||
RA = IMM | RB; |
|||
|
|||
@ -0,0 +1 @@ |
|||
RC = npc; |
|||
@ -0,0 +1,2 @@ |
|||
RC = sext32(int32_t(RA) % int32_t(RB)); |
|||
|
|||
@ -0,0 +1,2 @@ |
|||
RC = sext32(uint32_t(RA) % uint32_t(RB)); |
|||
|
|||
@ -1 +1 @@ |
|||
mmu.store_uint8(RS+SIMM, RT); |
|||
mmu.store_uint8(RB+SIMM, RA); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
require64; |
|||
mmu.store_uint64(RS+SIMM, RT); |
|||
mmu.store_uint64(RB+SIMM, RA); |
|||
|
|||
@ -1 +1 @@ |
|||
mmu.store_uint16(RS+SIMM, RT); |
|||
mmu.store_uint16(RB+SIMM, RA); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(RT << SHAMT); |
|||
RC = sext32(RB << SHAMT); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(RT << (RS & 0x1F)); |
|||
RC = sext32(RB << (RA & 0x1F)); |
|||
|
|||
@ -0,0 +1 @@ |
|||
RA = (RA << 32) | (BIGIMM << IMM_BITS); |
|||
@ -1 +1 @@ |
|||
RD = sreg_t(cmp_trunc(RS)) < sreg_t(cmp_trunc(RT)); |
|||
RC = sreg_t(cmp_trunc(RA)) < sreg_t(cmp_trunc(RB)); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = sreg_t(cmp_trunc(RS)) < sreg_t(cmp_trunc(SIMM)); |
|||
RA = sreg_t(cmp_trunc(RB)) < sreg_t(cmp_trunc(SIMM)); |
|||
|
|||
@ -1 +1 @@ |
|||
RT = cmp_trunc(RS) < cmp_trunc(SIMM); |
|||
RA = cmp_trunc(RB) < cmp_trunc(SIMM); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = cmp_trunc(RS) < cmp_trunc(RT); |
|||
RC = cmp_trunc(RA) < cmp_trunc(RB); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(sreg_t(RT) >> SHAMT); |
|||
RC = sext32(sreg_t(RB) >> SHAMT); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(sreg_t(RT) >> (RS & 0x1F)); |
|||
RC = sext32(sreg_t(RB) >> (RA & 0x1F)); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(RT >> SHAMT); |
|||
RC = sext32(RB >> SHAMT); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = sext32(RT >> (RS & 0x1F)); |
|||
RC = sext32(RB >> (RA & 0x1F)); |
|||
|
|||
@ -1,2 +1,2 @@ |
|||
RD = sext32(RS - RT); |
|||
RC = sext32(RA - RB); |
|||
|
|||
|
|||
@ -1 +1 @@ |
|||
mmu.store_uint32(RS+SIMM, RT); |
|||
mmu.store_uint32(RB+SIMM, RA); |
|||
|
|||
@ -1 +1 @@ |
|||
RD = RS ^ RT; |
|||
RC = RA ^ RB; |
|||
|
|||
@ -1 +1 @@ |
|||
RT = RS ^ IMM; |
|||
RA = IMM ^ RB; |
|||
|
|||
Loading…
Reference in new issue