comparison backend_x86.c @ 697:7f96bd1cb1be

Sync fixes and logging to fix more sync issues
author Michael Pavone <pavone@retrodev.com>
date Mon, 11 May 2015 00:28:47 -0700
parents e11e68918691
children 59b499f6b24f
comparison
equal deleted inserted replaced
696:0b2242bbc84a 697:7f96bd1cb1be
9 void check_cycles_int(cpu_options *opts, uint32_t address) 9 void check_cycles_int(cpu_options *opts, uint32_t address)
10 { 10 {
11 code_info *code = &opts->code; 11 code_info *code = &opts->code;
12 cmp_rr(code, opts->cycles, opts->limit, SZ_D); 12 cmp_rr(code, opts->cycles, opts->limit, SZ_D);
13 code_ptr jmp_off = code->cur+1; 13 code_ptr jmp_off = code->cur+1;
14 jcc(code, CC_NC, jmp_off+1); 14 jcc(code, CC_A, jmp_off+1);
15 mov_ir(code, address, opts->scratch1, SZ_D); 15 mov_ir(code, address, opts->scratch1, SZ_D);
16 call(code, opts->handle_cycle_limit_int); 16 call(code, opts->handle_cycle_limit_int);
17 *jmp_off = code->cur - (jmp_off+1); 17 *jmp_off = code->cur - (jmp_off+1);
18 } 18 }
19 19
21 { 21 {
22 code_info *code = &opts->code; 22 code_info *code = &opts->code;
23 cmp_rr(code, opts->cycles, opts->limit, SZ_D); 23 cmp_rr(code, opts->cycles, opts->limit, SZ_D);
24 check_alloc_code(code, MAX_INST_LEN*2); 24 check_alloc_code(code, MAX_INST_LEN*2);
25 code_ptr jmp_off = code->cur+1; 25 code_ptr jmp_off = code->cur+1;
26 jcc(code, CC_NC, jmp_off+1); 26 jcc(code, CC_A, jmp_off+1);
27 call(code, opts->handle_cycle_limit); 27 call(code, opts->handle_cycle_limit);
28 *jmp_off = code->cur - (jmp_off+1); 28 *jmp_off = code->cur - (jmp_off+1);
29 }
30
31 void log_address(cpu_options *opts, uint32_t address, char * format)
32 {
33 code_info *code = &opts->code;
34 call(code, opts->save_context);
35 push_r(code, opts->context_reg);
36 mov_rr(code, opts->cycles, RDX, SZ_D);
37 mov_ir(code, (int64_t)format, RDI, SZ_PTR);
38 mov_ir(code, address, RSI, SZ_D);
39 call_args_abi(code, (code_ptr)printf, 3, RDI, RSI, RDX);
40 pop_r(code, opts->context_reg);
41 call(code, opts->load_context);
29 } 42 }
30 43
31 void check_code_prologue(code_info *code) 44 void check_code_prologue(code_info *code)
32 { 45 {
33 check_alloc_code(code, MAX_INST_LEN*4); 46 check_alloc_code(code, MAX_INST_LEN*4);