Skip to content
Snippets Groups Projects
Commit 5552b38b authored by wlott's avatar wlott
Browse files

Fixed argument order for loads and stores.

Changed compute-mumble-from-mumble to regular instructions, cause the labels
can move after pseudo-instructions are expanded.
parent be4b84da
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
;;; Scott Fahlman (FAHLMAN@CMUC). ;;; Scott Fahlman (FAHLMAN@CMUC).
;;; ********************************************************************** ;;; **********************************************************************
;;; ;;;
;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/insts.lisp,v 1.13 1990/04/24 19:10:22 wlott Exp $ ;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/insts.lisp,v 1.14 1990/04/26 20:13:41 wlott Exp $
;;; ;;;
;;; Description of the MIPS architecture. ;;; Description of the MIPS architecture.
;;; ;;;
...@@ -261,16 +261,16 @@ ...@@ -261,16 +261,16 @@
(defmacro define-load/store-instruction (name op) (defmacro define-load/store-instruction (name op)
`(define-instruction (,name) `(define-instruction (,name)
(immediate (op :constant ,op) (immediate (op :constant ,op)
(rs :argument register)
(rt :argument register) (rt :argument register)
(rs :argument register)
(immediate :argument (signed-byte 16))) (immediate :argument (signed-byte 16)))
(immediate (op :constant ,op) (immediate (op :constant ,op)
(rs :argument register)
(rt :argument register) (rt :argument register)
(rs :argument register)
(immediate :argument addi-fixup)) (immediate :argument addi-fixup))
(immediate (op :constant ,op) (immediate (op :constant ,op)
(rs :argument register)
(rt :argument register) (rt :argument register)
(rs :argument register)
(immediate :constant 0)))) (immediate :constant 0))))
(define-load/store-instruction lb #b100000) (define-load/store-instruction lb #b100000)
...@@ -485,20 +485,31 @@ ...@@ -485,20 +485,31 @@
(header-object (type :constant #x66))) (header-object (type :constant #x66)))
(define-pseudo-instruction compute-code-from-fn 64 (code fn label) (defmacro define-compute-instruction (name calculation)
;; code = fn - fn-tag - header - label-offset + other-pointer-tag `(progn
(let ((offset (- vm:other-pointer-type (defun ,name (label)
vm:function-pointer-type ,calculation)
(label-position label) (define-instruction (,name)
(component-header-length)))) (immediate (op :constant #b001001)
(inst addu code fn offset))) (rt :argument register)
(rs :argument register)
(define-pseudo-instruction compute-code-from-lra 64 (code lra label) (immediate :argument label
;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag :function ,name)))))
(let ((offset (- (+ (label-position label) (component-header-length)))))
(inst addu code lra offset))) ;; code = fn - fn-tag - header - label-offset + other-pointer-tag
(define-compute-instruction compute-code-from-fn
(- vm:other-pointer-type
vm:function-pointer-type
(label-position label)
(component-header-length)))
;; code = lra - other-pointer-tag - header - label-offset + other-pointer-tag
(define-compute-instruction compute-code-from-lra
(- (+ (label-position label)
(component-header-length))))
;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
(define-compute-instruction compute-lra-from-code
(+ (label-position label)
(component-header-length)))
(define-pseudo-instruction compute-lra-from-code 64 (lra code label)
;; lra = code + other-pointer-tag + header + label-offset - other-pointer-tag
(let ((offset (+ (label-position label) (component-header-length))))
(inst addu lra code offset)))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment