cpu: remove some double-calls of mem_read()

For a veeery small performance benefit.
This commit is contained in:
2018-07-09 02:19:39 +00:00
parent ea2ea1e293
commit 86191c3c09

View File

@@ -154,38 +154,42 @@ static const unsigned int cb_extra_cycles[256] = { 0 };
#define ADD_8(cpu, dst, src) \ #define ADD_8(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
(cpu)->nf = 0; \ (cpu)->nf = 0; \
(cpu)->hf = CALC_H_ADD((src), (dst)); \ (cpu)->hf = CALC_H_ADD((_reg), (dst)); \
(cpu)->cf = CALC_C_ADD_8((src), (dst)); \ (cpu)->cf = CALC_C_ADD_8((_reg), (dst)); \
(dst) += (src); \ (dst) += (_reg); \
(cpu)->zf = (dst) == 0; \ (cpu)->zf = (dst) == 0; \
} while (0) } while (0)
#define ADD_16(cpu, dst, src) \ #define ADD_16(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
(cpu)->nf = 0; \ (cpu)->nf = 0; \
(cpu)->hf = CALC_H_ADD((dst), (src)); \ (cpu)->hf = CALC_H_ADD((dst), (_reg)); \
(cpu)->cf = CALC_C_ADD_16((dst), (src)); \ (cpu)->cf = CALC_C_ADD_16((dst), (_reg)); \
(dst) += (src); \ (dst) += (_reg); \
} while (0) \ } while (0) \
#define ADC_8(cpu, dst, src) \ #define ADC_8(cpu, dst, src) \
do { \ do { \
/* FIXME flag generation */ \ /* FIXME flag generation */ \
int tmp; \ int tmp; \
tmp = src + dst + cpu->cf; \ uint8_t _reg = src; \
tmp = _reg + dst + cpu->cf; \
cpu->nf = 0; \ cpu->nf = 0; \
cpu->hf = CALC_H_ADD((src), (dst)); \ cpu->hf = CALC_H_ADD((_reg), (dst)); \
(dst) = tmp; \ (dst) = tmp; \
cpu->zf = (dst) == 0; \ cpu->zf = (dst) == 0; \
} while (0) } while (0)
#define SUB_8(cpu, dst, src) \ #define SUB_8(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
int tmp; \ int tmp; \
tmp = dst - src; \ tmp = dst - _reg; \
cpu->nf = 1; \ cpu->nf = 1; \
cpu->hf = CALC_H_SUB(src, dst); \ cpu->hf = CALC_H_SUB(_reg, dst); \
dst = tmp; \ dst = tmp; \
cpu->zf = (dst) == 0; \ cpu->zf = (dst) == 0; \
} while (0) } while (0)
@@ -194,37 +198,41 @@ static const unsigned int cb_extra_cycles[256] = { 0 };
do { \ do { \
/* FIXME flag generation */ \ /* FIXME flag generation */ \
int tmp; \ int tmp; \
tmp = (dst) - (src) - 1; \ uint8_t _reg = src; \
tmp = (dst) - (_reg) - 1; \
(cpu)->nf = 1; \ (cpu)->nf = 1; \
(cpu)->hf = CALC_H_ADD(src, dst); \ (cpu)->hf = CALC_H_ADD(_reg, dst); \
(dst) = (tmp); \ (dst) = (tmp); \
cpu->zf = (dst) == 0; \ cpu->zf = (dst) == 0; \
} while (0) } while (0)
#define AND_8(cpu, dst, src) \ #define AND_8(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
(cpu)->nf = 0; \ (cpu)->nf = 0; \
(cpu)->hf = 1; \ (cpu)->hf = 1; \
(cpu)->cf = 0; \ (cpu)->cf = 0; \
(dst) &= (src); \ (dst) &= (_reg); \
(cpu)->zf = ((dst) == 0); \ (cpu)->zf = ((dst) == 0); \
} while (0) } while (0)
#define XOR_8(cpu, dst, src) \ #define XOR_8(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
(cpu)->nf = 0; \ (cpu)->nf = 0; \
(cpu)->hf = 0; \ (cpu)->hf = 0; \
(cpu)->cf = 0; \ (cpu)->cf = 0; \
(dst) ^= (src); \ (dst) ^= (_reg); \
(cpu)->zf = ((dst) == 0); \ (cpu)->zf = ((dst) == 0); \
} while (0) } while (0)
#define OR_8(cpu, dst, src) \ #define OR_8(cpu, dst, src) \
do { \ do { \
uint8_t _reg = src; \
(cpu)->nf = 0; \ (cpu)->nf = 0; \
(cpu)->hf = 0; \ (cpu)->hf = 0; \
(cpu)->cf = 0; \ (cpu)->cf = 0; \
(dst) |= (src); \ (dst) |= (_reg); \
(cpu)->zf = ((dst) == 0); \ (cpu)->zf = ((dst) == 0); \
} while (0) } while (0)