diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index a309968fbe..2026eaaee1 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -664,16 +664,14 @@ typedef struct Scheme_Offset_Cptr Do not use them directly. */ #define SCHEME_PRIM_OPT_MASK (1 | 2) #define SCHEME_PRIM_IS_PRIMITIVE 4 -#define SCHEME_PRIM_IS_UNSAFE_OMITABLE 8 -#define SCHEME_PRIM_IS_OMITABLE 16 +#define SCHEME_PRIM_IS_MULTI_RESULT 8 +#define SCHEME_PRIM_IS_CLOSURE 16 #define SCHEME_PRIM_OTHER_TYPE_MASK (32 | 64 | 128 | 256) -#define SCHEME_PRIM_IS_MULTI_RESULT 512 -#define SCHEME_PRIM_IS_BINARY_INLINED 1024 -#define SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL 2048 -#define SCHEME_PRIM_IS_METHOD 4096 -#define SCHEME_PRIM_IS_CLOSURE 8192 -#define SCHEME_PRIM_IS_UNARY_INLINED 16384 -#define SCHEME_PRIM_IS_NARY_INLINED 32768 +#define SCHEME_PRIM_IS_METHOD 512 + +#define SCHEME_PRIM_OPT_INDEX_SIZE 5 +#define SCHEME_PRIM_OPT_INDEX_SHIFT 10 +#define SCHEME_PRIM_OPT_INDEX_MASK (((1 << SCHEME_PRIM_OPT_INDEX_SIZE) - 1) << SCHEME_PRIM_OPT_INDEX_SHIFT) /* Values with SCHEME_PRIM_OPT_MASK, earlier implies later: */ #define SCHEME_PRIM_OPT_FOLDING 3 diff --git a/src/racket/src/bool.c b/src/racket/src/bool.c index cfc3ab89eb..4b3aa3ce26 100644 --- a/src/racket/src/bool.c +++ b/src/racket/src/bool.c @@ -83,29 +83,29 @@ void scheme_init_bool (Scheme_Env *env) p = scheme_make_folding_prim(not_prim, "not", 1, 1, 1); scheme_not_prim = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("not", p, env); p = scheme_make_folding_prim(boolean_p_prim, "boolean?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("boolean?", p, env); p = scheme_make_folding_prim(eq_prim, "eq?", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_eq_prim = p; scheme_add_global_constant("eq?", p, env); p = scheme_make_folding_prim(eqv_prim, "eqv?", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_eqv_prim = p; scheme_add_global_constant("eqv?", scheme_eqv_prim, env); p = scheme_make_prim_w_arity(equal_prim, "equal?", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_equal_prim = p; scheme_add_global_constant("equal?", scheme_equal_prim, env); @@ -114,13 +114,13 @@ void scheme_init_bool (Scheme_Env *env) env); p = scheme_make_immed_prim(chaperone_p, "chaperone?", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("chaperone?", p, env); p = scheme_make_immed_prim(impersonator_p, "impersonator?", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("impersonator?", p, env); scheme_add_global_constant("chaperone-of?", diff --git a/src/racket/src/char.c b/src/racket/src/char.c index ce2afffd8e..32c2e48e86 100644 --- a/src/racket/src/char.c +++ b/src/racket/src/char.c @@ -97,12 +97,12 @@ void scheme_init_char (Scheme_Env *env) } p = scheme_make_folding_prim(char_p, "char?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("char?", p, env); p = scheme_make_folding_prim(char_eq, "char=?", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("char=?", p, env); GLOBAL_FOLDING_PRIM("charrator) - && (SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED) + && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED) && (IS_NAMED_PRIM(app->rator, "car") || IS_NAMED_PRIM(app->rator, "cdr") || IS_NAMED_PRIM(app->rator, "cadr") diff --git a/src/racket/src/jitarith.c b/src/racket/src/jitarith.c index 009c134ed3..9732eafba2 100644 --- a/src/racket/src/jitarith.c +++ b/src/racket/src/jitarith.c @@ -54,7 +54,7 @@ static int is_inline_unboxable_op(Scheme_Object *obj, int flag, int unsafely, in { if (!SCHEME_PRIMP(obj)) return 0; - if (!(SCHEME_PRIM_PROC_FLAGS(obj) & flag)) + if (!(SCHEME_PRIM_PROC_OPT_FLAGS(obj) & flag)) return 0; if (IS_NAMED_PRIM(obj, "unsafe-fl+")) return 1; @@ -190,7 +190,7 @@ int scheme_can_unbox_inline(Scheme_Object *obj, int fuel, int regs, int unsafely return 0; else if (ok_op == 2) unsafely = 0; - if ((SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_BINARY_INLINED) + if ((SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_BINARY_INLINED) && (IS_NAMED_PRIM(app->rator, "unsafe-f64vector-ref") || IS_NAMED_PRIM(app->rator, "unsafe-flvector-ref"))) { if (is_unboxing_immediate(app->rand1, 1) @@ -222,7 +222,7 @@ int scheme_can_unbox_directly(Scheme_Object *obj) if (is_inline_unboxable_op(app->rator, SCHEME_PRIM_IS_UNARY_INLINED, 1, 1)) return 1; if (SCHEME_PRIMP(app->rator) - && (SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED)) { + && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED)) { if (IS_NAMED_PRIM(app->rator, "->fl") || IS_NAMED_PRIM(app->rator, "fx->fl")) return 1; @@ -236,7 +236,7 @@ int scheme_can_unbox_directly(Scheme_Object *obj) if (is_inline_unboxable_op(app->rator, SCHEME_PRIM_IS_BINARY_INLINED, 1, 1)) return 1; if (SCHEME_PRIMP(app->rator) - && (SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_BINARY_INLINED)) { + && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_BINARY_INLINED)) { if (IS_NAMED_PRIM(app->rator, "flvector-ref")) return 1; } return 0; diff --git a/src/racket/src/jitinline.c b/src/racket/src/jitinline.c index 0c148bca3c..5c3cf13a02 100644 --- a/src/racket/src/jitinline.c +++ b/src/racket/src/jitinline.c @@ -175,7 +175,7 @@ static int inlineable_struct_prim(Scheme_Object *o, mz_jit_state *jitter, int ex int scheme_inlined_unary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state *jitter) { if (SCHEME_PRIMP(o) - && (SCHEME_PRIM_PROC_FLAGS(o) & SCHEME_PRIM_IS_UNARY_INLINED)) + && (SCHEME_PRIM_PROC_OPT_FLAGS(o) & SCHEME_PRIM_IS_UNARY_INLINED)) return 1; if (inlineable_struct_prim(o, jitter, 1, 1)) @@ -187,7 +187,7 @@ int scheme_inlined_unary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_stat int scheme_inlined_binary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state *jitter) { return ((SCHEME_PRIMP(o) - && (SCHEME_PRIM_PROC_FLAGS(o) & SCHEME_PRIM_IS_BINARY_INLINED)) + && (SCHEME_PRIM_PROC_OPT_FLAGS(o) & SCHEME_PRIM_IS_BINARY_INLINED)) || inlineable_struct_prim(o, jitter, 2, 2)); } @@ -196,7 +196,7 @@ int scheme_inlined_nary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state int n = ((Scheme_App_Rec *)_app)->num_args; return ((SCHEME_PRIMP(o) - && (SCHEME_PRIM_PROC_FLAGS(o) & SCHEME_PRIM_IS_NARY_INLINED) + && (SCHEME_PRIM_PROC_OPT_FLAGS(o) & SCHEME_PRIM_IS_NARY_INLINED) && (n >= ((Scheme_Primitive_Proc *)o)->mina) && (n <= ((Scheme_Primitive_Proc *)o)->mu.maxa)) || inlineable_struct_prim(o, jitter, n, n)); @@ -963,7 +963,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in if (!SCHEME_PRIMP(rator)) return 0; - if (!(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNARY_INLINED)) + if (!(SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_UNARY_INLINED)) return 0; scheme_direct_call_count++; @@ -1809,7 +1809,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in } if (!for_branch) { - scheme_console_printf("Inlining expected.\n"); + scheme_console_printf("Inlining expected for %s.\n", scheme_write_to_string(rator, NULL)); abort(); } @@ -2220,7 +2220,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i if (!SCHEME_PRIMP(rator)) return 0; - if (!(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_BINARY_INLINED)) + if (!(SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_BINARY_INLINED)) return 0; scheme_direct_call_count++; @@ -3319,7 +3319,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int if (!SCHEME_PRIMP(rator)) return 0; - if (!(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_NARY_INLINED)) + if (!(SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_NARY_INLINED)) return 0; if (app->num_args < ((Scheme_Primitive_Proc *)rator)->mina) diff --git a/src/racket/src/list.c b/src/racket/src/list.c index b02e59c0f0..253c1420ef 100644 --- a/src/racket/src/list.c +++ b/src/racket/src/list.c @@ -189,82 +189,82 @@ scheme_init_list (Scheme_Env *env) REGISTER_SO(scheme_pair_p_proc); p = scheme_make_folding_prim(pair_p_prim, "pair?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("pair?", p, env); scheme_pair_p_proc = p; REGISTER_SO(scheme_mpair_p_proc); p = scheme_make_folding_prim(mpair_p_prim, "mpair?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("mpair?", p, env); scheme_mpair_p_proc = p; REGISTER_SO(scheme_cons_proc); p = scheme_make_immed_prim(cons_prim, "cons", 2, 2); scheme_cons_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("cons", p, env); p = scheme_make_folding_prim(scheme_checked_car, "car", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("car", p, env); p = scheme_make_folding_prim(scheme_checked_cdr, "cdr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdr", p, env); REGISTER_SO(scheme_mcons_proc); p = scheme_make_immed_prim(mcons_prim, "mcons", 2, 2); scheme_mcons_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("mcons", p, env); p = scheme_make_immed_prim(scheme_checked_mcar, "mcar", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("mcar", p, env); p = scheme_make_immed_prim(scheme_checked_mcdr, "mcdr", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("mcdr", p, env); p = scheme_make_immed_prim(scheme_checked_set_mcar, "set-mcar!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("set-mcar!", p, env); p = scheme_make_immed_prim(scheme_checked_set_mcdr, "set-mcdr!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("set-mcdr!", p, env); p = scheme_make_folding_prim(null_p_prim, "null?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("null?", p, env); p = scheme_make_folding_prim(list_p_prim, "list?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("list?", p, env); REGISTER_SO(scheme_list_proc); p = scheme_make_immed_prim(list_prim, "list", 0, -1); scheme_list_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("list", p, env); REGISTER_SO(scheme_list_star_proc); p = scheme_make_immed_prim(list_star_prim, "list*", 1, -1); scheme_list_star_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("list*", p, env); scheme_add_global_constant("immutable?", @@ -274,7 +274,7 @@ scheme_init_list (Scheme_Env *env) env); p = scheme_make_immed_prim(length_prim, "length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("length", p, env); scheme_add_global_constant ("append", @@ -289,11 +289,11 @@ scheme_init_list (Scheme_Env *env) env); p = scheme_make_immed_prim(scheme_checked_list_tail, "list-tail", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("list-tail", p, env); p = scheme_make_immed_prim(scheme_checked_list_ref, "list-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("list-ref",p, env); scheme_add_global_constant ("memq", @@ -328,145 +328,145 @@ scheme_init_list (Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_checked_caar, "caar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caar", p, env); p = scheme_make_folding_prim(scheme_checked_cadr, "cadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cadr", p, env); p = scheme_make_folding_prim(scheme_checked_cdar, "cdar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdar", p, env); p = scheme_make_folding_prim(scheme_checked_cddr, "cddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cddr", p, env); p = scheme_make_folding_prim(caaar_prim, "caaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caaar", p, env); p = scheme_make_folding_prim(caadr_prim, "caadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caadr", p, env); p = scheme_make_folding_prim(cadar_prim, "cadar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cadar", p, env); p = scheme_make_folding_prim(cdaar_prim, "cdaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdaar", p, env); p = scheme_make_folding_prim(cdadr_prim, "cdadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdadr", p, env); p = scheme_make_folding_prim(cddar_prim, "cddar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cddar", p, env); p = scheme_make_folding_prim(caddr_prim, "caddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caddr", p, env); p = scheme_make_folding_prim(cdddr_prim, "cdddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdddr", p, env); p = scheme_make_folding_prim(cddddr_prim, "cddddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cddddr", p, env); p = scheme_make_folding_prim(cadddr_prim, "cadddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cadddr", p, env); p = scheme_make_folding_prim(cdaddr_prim, "cdaddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdaddr", p, env); p = scheme_make_folding_prim(cddadr_prim, "cddadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cddadr", p, env); p = scheme_make_folding_prim(cdddar_prim, "cdddar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdddar", p, env); p = scheme_make_folding_prim(caaddr_prim, "caaddr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caaddr", p, env); p = scheme_make_folding_prim(cadadr_prim, "cadadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cadadr", p, env); p = scheme_make_folding_prim(caddar_prim, "caddar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caddar", p, env); p = scheme_make_folding_prim(cdaadr_prim, "cdaadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdaadr", p, env); p = scheme_make_folding_prim(cdadar_prim, "cdadar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdadar", p, env); p = scheme_make_folding_prim(cddaar_prim, "cddaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cddaar", p, env); p = scheme_make_folding_prim(cdaaar_prim, "cdaaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cdaaar", p, env); p = scheme_make_folding_prim(cadaar_prim, "cadaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("cadaar", p, env); p = scheme_make_folding_prim(caadar_prim, "caadar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caadar", p, env); p = scheme_make_folding_prim(caaadr_prim, "caaadr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caaadr", p, env); p = scheme_make_folding_prim(caaaar_prim, "caaaar", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant ("caaaar", p, env); REGISTER_SO(scheme_box_proc); p = scheme_make_immed_prim(box, BOX, 1, 1); scheme_box_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant(BOX, p, env); p = scheme_make_immed_prim(immutable_box, "box-immutable", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_OMITABLE; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("box-immutable", p, env); REGISTER_SO(scheme_box_p_proc); p = scheme_make_folding_prim(box_p, BOXP, 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant(BOXP, p, env); scheme_box_p_proc = p; p = scheme_make_noncm_prim(unbox, UNBOX, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant(UNBOX, p, env); p = scheme_make_immed_prim(set_box, SETBOX, 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant(SETBOX, p, env); p = scheme_make_immed_prim(scheme_box_cas, "box-cas!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("box-cas!", p, env); scheme_add_global_constant("chaperone-box", @@ -756,83 +756,83 @@ scheme_init_unsafe_list (Scheme_Env *env) REGISTER_SO(scheme_unsafe_cons_list_proc); p = scheme_make_immed_prim(unsafe_cons_list, "unsafe-cons-list", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("unsafe-cons-list", p, env); scheme_unsafe_cons_list_proc = p; REGISTER_SO(scheme_unsafe_car_proc); p = scheme_make_folding_prim(unsafe_car, "unsafe-car", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant ("unsafe-car", p, env); scheme_unsafe_car_proc = p; REGISTER_SO(scheme_unsafe_cdr_proc); p = scheme_make_folding_prim(unsafe_cdr, "unsafe-cdr", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant ("unsafe-cdr", p, env); scheme_unsafe_cdr_proc = p; p = scheme_make_folding_prim(unsafe_list_ref, "unsafe-list-ref", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant ("unsafe-list-ref", p, env); p = scheme_make_folding_prim(unsafe_list_tail, "unsafe-list-tail", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant ("unsafe-list-tail", p, env); REGISTER_SO(scheme_unsafe_mcar_proc); p = scheme_make_immed_prim(unsafe_mcar, "unsafe-mcar", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("unsafe-mcar", p, env); scheme_unsafe_mcar_proc = p; REGISTER_SO(scheme_unsafe_mcdr_proc); p = scheme_make_immed_prim(unsafe_mcdr, "unsafe-mcdr", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant ("unsafe-mcdr", p, env); scheme_unsafe_mcdr_proc = p; p = scheme_make_immed_prim(unsafe_set_mcar, "unsafe-set-mcar!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("unsafe-set-mcar!", p, env); p = scheme_make_immed_prim(unsafe_set_mcdr, "unsafe-set-mcdr!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant ("unsafe-set-mcdr!", p, env); REGISTER_SO(scheme_unsafe_unbox_proc); p = scheme_make_immed_prim(unsafe_unbox, "unsafe-unbox", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-unbox", p, env); scheme_unsafe_unbox_proc = p; p = scheme_make_immed_prim(unsafe_unbox_star, "unsafe-unbox*", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-unbox*", p, env); p = scheme_make_immed_prim(unsafe_set_box, "unsafe-set-box!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("unsafe-set-box!", p, env); p = scheme_make_immed_prim(unsafe_set_box_star, "unsafe-set-box*!", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("unsafe-set-box*!", p, env); p = scheme_make_prim_w_arity(scheme_box_cas, "unsafe-box*-cas!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-box*-cas!", p, env); } diff --git a/src/racket/src/numarith.c b/src/racket/src/numarith.c index c35893d40f..fd0e11791c 100644 --- a/src/racket/src/numarith.c +++ b/src/racket/src/numarith.c @@ -78,44 +78,44 @@ void scheme_init_numarith(Scheme_Env *env) Scheme_Object *p; p = scheme_make_folding_prim(scheme_add1, "add1", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("add1", p, env); p = scheme_make_folding_prim(scheme_sub1, "sub1", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("sub1", p, env); p = scheme_make_folding_prim(plus, "+", 0, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("+", p, env); p = scheme_make_folding_prim(minus, "-", 1, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("-", p, env); p = scheme_make_folding_prim(mult, "*", 0, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("*", p, env); p = scheme_make_folding_prim(div_prim, "/", 1, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("/", p, env); p = scheme_make_folding_prim(scheme_abs, "abs", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("abs", p, env); p = scheme_make_folding_prim(quotient, "quotient", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("quotient", p, env); p = scheme_make_folding_prim(rem_prim, "remainder", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("remainder", p, env); scheme_add_global_constant("quotient/remainder", @@ -126,172 +126,185 @@ void scheme_init_numarith(Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_modulo, "modulo", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("modulo", p, env); } void scheme_init_flfxnum_numarith(Scheme_Env *env) { Scheme_Object *p; + int flags; p = scheme_make_folding_prim(fx_plus, "fx+", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx+", p, env); p = scheme_make_folding_prim(fx_minus, "fx-", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx-", p, env); p = scheme_make_folding_prim(fx_mult, "fx*", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx*", p, env); p = scheme_make_folding_prim(fx_div, "fxquotient", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxquotient", p, env); p = scheme_make_folding_prim(fx_rem, "fxremainder", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxremainder", p, env); p = scheme_make_folding_prim(fx_mod, "fxmodulo", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxmodulo", p, env); p = scheme_make_folding_prim(fx_abs, "fxabs", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("fxabs", p, env); - p = scheme_make_folding_prim(fl_plus, "fl+", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl+", p, env); p = scheme_make_folding_prim(fl_minus, "fl-", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl-", p, env); p = scheme_make_folding_prim(fl_mult, "fl*", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl*", p, env); p = scheme_make_folding_prim(fl_div, "fl/", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl/", p, env); p = scheme_make_folding_prim(fl_abs, "flabs", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flabs", p, env); p = scheme_make_folding_prim(fl_sqrt, "flsqrt", 1, 1, 1); if (scheme_can_inline_fp_op() && SQRT_MACHINE_CODE_AVAILABLE) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flsqrt", p, env); } void scheme_init_unsafe_numarith(Scheme_Env *env) { Scheme_Object *p; + int flags; p = scheme_make_folding_prim(unsafe_fx_plus, "unsafe-fx+", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx+", p, env); p = scheme_make_folding_prim(unsafe_fx_minus, "unsafe-fx-", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx-", p, env); p = scheme_make_folding_prim(unsafe_fx_mult, "unsafe-fx*", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx*", p, env); p = scheme_make_folding_prim(unsafe_fx_div, "unsafe-fxquotient", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxquotient", p, env); p = scheme_make_folding_prim(unsafe_fx_rem, "unsafe-fxremainder", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxremainder", p, env); p = scheme_make_folding_prim(unsafe_fx_mod, "unsafe-fxmodulo", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxmodulo", p, env); p = scheme_make_folding_prim(unsafe_fx_abs, "unsafe-fxabs", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxabs", p, env); p = scheme_make_folding_prim(unsafe_fl_plus, "unsafe-fl+", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl+", p, env); p = scheme_make_folding_prim(unsafe_fl_minus, "unsafe-fl-", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl-", p, env); p = scheme_make_folding_prim(unsafe_fl_mult, "unsafe-fl*", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl*", p, env); p = scheme_make_folding_prim(unsafe_fl_div, "unsafe-fl/", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl/", p, env); p = scheme_make_folding_prim(unsafe_fl_abs, "unsafe-flabs", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flabs", p, env); p = scheme_make_folding_prim(unsafe_fl_sqrt, "unsafe-flsqrt", 1, 1, 1); if (scheme_can_inline_fp_op() && SQRT_MACHINE_CODE_AVAILABLE) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flsqrt", p, env); } diff --git a/src/racket/src/number.c b/src/racket/src/number.c index fec2172089..2b974809d4 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -258,6 +258,7 @@ void scheme_init_number (Scheme_Env *env) { Scheme_Object *p; + int flags; REGISTER_SO(scheme_pi); REGISTER_SO(scheme_half_pi); @@ -330,61 +331,61 @@ scheme_init_number (Scheme_Env *env) #endif p = scheme_make_folding_prim(number_p, "number?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("number?", p, env); p = scheme_make_folding_prim(complex_p, "complex?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_OMITABLE; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("complex?", p, env); p = scheme_make_folding_prim(real_p, "real?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("real?", p, env); p = scheme_make_folding_prim(rational_p, "rational?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_OMITABLE; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("rational?", p, env); p = scheme_make_folding_prim(integer_p, "integer?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_OMITABLE; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("integer?", p, env); p = scheme_make_folding_prim(exact_integer_p, "exact-integer?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("exact-integer?", p, env); p = scheme_make_folding_prim(exact_nonnegative_integer_p, "exact-nonnegative-integer?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("exact-nonnegative-integer?", p, env); p = scheme_make_folding_prim(exact_positive_integer_p, "exact-positive-integer?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("exact-positive-integer?", p, env); p = scheme_make_immed_prim(fixnum_p, "fixnum?", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("fixnum?", p, env); p = scheme_make_folding_prim(inexact_real_p, "inexact-real?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("inexact-real?", p, env); p = scheme_make_folding_prim(flonum_p, "flonum?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("flonum?", p, env); p = scheme_make_folding_prim(single_flonum_p, "single-flonum?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("single-flonum?", p, env); p = scheme_make_folding_prim(real_to_single_flonum, "real->single-flonum", 1, 1, 1); @@ -392,9 +393,10 @@ scheme_init_number (Scheme_Env *env) p = scheme_make_folding_prim(real_to_double_flonum, "real->double-flonum", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("real->double-flonum", p, env); scheme_add_global_constant("exact?", @@ -409,34 +411,34 @@ scheme_init_number (Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_odd_p, "odd?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("odd?", p, env); p = scheme_make_folding_prim(scheme_even_p, "even?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("even?", p, env); p = scheme_make_folding_prim(scheme_bitwise_and, "bitwise-and", 0, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("bitwise-and", p, env); p = scheme_make_folding_prim(bitwise_or, "bitwise-ior", 0, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("bitwise-ior", p, env); p = scheme_make_folding_prim(bitwise_xor, "bitwise-xor", 0, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("bitwise-xor", p, env); p = scheme_make_folding_prim(bitwise_not, "bitwise-not", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("bitwise-not", p, env); p = scheme_make_folding_prim(bitwise_bit_set_p, "bitwise-bit-set?", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("bitwise-bit-set?", p, env); scheme_add_global_constant("bitwise-bit-field", @@ -446,7 +448,7 @@ scheme_init_number (Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_bitwise_shift, "arithmetic-shift", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("arithmetic-shift", p, env); scheme_add_global_constant("integer-length", @@ -558,7 +560,7 @@ scheme_init_number (Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_checked_make_rectangular, "make-rectangular", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("make-rectangular", p, env); scheme_add_global_constant("make-polar", @@ -568,11 +570,11 @@ scheme_init_number (Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_checked_real_part, "real-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("real-part", p, env); p = scheme_make_folding_prim(scheme_checked_imag_part, "imag-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("imag-part", p, env); scheme_add_global_constant("angle", @@ -588,19 +590,21 @@ scheme_init_number (Scheme_Env *env) p = scheme_make_folding_prim(scheme_exact_to_inexact, "exact->inexact", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("exact->inexact", p, env); p = scheme_make_folding_prim(scheme_inexact_to_exact, "inexact->exact", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("inexact->exact", p, env); } void scheme_init_flfxnum_number(Scheme_Env *env) { Scheme_Object *p; + int flags; scheme_add_global_constant("flvector", scheme_make_prim_w_arity(flvector, @@ -622,22 +626,23 @@ void scheme_init_flfxnum_number(Scheme_Env *env) GLOBAL_PRIM_W_ARITY("make-shared-flvector", make_shared_flvector, 1, 2, env); p = scheme_make_immed_prim(flvector_length, "flvector-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("flvector-length", p, env); p = scheme_make_immed_prim(scheme_checked_flvector_ref, "flvector-ref", 2, 2); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flvector-ref", p, env); p = scheme_make_immed_prim(scheme_checked_flvector_set, "flvector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("flvector-set!", p, env); scheme_add_global_constant("fxvector", @@ -660,320 +665,341 @@ void scheme_init_flfxnum_number(Scheme_Env *env) GLOBAL_PRIM_W_ARITY("make-shared-fxvector", make_shared_fxvector, 1, 2, env); p = scheme_make_immed_prim(fxvector_length, "fxvector-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("fxvector-length", p, env); p = scheme_make_immed_prim(scheme_checked_fxvector_ref, "fxvector-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxvector-ref", p, env); p = scheme_make_immed_prim(scheme_checked_fxvector_set, "fxvector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("fxvector-set!", p, env); p = scheme_make_folding_prim(integer_to_fl, "->fl", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("->fl", p, env); p = scheme_make_folding_prim(fl_to_integer, "fl->exact-integer", 1, 1, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl->exact-integer", p, env); p = scheme_make_folding_prim(fx_and, "fxand", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxand", p, env); p = scheme_make_folding_prim(fx_or, "fxior", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxior", p, env); p = scheme_make_folding_prim(fx_xor, "fxxor", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxxor", p, env); p = scheme_make_folding_prim(fx_not, "fxnot", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("fxnot", p, env); p = scheme_make_folding_prim(fx_lshift, "fxlshift", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxlshift", p, env); p = scheme_make_folding_prim(fx_rshift, "fxrshift", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fxrshift", p, env); p = scheme_make_folding_prim(fx_to_fl, "fx->fl", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fx->fl", p, env); p = scheme_make_folding_prim(fl_to_fx, "fl->fx", 1, 1, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl->fx", p, env); p = scheme_make_folding_prim(fl_truncate, "fltruncate", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fltruncate", p, env); p = scheme_make_folding_prim(fl_round, "flround", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flround", p, env); p = scheme_make_folding_prim(fl_ceiling, "flceiling", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flceiling", p, env); p = scheme_make_folding_prim(fl_floor, "flfloor", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flfloor", p, env); p = scheme_make_folding_prim(fl_sin, "flsin", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flsin", p, env); p = scheme_make_folding_prim(fl_cos, "flcos", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flcos", p, env); p = scheme_make_folding_prim(fl_tan, "fltan", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fltan", p, env); p = scheme_make_folding_prim(fl_asin, "flasin", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flasin", p, env); p = scheme_make_folding_prim(fl_acos, "flacos", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flacos", p, env); p = scheme_make_folding_prim(fl_atan, "flatan", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flatan", p, env); p = scheme_make_folding_prim(fl_log, "fllog", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fllog", p, env); p = scheme_make_folding_prim(fl_exp, "flexp", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flexp", p, env); p = scheme_make_folding_prim(fl_expt, "flexpt", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flexpt", p, env); p = scheme_make_folding_prim(scheme_checked_make_rectangular, "make-flrectangular", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("make-flrectangular", p, env); p = scheme_make_folding_prim(scheme_checked_real_part, "flreal-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("flreal-part", p, env); p = scheme_make_folding_prim(scheme_checked_imag_part, "flimag-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("flimag-part", p, env); } void scheme_init_unsafe_number(Scheme_Env *env) { Scheme_Object *p; + int flags; p = scheme_make_folding_prim(unsafe_fx_and, "unsafe-fxand", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxand", p, env); p = scheme_make_folding_prim(unsafe_fx_or, "unsafe-fxior", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxior", p, env); p = scheme_make_folding_prim(unsafe_fx_xor, "unsafe-fxxor", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxxor", p, env); p = scheme_make_folding_prim(unsafe_fx_not, "unsafe-fxnot", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxnot", p, env); p = scheme_make_folding_prim(unsafe_fx_lshift, "unsafe-fxlshift", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxlshift", p, env); p = scheme_make_folding_prim(unsafe_fx_rshift, "unsafe-fxrshift", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxrshift", p, env); p = scheme_make_folding_prim(unsafe_fx_to_fl, "unsafe-fx->fl", 1, 1, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + flags = SCHEME_PRIM_IS_UNARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx->fl", p, env); p = scheme_make_folding_prim(unsafe_fl_to_fx, "unsafe-fl->fx", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl->fx", p, env); p = scheme_make_immed_prim(fl_ref, "unsafe-f64vector-ref", 2, 2); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-f64vector-ref", p, env); p = scheme_make_immed_prim(fl_set, "unsafe-f64vector-set!", 3, 3); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + flags = SCHEME_PRIM_IS_NARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("unsafe-f64vector-set!", p, env); p = scheme_make_immed_prim(unsafe_flvector_length, "unsafe-flvector-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flvector-length", p, env); p = scheme_make_immed_prim(unsafe_flvector_ref, "unsafe-flvector-ref", 2, 2); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-flvector-ref", p, env); p = scheme_make_immed_prim(unsafe_flvector_set, "unsafe-flvector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-flvector-set!", p, env); p = scheme_make_immed_prim(unsafe_fxvector_length, "unsafe-fxvector-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxvector-length", p, env); p = scheme_make_immed_prim(unsafe_fxvector_ref, "unsafe-fxvector-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-fxvector-ref", p, env); p = scheme_make_immed_prim(unsafe_fxvector_set, "unsafe-fxvector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-fxvector-set!", p, env); p = scheme_make_immed_prim(s16_ref, "unsafe-s16vector-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-s16vector-ref", p, env); p = scheme_make_immed_prim(s16_set, "unsafe-s16vector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-s16vector-set!", p, env); p = scheme_make_immed_prim(u16_ref, "unsafe-u16vector-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-u16vector-ref", p, env); p = scheme_make_immed_prim(u16_set, "unsafe-u16vector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-u16vector-set!", p, env); p = scheme_make_folding_prim(unsafe_make_flrectangular, "unsafe-make-flrectangular", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-make-flrectangular", p, env); p = scheme_make_folding_prim(unsafe_flreal_part, "unsafe-flreal-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flreal-part", p, env); p = scheme_make_folding_prim(unsafe_flimag_part, "unsafe-flimag-part", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flimag-part", p, env); } diff --git a/src/racket/src/numcomp.c b/src/racket/src/numcomp.c index b9101a2e43..17386fa9bc 100644 --- a/src/racket/src/numcomp.c +++ b/src/racket/src/numcomp.c @@ -77,235 +77,253 @@ void scheme_init_numcomp(Scheme_Env *env) Scheme_Object *p; p = scheme_make_folding_prim(eq, "=", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("=", p, env); p = scheme_make_folding_prim(lt, "<", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_BINARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("<", p, env); p = scheme_make_folding_prim(gt, ">", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant(">", p, env); p = scheme_make_folding_prim(lt_eq, "<=", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("<=", p, env); p = scheme_make_folding_prim(gt_eq, ">=", 2, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant(">=", p, env); p = scheme_make_folding_prim(zero_p, "zero?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("zero?", p, env); p = scheme_make_folding_prim(positive_p, "positive?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("positive?", p, env); p = scheme_make_folding_prim(negative_p, "negative?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("negative?", p, env); p = scheme_make_folding_prim(sch_max, "max", 1, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("max", p, env); p = scheme_make_folding_prim(sch_min, "min", 1, -1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("min", p, env); } void scheme_init_flfxnum_numcomp(Scheme_Env *env) { Scheme_Object *p; + int flags; p = scheme_make_folding_prim(fx_eq, "fx=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx=", p, env); p = scheme_make_folding_prim(fx_lt, "fx<", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx<", p, env); p = scheme_make_folding_prim(fx_gt, "fx>", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx>", p, env); p = scheme_make_folding_prim(fx_lt_eq, "fx<=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx<=", p, env); p = scheme_make_folding_prim(fx_gt_eq, "fx>=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("fx>=", p, env); p = scheme_make_folding_prim(fx_min, "fxmin", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fxmin", p, env); p = scheme_make_folding_prim(fx_max, "fxmax", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fxmax", p, env); p = scheme_make_folding_prim(fl_eq, "fl=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl=", p, env); p = scheme_make_folding_prim(fl_lt, "fl<", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl<", p, env); p = scheme_make_folding_prim(fl_gt, "fl>", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl>", p, env); p = scheme_make_folding_prim(fl_lt_eq, "fl<=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl<=", p, env); p = scheme_make_folding_prim(fl_gt_eq, "fl>=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("fl>=", p, env); p = scheme_make_folding_prim(fl_min, "flmin", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flmin", p, env); p = scheme_make_folding_prim(fl_max, "flmax", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags); scheme_add_global_constant("flmax", p, env); } void scheme_init_unsafe_numcomp(Scheme_Env *env) { Scheme_Object *p; + int flags; p = scheme_make_folding_prim(unsafe_fx_eq, "unsafe-fx=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx=", p, env); p = scheme_make_folding_prim(unsafe_fx_lt, "unsafe-fx<", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx<", p, env); p = scheme_make_folding_prim(unsafe_fx_gt, "unsafe-fx>", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx>", p, env); p = scheme_make_folding_prim(unsafe_fx_lt_eq, "unsafe-fx<=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx<=", p, env); p = scheme_make_folding_prim(unsafe_fx_gt_eq, "unsafe-fx>=", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fx>=", p, env); p = scheme_make_folding_prim(unsafe_fx_min, "unsafe-fxmin", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxmin", p, env); p = scheme_make_folding_prim(unsafe_fx_max, "unsafe-fxmax", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fxmax", p, env); p = scheme_make_folding_prim(unsafe_fl_eq, "unsafe-fl=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl=", p, env); p = scheme_make_folding_prim(unsafe_fl_lt, "unsafe-fl<", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl<", p, env); p = scheme_make_folding_prim(unsafe_fl_gt, "unsafe-fl>", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl>", p, env); p = scheme_make_folding_prim(unsafe_fl_lt_eq, "unsafe-fl<=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl<=", p, env); p = scheme_make_folding_prim(unsafe_fl_gt_eq, "unsafe-fl>=", 2, 2, 1); if (scheme_can_inline_fp_comp()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-fl>=", p, env); p = scheme_make_folding_prim(unsafe_fl_min, "unsafe-flmin", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flmin", p, env); p = scheme_make_folding_prim(unsafe_fl_max, "unsafe-flmax", 2, 2, 1); if (scheme_can_inline_fp_op()) - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + flags = SCHEME_PRIM_IS_BINARY_INLINED; else - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_SOMETIMES_INLINED; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL; + flags = SCHEME_PRIM_SOMETIMES_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(flags + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-flmax", p, env); } diff --git a/src/racket/src/optimize.c b/src/racket/src/optimize.c index 1ddf2fb55f..e4c391e122 100644 --- a/src/racket/src/optimize.c +++ b/src/racket/src/optimize.c @@ -162,10 +162,10 @@ int scheme_is_functional_primitive(Scheme_Object *rator, int num_args, int expec /* return 2 => results are a constant when arguments are constants */ { if (SCHEME_PRIMP(rator) - && (SCHEME_PRIM_PROC_FLAGS(rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) + && (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) && (num_args >= ((Scheme_Primitive_Proc *)rator)->mina) && (num_args <= ((Scheme_Primitive_Proc *)rator)->mu.maxa) - && ((expected_vals < 0) + && ((expected_vals < 0) || ((expected_vals == 1) && !(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_MULTI_RESULT)) || (SAME_OBJ(scheme_values_func, rator) && (expected_vals == num_args)))) { @@ -934,7 +934,7 @@ static int is_movable_prim(Scheme_Object *rator, int n, int cross_lambda) changing space complexity. */ { if (rator && SCHEME_PRIMP(rator)) { - if (((Scheme_Prim_Proc_Header *)rator)->flags & SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL) { + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL) { /* Although it's semantically ok to return -1 even when cross_lambda, doing so risks duplicating a computation if the relevant `lambda' is later inlined. */ @@ -1864,7 +1864,7 @@ static Scheme_Object *check_app_let_rator(Scheme_Object *app, Scheme_Object *rat static int is_nonmutating_primitive(Scheme_Object *rator, int n) { if (SCHEME_PRIMP(rator) - && (SCHEME_PRIM_PROC_FLAGS(rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) + && (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) && (n >= ((Scheme_Primitive_Proc *)rator)->mina) && (n <= ((Scheme_Primitive_Proc *)rator)->mu.maxa)) return 1; @@ -1878,7 +1878,7 @@ static int wants_local_type_arguments(Scheme_Object *rator, int argpos) { /* See ALWAYS_PREFER_UNBOX_TYPE() for why we don't return SCHEME_LOCAL_TYPE_FIXNUM */ if (SCHEME_PRIMP(rator)) { - if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING) { + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING) { if (IS_NAMED_PRIM(rator, "unsafe-flabs") || IS_NAMED_PRIM(rator, "unsafe-flsqrt") || IS_NAMED_PRIM(rator, "unsafe-fl+") @@ -1934,7 +1934,7 @@ static int wants_local_type_arguments(Scheme_Object *rator, int argpos) static int produces_local_type(Scheme_Object *rator, int argc) { if (SCHEME_PRIMP(rator)) { - if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING) { + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING) { if (((argc == 1) && (IS_NAMED_PRIM(rator, "unsafe-flabs") || IS_NAMED_PRIM(rator, "unsafe-flsqrt") @@ -2439,7 +2439,7 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz /* Check for things like (cXr (cons X Y)): */ if (SCHEME_PRIMP(app->rator) - && (SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED)) { + && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED)) { Scheme_Object *rand, *inside = NULL, *alt = NULL; rand = app->rand; @@ -2684,7 +2684,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz /* Ad hoc optimization of (unsafe-fx+ 0), etc. */ if (SCHEME_PRIMP(app->rator) - && (SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) { + && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) { int z1, z2; z1 = SAME_OBJ(app->rand1, scheme_make_integer(0)); diff --git a/src/racket/src/portfun.c b/src/racket/src/portfun.c index 4b7da7ce6c..4b124e6f89 100644 --- a/src/racket/src/portfun.c +++ b/src/racket/src/portfun.c @@ -323,8 +323,8 @@ scheme_init_port_fun(Scheme_Env *env) GLOBAL_NONCM_PRIM("port-count-lines!", port_count_lines, 1, 1, env); p = scheme_make_folding_prim(eof_object_p, "eof-object?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("eof-object?", p, env); scheme_add_global_constant("write", scheme_write_proc, env); diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index aac00ab347..62cb72a7e1 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -32,6 +32,44 @@ #define HOOK_SHARED_OK /* EMPTY */ #endif +/*========================================================================*/ +/* optimization flags */ +/*========================================================================*/ + +/* Used with SCHEME_LOCAL_TYPE_MASK, LET_ONE_TYPE_MASK, etc.*/ +#define SCHEME_LOCAL_TYPE_FLONUM 1 +#define SCHEME_LOCAL_TYPE_FIXNUM 2 + +#define SCHEME_MAX_LOCAL_TYPE 2 +#define SCHEME_MAX_LOCAL_TYPE_MASK 0x3 +#define SCHEME_MAX_LOCAL_TYPE_BITS 2 + +/* Flonum unboxing is only useful if a value is going to flow to a + function that wants it, otherwise we'll have to box the flonum anyway. + Fixnum unboxing is always fine, since it's easy to box. */ +#define ALWAYS_PREFER_UNBOX_TYPE(ty) ((ty) == SCHEME_LOCAL_TYPE_FIXNUM) + +#define IN_FIXNUM_RANGE_ON_ALL_PLATFORMS(v) (((v) >= -1073741824) && ((v) <= 1073741823)) + + +/* We support 2^SCHEME_PRIM_OPT_INDEX_SIZE combinations of optimization flags: */ +#define SCHEME_PRIM_IS_UNARY_INLINED 1 +#define SCHEME_PRIM_IS_BINARY_INLINED 2 +#define SCHEME_PRIM_IS_NARY_INLINED 4 +#define SCHEME_PRIM_IS_UNSAFE_OMITABLE 8 +#define SCHEME_PRIM_IS_OMITABLE 16 +#define SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL 32 + +#define SCHEME_PRIM_OPT_TYPE_SHIFT 6 +#define SCHEME_PRIM_OPT_TYPE_MASK (SCHEME_MAX_LOCAL_TYPE_MASK << 6) + +extern int scheme_prim_opt_flags[]; /* uses an index from SCHEME_PRIM_OPT_INDEX_MASK */ +extern XFORM_NONGCING int scheme_intern_prim_opt_flags(int); + +#define SCHEME_PRIM_PROC_OPT_FLAGS(proc) \ + scheme_prim_opt_flags[(SCHEME_PRIM_PROC_FLAGS(proc) & SCHEME_PRIM_OPT_INDEX_MASK) \ + >> SCHEME_PRIM_OPT_INDEX_SHIFT] + /*========================================================================*/ /* allocation and GC */ /*========================================================================*/ @@ -1270,21 +1308,6 @@ typedef struct { Scheme_Object *body; } Scheme_With_Continuation_Mark; -/* Used with SCHEME_LOCAL_TYPE_MASK, LET_ONE_TYPE_MASK, etc.*/ -#define SCHEME_LOCAL_TYPE_FLONUM 1 -#define SCHEME_LOCAL_TYPE_FIXNUM 2 - -#define SCHEME_MAX_LOCAL_TYPE 2 -#define SCHEME_MAX_LOCAL_TYPE_MASK 0x3 -#define SCHEME_MAX_LOCAL_TYPE_BITS 2 - -/* Flonum unboxing is only useful if a value is going to flow to a - function that wants it, otherwise we'll have to box the flonum anyway. - Fixnum unboxing is always fine, since it's easy to box. */ -#define ALWAYS_PREFER_UNBOX_TYPE(ty) ((ty) == SCHEME_LOCAL_TYPE_FIXNUM) - -#define IN_FIXNUM_RANGE_ON_ALL_PLATFORMS(v) (((v) >= -1073741824) && ((v) <= 1073741823)) - typedef struct Scheme_Local { Scheme_Inclhash_Object iso; /* keyex used for flags and type info (and can't be hashed) */ mzshort position; @@ -3277,7 +3300,7 @@ void scheme_add_global_constant_symbol(Scheme_Object *name, Scheme_Object *v, Sc #define GLOBAL_FOLDING_PRIM_UNARY_INLINED(name, func, a1, a2, a3, env) do {\ Scheme_Object *p; \ p = scheme_make_folding_prim(func, name, a1, a2, a3); \ - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; \ + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); \ scheme_add_global_constant(name, p, env); \ } while(0) diff --git a/src/racket/src/string.c b/src/racket/src/string.c index 7c6661dcce..ecd620d7d2 100644 --- a/src/racket/src/string.c +++ b/src/racket/src/string.c @@ -403,8 +403,8 @@ scheme_init_string (Scheme_Env *env) SCHEME_SET_CHAR_STRING_IMMUTABLE(banner_str); p = scheme_make_folding_prim(string_p, "string?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("string?", p, env); scheme_add_global_constant("make-string", @@ -424,12 +424,12 @@ scheme_init_string (Scheme_Env *env) env); p = scheme_make_immed_prim(scheme_checked_string_ref, "string-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("string-ref", p, env); p = scheme_make_immed_prim(scheme_checked_string_set, "string-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("string-set!", p, env); scheme_add_global_constant("string=?", @@ -678,8 +678,8 @@ scheme_init_string (Scheme_Env *env) env); p = scheme_make_folding_prim(byte_string_p, "bytes?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_NARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("bytes?", p, env); scheme_add_global_constant("make-bytes", @@ -703,11 +703,11 @@ scheme_init_string (Scheme_Env *env) env); p = scheme_make_immed_prim(scheme_checked_byte_string_ref, "bytes-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("bytes-ref", p, env); p = scheme_make_immed_prim(scheme_checked_byte_string_set, "bytes-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("bytes-set!", p, env); scheme_add_global_constant("bytes=?", diff --git a/src/racket/src/struct.c b/src/racket/src/struct.c index c57ec32185..5debdee3c9 100644 --- a/src/racket/src/struct.c +++ b/src/racket/src/struct.c @@ -794,7 +794,7 @@ scheme_init_struct (Scheme_Env *env) p = scheme_make_prim_w_arity(scheme_extract_checked_procedure, "checked-procedure-check-and-extract", 5, 5); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("checked-procedure-check-and-extract", p, env); } diff --git a/src/racket/src/symbol.c b/src/racket/src/symbol.c index 75d72226c2..c7400f1919 100644 --- a/src/racket/src/symbol.c +++ b/src/racket/src/symbol.c @@ -324,8 +324,8 @@ scheme_init_symbol (Scheme_Env *env) Scheme_Object *p; p = scheme_make_folding_prim(symbol_p_prim, "symbol?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("symbol?", p, env); p = scheme_make_folding_prim(symbol_unreadable_p_prim, "symbol-unreadable?", 1, 1, 1); diff --git a/src/racket/src/vector.c b/src/racket/src/vector.c index e65b4a265b..8d25285186 100644 --- a/src/racket/src/vector.c +++ b/src/racket/src/vector.c @@ -73,8 +73,8 @@ scheme_init_vector (Scheme_Env *env) REGISTER_SO(scheme_vector_p_proc); p = scheme_make_folding_prim(vector_p, "vector?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("vector?", p, env); scheme_vector_p_proc = p; @@ -87,23 +87,23 @@ scheme_init_vector (Scheme_Env *env) REGISTER_SO(scheme_vector_proc); p = scheme_make_immed_prim(vector, "vector", 0, -1); scheme_vector_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("vector", p, env); REGISTER_SO(scheme_vector_immutable_proc); p = scheme_make_immed_prim(vector_immutable, "vector-immutable", 0, -1); scheme_vector_immutable_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("vector-immutable", p, env); p = scheme_make_folding_prim(vector_length, "vector-length", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); scheme_add_global_constant("vector-length", p, env); REGISTER_SO(scheme_vector_ref_proc); @@ -111,7 +111,7 @@ scheme_init_vector (Scheme_Env *env) "vector-ref", 2, 2); scheme_vector_ref_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); scheme_add_global_constant("vector-ref", p, env); REGISTER_SO(scheme_vector_set_proc); @@ -119,7 +119,7 @@ scheme_init_vector (Scheme_Env *env) "vector-set!", 3, 3); scheme_vector_set_proc = p; - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("vector-set!", p, env); scheme_add_global_constant("vector->list", @@ -173,84 +173,84 @@ scheme_init_unsafe_vector (Scheme_Env *env) REGISTER_SO(scheme_unsafe_vector_length_proc); p = scheme_make_immed_prim(unsafe_vector_len, "unsafe-vector-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-vector-length", p, env); scheme_unsafe_vector_length_proc = p; p = scheme_make_immed_prim(unsafe_vector_star_len, "unsafe-vector*-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-vector*-length", p, env); p = scheme_make_immed_prim(unsafe_vector_ref, "unsafe-vector-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-vector-ref", p, env); p = scheme_make_immed_prim(unsafe_vector_star_ref, "unsafe-vector*-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-vector*-ref", p, env); p = scheme_make_immed_prim(unsafe_vector_set, "unsafe-vector-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-vector-set!", p, env); p = scheme_make_immed_prim(unsafe_vector_star_set, "unsafe-vector*-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-vector*-set!", p, env); p = scheme_make_immed_prim(unsafe_struct_ref, "unsafe-struct-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-struct-ref", p, env); p = scheme_make_immed_prim(unsafe_struct_star_ref, "unsafe-struct*-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-struct*-ref", p, env); p = scheme_make_immed_prim(unsafe_struct_set, "unsafe-struct-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-struct-set!", p, env); p = scheme_make_immed_prim(unsafe_struct_star_set, "unsafe-struct*-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-struct*-set!", p, env); p = scheme_make_immed_prim(unsafe_string_len, "unsafe-string-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-string-length", p, env); p = scheme_make_immed_prim(unsafe_string_ref, "unsafe-string-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-string-ref", p, env); p = scheme_make_immed_prim(unsafe_string_set, "unsafe-string-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-string-set!", p, env); p = scheme_make_immed_prim(unsafe_bytes_len, "unsafe-bytes-length", 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL); scheme_add_global_constant("unsafe-bytes-length", p, env); p = scheme_make_immed_prim(unsafe_bytes_ref, "unsafe-bytes-ref", 2, 2); - SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_UNSAFE_OMITABLE - | SCHEME_PRIM_IS_OMITABLE); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_IS_UNSAFE_OMITABLE + | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("unsafe-bytes-ref", p, env); p = scheme_make_immed_prim(unsafe_bytes_set, "unsafe-bytes-set!", 3, 3); - SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_NARY_INLINED); scheme_add_global_constant("unsafe-bytes-set!", p, env); }