OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [microprogram_assembler/] [rewrite.lisp] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 atypic
;;;
2
;;; with-assembly rewrite routines
3
;;;
4
 
5
(in-package #:mcasm)
6
 
7
;; Check if argument is a label
8
(defun labelp (a)
9
  (typep a 'keyword))
10
 
11
;; Add a label to the assembly data
12
(defun make-label (label)
13
  (when (eq *assembler-state* :gather)
14
    (setf (gethash label *assembler-labels*) *assembler-position*)))
15
 
16
; Do instruction rewrite
17
(defun rewrite-instruction-inst (inst state)
18
  (loop for arg in (cdr inst)
19
     for i from 1
20
     when (eq (argument-to-type arg) 'label)
21
     do (setf (nth i inst)
22
              (if (eq state :gather)
23
 
24
                  `(if (gethash ,arg *assembler-labels*)
25
                       (gethash ,arg *assembler-labels*)
26
                       (error "Unknown label: ~A" ,arg)))))
27
  inst)
28
 
29
;; Rewrite an assembly instruction
30
;; :label => (make-label :label)
31
(defun rewrite-instruction (inst state)
32
  (typecase inst
33
    (list (rewrite-instruction-inst inst state))
34
    (keyword `(make-label ,inst))
35
    (t (error "Unknown instruction type: ~A" (type-of inst)))))

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.