From 9e2b3eb88220f648463286b100185475fca8f04c Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Sat, 13 Aug 2022 15:35:18 -0700 Subject: [PATCH] Types work out better and better code if not trying to over-optimize memory accesses in arith.h --- inc/arith.h | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/inc/arith.h b/inc/arith.h index e2178ce..4915e41 100644 --- a/inc/arith.h +++ b/inc/arith.h @@ -38,29 +38,27 @@ #define N_GETNUMBER(sour, dest, label) \ do { \ - (dest) = (sour); /* access memory once */ \ - switch (SEGMASK & (dest)) { \ - case S_POSITIVE: (dest) &= 0xFFFF; break; \ - case S_NEGATIVE: (dest) |= (int)0xFFFF0000; break; \ + switch (SEGMASK & (sour)) { \ + case S_POSITIVE: (dest) = (int)((sour) & 0xFFFF); break; \ + case S_NEGATIVE: (dest) = (int)((sour) | 0xFFFF0000); break; \ default: \ /* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \ - if (GetTypeNumber(dest) != TYPE_FIXP) goto label; \ - (dest) = FIXP_VALUE(dest); \ + if (GetTypeNumber(sour) != TYPE_FIXP) goto label; \ + (dest) = FIXP_VALUE(sour); \ } \ } while (0) #define N_IGETNUMBER(sour, dest, label) \ do { \ - (dest) = (sour); /* access memory once */ \ - switch (SEGMASK & (dest)) { \ - case S_POSITIVE: (dest) &= 0xFFFF; break; \ - case S_NEGATIVE: (dest) |= (int)0xFFFF0000; break; \ + switch (SEGMASK & (sour)) { \ + case S_POSITIVE: (dest) = (int)((sour) & 0xFFFF); break; \ + case S_NEGATIVE: (dest) = (int)((sour) | 0xFFFF0000); break; \ default: \ - switch (GetTypeNumber(dest)) { \ - case TYPE_FIXP: (dest) = FIXP_VALUE(dest); break; \ + switch (GetTypeNumber(sour)) { \ + case TYPE_FIXP: (dest) = FIXP_VALUE(sour); break; \ case TYPE_FLOATP: { \ register float temp; \ - temp = FLOATP_VALUE(dest); \ + temp = FLOATP_VALUE(sour); \ /* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \ if ((temp > ((float)0x7fffffff)) || (temp < ((float)0x80000000))) goto label; \ (dest) = (int)temp; \