From 86191c3c09e7304818f54aef2ba48a13b06b049e Mon Sep 17 00:00:00 2001 From: Max Regan Date: Mon, 9 Jul 2018 02:19:39 +0000 Subject: [PATCH] cpu: remove some double-calls of mem_read() For a veeery small performance benefit. --- src/gbemu/cpu.c | 118 ++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 55 deletions(-) diff --git a/src/gbemu/cpu.c b/src/gbemu/cpu.c index 65731c8..0040fca 100644 --- a/src/gbemu/cpu.c +++ b/src/gbemu/cpu.c @@ -153,79 +153,87 @@ static const unsigned int cb_extra_cycles[256] = { 0 }; } while (0) #define ADD_8(cpu, dst, src) \ - do { \ - (cpu)->nf = 0; \ - (cpu)->hf = CALC_H_ADD((src), (dst)); \ - (cpu)->cf = CALC_C_ADD_8((src), (dst)); \ - (dst) += (src); \ - (cpu)->zf = (dst) == 0; \ + do { \ + uint8_t _reg = src; \ + (cpu)->nf = 0; \ + (cpu)->hf = CALC_H_ADD((_reg), (dst)); \ + (cpu)->cf = CALC_C_ADD_8((_reg), (dst)); \ + (dst) += (_reg); \ + (cpu)->zf = (dst) == 0; \ } while (0) -#define ADD_16(cpu, dst, src) \ - do { \ - (cpu)->nf = 0; \ - (cpu)->hf = CALC_H_ADD((dst), (src)); \ - (cpu)->cf = CALC_C_ADD_16((dst), (src)); \ - (dst) += (src); \ - } while (0) \ +#define ADD_16(cpu, dst, src) \ + do { \ + uint8_t _reg = src; \ + (cpu)->nf = 0; \ + (cpu)->hf = CALC_H_ADD((dst), (_reg)); \ + (cpu)->cf = CALC_C_ADD_16((dst), (_reg)); \ + (dst) += (_reg); \ + } while (0) \ -#define ADC_8(cpu, dst, src) \ - do { \ +#define ADC_8(cpu, dst, src) \ + do { \ /* FIXME flag generation */ \ - int tmp; \ - tmp = src + dst + cpu->cf; \ - cpu->nf = 0; \ - cpu->hf = CALC_H_ADD((src), (dst)); \ - (dst) = tmp; \ + int tmp; \ + uint8_t _reg = src; \ + tmp = _reg + dst + cpu->cf; \ + cpu->nf = 0; \ + cpu->hf = CALC_H_ADD((_reg), (dst)); \ + (dst) = tmp; \ cpu->zf = (dst) == 0; \ } while (0) -#define SUB_8(cpu, dst, src) \ - do { \ - int tmp; \ - tmp = dst - src; \ - cpu->nf = 1; \ - cpu->hf = CALC_H_SUB(src, dst); \ - dst = tmp; \ +#define SUB_8(cpu, dst, src) \ + do { \ + uint8_t _reg = src; \ + int tmp; \ + tmp = dst - _reg; \ + cpu->nf = 1; \ + cpu->hf = CALC_H_SUB(_reg, dst); \ + dst = tmp; \ cpu->zf = (dst) == 0; \ } while (0) -#define SBC_8(cpu, dst, src) \ - do { \ +#define SBC_8(cpu, dst, src) \ + do { \ /* FIXME flag generation */ \ - int tmp; \ - tmp = (dst) - (src) - 1; \ - (cpu)->nf = 1; \ - (cpu)->hf = CALC_H_ADD(src, dst); \ - (dst) = (tmp); \ + int tmp; \ + uint8_t _reg = src; \ + tmp = (dst) - (_reg) - 1; \ + (cpu)->nf = 1; \ + (cpu)->hf = CALC_H_ADD(_reg, dst); \ + (dst) = (tmp); \ cpu->zf = (dst) == 0; \ } while (0) -#define AND_8(cpu, dst, src) \ - do { \ - (cpu)->nf = 0; \ - (cpu)->hf = 1; \ - (cpu)->cf = 0; \ - (dst) &= (src); \ - (cpu)->zf = ((dst) == 0); \ +#define AND_8(cpu, dst, src) \ + do { \ + uint8_t _reg = src; \ + (cpu)->nf = 0; \ + (cpu)->hf = 1; \ + (cpu)->cf = 0; \ + (dst) &= (_reg); \ + (cpu)->zf = ((dst) == 0); \ } while (0) -#define XOR_8(cpu, dst, src) \ - do { \ - (cpu)->nf = 0; \ - (cpu)->hf = 0; \ - (cpu)->cf = 0; \ - (dst) ^= (src); \ - (cpu)->zf = ((dst) == 0); \ +#define XOR_8(cpu, dst, src) \ + do { \ + uint8_t _reg = src; \ + (cpu)->nf = 0; \ + (cpu)->hf = 0; \ + (cpu)->cf = 0; \ + (dst) ^= (_reg); \ + (cpu)->zf = ((dst) == 0); \ } while (0) -#define OR_8(cpu, dst, src) \ - do { \ - (cpu)->nf = 0; \ - (cpu)->hf = 0; \ - (cpu)->cf = 0; \ - (dst) |= (src); \ - (cpu)->zf = ((dst) == 0); \ +#define OR_8(cpu, dst, src) \ + do { \ + uint8_t _reg = src; \ + (cpu)->nf = 0; \ + (cpu)->hf = 0; \ + (cpu)->cf = 0; \ + (dst) |= (_reg); \ + (cpu)->zf = ((dst) == 0); \ } while (0) #define CP_8(cpu, dst, src) \