summaryrefslogtreecommitdiff
path: root/libguile/vm.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2010-05-07 15:59:50 +0200
committerLudovic Courtès <ludo@gnu.org>2010-05-07 15:59:50 +0200
commitb79ba0b01e7dc89d2ba8da2c5cf4e200f4bb5de1 (patch)
treedcb4fc233724821679cfc4363e0139a63fc84767 /libguile/vm.c
parent36b5e394072c94b062a69a6d77b418e16ce70fce (diff)
downloadguile-b79ba0b01e7dc89d2ba8da2c5cf4e200f4bb5de1.tar.gz
Attempt to guarantee 8-byte alignment of on-stack frame objects.
* libguile/vm.c (vm_dispatch_hook): Make FRAME a union with a `double' member.
Diffstat (limited to 'libguile/vm.c')
-rw-r--r--libguile/vm.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libguile/vm.c b/libguile/vm.c
index 4f766cbeb..1f3e1f85b 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -186,7 +186,11 @@ vm_dispatch_hook (SCM vm, int hook_num)
struct scm_vm *vp;
SCM hook;
struct scm_frame c_frame;
- scm_t_cell frame;
+ union
+ {
+ double alignment;
+ scm_t_cell cell;
+ } frame;
SCM args[1];
vp = SCM_VM_DATA (vm);
@@ -211,8 +215,8 @@ vm_dispatch_hook (SCM vm, int hook_num)
c_frame.sp = vp->sp;
c_frame.ip = vp->ip;
c_frame.offset = 0;
- frame.word_0 = SCM_PACK (scm_tc7_frame);
- frame.word_1 = PTR2SCM (&c_frame);
+ frame.cell.word_0 = SCM_PACK (scm_tc7_frame);
+ frame.cell.word_1 = PTR2SCM (&c_frame);
args[0] = PTR2SCM (&frame);
scm_c_run_hookn (hook, args, 1);