version 1.98, 2007/03/17 19:14:57
|
version 1.100, 2007/03/19 12:54:41
|
Line 275 extern int gforth_memcmp(const char * s1
|
Line 275 extern int gforth_memcmp(const char * s1
|
#define VARIANT(v) (v) |
#define VARIANT(v) (v) |
#define JUMP(target) goto I_noop |
#define JUMP(target) goto I_noop |
#define LABEL(name) H_##name: asm(""); I_##name: |
#define LABEL(name) H_##name: asm(""); I_##name: |
|
#define LABEL3(name) J_##name: asm(""); |
|
|
#elif ENGINE==2 |
#elif ENGINE==2 |
/* variant with padding between VM instructions for finding out |
/* variant with padding between VM instructions for finding out |
Line 283 extern int gforth_memcmp(const char * s1
|
Line 284 extern int gforth_memcmp(const char * s1
|
#define VARIANT(v) (v) |
#define VARIANT(v) (v) |
#define JUMP(target) goto I_noop |
#define JUMP(target) goto I_noop |
#define LABEL(name) H_##name: SKIP16; I_##name: |
#define LABEL(name) H_##name: SKIP16; I_##name: |
|
/* the SKIP16 after LABEL3 is there, because the ARM gcc may place |
|
some constants after the final branch, and may refer to them from |
|
the code before label3. Since we don't copy the constants, we have |
|
to make sure that such code is recognized as non-relocatable. */ |
|
#define LABEL3(name) J_##name: SKIP16; |
|
|
#elif ENGINE==3 |
#elif ENGINE==3 |
/* variant with different immediate arguments for finding out |
/* variant with different immediate arguments for finding out |
Line 291 extern int gforth_memcmp(const char * s1
|
Line 297 extern int gforth_memcmp(const char * s1
|
#define VARIANT(v) ((v)^0xffffffff) |
#define VARIANT(v) ((v)^0xffffffff) |
#define JUMP(target) goto K_lit |
#define JUMP(target) goto K_lit |
#define LABEL(name) H_##name: asm(""); I_##name: |
#define LABEL(name) H_##name: asm(""); I_##name: |
|
#define LABEL3(name) J_##name: asm(""); |
#else |
#else |
#error illegal ENGINE value |
#error illegal ENGINE value |
#endif /* ENGINE */ |
#endif /* ENGINE */ |
|
|
/* the asm(""); is there to get a stop compiled on Itanium */ |
/* the asm(""); is there to get a stop compiled on Itanium */ |
#define LABEL2(name) K_##name: asm(""); |
#define LABEL2(name) K_##name: asm(""); |
#define LABEL3(name) J_##name: asm(""); |
|
|
|
Label *gforth_engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0) |
Label *gforth_engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0) |
/* executes code at ip, if ip!=NULL |
/* executes code at ip, if ip!=NULL |
Line 368 Label *gforth_engine(Xt *ip0, Cell *sp0,
|
Line 374 Label *gforth_engine(Xt *ip0, Cell *sp0,
|
#include PRIM_LAB_I |
#include PRIM_LAB_I |
#undef INST_ADDR |
#undef INST_ADDR |
}; |
}; |
#ifdef INCLUDE_IMAGE |
#ifdef STANDALONE |
#define INST_ADDR(name) ((Label)&&I_##name) |
#define INST_ADDR(name) ((Label)&&I_##name) |
#include "image.i" |
#include "image.i" |
#undef INST_ADDR |
#undef INST_ADDR |
Line 404 Label *gforth_engine(Xt *ip0, Cell *sp0,
|
Line 410 Label *gforth_engine(Xt *ip0, Cell *sp0,
|
xts[i] = symbols[i] = &routines[i]; |
xts[i] = symbols[i] = &routines[i]; |
} |
} |
#endif /* defined(DOUBLY_INDIRECT) */ |
#endif /* defined(DOUBLY_INDIRECT) */ |
|
#ifdef STANDALONE |
|
return image; |
|
#else |
return symbols; |
return symbols; |
|
#endif |
} |
} |
|
|
#if !(defined(GFORTH_DEBUGGING) || defined(INDIRECT_THREADED) || defined(DOUBLY_INDIRECT) || defined(VM_PROFILING)) |
#if !(defined(GFORTH_DEBUGGING) || defined(INDIRECT_THREADED) || defined(DOUBLY_INDIRECT) || defined(VM_PROFILING)) |