From: Juho Snellman Date: Wed, 18 Apr 2007 05:20:38 +0000 (+0000) Subject: 1.0.4.99: fix big-endian build X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=cc25b617f4713cde387b5974fda111faa193313f;p=sbcl.git 1.0.4.99: fix big-endian build * Reported by Harald Hanche-Olsen --- diff --git a/src/code/array.lisp b/src/code/array.lisp index 00444b0..4b01135 100644 --- a/src/code/array.lisp +++ b/src/code/array.lisp @@ -341,22 +341,31 @@ of specialized arrays is supported." ;; is done implicitly via the widetag ;; dispatch. (safety 0))) - #1=(funcall (the function - (let ((tag 0)) - ;; WIDETAG-OF needs extra code to - ;; handle LIST and FUNCTION - ;; lowtags. We're only dispatching - ;; on other pointers, so let's do - ;; the lowtag extraction manually. - (when (sb!vm::%other-pointer-p array) - (setf tag (sb!sys:sap-ref-8 - (int-sap (get-lisp-obj-address array)) - (- sb!vm:other-pointer-lowtag)))) - ;; SYMBOL-GLOBAL-VALUE is a performance hack - ;; for threaded builds. - (svref (sb!vm::symbol-global-value ',table-name) - tag))) - array index ,@extra-params)) + #1=(funcall + (the function + (let ((tag 0) + (offset + #.(ecase sb!c:*backend-byte-order* + (:little-endian + (- sb!vm:other-pointer-lowtag)) + (:big-endian + ;; I'm not completely sure of what this + ;; 3 represents symbolically. It's + ;; just what all the LOAD-TYPE vops + ;; are doing. + (- 3 sb!vm:other-pointer-lowtag))))) + ;; WIDETAG-OF needs extra code to handle + ;; LIST and FUNCTION lowtags. We're only + ;; dispatching on other pointers, so let's + ;; do the lowtag extraction manually. + (when (sb!vm::%other-pointer-p array) + (setf tag + (sb!sys:sap-ref-8 (int-sap (get-lisp-obj-address array)) + offset))) + ;; SYMBOL-GLOBAL-VALUE is a performance hack + ;; for threaded builds. + (svref (sb!vm::symbol-global-value ',table-name) tag))) + array index ,@extra-params)) (defun ,slow-accessor-name (array index ,@extra-params) (declare (optimize speed (safety 0))) (if (not (%array-displaced-p array)) diff --git a/version.lisp-expr b/version.lisp-expr index 84dbe48..2878932 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.4.98" +"1.0.4.99"