URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 510 to Rev 511
- ↔ Reverse comparison
Rev 510 → Rev 511
/trunk/or1ksim/cpu/or32/execute.c
833,11 → 833,35
mtspr(SPR_SR, mfspr(SPR_ESR_BASE)); |
} |
void l_nop() { |
unsigned long stackaddr; |
int k = eval_operand32(0, &breakpoint); |
cur->func_unit = it_nop; |
if (nop_period > nop_maxperiod) |
nop_maxperiod = nop_period; |
nop_period = 0; |
nops++; |
switch (k) { |
case NOP_NOP: |
break; |
case NOP_EXIT: |
printf("exit(%d)\n", eval_reg (3)); |
if (config.debug.gdb_enabled) |
set_stall_state (1); |
else |
cont_run = 0; |
break; |
case NOP_PRINTF: |
stackaddr = eval_reg(4); |
simprintf(stackaddr, eval_reg(3)); |
debug(5, "simprintf %x\n", stackaddr); |
break; |
case NOP_REPORT: |
printf("report(0x%x);\n", eval_reg(3)); |
default: |
if (k >= NOP_REPORT_FIRST && k <= NOP_REPORT_LAST) |
printf("report %i (0x%x);\n", k - NOP_REPORT_FIRST, eval_reg(3)); |
break; |
} |
} |
void l_bnf() { |
cur->func_unit = it_branch; |
927,43 → 951,31
} |
} |
void l_sys() { |
|
#if 0 |
if (eval_operand32(0, &breakpoint) > 200) { |
unsigned long stackaddr, fmtaddr, args; |
switch (eval_operand32(0, &breakpoint)) { |
case 201: |
set_reg32 (RETURNV_REGNO, cycles + loadcycles + storecycles); |
break; |
case 202: |
stackaddr = eval_reg(4); |
simprintf(stackaddr, eval_reg(3)); |
debug(5, "simprintf %x %x %x\n", stackaddr, fmtaddr, args); |
break; |
case 203: |
printf("syscall exit(%d)\n", eval_reg (3)); |
if (config.debug.gdb_enabled) |
set_stall_state (1); |
else |
cont_run = 0; |
break; |
case 204: { |
unsigned long startaddr; |
unsigned long endaddr; |
|
/* if ((startaddr = eval_mem32(eval_reg("r4"))) == -1) |
startaddr = (freemem & ~(PAGE_SIZE)) + PAGE_SIZE; */ |
startaddr = 0x80000000; |
printf("sys 204: startaddr=%x virtphy=%x\n", startaddr, eval_reg(5)); |
fflush(stdout); |
endaddr = loadcode(simgetstr(stackaddr, eval_reg(3)), startaddr, eval_reg(5)); |
set_reg32 (LINK_REGNO, endaddr); |
/* setsim_mem32(eval_reg(4), startaddr); |
setsim_mem32(eval_reg(5), endaddr);*/ |
break; |
break; |
case 204: |
{ |
unsigned long startaddr; |
unsigned long endaddr; |
/* if ((startaddr = eval_mem32(eval_reg("r4"))) == -1) |
startaddr = (freemem & ~(PAGE_SIZE)) + PAGE_SIZE; */ |
startaddr = 0x80000000; |
printf("sys 204: startaddr=%x virtphy=%x\n", startaddr, eval_reg(5)); |
fflush(stdout); |
endaddr = loadcode(simgetstr(stackaddr, eval_reg(3)), startaddr, eval_reg(5)); |
set_reg32 (LINK_REGNO, endaddr); |
/* setsim_mem32(eval_reg(4), startaddr); |
setsim_mem32(eval_reg(5), endaddr);*/ |
break; |
} |
} |
} |
} |
else except_handle(EXCEPT_SYSCALL, 0); |
} else |
#endif |
except_handle(EXCEPT_SYSCALL, 0); |
} |
|
void l_trap() { |
/trunk/or1ksim/cpu/or1k/sprs.c
72,22 → 72,6
case SPR_TTCR: |
tt_stopped = 0; |
break; |
case 0x1234: |
printf("MTSPR(0x1234, 0x%x);\n", value); |
break; |
case 0x1235: |
{ |
FILE *f; |
if (!(f = fopen("stdout.txt", "a+"))) |
{ |
perror(strerror(errno)); |
return; |
} |
fprintf(f, "%c", value); |
if (fclose(f)) |
perror(strerror(errno)); |
} |
break; |
case SPR_SR: |
if(value & SPR_SR_F) |
flag = 1; |
/trunk/or1ksim/testbench/basic.S
6,7 → 6,7
.section .except |
.org 0x100 |
_reset: |
l.nop |
l.nop 0 |
l.movhi r1,hi(_regs) |
l.ori r1,r1,lo(_regs) |
l.jr r1 |
48,7 → 48,8
l.sub r17,r18,r15 |
l.sub r16,r17,r16 |
|
l.mtspr r0,r16,0x1234 /* Should be 0xffff0012 */ |
l.or r3,r0,r16 |
l.nop NOP_REPORT /* Should be 0xffff0012 */ |
|
l.movhi r31, hi(MEM_RAM) |
l.ori r31,r31, lo(MEM_RAM) |
102,7 → 103,8
l.lwz r4,4(r31) |
l.add r8,r8,r4 |
|
l.mtspr r0,r8,0x1234 /* Should be 0x12352af7 */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0x12352af7 */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
125,7 → 127,8
l.divu r7,r7,r4 |
l.add r8,r8,r7 |
|
l.mtspr r0,r8,0x1234 /* Should be 0x7ffffffe */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0x7ffffffe */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
147,7 → 150,8
l.ori r8,r8,2 |
l.or r8,r8,r4 |
|
l.mtspr r0,r8,0x1234 /* Should be 0xffffa5a7 */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0xffffa5a7 */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
169,7 → 173,8
l.srai r8,r8,2 |
l.sra r8,r8,r4 |
|
l.mtspr r0,r8,0x1234 /* Should be 0x000fffff */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0x000fffff */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
380,7 → 385,8
l.andi r4,r5,0x200 |
l.add r8,r8,r4 |
|
l.mtspr r0,r8,0x1234 /* Should be 0x00002800 */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0x00002800 */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
430,7 → 436,8
|
l.addi r8,r8,1 |
|
_T7: l.mtspr r0,r8,0x1234 /* Should be 0x000000009 */ |
_T7: l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0x000000009 */ |
|
l.lwz r9,0(r31) |
l.add r8,r9,r8 |
441,8 → 448,9
l.ori r3,r3,0xe5f7 |
l.add r8,r8,r3 |
|
l.mtspr r0,r8,0x1234 /* Should be 0xdeaddead */ |
l.or r3,r0,r8 |
l.nop NOP_REPORT /* Should be 0xdeaddead */ |
|
l.addi r3,r0,0 |
l.sys 203 |
l.nop NOP_EXIT |
|
/trunk/or1ksim/testbench/test
30,8 → 30,8
fi |
|
# Last two lines should look like: |
echo "MTSPR(0x1234, 0xdeaddead);" >$temp1 |
echo "syscall exit(0)" >>$temp1 |
echo "report(0xdeaddead);" >$temp1 |
echo "exit(0)" >>$temp1 |
|
# run the simulator |
$1 $2 $sim_param 2>$temp4 >$temp2 |
/trunk/or1ksim/testbench/cfg.S
16,11 → 16,11
l.addi r2,r0,0 |
|
l.mfspr r3,r0,SPR_VR /* Version */ |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_UPR /* Unit Present */ |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r4,r0,SPR_PMR /* Power Management */ |
28,7 → 28,7
l.mtspr r0,r3,SPR_PMR |
l.mfspr r3,r0,SPR_PMR |
l.andi r3,r3,0xff |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.addi r3,r0,5 |
35,47 → 35,47
l.mtspr r0,r3,SPR_PMR |
l.mfspr r3,r0,SPR_PMR |
l.andi r3,r3,0xff |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mtspr r0,r4,SPR_PMR |
|
l.mfspr r3,r0,SPR_CPUCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_DMMUCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_IMMUCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_DCCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_ICCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_DCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
l.mfspr r3,r0,SPR_PCCFGR |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.add r2,r2,r3 |
|
/* Configurations may differ, so we will insert another report*/ |
l.movhi r3,hi(0xdeacf5cc) |
l.ori r3,r3,lo(0xdeacf5cc) |
l.add r2,r2,r3 |
l.mtspr r0,r2,0x1234 |
|
l.add r3,r2,r3 |
l.nop NOP_REPORT |
|
l.movhi r3,hi(0xdeaddead) |
l.ori r3,r3,lo(0xdeaddead) |
l.mtspr r0,r3,0x1234 |
l.nop NOP_REPORT |
l.addi r3,r0,0 |
l.sys 203 |
l.nop NOP_EXIT |
/trunk/or1ksim/testbench/uos/except_or32.S
155,7 → 155,7
#define PRINTF(REG,STR) \ |
l.movhi REG,hi(STR); \ |
l.addi REG,r0,lo(STR); \ |
l.sys 202 |
l.nop NOP_PRINTF |
#else |
#define PRINTF(REG,STR) |
#endif |
166,8 → 166,10
.org 0x100 |
_reset_vector: |
l.nop |
l.j _reset |
l.nop |
l.movhi r2,hi(_reset) |
l.ori r2,r2,lo(_reset) |
l.jr r2 |
l.nop |
|
/* |
* Bus Error Exception handler |
210,7 → 212,10
l.movhi r3,hi(_kernel_context) |
l.addi r3,r0,lo(_kernel_context) |
LOADREGS |
l.j _int_main |
|
l.movhi r3,hi(_int_main) |
l.addi r3,r0,lo(_int_main) |
l.jr r3 |
l.nop |
|
_extint_str: |
/trunk/or1ksim/testbench/support/support.c
1,6 → 1,7
/* Support */ |
|
#include <sys/time.h> |
#include "spr_defs.h" |
#include "support.h" |
#include "int.h" |
|
34,7 → 35,8
void exit (int i) |
{ |
asm("l.add r3,r0,%0": : "r" (i)); |
asm("l.sys 203"); |
asm("l.nop %0": :"K" (NOP_EXIT)); |
while (1); |
} |
|
/* activate printf support in simulator */ |
44,15 → 46,14
va_start(args, fmt); |
asm("l.addi\tr3,%0,0": :"r" (fmt)); |
asm("l.addi\tr4,%0,0": :"r" (args)); |
asm("l.sys 202"); |
asm("l.nop %0": :"K" (NOP_PRINTF)); |
} |
|
/* print long */ |
void report(unsigned long value) |
{ |
unsigned long spr = 0x1234; |
asm("l.mtspr\t\t%0,%1,0x0" : : "r" (spr), "r" (value)); |
return; |
asm("l.addi\tr3,%0,0": :"r" (value)); |
asm("l.nop %0": :"K" (NOP_REPORT)); |
} |
|
/* just to satisfy linker */ |
73,7 → 74,7
|
/* Read the Time Stamp Counter */ |
/* asm("simrdtsc %0" :"=r" (count)); */ |
asm("l.sys 201"); |
/*asm("l.sys 201"); */ |
return count; |
} |
|