cpu: remove some double-calls of mem_read()
For a veeery small performance benefit.
This commit is contained in:
118
src/gbemu/cpu.c
118
src/gbemu/cpu.c
@@ -153,79 +153,87 @@ static const unsigned int cb_extra_cycles[256] = { 0 };
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ADD_8(cpu, dst, src) \
|
#define ADD_8(cpu, dst, src) \
|
||||||
do { \
|
do { \
|
||||||
(cpu)->nf = 0; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->hf = CALC_H_ADD((src), (dst)); \
|
(cpu)->nf = 0; \
|
||||||
(cpu)->cf = CALC_C_ADD_8((src), (dst)); \
|
(cpu)->hf = CALC_H_ADD((_reg), (dst)); \
|
||||||
(dst) += (src); \
|
(cpu)->cf = CALC_C_ADD_8((_reg), (dst)); \
|
||||||
(cpu)->zf = (dst) == 0; \
|
(dst) += (_reg); \
|
||||||
|
(cpu)->zf = (dst) == 0; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ADD_16(cpu, dst, src) \
|
#define ADD_16(cpu, dst, src) \
|
||||||
do { \
|
do { \
|
||||||
(cpu)->nf = 0; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->hf = CALC_H_ADD((dst), (src)); \
|
(cpu)->nf = 0; \
|
||||||
(cpu)->cf = CALC_C_ADD_16((dst), (src)); \
|
(cpu)->hf = CALC_H_ADD((dst), (_reg)); \
|
||||||
(dst) += (src); \
|
(cpu)->cf = CALC_C_ADD_16((dst), (_reg)); \
|
||||||
} while (0) \
|
(dst) += (_reg); \
|
||||||
|
} 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; \
|
||||||
cpu->nf = 0; \
|
tmp = _reg + dst + cpu->cf; \
|
||||||
cpu->hf = CALC_H_ADD((src), (dst)); \
|
cpu->nf = 0; \
|
||||||
(dst) = tmp; \
|
cpu->hf = CALC_H_ADD((_reg), (dst)); \
|
||||||
|
(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 { \
|
||||||
int tmp; \
|
uint8_t _reg = src; \
|
||||||
tmp = dst - src; \
|
int tmp; \
|
||||||
cpu->nf = 1; \
|
tmp = dst - _reg; \
|
||||||
cpu->hf = CALC_H_SUB(src, dst); \
|
cpu->nf = 1; \
|
||||||
dst = tmp; \
|
cpu->hf = CALC_H_SUB(_reg, dst); \
|
||||||
|
dst = tmp; \
|
||||||
cpu->zf = (dst) == 0; \
|
cpu->zf = (dst) == 0; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SBC_8(cpu, dst, src) \
|
#define SBC_8(cpu, dst, src) \
|
||||||
do { \
|
do { \
|
||||||
/* FIXME flag generation */ \
|
/* FIXME flag generation */ \
|
||||||
int tmp; \
|
int tmp; \
|
||||||
tmp = (dst) - (src) - 1; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->nf = 1; \
|
tmp = (dst) - (_reg) - 1; \
|
||||||
(cpu)->hf = CALC_H_ADD(src, dst); \
|
(cpu)->nf = 1; \
|
||||||
(dst) = (tmp); \
|
(cpu)->hf = CALC_H_ADD(_reg, dst); \
|
||||||
|
(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 { \
|
||||||
(cpu)->nf = 0; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->hf = 1; \
|
(cpu)->nf = 0; \
|
||||||
(cpu)->cf = 0; \
|
(cpu)->hf = 1; \
|
||||||
(dst) &= (src); \
|
(cpu)->cf = 0; \
|
||||||
(cpu)->zf = ((dst) == 0); \
|
(dst) &= (_reg); \
|
||||||
|
(cpu)->zf = ((dst) == 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define XOR_8(cpu, dst, src) \
|
#define XOR_8(cpu, dst, src) \
|
||||||
do { \
|
do { \
|
||||||
(cpu)->nf = 0; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->hf = 0; \
|
(cpu)->nf = 0; \
|
||||||
(cpu)->cf = 0; \
|
(cpu)->hf = 0; \
|
||||||
(dst) ^= (src); \
|
(cpu)->cf = 0; \
|
||||||
(cpu)->zf = ((dst) == 0); \
|
(dst) ^= (_reg); \
|
||||||
|
(cpu)->zf = ((dst) == 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define OR_8(cpu, dst, src) \
|
#define OR_8(cpu, dst, src) \
|
||||||
do { \
|
do { \
|
||||||
(cpu)->nf = 0; \
|
uint8_t _reg = src; \
|
||||||
(cpu)->hf = 0; \
|
(cpu)->nf = 0; \
|
||||||
(cpu)->cf = 0; \
|
(cpu)->hf = 0; \
|
||||||
(dst) |= (src); \
|
(cpu)->cf = 0; \
|
||||||
(cpu)->zf = ((dst) == 0); \
|
(dst) |= (_reg); \
|
||||||
|
(cpu)->zf = ((dst) == 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define CP_8(cpu, dst, src) \
|
#define CP_8(cpu, dst, src) \
|
||||||
|
|||||||
Reference in New Issue
Block a user