|
|
| version 1.2, 2005/03/12 12:33:48 | version 1.5, 2011/12/29 13:32:13 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ */ | |
| /* | /* |
| * Copyright (c) 2004 NONAKA Kimihiro | * Copyright (c) 2004 NONAKA Kimihiro |
| * All rights reserved. | * All rights reserved. |
| Line 30 | Line 28 |
| /* args == 1 */ | /* args == 1 */ |
| #define ARITH_INSTRUCTION_1(inst) \ | #define ARITH_INSTRUCTION_1(inst) \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##1(UINT32 dst, void *arg) \ | inst##1(UINT32 dst, void *arg) \ |
| { \ | { \ |
| (void)arg; \ | |
| BYTE_##inst(dst); \ | BYTE_##inst(dst); \ |
| return dst; \ | return dst; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##2(UINT32 dst, void *arg) \ | inst##2(UINT32 dst, void *arg) \ |
| { \ | { \ |
| (void)arg; \ | |
| WORD_##inst(dst); \ | WORD_##inst(dst); \ |
| return dst; \ | return dst; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##4(UINT32 dst, void *arg) \ | inst##4(UINT32 dst, void *arg) \ |
| { \ | { \ |
| (void)arg; \ | |
| DWORD_##inst(dst); \ | DWORD_##inst(dst); \ |
| return dst; \ | return dst; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_Eb(UINT32 op) \ | inst##_Eb(UINT32 op) \ |
| { \ | { \ |
| UINT8 *out; \ | UINT8 *out; \ |
| Line 71 inst##_Eb(UINT32 op) \ | Line 66 inst##_Eb(UINT32 op) \ |
| } \ | } \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_Ew(UINT32 op) \ | inst##_Ew(UINT32 op) \ |
| { \ | { \ |
| UINT16 *out; \ | UINT16 *out; \ |
| Line 90 inst##_Ew(UINT32 op) \ | Line 85 inst##_Ew(UINT32 op) \ |
| } \ | } \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_Ed(UINT32 op) \ | inst##_Ed(UINT32 op) \ |
| { \ | { \ |
| UINT32 *out; \ | UINT32 *out; \ |
| Line 111 inst##_Ed(UINT32 op) \ | Line 106 inst##_Ed(UINT32 op) \ |
| /* args == 2 */ | /* args == 2 */ |
| #define ARITH_INSTRUCTION_2(inst) \ | #define ARITH_INSTRUCTION_2(inst) \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##1(UINT32 dst, void *arg) \ | inst##1(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| BYTE_##inst(dst, src); \ | BYTE_##inst(dst, src); \ |
| return dst; \ | return dst; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##2(UINT32 dst, void *arg) \ | inst##2(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| WORD_##inst(dst, src); \ | WORD_##inst(dst, src); \ |
| return dst; \ | return dst; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##4(UINT32 dst, void *arg) \ | inst##4(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| Line 265 inst##_EAXId(void) \ | Line 260 inst##_EAXId(void) \ |
| CPU_EAX = dst; \ | CPU_EAX = dst; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EbIb(UINT8 *regp, UINT32 src) \ | inst##_EbIb(UINT8 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst; \ | UINT32 dst; \ |
| Line 275 inst##_EbIb(UINT8 *regp, UINT32 src) \ | Line 270 inst##_EbIb(UINT8 *regp, UINT32 src) \ |
| *regp = (UINT8)dst; \ | *regp = (UINT8)dst; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EbIb_ext(UINT32 madr, UINT32 src) \ | inst##_EbIb_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |
| cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ | cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EwIx(UINT16 *regp, UINT32 src) \ | inst##_EwIx(UINT16 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst; \ | UINT32 dst; \ |
| Line 292 inst##_EwIx(UINT16 *regp, UINT32 src) \ | Line 287 inst##_EwIx(UINT16 *regp, UINT32 src) \ |
| *regp = (UINT16)dst; \ | *regp = (UINT16)dst; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EwIx_ext(UINT32 madr, UINT32 src) \ | inst##_EwIx_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |
| cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ | cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EdIx(UINT32 *regp, UINT32 src) \ | inst##_EdIx(UINT32 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst; \ | UINT32 dst; \ |
| Line 309 inst##_EdIx(UINT32 *regp, UINT32 src) \ | Line 304 inst##_EdIx(UINT32 *regp, UINT32 src) \ |
| *regp = dst; \ | *regp = dst; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EdIx_ext(UINT32 madr, UINT32 src) \ | inst##_EdIx_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |
| Line 318 inst##_EdIx_ext(UINT32 madr, UINT32 src) | Line 313 inst##_EdIx_ext(UINT32 madr, UINT32 src) |
| /* args == 3 */ | /* args == 3 */ |
| #define ARITH_INSTRUCTION_3(inst) \ | #define ARITH_INSTRUCTION_3(inst) \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##1(UINT32 dst, void *arg) \ | inst##1(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| Line 326 inst##1(UINT32 dst, void *arg) \ | Line 321 inst##1(UINT32 dst, void *arg) \ |
| BYTE_##inst(res, dst, src); \ | BYTE_##inst(res, dst, src); \ |
| return res; \ | return res; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##2(UINT32 dst, void *arg) \ | inst##2(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| Line 334 inst##2(UINT32 dst, void *arg) \ | Line 329 inst##2(UINT32 dst, void *arg) \ |
| WORD_##inst(res, dst, src); \ | WORD_##inst(res, dst, src); \ |
| return res; \ | return res; \ |
| } \ | } \ |
| static UINT32 \ | static UINT32 CPUCALL \ |
| inst##4(UINT32 dst, void *arg) \ | inst##4(UINT32 dst, void *arg) \ |
| { \ | { \ |
| UINT32 src = PTR_TO_UINT32(arg); \ | UINT32 src = PTR_TO_UINT32(arg); \ |
| Line 475 inst##_EAXId(void) \ | Line 470 inst##_EAXId(void) \ |
| CPU_EAX = res; \ | CPU_EAX = res; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EbIb(UINT8 *regp, UINT32 src) \ | inst##_EbIb(UINT8 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst, res; \ | UINT32 dst, res; \ |
| Line 485 inst##_EbIb(UINT8 *regp, UINT32 src) \ | Line 480 inst##_EbIb(UINT8 *regp, UINT32 src) \ |
| *regp = (UINT8)res; \ | *regp = (UINT8)res; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EbIb_ext(UINT32 madr, UINT32 src) \ | inst##_EbIb_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |
| cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ | cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EwIx(UINT16 *regp, UINT32 src) \ | inst##_EwIx(UINT16 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst, res; \ | UINT32 dst, res; \ |
| Line 502 inst##_EwIx(UINT16 *regp, UINT32 src) \ | Line 497 inst##_EwIx(UINT16 *regp, UINT32 src) \ |
| *regp = (UINT16)res; \ | *regp = (UINT16)res; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EwIx_ext(UINT32 madr, UINT32 src) \ | inst##_EwIx_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |
| cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ | cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EdIx(UINT32 *regp, UINT32 src) \ | inst##_EdIx(UINT32 *regp, UINT32 src) \ |
| { \ | { \ |
| UINT32 dst, res; \ | UINT32 dst, res; \ |
| Line 519 inst##_EdIx(UINT32 *regp, UINT32 src) \ | Line 514 inst##_EdIx(UINT32 *regp, UINT32 src) \ |
| *regp = res; \ | *regp = res; \ |
| } \ | } \ |
| \ | \ |
| void \ | void CPUCALL \ |
| inst##_EdIx_ext(UINT32 madr, UINT32 src) \ | inst##_EdIx_ext(UINT32 madr, UINT32 src) \ |
| { \ | { \ |
| \ | \ |