1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-19 01:17:36 +00:00

Replace Addr68k related macros with NativeAligned inline functions

This commit is contained in:
Nick Briggs 2022-09-01 14:15:37 -07:00
parent a24f10a995
commit 695f559af8

View File

@ -10,7 +10,7 @@
#include "version.h"
#include "adr68k.h" // for Addr68k_from_LADDR
#include "adr68k.h" // for NativeAligned4FromLAddr
#include "arith.h" // for FIXP_VALUE
#include "car-cdrdefs.h" // for car, cdr
#include "cell.h" // for PLCell, PNCell, GetPnameCell, GetPropCell
@ -78,24 +78,24 @@ static unsigned short sxhash(LispPTR obj) {
case TYPE_PATHNAME: return (sxhash_pathname(obj));
case TYPE_ONED_ARRAY:
case TYPE_GENERAL_ARRAY:
str = (OneDArray *)Addr68k_from_LADDR(obj);
str = (OneDArray *)NativeAligned4FromLAddr(obj);
if (str->stringp) return (sxhash_string(str));
if (str->bitp) return (sxhash_bitvec(str));
return (EQHASHINGBITS(obj));
case TYPE_BIGNUM: {
LispPTR contents;
contents = ((BIGNUM *)Addr68k_from_LADDR(obj))->contents;
contents = ((BIGNUM *)NativeAligned4FromLAddr(obj))->contents;
return ((unsigned short)car(contents) + (((unsigned short)car(cdr(contents))) << 12));
}
case TYPE_COMPLEX: {
COMPLEX *object;
object = (COMPLEX *)Addr68k_from_LADDR(obj);
object = (COMPLEX *)NativeAligned4FromLAddr(obj);
return (sxhash(object->real) ^ sxhash(object->imaginary));
}
case TYPE_RATIO: {
RATIO *object;
object = (RATIO *)Addr68k_from_LADDR(obj);
object = (RATIO *)NativeAligned4FromLAddr(obj);
return (sxhash(object->numerator) ^ sxhash(object->denominator));
}
@ -119,13 +119,13 @@ static unsigned short sxhash_string(OneDArray *obj) {
case THIN_CHAR_TYPENUMBER: {
char *thin;
unsigned i;
thin = ((char *)(Addr68k_from_LADDR(obj->base))) + offset;
thin = ((char *)(NativeAligned2FromLAddr(obj->base))) + offset;
for (i = 0; i < len; i++) hash = sxhash_rotate(hash ^ GETBYTE(thin++));
} break;
case FAT_CHAR_TYPENUMBER: {
unsigned short *fat;
unsigned i;
fat = ((unsigned short *)(Addr68k_from_LADDR(obj->base))) + offset;
fat = ((unsigned short *)(NativeAligned2FromLAddr(obj->base))) + offset;
for (i = 0; i < len; i++) hash = sxhash_rotate(hash ^ GETWORD(fat++));
} break;
default: error("SXHASH of a string not made of chars!\n");
@ -139,7 +139,7 @@ static unsigned short sxhash_bitvec(OneDArray *obj) {
unsigned short hash = 0;
len = (unsigned)obj->fillpointer;
offset = (unsigned)obj->offset;
base = ((unsigned short *)(Addr68k_from_LADDR(obj->base))) + (offset >> 4);
base = ((unsigned short *)(NativeAligned2FromLAddr(obj->base))) + (offset >> 4);
if (offset == 0) {
hash = (*base);
if (len < 16) hash = hash >> (16 - len);
@ -165,7 +165,7 @@ static unsigned short sxhash_list(LispPTR obj) {
static unsigned short sxhash_pathname(LispPTR obj) {
unsigned short hash = 0;
PATHNAME *path;
path = (PATHNAME *)(Addr68k_from_LADDR(obj));
path = (PATHNAME *)(NativeAligned4FromLAddr(obj));
hash = sxhash_rotate(sxhash(path->host) ^ sxhash(path->device));
hash = sxhash_rotate(hash ^ sxhash(path->type));
hash = sxhash_rotate(hash ^ sxhash(path->version));
@ -202,7 +202,7 @@ static unsigned short stringequalhash(LispPTR obj) {
case TYPE_LITATOM:
ind = ((int)obj) & POINTERMASK;
pnptr = (PNCell *)GetPnameCell(ind);
base = (DLword *)Addr68k_from_LADDR(pnptr->pnamebase);
base = (DLword *)NativeAligned2FromLAddr(pnptr->pnamebase);
Prop = (PLCell *)GetPropCell(ind);
fatp = Prop->fatpnamep;
offset = 1;
@ -210,10 +210,10 @@ static unsigned short stringequalhash(LispPTR obj) {
break;
case TYPE_ONED_ARRAY:
case TYPE_GENERAL_ARRAY:
str = (OneDArray *)Addr68k_from_LADDR(obj);
str = (OneDArray *)NativeAligned4FromLAddr(obj);
if (str->stringp) {
fatp = (str->typenumber) == FAT_CHAR_TYPENUMBER;
base = Addr68k_from_LADDR(str->base);
base = NativeAligned2FromLAddr(str->base);
offset = str->offset;
len = str->fillpointer;
} else
@ -270,7 +270,7 @@ static unsigned short stringhash(LispPTR obj) {
case TYPE_LITATOM:
ind = ((int)obj) & POINTERMASK;
pnptr = (PNCell *)GetPnameCell(ind);
base = (DLword *)Addr68k_from_LADDR(pnptr->pnamebase);
base = (DLword *)NativeAligned2FromLAddr(pnptr->pnamebase);
Prop = (PLCell *)GetPropCell(ind);
fatp = Prop->fatpnamep;
offset = 1;
@ -278,10 +278,10 @@ static unsigned short stringhash(LispPTR obj) {
break;
case TYPE_ONED_ARRAY:
case TYPE_GENERAL_ARRAY:
str = (OneDArray *)Addr68k_from_LADDR(obj);
str = (OneDArray *)NativeAligned4FromLAddr(obj);
if (str->stringp) {
fatp = (str->typenumber) == FAT_CHAR_TYPENUMBER;
base = Addr68k_from_LADDR(str->base);
base = NativeAligned2FromLAddr(str->base);
offset = str->offset;
len = str->fillpointer;
} else