X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2Fcarthw%2Fsvp%2Fgen_arm.c;h=909433a231f03028216b30206dca28bb915c8ee8;hb=fad248933b6676d30ccf419858b4ee10cc123fc5;hp=3d7b084d0d35710d87398e079f0c48bb5337c46c;hpb=ede7220f67547138f846bff6ecb642a848b54a74;p=picodrive.git diff --git a/Pico/carthw/svp/gen_arm.c b/Pico/carthw/svp/gen_arm.c index 3d7b084..909433a 100644 --- a/Pico/carthw/svp/gen_arm.c +++ b/Pico/carthw/svp/gen_arm.c @@ -111,6 +111,7 @@ #define EOP_LDRH_REG( rd,rn,rm) EOP_C_AM3_REG(A_COND_AL,1,1,rn,rd,0,1,rm) #define EOP_STRH_IMM( rd,rn,offset_8) EOP_C_AM3_IMM(A_COND_AL,1,0,rn,rd,0,1,offset_8) #define EOP_STRH_SIMPLE(rd,rn) EOP_C_AM3_IMM(A_COND_AL,1,0,rn,rd,0,1,0) +#define EOP_STRH_REG( rd,rn,rm) EOP_C_AM3_REG(A_COND_AL,1,0,rn,rd,0,1,rm) /* ldm and stm */ #define EOP_XXM(cond,p,u,s,w,l,rn,list) \ @@ -196,19 +197,16 @@ static void emit_call(void *target) static void emit_block_prologue(void) { - // stack regs - EOP_STMFD_ST(A_R4M|A_R5M|A_R6M|A_R7M|A_R8M|A_R9M|A_R10M|A_R11M|A_R14M); // stmfd r13!, {r4-r11,lr} - emit_call(regfile_load); - EOP_MOV_IMM(11, 0, 0); // mov r11, #0 + // nothing } -static void emit_block_epilogue(int icount) +static void emit_block_epilogue(int cycles) { - if (icount > 0xff) { printf("large icount: %i\n", icount); icount = 0xff; } - emit_call(regfile_store); - EOP_ADD_IMM(0,11,0,icount); // add r0, r11, #icount - EOP_LDMFD_ST(A_R4M|A_R5M|A_R6M|A_R7M|A_R8M|A_R9M|A_R10M|A_R11M|A_R14M); // ldmfd r13!, {r4-r11,lr} - EOP_BX(14); // bx r14 + if (cycles > 0xff) { printf("large cycle count: %i\n", cycles); cycles = 0xff; } + EOP_SUB_IMM(11,11,0,cycles); // sub r11, r11, #cycles +#ifdef ARM + emit_call(ssp_drc_next); +#endif } static void emit_pc_dump(int pc)