mirror of
https://github.com/Interlisp/maiko.git
synced 2026-04-17 08:10:55 +00:00
Use correct type for FIXP (and pointer to it), and reformat for readability in my.h
This commit is contained in:
64
inc/my.h
64
inc/my.h
@@ -76,40 +76,50 @@
|
|||||||
|
|
||||||
static inline LispPTR
|
static inline LispPTR
|
||||||
aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index)
|
aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index)
|
||||||
{
|
{
|
||||||
LispPTR result;
|
int result;
|
||||||
DLword *wordp;
|
DLword *wordp;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case 38: /* pointer : 32 bits */
|
case 38: /* pointer : 32 bits */
|
||||||
return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index));
|
return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index));
|
||||||
case 20: /* signed : 16 bits */
|
|
||||||
|
case 20: /* signed : 16 bits */
|
||||||
result = (GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF;
|
result = (GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF;
|
||||||
if (result & 0x8000) return(result | S_NEGATIVE);
|
if (result & 0x8000) return(result | S_NEGATIVE);
|
||||||
else return(result | S_POSITIVE);
|
else return(result | S_POSITIVE);
|
||||||
case 67: /* Character : 8 bits */
|
|
||||||
return(S_CHARACTER | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF));
|
case 67: /* Character : 8 bits */
|
||||||
case 22: /* signed : 32 bits */
|
return(S_CHARACTER | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF));
|
||||||
result = *(((LispPTR *)Addr68k_from_LADDR(baseL)) + index);
|
|
||||||
N_ARITH_SWITCH(result);
|
case 22: /* signed : 32 bits */
|
||||||
case 0: /* unsigned : 1 bit per element */
|
result = *(((int *)Addr68k_from_LADDR(baseL)) + index);
|
||||||
return(S_POSITIVE | (((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + (index >> 3))) >> (7 - (index & 7))) & 1));
|
N_ARITH_SWITCH(result);
|
||||||
case 3: /* unsigned : 8 bits per element */
|
|
||||||
return(S_POSITIVE | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF));
|
case 0: /* unsigned : 1 bit per element */
|
||||||
case 4: /* unsigned : 16 bits per element */
|
return(S_POSITIVE | (((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + (index >> 3))) >> (7 - (index & 7))) & 1));
|
||||||
return(S_POSITIVE | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF));
|
|
||||||
case 54: /* Float : 32 bits */
|
case 3: /* unsigned : 8 bits per element */
|
||||||
wordp = createcell68k(TYPE_FLOATP);
|
return(S_POSITIVE | ((GETBYTE(((char *)Addr68k_from_LADDR(baseL)) + index)) & 0xFF));
|
||||||
*((LispPTR *)wordp) = *(((LispPTR *)Addr68k_from_LADDR(baseL)) + index);
|
|
||||||
return(LADDR_from_68k(wordp));
|
case 4: /* unsigned : 16 bits per element */
|
||||||
case 68: /* Character : 16 bits */
|
return(S_POSITIVE | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF));
|
||||||
return(S_CHARACTER | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF));
|
|
||||||
case 86: /* XPointer : 32 bits */
|
case 54: /* Float : 32 bits */
|
||||||
return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index));
|
wordp = createcell68k(TYPE_FLOATP);
|
||||||
default: /* Illegal or Unimplemented */
|
*((LispPTR *)wordp) = *(((LispPTR *)Addr68k_from_LADDR(baseL)) + index);
|
||||||
ERROR_EXIT(tos);
|
return(LADDR_from_68k(wordp));
|
||||||
}/* end switch typenumber */
|
|
||||||
|
case 68: /* Character : 16 bits */
|
||||||
|
return(S_CHARACTER | ((GETWORD(((DLword *)Addr68k_from_LADDR(baseL)) + index)) & 0xFFFF));
|
||||||
|
|
||||||
|
case 86: /* XPointer : 32 bits */
|
||||||
|
return(*(((LispPTR *)Addr68k_from_LADDR(baseL)) + index));
|
||||||
|
|
||||||
|
default: /* Illegal or Unimplemented */
|
||||||
|
ERROR_EXIT(tos);
|
||||||
|
}/* end switch typenumber */
|
||||||
}
|
}
|
||||||
|
|
||||||
#define aset_switch(type, tos) \
|
#define aset_switch(type, tos) \
|
||||||
|
|||||||
Reference in New Issue
Block a user