Work around new bug in variable-width instruction assembly: LW is
authorChris Hanson <org/chris-hanson/cph>
Sat, 18 Dec 1993 08:49:05 +0000 (08:49 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 18 Dec 1993 08:49:05 +0000 (08:49 +0000)
being forced to use its long-offset form when the offset is small (in
this case the offset is -4).

v7/src/compiler/machines/mips/lapgen.scm

index 07b44529bb02c9703ac1ac32edf7750cf69f7058..09d5ae3c82841b6b7783959fc94a3d4e979f3463 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: lapgen.scm,v 1.12 1992/12/28 22:01:14 cph Exp $
+$Id: lapgen.scm,v 1.13 1993/12/18 08:49:05 cph Exp $
 
 Copyright (c) 1988-1992 Massachusetts Institute of Technology
 
@@ -185,16 +185,20 @@ MIT in each case. |#
 ;;;; Regularized Machine Instructions
 
 (define (adjusted:high n)
-  (let ((n (->unsigned n)))
-    (if (< (remainder n #x10000) #x8000)
-       (quotient n #x10000)
-       (+ (quotient n #x10000) 1))))
+  (if (fits-in-16-bits-signed? n)
+      0
+      (let ((n (->unsigned n)))
+       (if (< (remainder n #x10000) #x8000)
+           (quotient n #x10000)
+           (+ (quotient n #x10000) 1)))))
 
 (define (adjusted:low n)
-  (let ((remainder (remainder (->unsigned n) #x10000)))
-    (if (< remainder #x8000)
-       remainder
-       (- remainder #x10000))))
+  (if (fits-in-16-bits-signed? n)
+      n
+      (let ((remainder (remainder (->unsigned n) #x10000)))
+       (if (< remainder #x8000)
+           remainder
+           (- remainder #x10000)))))
 
 (define-integrable (top-16-bits n)
   (quotient (->unsigned n) #x10000))