Mercurial > repos > blastem
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); |