From: Taylor R Campbell Date: Sat, 29 Dec 2018 21:57:47 +0000 (+0000) Subject: Relax register constraints for tagging rule. X-Git-Tag: mit-scheme-pucked-10.1.20~11^2~80^2~15 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=2d961c10171d94ca82a6bdf7c61aad9fbadc9da1;p=mit-scheme.git Relax register constraints for tagging rule. No need to keep the source alive here -- use move-to-target and allow any temporary register instead. --- 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.