1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-13 23:27:12 +00:00
Interlisp.maiko/inc/inln68k.h
Bruce Mitchener b09663b3e9
Inline swapx and byte_swap_word. (#323)
This lets us remove `SWAP_WORDS` and some bits of assembly.
2021-01-29 23:18:09 -08:00

156 lines
3.5 KiB
C
Executable File

/* $Id: inln68k.h,v 1.2 1999/01/03 02:06:03 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/************************************************************************/
/* */
/* Copyright 1989, 1990 Venue, Fuji Xerox Co., Ltd, Xerox Corp. */
/* */
/* This file is work-product resulting from the Xerox/Venue */
/* Agreement dated 18-August-1989 for support of Medley. */
/* */
/************************************************************************/
/* inlinedefs68K.h */
/* Bob Krivacic 2/23/88 */
/* These are the Macros used to generate inline 68K assembly code
to implement the opcodes. Used by both dispatch
loop and native code.
*/
#undef DIFFERENCE
#undef PLUS2
#undef GREATERP
#undef IDIFFERENCE
#undef IPLUS2
#undef IGREATERP
#undef LOGOR
#undef LOGAND
#undef LOGXOR
#undef LRSH8
#undef LRSH1
#undef LLSH8
#undef LLSH1
#undef N_OP_ADDBASE
#undef N_OP_LOLOC
#undef N_OP_HILOC
#undef N_OP_VAG2
#undef LISTP
#undef NTYPEX
#undef TYPEP
#define DIFFERENCE { \
TOPOFSTACK = op_difference(POP_TOS_1, TOPOFSTACK); \
nextop1; \
diff_err: \
asm("diff_err:"); \
N_OP_POPPED_CALL_2(N_OP_difference, GET_POPPED); \
}
#define PLUS2 { \
TOPOFSTACK = op_plus(POP_TOS_1, TOPOFSTACK); \
nextop1; \
plus_err: \
asm("plus_err:"); \
N_OP_POPPED_CALL_2(N_OP_plus2, GET_POPPED); \
}
#define GREATERP { \
TOPOFSTACK = op_greaterp(POP_TOS_1, TOPOFSTACK); \
nextop1; \
greaterp_err: \
asm("greaterp_err:"); \
N_OP_POPPED_CALL_2(N_OP_greaterp, GET_POPPED); \
}
#define IDIFFERENCE { \
TOPOFSTACK = op_difference(POP_TOS_1, TOPOFSTACK); \
}
#define IPLUS2 { \
TOPOFSTACK = op_plus(POP_TOS_1, TOPOFSTACK); \
nextop1; \
}
#define IGREATERP { \
TOPOFSTACK = op_greaterp(POP_TOS_1, TOPOFSTACK); \
nextop1; \
}
#define LOGOR { \
TOPOFSTACK = op_logor(POP_TOS_1, TOPOFSTACK); \
nextop1; \
logor_err: \
asm("logor_err:"); \
N_OP_POPPED_CALL_2(N_OP_logor, GET_POPPED); \
}
#define LOGAND { \
TOPOFSTACK = op_logand(POP_TOS_1, TOPOFSTACK); \
nextop1; \
logand_err: \
asm("logand_err:"); \
N_OP_POPPED_CALL_2(N_OP_logand, GET_POPPED); \
}
#define LOGXOR { \
TOPOFSTACK = op_logxor(POP_TOS_1, TOPOFSTACK); \
nextop1; \
logxor_err: \
asm("logxor_err:"); \
N_OP_POPPED_CALL_2(N_OP_logxor, GET_POPPED); \
}
#define LRSH8 { \
TOPOFSTACK = op_lrsh8(TOPOFSTACK); \
nextop1; \
lrsh8_err: \
asm("lrsh8_err:"); \
N_OP_CALL_1(N_OP_lrsh8); \
}
#define LRSH1 { \
TOPOFSTACK = op_lrsh1(TOPOFSTACK); \
nextop1; \
lrsh1_err: \
asm("lrsh1_err:"); \
N_OP_CALL_1(N_OP_lrsh1); \
}
#define LLSH8 { \
TOPOFSTACK = op_llsh8(TOPOFSTACK); \
nextop1; \
llsh8_err: \
asm("llsh8_err:"); \
N_OP_CALL_1(N_OP_llsh8); \
}
#define LLSH1 { \
TOPOFSTACK = op_llsh1(TOPOFSTACK); \
nextop1; \
llsh1_err: \
asm("llsh1_err:"); \
N_OP_CALL_1(N_OP_llsh1); \
}
#define N_OP_ADDBASE { \
TOPOFSTACK = addbase(POP_TOS_1, TOPOFSTACK); \
nextop1; \
}
#define N_OP_LOLOC { TOPOFSTACK = loloc(TOPOFSTACK); nextop1; }
#define N_OP_HILOC { TOPOFSTACK = hiloc(TOPOFSTACK); nextop1; }
#define N_OP_VAG2 { TOPOFSTACK = vag2(POP_TOS_1, TOPOFSTACK); nextop1; }
#define LISTP { TOPOFSTACK = listp(TOPOFSTACK); nextop1;}
#define NTYPEX { TOPOFSTACK = ntypex(TOPOFSTACK); nextop1; }
#define TYPEP(n) { TOPOFSTACK = typep(TOPOFSTACK, Get_BYTE(PCMAC+1)); nextop2; }