From ed5e504b06ca17c7a92f660c7d783016bc5ff79b Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Wed, 24 Aug 2022 14:22:24 -0700 Subject: [PATCH] Resolve ~90 cast-align warnings generated by macros in my.h --- inc/my.h | 59 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/inc/my.h b/inc/my.h index a55de8b..20bd233 100644 --- a/inc/my.h +++ b/inc/my.h @@ -17,7 +17,7 @@ /* */ /************************************************************************/ #include "version.h" // for BIGVM -#include "adr68k.h" // for Addr68k_from_LADDR, LADDR_from_68k +#include "adr68k.h" // for NativeAligned2FromLAddr, NativeAligned4FromLAddr, LAddrFromNative #include "arith.h" // for N_ARITH_SWITCH, N_GETNUMBER #include "gcdata.h" // for ADDREF, DELREF #include "lispemul.h" // for ERROR_EXIT, LispPTR, DLword, SEGMASK, state @@ -45,10 +45,10 @@ default: \ switch (GetTypeNumber(arg)) { \ case TYPE_FLOATP: \ - (dest) = *((float *)Addr68k_from_LADDR(arg)); \ + (dest) = *((float *)NativeAligned4FromLAddr(arg)); \ break; \ case TYPE_FIXP: \ - (dest) = (float)(*((int *)Addr68k_from_LADDR(arg)));\ + (dest) = (float)(*((int *)NativeAligned4FromLAddr(arg))); \ break; \ default: ERROR_EXIT(tos); \ } \ @@ -62,7 +62,7 @@ (dest) = (arg) & 0xFFFF; \ else { \ if (GetTypeNumber(arg) != TYPE_FIXP) ERROR_EXIT(tos); \ - if (((dest) = *((int *)Addr68k_from_LADDR(arg))) & 0x80000000) \ + if (((dest) = *((int *)NativeAligned4FromLAddr(arg))) & 0x80000000) \ ERROR_EXIT(tos); \ } \ } @@ -71,44 +71,45 @@ static inline LispPTR aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index) { int result; - DLword *wordp; switch (type) { case 38: /* pointer : 32 bits */ - return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index)); + return(*(((LispPTR *)NativeAligned4FromLAddr(baseL)) + index)); case 20: /* signed : 16 bits */ - result = (GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF; + result = (GETWORD(((DLword *)NativeAligned2FromLAddr(baseL)) + index)) & 0xFFFF; if (result & 0x8000) return(result | S_NEGATIVE); else return(result | S_POSITIVE); case 67: /* Character : 8 bits */ - return(S_CHARACTER | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF)); + return(S_CHARACTER | ((GETBYTE(((char *)NativeAligned2FromLAddr(baseL)) + index)) & 0xFF)); case 22: /* signed : 32 bits */ - result = *(((int *)Addr68k_from_LADDR(baseL)) + index); + result = *(((int *)NativeAligned4FromLAddr(baseL)) + index); N_ARITH_SWITCH(result); case 0: /* unsigned : 1 bit per element */ - return(S_POSITIVE | (((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + (index >> 3))) >> (7 - (index & 7))) & 1)); + return(S_POSITIVE | (((GETBYTE(((char *)NativeAligned2FromLAddr(baseL)) + (index >> 3))) >> (7 - (index & 7))) & 1)); case 3: /* unsigned : 8 bits per element */ - return(S_POSITIVE | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF)); + return(S_POSITIVE | ((GETBYTE(((char *)NativeAligned2FromLAddr(baseL)) + index)) & 0xFF)); case 4: /* unsigned : 16 bits per element */ - return(S_POSITIVE | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF)); + return(S_POSITIVE | ((GETWORD(((DLword *)NativeAligned2FromLAddr(baseL)) + index)) & 0xFFFF)); case 54: /* Float : 32 bits */ - wordp = createcell68k(TYPE_FLOATP); - *((LispPTR *)wordp) = *(((LispPTR *)Addr68k_from_LADDR(baseL)) + index); - return(LADDR_from_68k(wordp)); + { + float *cellp = (float *)createcell68k(TYPE_FLOATP); + *cellp = *(float *)(NativeAligned4FromLAddr(baseL) + index); + return (LAddrFromNative(cellp)); + } case 68: /* Character : 16 bits */ - return(S_CHARACTER | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF)); + return(S_CHARACTER | ((GETWORD(((DLword *)NativeAligned2FromLAddr(baseL)) + index)) & 0xFFFF)); case 86: /* XPointer : 32 bits */ - return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index)); + return(*(((LispPTR *)NativeAligned4FromLAddr(baseL)) + index)); default: /* Illegal or Unimplemented */ ERROR_EXIT(tos); @@ -119,60 +120,60 @@ aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index) { \ switch (type) { \ case 38: /* pointer : 32 bits */ \ - GCLOOKUP(*(((int *)Addr68k_from_LADDR(base)) + index), DELREF); \ + GCLOOKUP(*(((int *)NativeAligned4FromLAddr(base)) + index), DELREF); \ GCLOOKUP(data, ADDREF); \ - *(((int *)Addr68k_from_LADDR(base)) + index) = data; \ + *(((int *)NativeAligned4FromLAddr(base)) + index) = data; \ return(data); \ case 20: /* signed : 16 bits */ \ new = data & 0xFFFF; \ if ((((data & SEGMASK) == S_POSITIVE) && ((data & 0x8000) == 0)) ||\ (((data & SEGMASK) == S_NEGATIVE) && (data & 0x8000))) \ - GETWORD(((DLword *)Addr68k_from_LADDR(base)) + index) = new; \ + GETWORD(((DLword *)NativeAligned2FromLAddr(base)) + index) = new; \ else ERROR_EXIT(tos); \ return(data); \ case 67: /* Character : 8 bits */ \ if ((data & SEGMASK) != S_CHARACTER) ERROR_EXIT(tos); \ new = data & 0xFFFF; \ if (new > 0xFF) ERROR_EXIT(tos); \ - GETBYTE(((char *)Addr68k_from_LADDR(base)) + index) = new; \ + GETBYTE(((char *)NativeAligned2FromLAddr(base)) + index) = new; \ return(data); \ case 22: /* signed : 32 bits */ \ N_GETNUMBER(data, new, doufn); \ - *(((int *)Addr68k_from_LADDR(base)) + index) = new; \ + *(((int *)NativeAligned4FromLAddr(base)) + index) = new; \ return(data); \ case 0: /* unsigned : 1 bit per element */ \ N_GetPos(data, new, tos); \ if (new > 1) ERROR_EXIT(tos); \ if (new) { \ new = (1 << (7 - (index & 7))); \ - GETBYTE(((char *)Addr68k_from_LADDR(base)) + (index >> 3)) |= new; \ + GETBYTE(((char *)NativeAligned2FromLAddr(base)) + (index >> 3)) |= new; \ } \ else { \ new = 0xFF - (1 << (7 - (index & 7))); \ - GETBYTE(((char *)Addr68k_from_LADDR(base)) + (index >> 3)) &= new; \ + GETBYTE(((char *)NativeAligned2FromLAddr(base)) + (index >> 3)) &= new; \ } \ return(data); \ case 3: /* unsigned : 8 bits per element */ \ N_GetPos(data, new, tos); \ if (new > 0xFF) ERROR_EXIT(tos); \ - GETBYTE(((char *)Addr68k_from_LADDR(base)) + index) = new; \ + GETBYTE(((char *)NativeAligned2FromLAddr(base)) + index) = new; \ return(data); \ case 4: /* unsigned : 16 bits per element */ \ N_GetPos(data, new, tos); \ if (new > 0xFFFF) ERROR_EXIT(tos); \ - GETWORD(((DLword *)Addr68k_from_LADDR(base)) + index) = new; \ + GETWORD(((DLword *)NativeAligned2FromLAddr(base)) + index) = new; \ return(data); \ case 54: /* Float : 32 bits */ \ if (GetTypeNumber(data) != TYPE_FLOATP) ERROR_EXIT(tos); \ - *(((int *)Addr68k_from_LADDR(base)) + index) = *((int *)Addr68k_from_LADDR(data)); \ + *(((int *)NativeAligned4FromLAddr(base)) + index) = *((int *)NativeAligned4FromLAddr(data)); \ return(data); \ case 68: /* Character : 16 bits */ \ if ((data & SEGMASK) != S_CHARACTER) ERROR_EXIT(tos); \ new = data & 0xFFFF; \ - GETWORD(((DLword *)Addr68k_from_LADDR(base)) + index) = new; \ + GETWORD(((DLword *)NativeAligned2FromLAddr(base)) + index) = new; \ return(data); \ case 86: /* XPointer : 32 bits */ \ - *(((int *)Addr68k_from_LADDR(base)) + index) = data; \ + *(((int *)NativeAligned4FromLAddr(base)) + index) = data; \ return(data); \ default: /* Illegal or Unimplemented */ \ ERROR_EXIT(tos); \