1 ;;;;------------------------------------------------------------------
3 ;;;; Copyright (C) 2000, 2004,
4 ;;;; Department of Computer Science, University of Tromso, Norway
6 ;;;; Filename: registers.lisp
8 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
9 ;;;; Created at: Tue Aug 1 10:24:59 2000
10 ;;;; Distribution: See the accompanying file COPYING.
12 ;;;; $Id: registers.lisp,v 1.3 2004/02/10 00:04:13 ffjeld Exp $
14 ;;;;------------------------------------------------------------------
18 ;;; ----------------------------------------------------------------
20 ;;; ----------------------------------------------------------------
22 (defvar *register-decoder-sets
* (make-hash-table :test
#'eq
))
23 (defvar *register-encoder-sets
* (make-hash-table :test
#'eq
))
25 (defmacro def-register-set
(name-list set
)
26 `(let ((dec-set (make-decoder-set ,@set
))
27 (enc-set (make-encoder-set ,@set
)))
28 (loop for name in
',name-list
29 do
(setf (gethash name
*register-decoder-sets
*) dec-set
)
30 (setf (gethash name
*register-encoder-sets
*) enc-set
))))
32 (defun find-register-decode-set (name)
33 (let ((rs (gethash name
*register-decoder-sets
*)))
34 (unless rs
(error "Register set ~A not found." name
))
37 (defun find-register-encode-set (name)
38 (let ((rs (gethash name
*register-encoder-sets
*)))
39 (unless rs
(error "Register set ~A not found." name
))
42 (def-register-set (r/m32-00
)
50 (def-register-set (r/m32-01 sib-index
)
59 (def-register-set (sib-base-00)
68 (def-register-set (r32 +r32 r
/m32 sib-base
)
78 (def-register-set (r8 +r8 r
/m8
)
88 (def-register-set (r16 +r16 r
/m16
)
98 (def-register-set (sreg) ; page 11-9 in IISR
106 (def-register-set (r/m-16bit
)
116 (def-register-set (mm mm
/m64
)
126 (def-register-set (xmm xmm
/m128 xmm
/m64 xmm
/m32
)