00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __EMULOOP_AUX_H__
00027 #define __EMULOOP_AUX_H__
00028
00029
00030
00031
00032
00033
00034
00035 #ifdef SLG_GC
00036 #define SUBTRYME \
00037 { \
00038 CPtr cps_top; \
00039 CPtr old_top; \
00040 \
00041 save_find_locx(ereg); \
00042 check_tcpstack_overflow; \
00043 old_top = cps_top = top_of_cpstack; \
00044 save_registers(cps_top, (Cell)op1, rreg); \
00045 save_choicepoint(cps_top, ereg, (byte *)op2, breg); \
00046 cp_prevtop(cps_top) = old_top; \
00047 breg = cps_top; \
00048 hbreg = hreg; \
00049 \
00050 }
00051 #else
00052 #define SUBTRYME \
00053 { \
00054 CPtr cps_top; \
00055 \
00056 save_find_locx(ereg); \
00057 check_tcpstack_overflow; \
00058 cps_top = top_of_cpstack; \
00059 save_registers(cps_top, (Cell)op1, rreg); \
00060 save_choicepoint(cps_top, ereg, (byte *)op2, breg); \
00061 breg = cps_top; \
00062 hbreg = hreg; \
00063 \
00064 }
00065 #endif
00066
00067
00068 #if defined(PROFILE) && !defined(MULTI_THREAD)
00069 #define RESTORE_SUB \
00070 { \
00071 CPtr tbreg; \
00072 \
00073 tbreg = breg; \
00074 \
00075 undo_bindings(tbreg); \
00076 ptcpreg = cp_ptcp(tbreg); \
00077 delayreg = cp_pdreg(tbreg); \
00078 restore_some_wamregs(tbreg, ereg); \
00079 restore_registers(tbreg, (int)op1, rreg); \
00080 if (restore_type == 1) { \
00081 if (breg > bfreg) { \
00082 trapped_prolog_cps = trapped_prolog_cps \
00083 + sizeof(struct choice_point) \
00084 + ((int)op1 * sizeof(CPtr));} \
00085 breg = cp_prevbreg(breg); \
00086 restore_trail_condition_registers(breg); \
00087 } \
00088 XSB_Next_Instr(); \
00089 }
00090 #else
00091 #define RESTORE_SUB \
00092 { \
00093 CPtr tbreg; \
00094 \
00095 tbreg = breg; \
00096 \
00097 undo_bindings(tbreg); \
00098 ptcpreg = cp_ptcp(tbreg); \
00099 delayreg = cp_pdreg(tbreg); \
00100 restore_some_wamregs(tbreg, ereg); \
00101 restore_registers(tbreg, (int)op1, rreg); \
00102 if (restore_type == 1) { \
00103 breg = cp_prevbreg(breg); \
00104 restore_trail_condition_registers(breg); \
00105 } \
00106 XSB_Next_Instr(); \
00107 }
00108 #endif
00109
00110
00111 #define TABLE_RESTORE_SUB { \
00112 CPtr tbreg; \
00113 CPtr xtemp1; \
00114 \
00115 tbreg = breg; \
00116 switch_envs(tbreg); \
00117 \
00118 ptcpreg = tcp_subgoal_ptr(tbreg); \
00119 delayreg = NULL; \
00120 restore_some_wamregs(tbreg, ereg); \
00121 table_restore_registers(tbreg, (int)op1, rreg); \
00122 if (restore_type == 1) { \
00123 xtemp1 = tcp_prevbreg(breg); \
00124 restore_trail_condition_registers(xtemp1); \
00125 } \
00126 XSB_Next_Instr(); \
00127 }
00128
00129 #endif