mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-13 15:18:14 +00:00
Types work out better and better code if not trying to over-optimize memory accesses in arith.h
This commit is contained in:
parent
543f7985a2
commit
9e2b3eb882
24
inc/arith.h
24
inc/arith.h
@ -38,29 +38,27 @@
|
|||||||
|
|
||||||
#define N_GETNUMBER(sour, dest, label) \
|
#define N_GETNUMBER(sour, dest, label) \
|
||||||
do { \
|
do { \
|
||||||
(dest) = (sour); /* access memory once */ \
|
switch (SEGMASK & (sour)) { \
|
||||||
switch (SEGMASK & (dest)) { \
|
case S_POSITIVE: (dest) = (int)((sour) & 0xFFFF); break; \
|
||||||
case S_POSITIVE: (dest) &= 0xFFFF; break; \
|
case S_NEGATIVE: (dest) = (int)((sour) | 0xFFFF0000); break; \
|
||||||
case S_NEGATIVE: (dest) |= (int)0xFFFF0000; break; \
|
|
||||||
default: \
|
default: \
|
||||||
/* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
|
/* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
|
||||||
if (GetTypeNumber(dest) != TYPE_FIXP) goto label; \
|
if (GetTypeNumber(sour) != TYPE_FIXP) goto label; \
|
||||||
(dest) = FIXP_VALUE(dest); \
|
(dest) = FIXP_VALUE(sour); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define N_IGETNUMBER(sour, dest, label) \
|
#define N_IGETNUMBER(sour, dest, label) \
|
||||||
do { \
|
do { \
|
||||||
(dest) = (sour); /* access memory once */ \
|
switch (SEGMASK & (sour)) { \
|
||||||
switch (SEGMASK & (dest)) { \
|
case S_POSITIVE: (dest) = (int)((sour) & 0xFFFF); break; \
|
||||||
case S_POSITIVE: (dest) &= 0xFFFF; break; \
|
case S_NEGATIVE: (dest) = (int)((sour) | 0xFFFF0000); break; \
|
||||||
case S_NEGATIVE: (dest) |= (int)0xFFFF0000; break; \
|
|
||||||
default: \
|
default: \
|
||||||
switch (GetTypeNumber(dest)) { \
|
switch (GetTypeNumber(sour)) { \
|
||||||
case TYPE_FIXP: (dest) = FIXP_VALUE(dest); break; \
|
case TYPE_FIXP: (dest) = FIXP_VALUE(sour); break; \
|
||||||
case TYPE_FLOATP: { \
|
case TYPE_FLOATP: { \
|
||||||
register float temp; \
|
register float temp; \
|
||||||
temp = FLOATP_VALUE(dest); \
|
temp = FLOATP_VALUE(sour); \
|
||||||
/* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
|
/* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
|
||||||
if ((temp > ((float)0x7fffffff)) || (temp < ((float)0x80000000))) goto label; \
|
if ((temp > ((float)0x7fffffff)) || (temp < ((float)0x80000000))) goto label; \
|
||||||
(dest) = (int)temp; \
|
(dest) = (int)temp; \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user