Raymond Toy pushed to branch arm64-dev-1 at cmucl / cmucl

Commits:

4 changed files:

Changes:

  • src/compiler/arm64/alloc.lisp
    ... ... @@ -266,7 +266,7 @@
    266 266
         ;;   because bytes is still a tagged fixnum at this point.
    
    267 267
         ;; ARM64: LSL is the equivalent.
    
    268 268
         (inst lsl header bytes (- type-bits vm:fixnum-tag-bits))
    
    269
    -    (inst add header header (+ (ash -2 type-bits) type))
    
    269
    +    (inst sub header header (- (ash 2 type-bits) type))
    
    270 270
         ;; Round bytes down to a lispobj-aligned boundary.
    
    271 271
         (inst and bytes bytes (lognot lowtag-mask))
    
    272 272
         (pseudo-atomic ()
    

  • src/compiler/arm64/float.lisp
    ... ... @@ -367,6 +367,29 @@
    367 367
     (define-move-vop complex-double-move :move
    
    368 368
       (complex-double-reg) (complex-double-reg))
    
    369 369
     
    
    370
    +#+double-double
    
    371
    +(define-vop (complex-double-double-move)
    
    372
    +  (:args (x :scs (complex-double-double-reg)
    
    373
    +            :target y
    
    374
    +            :load-if (not (location= x y))))
    
    375
    +  (:results (y :scs (complex-double-double-reg)
    
    376
    +               :load-if (not (location= x y))))
    
    377
    +  (:note _N"complex double-double float move")
    
    378
    +  (:generator 0
    
    379
    +    (emit-not-implemented)
    
    380
    +    (unless (location= x y)
    
    381
    +      (move-double-reg (complex-double-double-reg-real-hi-tn y)
    
    382
    +                       (complex-double-double-reg-real-hi-tn x))
    
    383
    +      (move-double-reg (complex-double-double-reg-real-lo-tn y)
    
    384
    +                       (complex-double-double-reg-real-lo-tn x))
    
    385
    +      (move-double-reg (complex-double-double-reg-imag-hi-tn y)
    
    386
    +                       (complex-double-double-reg-imag-hi-tn x))
    
    387
    +      (move-double-reg (complex-double-double-reg-imag-lo-tn y)
    
    388
    +                       (complex-double-double-reg-imag-lo-tn x)))))
    
    389
    +#+double-double
    
    390
    +(define-move-vop complex-double-double-move :move
    
    391
    +  (complex-double-double-reg) (complex-double-double-reg))
    
    392
    +
    
    370 393
     
    
    371 394
     ;;;; -----------------------------------------------------------------------
    
    372 395
     ;;;; Complex float heap coercions
    
    ... ... @@ -1353,7 +1376,7 @@
    1353 1376
            (let ((offset (* (tn-offset y) word-bytes)))
    
    1354 1377
              (inst stur (double-double-reg-hi-tn x) nfp offset)
    
    1355 1378
              (inst stur (double-double-reg-lo-tn x) nfp (+ offset word-bytes)))))))
    
    1356
    -(define-move-vop move-double-double-float-argument :move
    
    1379
    +(define-move-vop move-double-double-float-argument :move-argument
    
    1357 1380
       (double-double-reg descriptor-reg) (double-double-reg))
    
    1358 1381
     
    
    1359 1382
     (define-vop (make/double-double-float)
    

  • src/compiler/arm64/memory.lisp
    ... ... @@ -169,7 +169,8 @@
    169 169
                    `((inst lsr temp index ,(- shift))))
    
    170 170
                   (t nil))
    
    171 171
               (inst add temp ,(if (zerop shift) 'index 'temp)
    
    172
    -                (- (ash offset vm:word-shift) lowtag))
    
    172
    +                (ash offset vm:word-shift))
    
    173
    +          (inst sub temp temp lowtag)
    
    173 174
               ;; TEMP holds the byte offset; add to object then load/store at 0.
    
    174 175
               (inst add temp object temp)
    
    175 176
               (inst ,uop value temp 0)))
    

  • src/compiler/arm64/system.lisp
    ... ... @@ -180,7 +180,7 @@
    180 180
         (sc-case type
    
    181 181
           (immediate
    
    182 182
            (inst lsl temp val vm:type-bits)
    
    183
    -       (inst orr res temp (tn-value type)))
    
    183
    +       (inst add res temp (tn-value type)))
    
    184 184
           (t
    
    185 185
            ;; TYPE is a fixnum-tagged integer; un-tag it with ASR, then
    
    186 186
            ;; shift VAL up and OR the pieces together.