[Openmcl-cvs-notifications] r14771 - /trunk/source/compiler/ARM/arm-vinsns.lisp
gb at clozure.com
gb at clozure.com
Mon May 2 13:35:22 CDT 2011
Author: gb
Date: Mon May 2 13:35:21 2011
New Revision: 14771
Log:
Use the LR to point into double-float vectors when getting/setting
constant-indexed elements. (Floating-point loads/stores can only
use indices that're a multiple of 4 bytes.)
Modified:
trunk/source/compiler/ARM/arm-vinsns.lisp
Modified: trunk/source/compiler/ARM/arm-vinsns.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/source/compiler/ARM/arm-vinsns.lisp (original)
+++ trunk/source/compiler/ARM/arm-vinsns.lisp Mon May 2 13:35:21 2011
@@ -169,23 +169,21 @@
(fmdrr dest low high))
=
=
-(define-arm-vinsn (misc-ref-c-double-float :predicatable)
+
+
+(define-arm-vinsn (misc-ref-c-double-float :predicatable :sets-lr)
(((dest :double-float))
((v :lisp)
- (idx :u32const))
- ((low (:u32 #.arm::imm0))
- (high (:u32 #.arm::imm1))))
- (ldrd low (:@ v (:$ (:apply + arm::misc-dfloat-offset (:apply ash idx 3)=
))))
- (fmdrr dest low high))
+ (idx :u32const)))
+ (add lr v (:$ arm::double-float.pad))
+ (fldd dest (:@ lr (:$ (:apply + (:apply ash idx 3) (- arm::double-float.=
value arm::double-float.pad))))))
=
(define-arm-vinsn (misc-set-c-double-float :predicatable)
(((val :double-float))
((v :lisp)
- (idx :u32const))
- ((low (:u32 #.arm::imm0))
- (high (:u32 #.arm::imm1))))
- (fmrrd low high val)
- (strd low (:@ v (:$ (:apply + arm::misc-dfloat-offset (:apply ash idx 3)=
)))))
+ (idx :u32const)))
+ (add lr v (:$ arm::double-float.pad))
+ (fstd val (:@ lr (:$ (:apply + (:apply ash idx 3) (- arm::double-float.v=
alue arm::double-float.pad))))))
=
(define-arm-vinsn (misc-set-double-float :predicatable)
(()
@@ -2405,8 +2403,8 @@
(str header-temp (:@ allocptr (:$ arm::misc-header-offset)))
(mov result allocptr)
(bic allocptr allocptr (:$ arm::fulltagmask))
- (fmrrd header-temp high fpreg)
- (strd header-temp (:@ result (:$ arm::double-float.value))))
+ (add lr result (:$ arm::double-float.pad))
+ (fstd fpreg (:@ lr (:$ (- arm::double-float.value arm::double-float.pad)=
))))
=
=
;;; This is about as bad as heap-consing a double-float. (In terms of
More information about the Openmcl-cvs-notifications
mailing list