mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-19 02:00:26 +02:00
Add specialize-primcalls pass; bump objcode version.
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump. * libguile/objcodes.c (process_dynamic_segment): Expect the minor version to be present and, while we are still banging on the VM, exactly equal to SCM_OBJCODE_MINOR_VERSION. * libguile/vm-engine.c: Renumber ops. Remove the general make-vector. Rename constant-FOO to FOO/immediate. Remove struct-ref and struct-set!, replace with struct-ref/immediate and struct-set!/immediate. * module/Makefile.am: * module/language/cps/specialize-primcalls.scm: New pass, inlines FOO to FOO/immediate -- e.g. vector-ref to vector-ref/immediate. * module/language/cps/arities.scm: Remove struct-set! case, now that there is no struct-set! opcode. * module/language/cps/compile-rtl.scm (compile-fun): Remove dispatch to constant-FOO versus FOO here -- that decision is made by specialize-primcalls. (optimize): Add specialize-primcalls pass. * module/language/cps/dfg.scm (constant-needs-allocation?): Adapt to name changes. * module/language/tree-il/primitives.scm (*interesting-primitive-names*): (*primitive-constructors*): Add allocate-struct. * module/system/vm/assembler.scm (*bytecode-major-version*): (*bytecode-minor-version*, link-dynamic-section): Write minor version into resulting image.
This commit is contained in:
parent
863dd87362
commit
4c906ad5a5
10 changed files with 220 additions and 172 deletions
|
@ -2500,29 +2500,13 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
RETURN (scm_logxor (x, y));
|
||||
}
|
||||
|
||||
/* make-vector dst:8 length:8 init:8
|
||||
*
|
||||
* Make a vector and write it to DST. The vector will have space for
|
||||
* LENGTH slots. They will be filled with the value in slot INIT.
|
||||
*/
|
||||
VM_DEFINE_OP (92, make_vector, "make-vector", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, length, init;
|
||||
|
||||
SCM_UNPACK_RTL_8_8_8 (op, dst, length, init);
|
||||
|
||||
LOCAL_SET (dst, scm_make_vector (LOCAL_REF (length), LOCAL_REF (init)));
|
||||
|
||||
NEXT (1);
|
||||
}
|
||||
|
||||
/* constant-make-vector dst:8 length:8 init:8
|
||||
/* make-vector/immediate dst:8 length:8 init:8
|
||||
*
|
||||
* Make a short vector of known size and write it to DST. The vector
|
||||
* will have space for LENGTH slots, an immediate value. They will be
|
||||
* filled with the value in slot INIT.
|
||||
*/
|
||||
VM_DEFINE_OP (93, constant_make_vector, "constant-make-vector", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (92, make_vector_immediate, "make-vector/immediate", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, init;
|
||||
scm_t_int32 length, n;
|
||||
|
@ -2542,7 +2526,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
*
|
||||
* Store the length of the vector in SRC in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (94, vector_length, "vector-length", OP1 (U8_U12_U12) | OP_DST)
|
||||
VM_DEFINE_OP (93, vector_length, "vector-length", OP1 (U8_U12_U12) | OP_DST)
|
||||
{
|
||||
ARGS1 (vect);
|
||||
if (SCM_LIKELY (SCM_I_IS_VECTOR (vect)))
|
||||
|
@ -2559,7 +2543,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
* Fetch the item at position IDX in the vector in SRC, and store it
|
||||
* in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (95, vector_ref, "vector-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (94, vector_ref, "vector-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_signed_bits i = 0;
|
||||
ARGS2 (vect, idx);
|
||||
|
@ -2575,12 +2559,12 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
}
|
||||
}
|
||||
|
||||
/* constant-vector-ref dst:8 src:8 idx:8
|
||||
/* vector-ref/immediate dst:8 src:8 idx:8
|
||||
*
|
||||
* Fill DST with the item IDX elements into the vector at SRC. Useful
|
||||
* for building data types using vectors.
|
||||
*/
|
||||
VM_DEFINE_OP (96, constant_vector_ref, "constant-vector-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (95, vector_ref_immediate, "vector-ref/immediate", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, src, idx;
|
||||
SCM v;
|
||||
|
@ -2599,7 +2583,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
*
|
||||
* Store SRC into the vector DST at index IDX.
|
||||
*/
|
||||
VM_DEFINE_OP (97, vector_set, "vector-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (96, vector_set, "vector-set!", OP1 (U8_U8_U8_U8))
|
||||
{
|
||||
scm_t_uint8 dst, idx_var, src;
|
||||
SCM vect, idx, val;
|
||||
|
@ -2623,12 +2607,12 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
NEXT (1);
|
||||
}
|
||||
|
||||
/* constant-vector-set! dst:8 idx:8 src:8
|
||||
/* vector-set!/immediate dst:8 idx:8 src:8
|
||||
*
|
||||
* Store SRC into the vector DST at index IDX. Here IDX is an
|
||||
* immediate value.
|
||||
*/
|
||||
VM_DEFINE_OP (98, constant_vector_set, "constant-vector-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (97, vector_set_immediate, "vector-set!/immediate", OP1 (U8_U8_U8_U8))
|
||||
{
|
||||
scm_t_uint8 dst, idx, src;
|
||||
SCM vect, val;
|
||||
|
@ -2659,20 +2643,20 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
*
|
||||
* Store the vtable of SRC into DST.
|
||||
*/
|
||||
VM_DEFINE_OP (99, struct_vtable, "struct-vtable", OP1 (U8_U12_U12) | OP_DST)
|
||||
VM_DEFINE_OP (98, struct_vtable, "struct-vtable", OP1 (U8_U12_U12) | OP_DST)
|
||||
{
|
||||
ARGS1 (obj);
|
||||
VM_VALIDATE_STRUCT (obj, "struct_vtable");
|
||||
RETURN (SCM_STRUCT_VTABLE (obj));
|
||||
}
|
||||
|
||||
/* allocate-struct dst:8 vtable:8 nfields:8
|
||||
/* allocate-struct/immediate dst:8 vtable:8 nfields:8
|
||||
*
|
||||
* Allocate a new struct with VTABLE, and place it in DST. The struct
|
||||
* will be constructed with space for NFIELDS fields, which should
|
||||
* correspond to the field count of the VTABLE.
|
||||
*/
|
||||
VM_DEFINE_OP (100, allocate_struct, "allocate-struct", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (99, allocate_struct_immediate, "allocate-struct/immediate", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, vtable, nfields;
|
||||
SCM ret;
|
||||
|
@ -2686,79 +2670,60 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
NEXT (1);
|
||||
}
|
||||
|
||||
/* struct-ref dst:8 src:8 idx:8
|
||||
/* struct-ref/immediate dst:8 src:8 idx:8
|
||||
*
|
||||
* Fetch the item at slot IDX in the struct in SRC, and store it
|
||||
* in DST.
|
||||
* in DST. IDX is an immediate unsigned 8-bit value.
|
||||
*/
|
||||
VM_DEFINE_OP (101, struct_ref, "struct-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (100, struct_ref_immediate, "struct-ref/immediate", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
ARGS2 (obj, pos);
|
||||
scm_t_uint8 dst, src, idx;
|
||||
SCM obj;
|
||||
|
||||
SCM_UNPACK_RTL_8_8_8 (op, dst, src, idx);
|
||||
|
||||
obj = LOCAL_REF (src);
|
||||
|
||||
if (SCM_LIKELY (SCM_STRUCTP (obj)
|
||||
&& SCM_STRUCT_VTABLE_FLAG_IS_SET (obj,
|
||||
SCM_VTABLE_FLAG_SIMPLE)
|
||||
&& SCM_I_INUMP (pos)))
|
||||
{
|
||||
SCM vtable;
|
||||
scm_t_bits index, len;
|
||||
|
||||
/* True, an inum is a signed value, but cast to unsigned it will
|
||||
certainly be more than the length, so we will fall through if
|
||||
index is negative. */
|
||||
index = SCM_I_INUM (pos);
|
||||
vtable = SCM_STRUCT_VTABLE (obj);
|
||||
len = SCM_STRUCT_DATA_REF (vtable, scm_vtable_index_size);
|
||||
|
||||
if (SCM_LIKELY (index < len))
|
||||
{
|
||||
scm_t_bits *data = SCM_STRUCT_DATA (obj);
|
||||
RETURN (SCM_PACK (data[index]));
|
||||
}
|
||||
}
|
||||
&& idx < SCM_STRUCT_DATA_REF (SCM_STRUCT_VTABLE (obj),
|
||||
scm_vtable_index_size)))
|
||||
RETURN (SCM_STRUCT_SLOT_REF (obj, idx));
|
||||
|
||||
SYNC_IP ();
|
||||
RETURN (scm_struct_ref (obj, pos));
|
||||
RETURN (scm_struct_ref (obj, SCM_I_MAKINUM (idx)));
|
||||
}
|
||||
|
||||
/* struct-set! dst:8 idx:8 src:8
|
||||
/* struct-set!/immediate dst:8 idx:8 src:8
|
||||
*
|
||||
* Store SRC into the struct DST at slot IDX.
|
||||
* Store SRC into the struct DST at slot IDX. IDX is an immediate
|
||||
* unsigned 8-bit value.
|
||||
*/
|
||||
VM_DEFINE_OP (102, struct_set, "struct-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (101, struct_set_immediate, "struct-set!/immediate", OP1 (U8_U8_U8_U8))
|
||||
{
|
||||
scm_t_uint8 dst, idx, src;
|
||||
SCM obj, pos, val;
|
||||
|
||||
SCM obj, val;
|
||||
|
||||
SCM_UNPACK_RTL_8_8_8 (op, dst, idx, src);
|
||||
|
||||
obj = LOCAL_REF (dst);
|
||||
pos = LOCAL_REF (idx);
|
||||
val = LOCAL_REF (src);
|
||||
|
||||
|
||||
if (SCM_LIKELY (SCM_STRUCTP (obj)
|
||||
&& SCM_STRUCT_VTABLE_FLAG_IS_SET (obj,
|
||||
SCM_VTABLE_FLAG_SIMPLE)
|
||||
&& SCM_STRUCT_VTABLE_FLAG_IS_SET (obj,
|
||||
SCM_VTABLE_FLAG_SIMPLE_RW)
|
||||
&& SCM_I_INUMP (pos)))
|
||||
&& idx < SCM_STRUCT_DATA_REF (SCM_STRUCT_VTABLE (obj),
|
||||
scm_vtable_index_size)))
|
||||
{
|
||||
SCM vtable;
|
||||
scm_t_bits index, len;
|
||||
|
||||
/* See above regarding index being >= 0. */
|
||||
index = SCM_I_INUM (pos);
|
||||
vtable = SCM_STRUCT_VTABLE (obj);
|
||||
len = SCM_STRUCT_DATA_REF (vtable, scm_vtable_index_size);
|
||||
if (SCM_LIKELY (index < len))
|
||||
{
|
||||
scm_t_bits *data = SCM_STRUCT_DATA (obj);
|
||||
data[index] = SCM_UNPACK (val);
|
||||
NEXT (1);
|
||||
}
|
||||
SCM_STRUCT_SLOT_SET (obj, idx, val);
|
||||
NEXT (1);
|
||||
}
|
||||
|
||||
SYNC_IP ();
|
||||
scm_struct_set_x (obj, pos, val);
|
||||
scm_struct_set_x (obj, SCM_I_MAKINUM (idx), val);
|
||||
NEXT (1);
|
||||
}
|
||||
|
||||
|
@ -2766,7 +2731,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
*
|
||||
* Store the vtable of SRC into DST.
|
||||
*/
|
||||
VM_DEFINE_OP (103, class_of, "class-of", OP1 (U8_U12_U12) | OP_DST)
|
||||
VM_DEFINE_OP (102, class_of, "class-of", OP1 (U8_U12_U12) | OP_DST)
|
||||
{
|
||||
ARGS1 (obj);
|
||||
if (SCM_INSTANCEP (obj))
|
||||
|
@ -2781,7 +2746,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
* DST. Unlike struct-ref, IDX is an 8-bit immediate value, not an
|
||||
* index into the stack.
|
||||
*/
|
||||
VM_DEFINE_OP (104, slot_ref, "slot-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (103, slot_ref, "slot-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, src, idx;
|
||||
SCM_UNPACK_RTL_8_8_8 (op, dst, src, idx);
|
||||
|
@ -2795,7 +2760,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
* Store SRC into slot IDX of the struct in DST. Unlike struct-set!,
|
||||
* IDX is an 8-bit immediate value, not an index into the stack.
|
||||
*/
|
||||
VM_DEFINE_OP (105, slot_set, "slot-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (104, slot_set, "slot-set!", OP1 (U8_U8_U8_U8))
|
||||
{
|
||||
scm_t_uint8 dst, idx, src;
|
||||
SCM_UNPACK_RTL_8_8_8 (op, dst, idx, src);
|
||||
|
@ -2816,7 +2781,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
* from the instruction pointer, and store into DST. LEN is a byte
|
||||
* length. OFFSET is signed.
|
||||
*/
|
||||
VM_DEFINE_OP (106, load_typed_array, "load-typed-array", OP3 (U8_U8_U8_U8, N32, U32) | OP_DST)
|
||||
VM_DEFINE_OP (105, load_typed_array, "load-typed-array", OP3 (U8_U8_U8_U8, N32, U32) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, type, shape;
|
||||
scm_t_int32 offset;
|
||||
|
@ -2836,7 +2801,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
*
|
||||
* Make a new array with TYPE, FILL, and BOUNDS, storing it in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (107, make_array, "make-array", OP2 (U8_U12_U12, X8_U12_U12) | OP_DST)
|
||||
VM_DEFINE_OP (106, make_array, "make-array", OP2 (U8_U12_U12, X8_U12_U12) | OP_DST)
|
||||
{
|
||||
scm_t_uint16 dst, type, fill, bounds;
|
||||
SCM_UNPACK_RTL_12_12 (op, dst, type);
|
||||
|
@ -2934,42 +2899,42 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
RETURN (scm_bytevector_ ## fn_stem ## _native_ref (bv, idx)); \
|
||||
} while (0)
|
||||
|
||||
VM_DEFINE_OP (108, bv_u8_ref, "bv-u8-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (107, bv_u8_ref, "bv-u8-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FIXABLE_INT_REF (u8, u8, uint8, 1);
|
||||
|
||||
VM_DEFINE_OP (109, bv_s8_ref, "bv-s8-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (108, bv_s8_ref, "bv-s8-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FIXABLE_INT_REF (s8, s8, int8, 1);
|
||||
|
||||
VM_DEFINE_OP (110, bv_u16_ref, "bv-u16-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (109, bv_u16_ref, "bv-u16-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FIXABLE_INT_REF (u16, u16_native, uint16, 2);
|
||||
|
||||
VM_DEFINE_OP (111, bv_s16_ref, "bv-s16-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (110, bv_s16_ref, "bv-s16-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FIXABLE_INT_REF (s16, s16_native, int16, 2);
|
||||
|
||||
VM_DEFINE_OP (112, bv_u32_ref, "bv-u32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (111, bv_u32_ref, "bv-u32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
#if SIZEOF_VOID_P > 4
|
||||
BV_FIXABLE_INT_REF (u32, u32_native, uint32, 4);
|
||||
#else
|
||||
BV_INT_REF (u32, uint32, 4);
|
||||
#endif
|
||||
|
||||
VM_DEFINE_OP (113, bv_s32_ref, "bv-s32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (112, bv_s32_ref, "bv-s32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
#if SIZEOF_VOID_P > 4
|
||||
BV_FIXABLE_INT_REF (s32, s32_native, int32, 4);
|
||||
#else
|
||||
BV_INT_REF (s32, int32, 4);
|
||||
#endif
|
||||
|
||||
VM_DEFINE_OP (114, bv_u64_ref, "bv-u64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (113, bv_u64_ref, "bv-u64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_INT_REF (u64, uint64, 8);
|
||||
|
||||
VM_DEFINE_OP (115, bv_s64_ref, "bv-s64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (114, bv_s64_ref, "bv-s64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_INT_REF (s64, int64, 8);
|
||||
|
||||
VM_DEFINE_OP (116, bv_f32_ref, "bv-f32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (115, bv_f32_ref, "bv-f32-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FLOAT_REF (f32, ieee_single, float, 4);
|
||||
|
||||
VM_DEFINE_OP (117, bv_f64_ref, "bv-f64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
VM_DEFINE_OP (116, bv_f64_ref, "bv-f64-ref", OP1 (U8_U8_U8_U8) | OP_DST)
|
||||
BV_FLOAT_REF (f64, ieee_double, double, 8);
|
||||
|
||||
/* bv-u8-set! dst:8 idx:8 src:8
|
||||
|
@ -3073,42 +3038,42 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
|
|||
NEXT (1); \
|
||||
} while (0)
|
||||
|
||||
VM_DEFINE_OP (118, bv_u8_set, "bv-u8-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (117, bv_u8_set, "bv-u8-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FIXABLE_INT_SET (u8, u8, uint8, 0, SCM_T_UINT8_MAX, 1);
|
||||
|
||||
VM_DEFINE_OP (119, bv_s8_set, "bv-s8-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (118, bv_s8_set, "bv-s8-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FIXABLE_INT_SET (s8, s8, int8, SCM_T_INT8_MIN, SCM_T_INT8_MAX, 1);
|
||||
|
||||
VM_DEFINE_OP (120, bv_u16_set, "bv-u16-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (119, bv_u16_set, "bv-u16-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FIXABLE_INT_SET (u16, u16_native, uint16, 0, SCM_T_UINT16_MAX, 2);
|
||||
|
||||
VM_DEFINE_OP (121, bv_s16_set, "bv-s16-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (120, bv_s16_set, "bv-s16-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FIXABLE_INT_SET (s16, s16_native, int16, SCM_T_INT16_MIN, SCM_T_INT16_MAX, 2);
|
||||
|
||||
VM_DEFINE_OP (122, bv_u32_set, "bv-u32-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (121, bv_u32_set, "bv-u32-set!", OP1 (U8_U8_U8_U8))
|
||||
#if SIZEOF_VOID_P > 4
|
||||
BV_FIXABLE_INT_SET (u32, u32_native, uint32, 0, SCM_T_UINT32_MAX, 4);
|
||||
#else
|
||||
BV_INT_SET (u32, uint32, 4);
|
||||
#endif
|
||||
|
||||
VM_DEFINE_OP (123, bv_s32_set, "bv-s32-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (122, bv_s32_set, "bv-s32-set!", OP1 (U8_U8_U8_U8))
|
||||
#if SIZEOF_VOID_P > 4
|
||||
BV_FIXABLE_INT_SET (s32, s32_native, int32, SCM_T_INT32_MIN, SCM_T_INT32_MAX, 4);
|
||||
#else
|
||||
BV_INT_SET (s32, int32, 4);
|
||||
#endif
|
||||
|
||||
VM_DEFINE_OP (124, bv_u64_set, "bv-u64-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (123, bv_u64_set, "bv-u64-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_INT_SET (u64, uint64, 8);
|
||||
|
||||
VM_DEFINE_OP (125, bv_s64_set, "bv-s64-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (124, bv_s64_set, "bv-s64-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_INT_SET (s64, int64, 8);
|
||||
|
||||
VM_DEFINE_OP (126, bv_f32_set, "bv-f32-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (125, bv_f32_set, "bv-f32-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FLOAT_SET (f32, ieee_single, float, 4);
|
||||
|
||||
VM_DEFINE_OP (127, bv_f64_set, "bv-f64-set!", OP1 (U8_U8_U8_U8))
|
||||
VM_DEFINE_OP (126, bv_f64_set, "bv-f64-set!", OP1 (U8_U8_U8_U8))
|
||||
BV_FLOAT_SET (f64, ieee_double, double, 8);
|
||||
|
||||
END_DISPATCH_SWITCH;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue