mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-20 17:47:48 +00:00
201 lines
4.2 KiB
C
Executable File
201 lines
4.2 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. */
|
|
/* */
|
|
/************************************************************************/
|
|
|
|
|
|
/* These are the Macros Used to generate inline 68K assembly code.
|
|
The call inline code which really CHEATS!
|
|
BEWARE the inline code makes many register assumptions!
|
|
Such as:
|
|
D7 = TOPOFSTACK
|
|
D5 = 15
|
|
A3 = CSTKPTR
|
|
*/
|
|
|
|
#undef DIFFERENCE
|
|
#define DIFFERENCE { \
|
|
fast_op_difference(POP_TOS_1); \
|
|
nextop1; \
|
|
diff_err: \
|
|
asm("diff_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_difference, GET_POPPED); \
|
|
}
|
|
|
|
#undef IDIFFERENCE
|
|
#define IDIFFERENCE { \
|
|
fast_op_idifference(POP_TOS_1); \
|
|
nextop1; \
|
|
idiff_err: \
|
|
asm("idiff_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_idifference, GET_POPPED); \
|
|
}
|
|
|
|
#undef IDIFFERENCE_N
|
|
#define IDIFFERENCE_N(n) { \
|
|
fast_op_idifferencen(n); \
|
|
nextop2; \
|
|
idiffn_err: \
|
|
asm("idiffn_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_CALL_1d(N_OP_idifferencen, n); \
|
|
}
|
|
|
|
|
|
|
|
#undef PLUS2
|
|
#define PLUS2 { \
|
|
fast_op_plus(POP_TOS_1); \
|
|
nextop1; \
|
|
plus_err: \
|
|
asm("plus_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_plus2, GET_POPPED); \
|
|
}
|
|
|
|
#undef IPLUS2
|
|
#define IPLUS2 { \
|
|
fast_op_iplus(POP_TOS_1); \
|
|
nextop1; \
|
|
iplus_err: \
|
|
asm("iplus_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_iplus2, GET_POPPED); \
|
|
}
|
|
|
|
#undef IPLUS_N
|
|
#define IPLUS_N(n) { \
|
|
fast_op_iplusn(n); \
|
|
nextop2; \
|
|
iplusn_err: \
|
|
asm("iplusn_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_CALL_1d(N_OP_iplusn, n); \
|
|
}
|
|
|
|
|
|
|
|
#undef GREATERP
|
|
#define GREATERP { \
|
|
fast_op_greaterp(POP_TOS_1); \
|
|
nextop1; \
|
|
greaterp_err: \
|
|
asm("greaterp_err:"); \
|
|
N_OP_POPPED_CALL_2(N_OP_greaterp, GET_POPPED); \
|
|
}
|
|
|
|
#undef IGREATERP
|
|
#define IGREATERP { \
|
|
fast_op_igreaterp(POP_TOS_1); \
|
|
nextop1; \
|
|
igreaterp_err: \
|
|
asm("igreaterp_err:"); \
|
|
N_OP_POPPED_CALL_2(N_OP_igreaterp, GET_POPPED); \
|
|
}
|
|
|
|
|
|
#undef LRSH8
|
|
#define LRSH8 { \
|
|
fast_op_lrsh8(); \
|
|
nextop1; \
|
|
lrsh8_err: \
|
|
asm("lrsh8_err:"); \
|
|
N_OP_CALL_1(N_OP_lrsh8); \
|
|
}
|
|
|
|
#undef LRSH1
|
|
#define LRSH1 { \
|
|
fast_op_lrsh1(); \
|
|
nextop1; \
|
|
lrsh1_err: \
|
|
asm("lrsh1_err:"); \
|
|
N_OP_CALL_1(N_OP_lrsh1); \
|
|
}
|
|
|
|
#undef LLSH8
|
|
#define LLSH8 { \
|
|
fast_op_llsh8(); \
|
|
nextop1; \
|
|
llsh8_err: \
|
|
asm("llsh8_err:"); \
|
|
N_OP_CALL_1(N_OP_llsh8); \
|
|
}
|
|
|
|
#undef LLSH1
|
|
#define LLSH1 { \
|
|
fast_op_llsh1(); \
|
|
nextop1; \
|
|
llsh1_err: \
|
|
asm("llsh1_err:"); \
|
|
N_OP_CALL_1(N_OP_llsh1); \
|
|
}
|
|
|
|
|
|
#undef LOGOR
|
|
#define LOGOR { \
|
|
fast_op_logor(POP_TOS_1); \
|
|
nextop1; \
|
|
logor_err: \
|
|
asm("logor_err:"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_logor, GET_POPPED); \
|
|
}
|
|
|
|
#undef LOGAND
|
|
#define LOGAND { \
|
|
fast_op_logand(POP_TOS_1); \
|
|
nextop1; \
|
|
logand_err: \
|
|
asm("logand_err:"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_logand, GET_POPPED); \
|
|
}
|
|
|
|
#undef LOGXOR
|
|
#define LOGXOR { \
|
|
fast_op_logxor(POP_TOS_1); \
|
|
nextop1; \
|
|
logxor_err: \
|
|
asm("logxor_err:"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_logxor, GET_POPPED); \
|
|
}
|
|
|
|
#undef N_OP_ADDBASE
|
|
#define N_OP_ADDBASE { \
|
|
fast_op_addbase(POP_TOS_1); \
|
|
nextop1; \
|
|
addbase_err: \
|
|
asm("addbase_err:"); \
|
|
asm("addqb #7,d7"); \
|
|
asm("rorl d5,d7"); \
|
|
N_OP_POPPED_CALL_2(N_OP_addbase, GET_POPPED); \
|
|
}
|
|
|
|
|
|
#undef N_OP_LOLOC
|
|
#define N_OP_LOLOC { fast_op_loloc(); nextop1; }
|
|
#undef N_OP_HILOC
|
|
#define N_OP_HILOC { fast_op_hiloc(); nextop1; }
|
|
#undef N_OP_VAG2
|
|
#define N_OP_VAG2 { fast_op_vag2(POP_TOS_1); nextop1; }
|
|
|
|
|
|
|
|
|