Fix loading complemented immediates.
authorTaylor R Campbell <campbell@mumble.net>
Wed, 23 Jan 2019 03:02:16 +0000 (03:02 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 21 Aug 2019 21:34:05 +0000 (21:34 +0000)
src/compiler/machines/aarch64/lapgen.scm

index c5bebdaf9813cc5272e67d9b9f5faec19ddad72c..a7da67a02a84bffacfeae3320e228222dc183170 100644 (file)
@@ -333,9 +333,11 @@ USA.
          => (lambda (shift)
               (LAP (MOVZ X ,target
                         (LSL (&U ,(shift-right imm shift)) ,shift)))))
-        ((find-shift (bitwise-not imm))
+        ((find-shift (bitwise-andc1 imm #xffffffffffffffff))
          => (lambda (shift)
-              (LAP (MOVN X ,target (LSL (&U ,(bitwise-not imm)) ,shift)))))
+              (let ((imm (bitwise-andc1 imm #xffffffffffffffff)))
+                (LAP (MOVN X ,target
+                           (LSL (&U ,(shift-right imm shift)) ,shift))))))
         ((logical-immediate? imm)
          (LAP (ORR X ,target Z (&U ,imm))))
         ;; XXX try splitting in halves, quarters
@@ -346,8 +348,6 @@ USA.
                  (hi-shift (find-shift hi)))
              (and lo-shift hi-shift (cons lo-shift hi-shift))))
          => (lambda))
-        ((fits-in-unsigned-16? (bitwise-not imm))
-         (LAP (MOVN X ,target (&U ,(bitwise-not imm)))))
        (else
         ;; XXX give up
         (LAP (MOVZ X ,target (&U ,(chunk16 0)))