#include #define JIT_STATE JIT_V(13) #define JIT_CNTER _R10 int main(int argc, char *argv[]) { jit_state_t *_jit; void (*code)(void); void *l3_addr; jit_node_t *L2, *L3, *L4, *BL3, *start; init_jit(argv[0]); _jit = jit_new_state(); jit_prolog(); jit_tramp(256); start = jit_label(); jit_name("rec_ADDIU"); jit_note("/home/paul/dev/lightrec/emitter.c", 395); jit_ldxi_i(JIT_V0, JIT_STATE, 0x44); jit_addi(JIT_V0, JIT_V0, 0x1); jit_name("rec_SLTI"); jit_note("/home/paul/dev/lightrec/emitter.c", 395); jit_lti(JIT_V1, JIT_V0, 0x8); jit_stxi_i(0x44, JIT_STATE, JIT_V0); jit_name("rec_ADDIU"); jit_note("/home/paul/dev/lightrec/emitter.c", 395); jit_ldxi_i(JIT_V0, JIT_STATE, 0x40); jit_addi(JIT_V0, JIT_V0, 0x18); jit_stxi_i(0x40, JIT_STATE, JIT_V0); jit_name("rec_BNE"); jit_note("/home/paul/dev/lightrec/emitter.c", 214); jit_stxi_i(0x8, JIT_STATE, JIT_V1); jit_subi(JIT_CNTER, JIT_CNTER, 8); L2 = jit_beqi(JIT_V1, 0); jit_note("/home/paul/dev/lightrec/emitter.c", 52); jit_movi(JIT_V0, 0x8008a1ac); jit_live(JIT_CNTER); jit_patch_abs(jit_jmpi(), (void *)0x20000d0c); jit_patch(L2); jit_name("rec_ADDIU"); jit_movi(JIT_V0, 0x70); jit_stxi_i(0x8, JIT_STATE, JIT_V0); jit_name("rec_LUI"); jit_note("/home/paul/dev/lightrec/emitter.c", 584); jit_movi(JIT_V0, 0x800c0000); jit_name("rec_SW"); jit_note("/home/paul/dev/lightrec/emitter.c", 1248); jit_andi(JIT_R2, JIT_V0, 0x7fffff); jit_addi(JIT_R1, JIT_R2, 0x10000000); jit_stxi_i(0x3e7c, JIT_R1, JIT_V1); jit_addr(JIT_R2, JIT_R2, JIT_STATE); jit_stxi_i(0x4110, JIT_R2, JIT_V1); jit_name("rec_SW"); jit_note("/home/paul/dev/lightrec/emitter.c", 1248); jit_andi(JIT_R2, JIT_V0, 0x7fffff); jit_addi(JIT_R1, JIT_R2, 0x10000000); jit_stxi_i(0x3e78, JIT_R1, JIT_V1); jit_addr(JIT_R2, JIT_R2, JIT_STATE); jit_stxi_i(0x410c, JIT_R2, JIT_V1); jit_name("rec_SW"); jit_note("/home/paul/dev/lightrec/emitter.c", 1248); jit_andi(JIT_R2, JIT_V0, 0x7fffff); jit_addi(JIT_R1, JIT_R2, 0x10000000); jit_stxi_i(0x3e80, JIT_R1, JIT_V1); jit_addr(JIT_R2, JIT_R2, JIT_STATE); jit_stxi_i(0x4114, JIT_R2, JIT_V1); jit_stxi_i(0x4, JIT_STATE, JIT_V0); jit_subi(JIT_CNTER, JIT_CNTER, 0xe); L3 = jit_indirect(); jit_name("rec_LUI"); jit_note("/home/paul/dev/lightrec/emitter.c", 584); jit_movi(JIT_V0, 0x800c0000); jit_name("rec_special_ADDU"); jit_note("/home/paul/dev/lightrec/emitter.c", 413); jit_ldxi_i(JIT_V1, JIT_STATE, 0x8); jit_addr(JIT_V0, JIT_V0, JIT_V1); jit_name("rec_SW"); jit_note("/home/paul/dev/lightrec/emitter.c", 1120); jit_stxi_i(0x4, JIT_STATE, JIT_V0); jit_ldxi_i(JIT_R2, JIT_STATE, 0x244); jit_movi(JIT_R0, 0x286d0000); jit_prepare(); jit_ori(_R3, JIT_R0, 0xd); jit_live(JIT_R0); jit_live(JIT_R1); jit_live(JIT_R2); jit_live(JIT_STATE); jit_live(JIT_CNTER); jit_callr(JIT_R2); jit_live(JIT_R0); jit_live(JIT_R1); jit_live(JIT_R2); jit_live(JIT_STATE); jit_live(JIT_CNTER); jit_name("rec_ADDIU"); jit_note("/home/paul/dev/lightrec/emitter.c", 395); jit_addi(JIT_V1, JIT_V1, -16); jit_name("rec_regimm_BGEZ"); jit_note("/home/paul/dev/lightrec/emitter.c", 214); jit_stxi_i(0x8, JIT_STATE, JIT_V1); jit_subi(JIT_CNTER, JIT_CNTER, 0xc); L4 = jit_blti(JIT_V1, 0); BL3 = jit_bgti(JIT_CNTER, 0); jit_note("/home/paul/dev/lightrec/emitter.c", 52); jit_movi(JIT_V0, 0x8008a1e0); jit_live(JIT_CNTER); jit_patch_abs(jit_jmpi(), (void *)0x20000d0c); jit_patch(L4); jit_name("rec_LUI"); jit_note("/home/paul/dev/lightrec/emitter.c", 584); jit_movi(JIT_V0, 0x800c0000); jit_name("rec_SW"); jit_note("/home/paul/dev/lightrec/emitter.c", 1248); jit_movi(JIT_V1, 0x0); jit_andi(JIT_V12, JIT_V0, 0x7fffff); jit_addi(JIT_V11, JIT_V12, 0x10000000); jit_stxi_i(0x3f04, JIT_V11, JIT_V1); jit_addr(JIT_V12, JIT_V12, JIT_STATE); jit_stxi_i(0x4198, JIT_V12, JIT_V1); jit_stxi_i(0x4, JIT_STATE, JIT_V0); jit_name("rec_JAL"); jit_note("/home/paul/dev/lightrec/emitter.c", 52); jit_movi(JIT_V0, 0x8008a208); jit_stxi_i(0x7c, JIT_STATE, JIT_V0); jit_movi(JIT_V0, 0x8008ae68); jit_subi(JIT_CNTER, JIT_CNTER, 0x8); jit_live(JIT_CNTER); jit_patch_abs(jit_jmpi(), (void *)0x20000d0c); jit_patch_at(BL3, L3); jit_ret(); jit_epilog(); jit_realize(); code = jit_emit(); l3_addr = jit_address(L3); #if 1 jit_print(); jit_disassemble(); #endif jit_clear_state(); //(*code)(); jit_destroy_state(); finish_jit(); return (0); }