change representation of optimization flags on primitives
Makes room for a lot more.
This commit is contained in:
parent
42f74b5982
commit
c5d3178602
|
@ -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
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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("char<?", char_lt, 2, -1, 1, env);
|
||||
|
|
|
@ -317,8 +317,8 @@ void scheme_init_file(Scheme_Env *env)
|
|||
unix_symbol = scheme_intern_symbol("unix");
|
||||
|
||||
p = scheme_make_prim_w_arity(path_p, "path?", 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("path?", p, env);
|
||||
|
||||
scheme_add_global_constant("path-for-some-system?",
|
||||
|
|
|
@ -79,6 +79,8 @@ static void ASSERT_SUSPEND_BREAK_ZERO() {
|
|||
/* globals */
|
||||
SHARED_OK int scheme_defining_primitives; /* set to 1 during start-up */
|
||||
|
||||
SHARED_OK int scheme_prim_opt_flags[(1 << SCHEME_PRIM_OPT_INDEX_SIZE)];
|
||||
|
||||
READ_ONLY Scheme_Object scheme_void[1]; /* the void constant */
|
||||
READ_ONLY Scheme_Object *scheme_values_func; /* the function bound to `values' */
|
||||
READ_ONLY Scheme_Object *scheme_procedure_p_proc;
|
||||
|
@ -246,8 +248,8 @@ scheme_init_fun (Scheme_Env *env)
|
|||
REGISTER_SO(scheme_procedure_arity_includes_proc);
|
||||
|
||||
o = scheme_make_folding_prim(procedure_p, "procedure?", 1, 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= (SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_OMITABLE);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_OMITABLE);
|
||||
scheme_add_global_constant("procedure?", o, env);
|
||||
|
||||
scheme_procedure_p_proc = o;
|
||||
|
@ -293,10 +295,10 @@ scheme_init_fun (Scheme_Env *env)
|
|||
"values",
|
||||
0, -1,
|
||||
0, -1);
|
||||
SCHEME_PRIM_PROC_FLAGS(scheme_values_func) |= (SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_BINARY_INLINED
|
||||
| SCHEME_PRIM_IS_NARY_INLINED
|
||||
| SCHEME_PRIM_IS_OMITABLE);
|
||||
SCHEME_PRIM_PROC_FLAGS(scheme_values_func) |= 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("values",
|
||||
scheme_values_func,
|
||||
env);
|
||||
|
@ -455,7 +457,7 @@ scheme_init_fun (Scheme_Env *env)
|
|||
o = scheme_make_prim_w_arity(extract_one_cc_mark,
|
||||
"continuation-mark-set-first",
|
||||
2, 4);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= SCHEME_PRIM_IS_BINARY_INLINED;
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED);
|
||||
scheme_add_global_constant("continuation-mark-set-first", o, env);
|
||||
|
||||
scheme_add_global_constant("call-with-immediate-continuation-mark",
|
||||
|
@ -479,13 +481,13 @@ scheme_init_fun (Scheme_Env *env)
|
|||
scheme_void_proc = scheme_make_folding_prim(void_func,
|
||||
"void",
|
||||
0, -1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(scheme_void_proc) |= SCHEME_PRIM_IS_OMITABLE;
|
||||
SCHEME_PRIM_PROC_FLAGS(scheme_void_proc) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE);
|
||||
scheme_add_global_constant("void", scheme_void_proc, env);
|
||||
|
||||
|
||||
o = scheme_make_folding_prim(void_p, "void?", 1, 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= (SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_OMITABLE);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_OMITABLE);
|
||||
scheme_add_global_constant("void?", o, env);
|
||||
|
||||
#ifdef TIME_SYNTAX
|
||||
|
@ -553,7 +555,7 @@ scheme_init_fun (Scheme_Env *env)
|
|||
o = scheme_make_folding_prim(scheme_procedure_arity_includes,
|
||||
"procedure-arity-includes?",
|
||||
2, 3, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= SCHEME_PRIM_IS_BINARY_INLINED;
|
||||
SCHEME_PRIM_PROC_FLAGS(o) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED);
|
||||
scheme_procedure_arity_includes_proc = o;
|
||||
scheme_add_global_constant("procedure-arity-includes?", o, env);
|
||||
|
||||
|
@ -910,6 +912,26 @@ int scheme_has_method_property(Scheme_Object *code)
|
|||
return SCHEME_TRUEP(scheme_stx_property(code, is_method_symbol, NULL));
|
||||
}
|
||||
|
||||
int scheme_intern_prim_opt_flags(int flags)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!flags) return 0;
|
||||
|
||||
for (i = 1; i < (1 << SCHEME_PRIM_OPT_INDEX_SIZE); i++) {
|
||||
if (scheme_prim_opt_flags[i] == flags)
|
||||
return (i << SCHEME_PRIM_OPT_INDEX_SHIFT);
|
||||
else if (!scheme_prim_opt_flags[i]) {
|
||||
scheme_prim_opt_flags[i] = flags;
|
||||
return (i << SCHEME_PRIM_OPT_INDEX_SHIFT);
|
||||
}
|
||||
}
|
||||
|
||||
scheme_signal_error("too many flag combinations");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*========================================================================*/
|
||||
/* prompt helpers */
|
||||
/*========================================================================*/
|
||||
|
|
|
@ -487,7 +487,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
newenv);
|
||||
|
||||
p = scheme_make_prim_w_arity(scheme_future, "future", 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("future", p, newenv);
|
||||
|
||||
scheme_add_global_constant(
|
||||
|
@ -500,7 +500,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
newenv);
|
||||
|
||||
p = scheme_make_prim_w_arity(touch, "touch", 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("touch", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -508,7 +508,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"current-future",
|
||||
0,
|
||||
0);
|
||||
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("current-future", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -517,7 +517,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
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("fsemaphore?", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -525,7 +525,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"make-fsemaphore",
|
||||
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("make-fsemaphore", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -533,7 +533,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"fsemaphore-count",
|
||||
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("fsemaphore-count", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -541,7 +541,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"fsemaphore-wait",
|
||||
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("fsemaphore-wait", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -549,7 +549,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"fsemaphore-post",
|
||||
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("fsemaphore-post", p, newenv);
|
||||
|
||||
p = scheme_make_immed_prim(
|
||||
|
@ -557,7 +557,7 @@ void scheme_init_futures(Scheme_Env *newenv)
|
|||
"fsemaphore-try-wait?",
|
||||
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("fsemaphore-try-wait?", p, newenv);
|
||||
|
||||
GLOBAL_PRIM_W_ARITY("would-be-future", would_be_future, 1, 1, newenv);
|
||||
|
|
|
@ -410,7 +410,7 @@ static int no_sync_change(Scheme_Object *obj, int fuel)
|
|||
{
|
||||
Scheme_App2_Rec *app = (Scheme_App2_Rec *)obj;
|
||||
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)
|
||||
&& (IS_NAMED_PRIM(app->rator, "car")
|
||||
|| IS_NAMED_PRIM(app->rator, "cdr")
|
||||
|| IS_NAMED_PRIM(app->rator, "cadr")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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+ <x> 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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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=?",
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user