fix misplaced flag

The misplacement of `SCHEME_PRIM_SOMETIMES_INLINED` caused the
optimizer to produce different results when the JIT is statically
disabled, for example.
This commit is contained in:
Matthew Flatt 2015-09-15 11:33:43 -06:00
parent 166d6fd8a3
commit 0e35b5cfad
2 changed files with 2 additions and 6 deletions

View File

@ -762,17 +762,12 @@ typedef struct Scheme_Offset_Cptr
#define SCHEME_PRIM_STRUCT_TYPE_BROKEN_INDEXED_SETTER (32 | 128)
#define SCHEME_PRIM_TYPE_PARAMETER 64
#define SCHEME_PRIM_TYPE_STRUCT_PROP_GETTER (64 | 128)
#define SCHEME_PRIM_SOMETIMES_INLINED (64 | 256)
#define SCHEME_PRIM_STRUCT_TYPE_STRUCT_PROP_PRED (64 | 128 | 256)
#define SCHEME_PRIM_STRUCT_TYPE_INDEXED_GETTER 32
#define SCHEME_PRIM_STRUCT_TYPE_PRED (32 | 64)
#define SCHEME_PRIM_PROC_FLAGS(x) (((Scheme_Prim_Proc_Header *)x)->flags)
#define SCHEME_PRIM_IS_SOMETIMES_INLINED(rator) \
(((SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_OTHER_TYPE_MASK) == SCHEME_PRIM_SOMETIMES_INLINED) \
|| (SCHEME_PRIM_PROC_FLAGS(rator) & (SCHEME_PRIM_IS_UNARY_INLINED | SCHEME_PRIM_IS_BINARY_INLINED)))
typedef struct Scheme_Object *(Scheme_Prim)(int argc, Scheme_Object *argv[]);
typedef struct Scheme_Object *(Scheme_Primitive_Closure_Proc)(int argc, struct Scheme_Object *argv[], Scheme_Object *p);

View File

@ -76,8 +76,9 @@
#define SCHEME_PRIM_WANTS_EXTFLONUM_THIRD (1 << 12)
#define SCHEME_PRIM_IS_UNSAFE_NONALLOCATE (1 << 13)
#define SCHEME_PRIM_ALWAYS_ESCAPES (1 << 14)
#define SCHEME_PRIM_SOMETIMES_INLINED (1 << 15)
#define SCHEME_PRIM_OPT_TYPE_SHIFT 15
#define SCHEME_PRIM_OPT_TYPE_SHIFT 16
#define SCHEME_PRIM_OPT_TYPE_MASK (SCHEME_MAX_LOCAL_TYPE_MASK << SCHEME_PRIM_OPT_TYPE_SHIFT)
#define SCHEME_PRIM_OPT_TYPE(x) ((x & SCHEME_PRIM_OPT_TYPE_MASK) >> SCHEME_PRIM_OPT_TYPE_SHIFT)