[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