Raymond Toy pushed to branch arm64-dev-1 at cmucl / cmucl
Commits:
-
5c9b0b4a
by Raymond Toy at 2026-03-26T07:17:08-07:00
-
08bba2a3
by Raymond Toy at 2026-03-26T07:25:19-07:00
-
a275ef83
by Raymond Toy at 2026-03-26T07:42:16-07:00
-
42756a90
by Raymond Toy at 2026-03-26T07:55:22-07:00
4 changed files:
- src/compiler/arm64/alloc.lisp
- src/compiler/arm64/float.lisp
- src/compiler/arm64/memory.lisp
- src/compiler/arm64/system.lisp
Changes:
| ... | ... | @@ -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 ()
|
| ... | ... | @@ -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)
|
| ... | ... | @@ -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)))
|
| ... | ... | @@ -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.
|