summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-08-13 14:24:44 +0200
committerAndy Wingo <wingo@pobox.com>2018-08-13 14:30:01 +0200
commitd4abe8bbed4327ae46b493d3256c792ef6b3bb7b (patch)
tree33930b663295aeba596e0647f4ec72db2812f272 /libguile/vm-engine.c
parent11940f4c72102fc3f5147aa5529c5ed77ff09fcc (diff)
downloadguile-d4abe8bbed4327ae46b493d3256c792ef6b3bb7b.tar.gz
Avoid needless 64-bit args on 32-bit machines for some intrinsics
* libguile/intrinsics.h: * libguile/intrinsics.c (string_set_x): Change to take size_t and u32 as args. (allocate_words): Change to take size_t as arg. * libguile/vm.c (expand_apply_argument): Rename from rest_arg_length, and also handle the stack manipulation. * libguile/vm-engine.c (expand-apply-argument): Update for intrinsic change. (call-scm-sz-u32): Rename from call-scm-u64-u64, as it matches its uses and will compile better on 32-bit systems. * module/system/vm/assembler.scm (define-scm-sz-u32-intrinsic): (string-set!): Update for new instrinsic call inst. * libguile/jit.c (compile_call_scm_sz_u32): Adapt.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c20
1 files changed, 4 insertions, 16 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 488d4c7fb..0bffabf65 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -1016,21 +1016,9 @@ VM_NAME (scm_thread *thread)
*/
VM_DEFINE_OP (30, expand_apply_argument, "expand-apply-argument", OP1 (X32))
{
- int list_len;
- SCM list;
-
- list = SP_REF (0);
-
SYNC_IP ();
- list_len = CALL_INTRINSIC (rest_arg_length, (list));
-
- ALLOC_FRAME (FRAME_LOCALS_COUNT () - 1 + list_len);
-
- while (list_len--)
- {
- SP_SET (list_len, SCM_CAR (list));
- list = SCM_CDR (list);
- }
+ CALL_INTRINSIC (expand_apply_argument, (thread));
+ CACHE_SP ();
NEXT (1);
}
@@ -1380,10 +1368,10 @@ VM_NAME (scm_thread *thread)
NEXT (2);
}
- VM_DEFINE_OP (53, call_scm_u64_u64, "call-scm-u64-u64", OP2 (X8_S8_S8_S8, C32))
+ VM_DEFINE_OP (53, call_scm_sz_u32, "call-scm-sz-u32", OP2 (X8_S8_S8_S8, C32))
{
uint8_t a, b, c;
- scm_t_scm_u64_u64_intrinsic intrinsic;
+ scm_t_scm_sz_u32_intrinsic intrinsic;
UNPACK_8_8_8 (op, a, b, c);
intrinsic = intrinsics[ip[1]];