Have sign-extend-complex deal correctly with bytes of size 0.
[movitz-ia-x86.git] / registers.lisp
blob3ae661d2c21548909121f7065c6b8fd62390d984
1 ;;;;------------------------------------------------------------------
2 ;;;;
3 ;;;; Copyright (C) 2000, 2004,
4 ;;;; Department of Computer Science, University of Tromso, Norway
5 ;;;;
6 ;;;; Filename: registers.lisp
7 ;;;; Description:
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.
11 ;;;;
12 ;;;; $Id: registers.lisp,v 1.3 2004/02/10 00:04:13 ffjeld Exp $
13 ;;;;
14 ;;;;------------------------------------------------------------------
16 (in-package #:ia-x86)
18 ;;; ----------------------------------------------------------------
19 ;;; Register sets
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))
35 rs))
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))
40 rs))
42 (def-register-set (r/m32-00)
43 ((0 eax)
44 (1 ecx)
45 (2 edx)
46 (3 ebx)
47 (6 esi)
48 (7 edi)))
50 (def-register-set (r/m32-01 sib-index)
51 ((0 eax)
52 (1 ecx)
53 (2 edx)
54 (3 ebx)
55 (5 ebp)
56 (6 esi)
57 (7 edi)))
59 (def-register-set (sib-base-00)
60 ((0 eax)
61 (1 ecx)
62 (2 edx)
63 (3 ebx)
64 (4 esp)
65 (6 esi)
66 (7 edi)))
68 (def-register-set (r32 +r32 r/m32 sib-base)
69 ((0 eax)
70 (1 ecx)
71 (2 edx)
72 (3 ebx)
73 (4 esp)
74 (5 ebp)
75 (6 esi)
76 (7 edi)))
78 (def-register-set (r8 +r8 r/m8)
79 ((0 al)
80 (1 cl)
81 (2 dl)
82 (3 bl)
83 (4 ah)
84 (5 ch)
85 (6 dh)
86 (7 bh)))
88 (def-register-set (r16 +r16 r/m16)
89 ((0 ax)
90 (1 cx)
91 (2 dx)
92 (3 bx)
93 (4 sp)
94 (5 bp)
95 (6 si)
96 (7 di)))
98 (def-register-set (sreg) ; page 11-9 in IISR
99 ((0 es)
100 (1 cs)
101 (2 ss)
102 (3 ds)
103 (4 fs)
104 (5 gs)))
106 (def-register-set (r/m-16bit)
107 ((0 (bx . si))
108 (1 (bx . di))
109 (2 (bp . si))
110 (3 (bp . di))
111 (4 (si . nil))
112 (5 (di . nil))
113 (6 (bp . nil))
114 (7 (bx . nil))))
116 (def-register-set (mm mm/m64)
117 ((0 mm0)
118 (1 mm1)
119 (2 mm2)
120 (3 mm3)
121 (4 mm4)
122 (5 mm5)
123 (6 mm6)
124 (7 mm7)))
126 (def-register-set (xmm xmm/m128 xmm/m64 xmm/m32)
127 ((0 xmm0)
128 (1 xmm1)
129 (2 xmm2)
130 (3 xmm3)
131 (4 xmm4)
132 (5 xmm5)
133 (6 xmm6)
134 (7 xmm7)))