Add offset label class
This commit is contained in:
parent
15a70836ac
commit
31bb5f8509
2 changed files with 21 additions and 3 deletions
|
@ -47,8 +47,7 @@
|
|||
(format stream "@~D" (ref-index object))))
|
||||
|
||||
(defmethod dereference ((ref reference-variable))
|
||||
(produce-instruction 'inst-ldy-immediate (ref-index ref))
|
||||
(produce-instruction 'inst-lda-absolute-y "VARVEC"))
|
||||
(produce-instruction 'inst-lda-absolute (make-offset-label *varvec* (ref-index ref))))
|
||||
|
||||
(defclass node ()
|
||||
((%next :accessor next :accessor normal-next :initform nil)))
|
||||
|
@ -77,7 +76,7 @@
|
|||
(loop :for ref :in (arguments node)
|
||||
:for index :from 0
|
||||
:do (dereference ref)
|
||||
:do (produce-instruction 'inst-sta-absolute (format nil "ARGVEC+~D" index)))
|
||||
:do (produce-instruction 'inst-sta-absolute (make-offset-label *argvec* index)))
|
||||
(produce-instruction 'inst-jsr-absolute (callee node))))
|
||||
|
||||
(defclass node-branch (node)
|
||||
|
|
|
@ -26,3 +26,22 @@
|
|||
(when (null name)
|
||||
(setf name (make-label-name (if (null name-prefix) "L" name-prefix))))
|
||||
(make-instance 'label :name name :address address))
|
||||
|
||||
(defclass offset-label (label)
|
||||
((%offset-from :accessor offset-from :initarg :offset-from)
|
||||
(%offset :accessor offset :initarg :offset)))
|
||||
|
||||
(defmethod address ((object offset-label))
|
||||
(+ (address (offset-from object))
|
||||
(offset object)))
|
||||
|
||||
(defmethod name ((object offset-label))
|
||||
(format nil "~A~C~D"
|
||||
(name (offset-from object))
|
||||
(if (minusp (offset object))
|
||||
#\-
|
||||
#\+)
|
||||
(offset object)))
|
||||
|
||||
(defun make-offset-label (src-label offset)
|
||||
(make-instance 'offset-label :offset-from src-label :offset offset))
|
||||
|
|
Loading…
Add table
Reference in a new issue