diff --git a/wip-duuqnd/user-side-compiler/backend/code-generator.lisp b/wip-duuqnd/user-side-compiler/backend/code-generator.lisp index 2c19660..99764b6 100644 --- a/wip-duuqnd/user-side-compiler/backend/code-generator.lisp +++ b/wip-duuqnd/user-side-compiler/backend/code-generator.lisp @@ -96,8 +96,7 @@ (defun emit-store-data (data) (if (or (null (allocation-details data)) - (member (strategy (allocation-details data)) - '(:constant :accumulator))) + (eql (strategy (allocation-details data)) :constant)) (setf *last-instruction* '(:useless)) (progn (emit-sta :address (data-reference data)) @@ -108,7 +107,7 @@ ;; The "DATA is stored"-case (if (or (null (allocation-details data)) (member (strategy (allocation-details data)) - '(:constant :accumulator))) + '(:constant :flags))) (setf *last-instruction* '(:useless)) (progn (emit-asm-instruction :opcode :php :byte-length 1) @@ -120,8 +119,7 @@ (setf *last-instruction* '(:store-zero-flag data))))) (defun emit-load-data (data) - (if (or (member (strategy (allocation-details data)) - '(:accumulator :direct-to-argvec)) + (if (or (eql (strategy (allocation-details data)) :direct-to-argvec) (equal *last-instruction* (list :store data)) (equal *last-instruction* (list :load data))) (setf *last-instruction* '(:useless)) @@ -132,8 +130,7 @@ (setf *last-instruction* (list :load data))))) (defun emit-load-bool (data) - (if (or (member (strategy (allocation-details data)) - '(:accumulator)) + (if (or (eql (strategy (allocation-details data)) :flags) (equal *last-instruction* (list :store-zero-flag data)) (equal *last-instruction* (list :load-zero-flag data))) (setf *last-instruction* '(:useless)) diff --git a/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp b/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp index e89c62b..820fc6b 100644 --- a/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp +++ b/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp @@ -31,8 +31,8 @@ ((typep data 'ir-variable) :named-variable) ((and (eql (next (definition data)) (last-use data)) - (not (typep (last-use data) 'ir-call))) - :accumulator) + (typep (last-use data) 'ir-if)) + :flags) ((and (not (typep data 'ir-reusable)) (typep (last-use data) 'ir-call) (not (calls-exist-between-p (definition data) (last-use data))))