guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.0-122-gad301


From: Andy Wingo
Subject: [Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.0-122-gad301b6
Date: Wed, 23 Mar 2011 17:22:53 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=ad301b6d58c2ca054ebe1fdfaf7357e61311a977

The branch, stable-2.0 has been updated
       via  ad301b6d58c2ca054ebe1fdfaf7357e61311a977 (commit)
      from  8099352769c8b8ec8730f87f7fa6c8771b64efb9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ad301b6d58c2ca054ebe1fdfaf7357e61311a977
Author: Andy Wingo <address@hidden>
Date:   Wed Mar 23 17:05:28 2011 +0100

    fix a failure to sync regs in vm bytevector ops
    
    * libguile/vm-i-scheme.c (BV_SET_WITH_ENDIANNESS, BV_FIXABLE_INT_SET)
      (BV_INT_SET, BV_FLOAT_SET): Sync registers before dispatching to the C
      function.

-----------------------------------------------------------------------

Summary of changes:
 libguile/vm-i-scheme.c |   54 ++++++++++++++++++++++++++++-------------------
 1 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c
index 19b48c5..9e249bc 100644
--- a/libguile/vm-i-scheme.c
+++ b/libguile/vm-i-scheme.c
@@ -821,6 +821,7 @@ BV_FLOAT_REF (f64, ieee_double, double, 8)
     goto VM_LABEL (bv_##stem##_native_set);                             \
   {                                                                     \
     SCM bv, idx, val; POP (val); POP (idx); POP (bv);                   \
+    SYNC_REGISTER ();                                                   \
     scm_bytevector_##fn_stem##_set_x (bv, idx, val, endianness);        \
     NEXT;                                                               \
   }                                                                     \
@@ -865,7 +866,10 @@ BV_SET_WITH_ENDIANNESS (f64, ieee_double)
                   && (j <= max)))                                      \
     *int_ptr = (scm_t_ ## type) j;                                     \
   else                                                                 \
-    scm_bytevector_ ## fn_stem ## _set_x (bv, idx, val);               \
+    {                                                                   \
+      SYNC_REGISTER ();                                                 \
+      scm_bytevector_ ## fn_stem ## _set_x (bv, idx, val);             \
+    }                                                                   \
   NEXT;                                                                        
\
 }
 
@@ -886,29 +890,35 @@ BV_SET_WITH_ENDIANNESS (f64, ieee_double)
                   && (ALIGNED_P (int_ptr, scm_t_ ## type))))           \
     *int_ptr = scm_to_ ## type (val);                                  \
   else                                                                 \
-    scm_bytevector_ ## stem ## _native_set_x (bv, idx, val);           \
-  NEXT;                                                                        
\
+    {                                                                   \
+      SYNC_REGISTER ();                                                 \
+      scm_bytevector_ ## stem ## _native_set_x (bv, idx, val);         \
+    }                                                                   \
+  NEXT;                                                                 \
 }
 
-#define BV_FLOAT_SET(stem, fn_stem, type, size)                        \
-{                                                              \
-  scm_t_signed_bits i = 0;                                     \
-  SCM bv, idx, val;                                            \
-  type *float_ptr;                                             \
-                                                               \
-  POP (val); POP (idx); POP (bv);                              \
-  VM_VALIDATE_BYTEVECTOR (bv, "bv-" #stem "-set");              \
-  i = SCM_I_INUM (idx);                                                \
-  float_ptr = (type *) (SCM_BYTEVECTOR_CONTENTS (bv) + i);     \
-                                                               \
-  if (SCM_LIKELY (SCM_I_INUMP (idx)                            \
-                  && (i >= 0)                                  \
-                  && (i + size <= SCM_BYTEVECTOR_LENGTH (bv))  \
-                  && (ALIGNED_P (float_ptr, type))))           \
-    *float_ptr = scm_to_double (val);                          \
-  else                                                         \
-    scm_bytevector_ ## fn_stem ## _native_set_x (bv, idx, val);        \
-  NEXT;                                                                \
+#define BV_FLOAT_SET(stem, fn_stem, type, size)                         \
+{                                                                       \
+  scm_t_signed_bits i = 0;                                              \
+  SCM bv, idx, val;                                                     \
+  type *float_ptr;                                                      \
+                                                                        \
+  POP (val); POP (idx); POP (bv);                                       \
+  VM_VALIDATE_BYTEVECTOR (bv, "bv-" #stem "-set");                      \
+  i = SCM_I_INUM (idx);                                                 \
+  float_ptr = (type *) (SCM_BYTEVECTOR_CONTENTS (bv) + i);              \
+                                                                        \
+  if (SCM_LIKELY (SCM_I_INUMP (idx)                                     \
+                  && (i >= 0)                                           \
+                  && (i + size <= SCM_BYTEVECTOR_LENGTH (bv))           \
+                  && (ALIGNED_P (float_ptr, type))))                    \
+    *float_ptr = scm_to_double (val);                                   \
+  else                                                                  \
+    {                                                                   \
+      SYNC_REGISTER ();                                                 \
+      scm_bytevector_ ## fn_stem ## _native_set_x (bv, idx, val);       \
+    }                                                                   \
+  NEXT;                                                                 \
 }
 
 VM_DEFINE_INSTRUCTION (200, bv_u8_set, "bv-u8-set", 0, 3, 0)


hooks/post-receive
-- 
GNU Guile



reply via email to

[Prev in Thread] Current Thread [Next in Thread]