43 |
echo '#endif' |
echo '#endif' |
44 |
echo '' |
echo '' |
45 |
|
|
46 |
|
# Allow specific platforms to override Computed GOTO realizations |
47 |
|
echo '#ifndef VM_CGOTO_SWITCH' |
48 |
|
echo '#define VM_CGOTO_SWITCH(val) goto **(void**)pc;' |
49 |
|
echo '#endif' |
50 |
|
echo '#ifndef VM_CGOTO_PREFIXSWITCH' |
51 |
|
echo '#define VM_CGOTO_PREFIXSWITCH(val) goto **(void**)pc;' |
52 |
|
echo '#endif' |
53 |
|
echo '#ifndef VM_CGOTO_BREAK' |
54 |
|
echo '#define VM_CGOTO_BREAK(val) goto **(void**)pc;' |
55 |
|
echo '#endif' |
56 |
|
echo '#ifndef VM_CGOTO_BREAKNOEND' |
57 |
|
echo '#define VM_CGOTO_BREAKNOEND(val) goto **(void**)pc;' |
58 |
|
echo '#endif' |
59 |
|
|
60 |
# Are we compiling an interpreter that uses PIC computed goto's? |
# Are we compiling an interpreter that uses PIC computed goto's? |
61 |
echo '#if defined(IL_CVM_PIC_TOKEN) || defined(IL_CVM_PIC_DIRECT)' |
echo '#if defined(IL_CVM_PIC_TOKEN) || defined(IL_CVM_PIC_DIRECT)' |
62 |
echo '' |
echo '' |
141 |
|
|
142 |
# Output the helper macros (PIC). |
# Output the helper macros (PIC). |
143 |
echo '#ifdef IL_CVM_DIRECT' |
echo '#ifdef IL_CVM_DIRECT' |
144 |
echo '#define VMSWITCH(val) goto **((void **)pc);' |
echo '#define VMSWITCH(val) VM_CGOTO_SWITCH(val);' |
145 |
echo '#define VMPREFIXSWITCH(val) goto **((void **)pc);' |
echo '#define VMPREFIXSWITCH(val) VM_CGOTO_PREFIXSWITCH(val);' |
146 |
echo '#define VMCASE(val) val##_label' |
echo '#define VMCASE(val) val##_label' |
147 |
echo '#define VMDEFAULT _DEFAULT_MAIN_label' |
echo '#define VMDEFAULT _DEFAULT_MAIN_label' |
148 |
echo '#define VMPREFIXDEFAULT _DEFAULT_PREFIX_label' |
echo '#define VMPREFIXDEFAULT _DEFAULT_PREFIX_label' |
149 |
echo '#define VMBREAK(val) \ |
echo '#define VMBREAK(val) \ |
150 |
CVM_DUMP(); \ |
CVM_DUMP(); \ |
151 |
goto **((void **)pc)' |
VM_CGOTO_BREAK(val)' |
152 |
echo '#define VMBREAKNOEND \ |
echo '#define VMBREAKNOEND \ |
153 |
CVM_DUMP(); \ |
CVM_DUMP(); \ |
154 |
goto **((void **)pc)' |
VM_CGOTO_BREAKNOEND(val)' |
155 |
echo '#define VMOUTERBREAK' |
echo '#define VMOUTERBREAK' |
156 |
echo '#else /* !IL_CVM_DIRECT */' |
echo '#else /* !IL_CVM_DIRECT */' |
157 |
echo '#define VMSWITCH(val) goto *(&&COP_NOP_label + main_label_table[(val)]);' |
echo '#define VMSWITCH(val) goto *(&&COP_NOP_label + main_label_table[(val)]);' |
253 |
|
|
254 |
# Output the helper macros (non-PIC). |
# Output the helper macros (non-PIC). |
255 |
echo '#ifdef IL_CVM_DIRECT' |
echo '#ifdef IL_CVM_DIRECT' |
256 |
echo '#define VMSWITCH(val) goto **((void **)pc);' |
echo '#define VMSWITCH(val) VM_CGOTO_SWITCH(val);' |
257 |
echo '#define VMPREFIXSWITCH(val) goto **((void **)pc);' |
echo '#define VMPREFIXSWITCH(val) VM_CGOTO_PREFIXSWITCH(val);' |
258 |
echo '#define VMCASE(val) val##_label' |
echo '#define VMCASE(val) val##_label' |
259 |
echo '#define VMDEFAULT _DEFAULT_MAIN_label' |
echo '#define VMDEFAULT _DEFAULT_MAIN_label' |
260 |
echo '#define VMPREFIXDEFAULT _DEFAULT_PREFIX_label' |
echo '#define VMPREFIXDEFAULT _DEFAULT_PREFIX_label' |
261 |
echo '#define VMBREAK(val) \ |
echo '#define VMBREAK(val) \ |
262 |
CVM_DUMP(); \ |
CVM_DUMP(); \ |
263 |
goto **((void **)pc)' |
VM_CGOTO_BREAK(val)' |
264 |
echo '#define VMBREAKNOEND \ |
echo '#define VMBREAKNOEND \ |
265 |
CVM_DUMP(); \ |
CVM_DUMP(); \ |
266 |
goto **((void **)pc)' |
VM_CGOTO_BREAKNOEND(val)' |
267 |
echo '#define VMOUTERBREAK' |
echo '#define VMOUTERBREAK' |
268 |
echo '#else /* !IL_CVM_DIRECT */' |
echo '#else /* !IL_CVM_DIRECT */' |
269 |
echo '#define VMSWITCH(val) goto *main_label_table[(val)];' |
echo '#define VMSWITCH(val) goto *main_label_table[(val)];' |