URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 1727 to Rev 1728
- ↔ Reverse comparison
Rev 1727 → Rev 1728
/trunk/or1ksim/cpu/or32/op.c
191,15 → 191,9
env->delay_insn = 1; |
} |
|
__or_dynop void op_do_jump(void) |
{ |
RET_FROM_DYN_CODE; |
} |
|
__or_dynop void op_do_jump_delay(void) |
{ |
env->pc = env->pc_delay; |
RET_FROM_DYN_CODE; |
} |
|
__or_dynop void op_clear_delay_insn(void) |
286,7 → 280,7
{ |
op_support_nop_reset(); |
env->pc = EXCEPT_RESET; |
RET_FROM_DYN_CODE; |
FORCE_RET; |
} |
|
__or_dynop void op_nop_printf(void) |
947,7 → 941,6
env->delay_insn = 0; |
env->sprs[SPR_EEAR_BASE] = env->pc - 4; |
env->pc = EXCEPT_ILLEGAL - 4; |
RET_FROM_DYN_CODE; |
} |
|
__or_dynop void op_illegal(void) |
954,7 → 947,6
{ |
env->sprs[SPR_EEAR_BASE] = env->pc; |
env->pc = EXCEPT_ILLEGAL; |
RET_FROM_DYN_CODE; |
} |
|
__or_dynop void op_do_sched(void) |
/trunk/or1ksim/cpu/or32/dyn_rec.c
706,6 → 706,7
gen_op_do_sched_delay(opq, 1); |
gen_op_clear_delay_insn(opq, 1); |
gen_op_do_jump_delay(opq, 1); |
gen_op_do_jump(opq, 1); |
gen_op_mark_loc(opq, 1); |
|
for(j = 0; j < NUM_T_REGS; j++) |
991,6 → 992,7
gen_op_do_sched_delay(opq, 1); |
|
gen_op_do_jump_delay(opq, 1); |
gen_op_do_jump(opq, 1); |
} |
|
/*------------------------------[ Operation generation for an instruction ]---*/ |
1193,10 → 1195,13
{ |
if(!opq->param[2]) { |
/* There is no option. This _will_ cause an illeagal exception */ |
if(!delay_slot) |
if(!delay_slot) { |
gen_op_illegal(opq, 1); |
else |
gen_op_do_jump(opq, 1); |
} else { |
gen_op_illegal(opq, 1); |
gen_op_do_jump(opq, 1); |
} |
return; |
} |
|
1223,10 → 1228,13
{ |
if(!opq->param[2]) { |
/* There is no option. This _will_ cause an illeagal exception */ |
if(!delay_slot) |
if(!delay_slot) { |
gen_op_illegal(opq, 1); |
else |
gen_op_do_jump(opq, 1); |
} else { |
gen_op_illegal(opq, 1); |
gen_op_do_jump(opq, 1); |
} |
return; |
} |
|
2360,10 → 2368,13
|
void gen_l_invalid(struct op_queue *opq, int param_t[3], int delay_slot) |
{ |
if(!delay_slot) |
if(!delay_slot) { |
gen_op_illegal(opq, 1); |
else |
gen_op_do_jump(opq, 1); |
} else { |
gen_op_illegal_delay(opq, 1); |
gen_op_do_jump(opq, 1); |
} |
} |
|
/*----------------------------------[ Floating point instructions (stubs) ]---*/ |
/trunk/or1ksim/cpu/or32/op_i386.h
26,5 → 26,15
#define SPEEDY_CALL(func) asm("call "#func"\n") |
|
/* Return out of the recompiled code */ |
#define RET_FROM_DYN_CODE asm volatile ("ret") |
asm( |
" .align 2\n" |
" .p2align 4,,15\n" |
".globl op_do_jump\n" |
" .type op_do_jump,@function\n" |
"op_do_jump:\n" |
" ret\n" |
" ret\n" |
"1:\n" |
" .size op_do_jump,1b-op_do_jump\n" |
); |
|