version 1.6, 2002/08/07 10:11:18
|
version 1.7, 2002/08/07 11:06:49
|
Line 21
|
Line 21
|
|
|
#include <stdio.h> |
#include <stdio.h> |
|
|
|
typedef long Cell; |
#ifdef __GNUC__ |
#ifdef __GNUC__ |
typedef void *Label; |
typedef void *Label; |
typedef void *Inst; /* for direct threading, the same as Label */ |
typedef Label Inst; /* we could "typedef Cell Inst", removing the need |
|
for casts in a few places, but requiring a few |
|
casts etc. in other places */ |
#else |
#else |
typedef long Label; |
typedef long Label; |
typedef long Inst; |
typedef long Inst; |
#endif |
#endif |
typedef long Cell; |
|
|
|
extern Inst *vm_prim; |
extern Inst *vm_prim; |
extern int locals; |
extern int locals; |
Line 60 void vm_print_profile(FILE *file);
|
Line 62 void vm_print_profile(FILE *file);
|
#define vm_target2Cell(x,_cell) ((_cell)=(Cell)(x)) |
#define vm_target2Cell(x,_cell) ((_cell)=(Cell)(x)) |
#define vm_a2Cell(x,_cell) ((_cell)=(Cell)(x)) |
#define vm_a2Cell(x,_cell) ((_cell)=(Cell)(x)) |
#define vm_Cell2Cell(_x,_y) ((_y)=(Cell)(_x)) |
#define vm_Cell2Cell(_x,_y) ((_y)=(Cell)(_x)) |
|
/* the cast in vm_Cell2Cell is needed because the base type for |
|
inst-stream is Cell, but *IP is an Inst */ |
|
|
#define VM_IS_INST(inst, n) ((inst) == vm_prim[n]) |
#define VM_IS_INST(inst, n) ((inst) == vm_prim[n]) |
|
|