Mercurial > repos > blastem
comparison m68k_core_x86.c @ 2269:6677afe78a6f
Hopefully make older versions of gcc happy
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 26 Dec 2022 07:17:29 -0800 |
parents | 5b308c7b098c |
children | 3b5fef896475 |
comparison
equal
deleted
inserted
replaced
2268:5b308c7b098c | 2269:6677afe78a6f |
---|---|
359 cc = CC_NS; | 359 cc = CC_NS; |
360 } else { | 360 } else { |
361 cmp_rr(code, opts->gen.cycles, opts->gen.limit, SZ_D); | 361 cmp_rr(code, opts->gen.cycles, opts->gen.limit, SZ_D); |
362 cc = CC_A; | 362 cc = CC_A; |
363 } | 363 } |
364 code_ptr jmp_off; | |
364 ALLOC_CODE_RETRY_POINT | 365 ALLOC_CODE_RETRY_POINT |
365 code_ptr jmp_off = code->cur+1; | 366 jmp_off = code->cur+1; |
366 jcc(code, cc, jmp_off+1); | 367 jcc(code, cc, jmp_off+1); |
367 call(code, opts->handle_int_latch); | 368 call(code, opts->handle_int_latch); |
368 CHECK_BRANCH_DEST(jmp_off) | 369 CHECK_BRANCH_DEST(jmp_off) |
369 } | 370 } |
370 | 371 |
864 } else { | 865 } else { |
865 mov_irdisp(code, cond == COND_TRUE ? 0xFF : 0, dst_op.base, dst_op.disp, SZ_B); | 866 mov_irdisp(code, cond == COND_TRUE ? 0xFF : 0, dst_op.base, dst_op.disp, SZ_B); |
866 } | 867 } |
867 } else { | 868 } else { |
868 uint8_t cc = m68k_eval_cond(opts, cond); | 869 uint8_t cc = m68k_eval_cond(opts, cond); |
870 code_ptr true_off; | |
869 ALLOC_CODE_RETRY_POINT | 871 ALLOC_CODE_RETRY_POINT |
870 code_ptr true_off = code->cur + 1; | 872 true_off = code->cur + 1; |
871 jcc(code, cc, code->cur+2); | 873 jcc(code, cc, code->cur+2); |
872 cycles(&opts->gen, BUS); | 874 cycles(&opts->gen, BUS); |
873 if (dst_op.mode == MODE_REG_DIRECT) { | 875 if (dst_op.mode == MODE_REG_DIRECT) { |
874 mov_ir(code, 0, dst_op.base, SZ_B); | 876 mov_ir(code, 0, dst_op.base, SZ_B); |
875 } else { | 877 } else { |
1349 } | 1351 } |
1350 } | 1352 } |
1351 if (inst->dst.addr_mode != MODE_AREG || inst->op == M68K_CMP) { | 1353 if (inst->dst.addr_mode != MODE_AREG || inst->op == M68K_CMP) { |
1352 update_flags(opts, flag_mask); | 1354 update_flags(opts, flag_mask); |
1353 if (inst->op == M68K_ADDX || inst->op == M68K_SUBX) { | 1355 if (inst->op == M68K_ADDX || inst->op == M68K_SUBX) { |
1356 code_ptr after_flag_set; | |
1354 ALLOC_CODE_RETRY_POINT | 1357 ALLOC_CODE_RETRY_POINT |
1355 code_ptr after_flag_set = code->cur + 1; | 1358 after_flag_set = code->cur + 1; |
1356 jcc(code, CC_Z, code->cur + 2); | 1359 jcc(code, CC_Z, code->cur + 2); |
1357 set_flag(opts, 0, FLAG_Z); | 1360 set_flag(opts, 0, FLAG_Z); |
1358 CHECK_BRANCH_DEST(after_flag_set); | 1361 CHECK_BRANCH_DEST(after_flag_set); |
1359 } | 1362 } |
1360 } | 1363 } |
1723 isize = 6; | 1726 isize = 6; |
1724 break; | 1727 break; |
1725 default: | 1728 default: |
1726 isize = 2; | 1729 isize = 2; |
1727 } | 1730 } |
1731 code_ptr passed; | |
1728 ALLOC_CODE_RETRY_POINT | 1732 ALLOC_CODE_RETRY_POINT |
1729 code_ptr passed = code->cur + 1; | 1733 passed = code->cur + 1; |
1730 jcc(code, CC_GE, code->cur + 2); | 1734 jcc(code, CC_GE, code->cur + 2); |
1731 set_flag(opts, 1, FLAG_N); | 1735 set_flag(opts, 1, FLAG_N); |
1732 mov_ir(code, VECTOR_CHK, opts->gen.scratch2, SZ_D); | 1736 mov_ir(code, VECTOR_CHK, opts->gen.scratch2, SZ_D); |
1733 mov_ir(code, inst->address+isize, opts->gen.scratch1, SZ_D); | 1737 mov_ir(code, inst->address+isize, opts->gen.scratch1, SZ_D); |
1734 jmp(code, opts->trap); | 1738 jmp(code, opts->trap); |
1896 movzx_rr(code, src_op->base, opts->gen.scratch1, SZ_W, SZ_D); | 1900 movzx_rr(code, src_op->base, opts->gen.scratch1, SZ_W, SZ_D); |
1897 } | 1901 } |
1898 shl_ir(code, 16, opts->gen.scratch1, SZ_D); | 1902 shl_ir(code, 16, opts->gen.scratch1, SZ_D); |
1899 } | 1903 } |
1900 cmp_ir(code, 0, opts->gen.scratch1, SZ_D); | 1904 cmp_ir(code, 0, opts->gen.scratch1, SZ_D); |
1905 code_ptr not_zero; | |
1901 ALLOC_CODE_RETRY_POINT | 1906 ALLOC_CODE_RETRY_POINT |
1902 code_ptr not_zero = code->cur+1; | 1907 not_zero = code->cur+1; |
1903 jcc(code, CC_NZ, not_zero); | 1908 jcc(code, CC_NZ, not_zero); |
1904 | 1909 |
1905 //TODO: Check that opts->trap includes the cycles conumed by the first trap0 microinstruction | 1910 //TODO: Check that opts->trap includes the cycles conumed by the first trap0 microinstruction |
1906 cycles(&opts->gen, 4); | 1911 cycles(&opts->gen, 4); |
1907 uint32_t isize = 2; | 1912 uint32_t isize = 2; |