[Openmcl-cvs-notifications] r7996 - /trunk/ccl/level-0/X86/x86-misc.lisp

rme at clozure.com rme at clozure.com
Thu Jan 3 22:48:06 MST 2008


Author: rme
Date: Fri Jan  4 00:48:06 2008
New Revision: 7996

Log:
Use imm2 to hold pointers, rather than assuming/hoping that the addresses
will be 64-bit aligned, and hence fixnum-tagged.


Modified:
    trunk/ccl/level-0/X86/x86-misc.lisp

Modified: trunk/ccl/level-0/X86/x86-misc.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/ccl/level-0/X86/x86-misc.lisp (original)
+++ trunk/ccl/level-0/X86/x86-misc.lisp Fri Jan  4 00:48:06 2008
@@ -252,9 +252,9 @@
   (save-simple-frame)
   (trap-unless-typecode=3D ptr x8664::subtag-macptr)
   (call-subprim .SPgetu64)
-  (macptr-ptr ptr ptr)
+  (macptr-ptr ptr imm2)
   (unbox-fixnum offset imm1)
-  (movq (% imm0) (@ (% ptr) (% imm1)))
+  (movq (% imm0) (@ (% imm2) (% imm1)))
   (restore-simple-frame)
   (single-value-return))
 =

@@ -265,9 +265,9 @@
   (save-simple-frame)
   (trap-unless-typecode=3D ptr x8664::subtag-macptr)
   (call-subprim .SPgets64)
-  (macptr-ptr ptr ptr)
+  (macptr-ptr ptr imm2)
   (unbox-fixnum offset imm1)
-  (movq (% imm0) (@ (% ptr) (% imm1)))
+  (movq (% imm0) (@ (% imm2) (% imm1)))
   (restore-simple-frame)
   (single-value-return))
 =

@@ -447,49 +447,49 @@
   (single-value-return))
 =

 (defx86lapfunction %atomic-incf-ptr ((ptr arg_z))
-  (macptr-ptr ptr ptr)
-  @again
-  (movq (@ (% ptr)) (% rax))
+  (macptr-ptr ptr imm2)
+  @again
+  (movq (@ (% imm2)) (% rax))
   (lea (@ 1 (% rax)) (% imm1))
   (lock)
-  (cmpxchgq (% imm1) (@ (% ptr)))
+  (cmpxchgq (% imm1) (@ (% imm2)))
   (jne @again)
   (box-fixnum imm1 arg_z)
   (single-value-return))
 =

 (defx86lapfunction %atomic-incf-ptr-by ((ptr arg_y) (by arg_z))
-  (macptr-ptr ptr ptr)
-  @again
-  (movq (@ (% ptr)) (% rax))
+  (macptr-ptr ptr imm2)
+  @again
+  (movq (@ (% imm2)) (% rax))
   (unbox-fixnum by imm1)
   (add (% rax) (% imm1))
   (lock)
-  (cmpxchgq (% imm1) (@ (% ptr)))
+  (cmpxchgq (% imm1) (@ (% imm2)))
   (jnz @again)
   (box-fixnum imm1 arg_z)
   (single-value-return))
 =

 =

 (defx86lapfunction %atomic-decf-ptr ((ptr arg_z))
-  (macptr-ptr ptr ptr)
-  @again
-  (movq (@ (% ptr)) (% rax))
+  (macptr-ptr ptr imm2)
+  @again
+  (movq (@ (% imm2)) (% rax))
   (lea (@ -1 (% rax)) (% imm1))
   (lock)
-  (cmpxchgq (% imm1) (@ (% ptr)))
+  (cmpxchgq (% imm1) (@ (% imm2)))
   (jnz @again)
   (box-fixnum imm1 arg_z)
   (single-value-return))
 =

 (defx86lapfunction %atomic-decf-ptr-if-positive ((ptr arg_z))
-  (macptr-ptr ptr ptr)                  ;must be fixnum-aligned
-  @again
-  (movq (@ (% ptr)) (% rax))
+  (macptr-ptr ptr imm2)
+  @again
+  (movq (@ (% imm2)) (% rax))
   (testq (% rax) (% rax))
   (lea (@ -1 (% rax)) (% imm1))
   (jz @done)
   (lock)
-  (cmpxchgq (% imm1) (@ (% ptr)))
+  (cmpxchgq (% imm1) (@ (% imm2)))
   (jnz @again)
   @done
   (box-fixnum imm1 arg_z)
@@ -507,15 +507,15 @@
 ;;; Try to store the fixnum NEWVAL at PTR, if and only if the old value
 ;;; was equal to OLDVAL.  Return the old value
 (defx86lapfunction %ptr-store-conditional ((ptr arg_x) (expected-oldval ar=
g_y) (newval arg_z))
-  (macptr-ptr ptr ptr)                  ;  must be fixnum-aligned
-  @again
-  (movq (@ (% ptr)) (% imm0))
+  (macptr-ptr ptr imm2)
+  @again
+  (movq (@ (% imm2)) (% imm0))
   (box-fixnum imm0 temp0)
   (cmpq (% temp0) (% expected-oldval))
   (jne @done)
   (unbox-fixnum newval imm1)
   (lock)
-  (cmpxchgq (% imm1) (@ (% ptr)))
+  (cmpxchgq (% imm1) (@ (% imm2)))
   (jne @again)
   @done
   (movq (% temp0) (% arg_z))




More information about the Openmcl-cvs-notifications mailing list