From 2d961c10171d94ca82a6bdf7c61aad9fbadc9da1 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Sat, 29 Dec 2018 21:57:47 +0000 Subject: [PATCH] Relax register constraints for tagging rule. No need to keep the source alive here -- use move-to-target and allow any temporary register instead. --- src/compiler/machines/x86-64/rules1.scm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/machines/x86-64/rules1.scm b/src/compiler/machines/x86-64/rules1.scm index 5f6acf4d0..8dd0daddc 100644 --- a/src/compiler/machines/x86-64/rules1.scm +++ b/src/compiler/machines/x86-64/rules1.scm @@ -110,10 +110,10 @@ USA. (CONS-POINTER (MACHINE-CONSTANT (? type)) (REGISTER (? datum)))) (if (zero? type) (assign-register->register target datum) - (let* ((datum (source-register-reference datum)) - (target (target-register-reference target))) - (LAP (MOV Q ,target (&U ,(make-non-pointer-literal type 0))) - (OR Q ,target ,datum))))) + (let* ((target (standard-move-to-target! datum target)) + (temp (temporary-register-reference))) + (LAP (MOV Q ,temp (&U ,(make-non-pointer-literal type 0))) + (OR Q ,target ,temp))))) #| This doesn't work because immediate operands aren't big enough to fit the type tag. -- 2.25.1