z8kgen.c revision 1.1.1.6 1 1.1.1.6 christos /* Copyright (C) 2001-2019 Free Software Foundation, Inc.
2 1.1 christos
3 1.1 christos This file is part of the GNU opcodes library.
4 1.1 christos
5 1.1 christos This library is free software; you can redistribute it and/or modify
6 1.1 christos it under the terms of the GNU General Public License as published by
7 1.1 christos the Free Software Foundation; either version 3, or (at your option)
8 1.1 christos any later version.
9 1.1 christos
10 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
11 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
13 1.1 christos License for more details.
14 1.1 christos
15 1.1 christos You should have received a copy of the GNU General Public License
16 1.1 christos along with this file; see the file COPYING. If not, write to the
17 1.1 christos Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
18 1.1 christos MA 02110-1301, USA. */
19 1.1 christos
20 1.1 christos /* This program generates z8k-opc.h. */
21 1.1 christos
22 1.1 christos #include "sysdep.h"
23 1.1.1.2 christos #include <stdio.h>
24 1.1 christos #include "libiberty.h"
25 1.1 christos
26 1.1 christos #define BYTE_INFO_LEN 10
27 1.1 christos
28 1.1 christos struct op
29 1.1 christos {
30 1.1 christos char *flags;
31 1.1 christos int cycles;
32 1.1 christos char type;
33 1.1 christos char *bits;
34 1.1 christos char *name;
35 1.1 christos /* Unique number for stable sorting. */
36 1.1 christos int id;
37 1.1 christos };
38 1.1 christos
39 1.1 christos #define iswhite(x) ((x) == ' ' || (x) == '\t')
40 1.1 christos static struct op opt[] =
41 1.1 christos {
42 1.1 christos {"------", 2, 8, "0011 0110 0000 0000", "bpt", 0}, /* Breakpoint used by the simulator. */
43 1.1 christos {"------", 10, 8, "0000 1111 0000 1100", "brk", 0}, /* Breakpoint used by real hardware.
44 1.1 christos (ext0f #0x0c). */
45 1.1 christos
46 1.1 christos {"------", 10, 8, "0000 1110 imm8", "ext0e imm8", 0},
47 1.1 christos {"------", 10, 8, "0000 1111 imm8", "ext0f imm8", 0},
48 1.1 christos {"------", 10, 8, "1000 1110 imm8", "ext8e imm8", 0},
49 1.1 christos {"------", 10, 8, "1000 1111 imm8", "ext8f imm8", 0},
50 1.1 christos
51 1.1 christos {"------", 10, 8, "0011 0110 imm8", "rsvd36", 0},
52 1.1 christos {"------", 10, 8, "0011 1000 imm8", "rsvd38", 0},
53 1.1 christos {"------", 10, 8, "0111 1000 imm8", "rsvd78", 0},
54 1.1 christos {"------", 10, 8, "0111 1110 imm8", "rsvd7e", 0},
55 1.1 christos
56 1.1 christos {"------", 10, 8, "1001 1101 imm8", "rsvd9d", 0},
57 1.1 christos {"------", 10, 8, "1001 1111 imm8", "rsvd9f", 0},
58 1.1 christos
59 1.1 christos {"------", 10, 8, "1011 1001 imm8", "rsvdb9", 0},
60 1.1 christos {"------", 10, 8, "1011 1111 imm8", "rsvdbf", 0},
61 1.1 christos
62 1.1 christos {"---V--", 11, 16, "1011 1011 ssN0 1001 0000 rrrr ddN0 1000", "ldd @rd,@rs,rr", 0},
63 1.1 christos {"---V--", 11, 16, "1011 1011 ssN0 1001 0000 rrrr ddN0 0000", "lddr @rd,@rs,rr", 0},
64 1.1 christos {"---V--", 11, 8, "1011 1010 ssN0 1001 0000 rrrr ddN0 0000", "lddrb @rd,@rs,rr", 0},
65 1.1 christos {"---V--", 11, 16, "1011 1011 ssN0 0001 0000 rrrr ddN0 0000", "ldir @rd,@rs,rr", 0},
66 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 0000 0000 rrrr dddd cccc", "cpi rd,@rs,rr,cc", 0},
67 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 0100 0000 rrrr dddd cccc", "cpir rd,@rs,rr,cc", 0},
68 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 1100 0000 rrrr dddd cccc", "cpdr rd,@rs,rr,cc", 0},
69 1.1 christos {"---V--", 11, 16, "1011 1011 ssN0 0001 0000 rrrr ddN0 1000", "ldi @rd,@rs,rr", 0},
70 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 1000 0000 rrrr dddd cccc", "cpd rd,@rs,rr,cc", 0},
71 1.1 christos {"---V--", 11, 8, "1011 1010 ssN0 0001 0000 rrrr ddN0 0000", "ldirb @rd,@rs,rr", 0},
72 1.1 christos {"---V--", 11, 8, "1011 1010 ssN0 1001 0000 rrrr ddN0 1000", "lddb @rd,@rs,rr", 0},
73 1.1 christos {"---V--", 11, 8, "1011 1010 ssN0 0001 0000 rrrr ddN0 1000", "ldib @rd,@rs,rr", 0},
74 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 1000 0000 rrrr dddd cccc", "cpdb rbd,@rs,rr,cc", 0},
75 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 1100 0000 rrrr dddd cccc", "cpdrb rbd,@rs,rr,cc", 0},
76 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 0000 0000 rrrr dddd cccc", "cpib rbd,@rs,rr,cc", 0},
77 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 0100 0000 rrrr dddd cccc", "cpirb rbd,@rs,rr,cc", 0},
78 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 1010 0000 rrrr ddN0 cccc", "cpsd @rd,@rs,rr,cc", 0},
79 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 1010 0000 rrrr ddN0 cccc", "cpsdb @rd,@rs,rr,cc", 0},
80 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 1110 0000 rrrr ddN0 cccc", "cpsdr @rd,@rs,rr,cc", 0},
81 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 1110 0000 rrrr ddN0 cccc", "cpsdrb @rd,@rs,rr,cc", 0},
82 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 0010 0000 rrrr ddN0 cccc", "cpsi @rd,@rs,rr,cc", 0},
83 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 0010 0000 rrrr ddN0 cccc", "cpsib @rd,@rs,rr,cc", 0},
84 1.1 christos {"CZSV--", 11, 16, "1011 1011 ssN0 0110 0000 rrrr ddN0 cccc", "cpsir @rd,@rs,rr,cc", 0},
85 1.1 christos {"CZSV--", 11, 8, "1011 1010 ssN0 0110 0000 rrrr ddN0 cccc", "cpsirb @rd,@rs,rr,cc", 0},
86 1.1 christos
87 1.1 christos {"CZSV--", 5, 16, "1011 0101 ssss dddd", "adc rd,rs", 0},
88 1.1 christos {"CZSVDH", 5, 8, "1011 0100 ssss dddd", "adcb rbd,rbs", 0},
89 1.1 christos {"CZSV--", 7, 16, "0000 0001 ssN0 dddd", "add rd,@rs", 0},
90 1.1 christos {"CZSV--", 9, 16, "0100 0001 0000 dddd address_src", "add rd,address_src", 0},
91 1.1 christos {"CZSV--", 10, 16, "0100 0001 ssN0 dddd address_src", "add rd,address_src(rs)", 0},
92 1.1 christos {"CZSV--", 7, 16, "0000 0001 0000 dddd imm16", "add rd,imm16", 0},
93 1.1 christos {"CZSV--", 4, 16, "1000 0001 ssss dddd", "add rd,rs", 0},
94 1.1 christos {"CZSVDH", 7, 8, "0000 0000 ssN0 dddd", "addb rbd,@rs", 0},
95 1.1 christos {"CZSVDH", 9, 8, "0100 0000 0000 dddd address_src", "addb rbd,address_src", 0},
96 1.1 christos {"CZSVDH", 10, 8, "0100 0000 ssN0 dddd address_src", "addb rbd,address_src(rs)", 0},
97 1.1 christos {"CZSVDH", 7, 8, "0000 0000 0000 dddd imm8 imm8", "addb rbd,imm8", 0},
98 1.1 christos {"CZSVDH", 4, 8, "1000 0000 ssss dddd", "addb rbd,rbs", 0},
99 1.1 christos {"CZSV--", 14, 32, "0001 0110 ssN0 dddd", "addl rrd,@rs", 0},
100 1.1 christos {"CZSV--", 15, 32, "0101 0110 0000 dddd address_src", "addl rrd,address_src", 0},
101 1.1 christos {"CZSV--", 16, 32, "0101 0110 ssN0 dddd address_src", "addl rrd,address_src(rs)", 0},
102 1.1 christos {"CZSV--", 14, 32, "0001 0110 0000 dddd imm32", "addl rrd,imm32", 0},
103 1.1 christos {"CZSV--", 8, 32, "1001 0110 ssss dddd", "addl rrd,rrs", 0},
104 1.1 christos
105 1.1 christos {"-ZS---", 7, 16, "0000 0111 ssN0 dddd", "and rd,@rs", 0},
106 1.1 christos {"-ZS---", 9, 16, "0100 0111 0000 dddd address_src", "and rd,address_src", 0},
107 1.1 christos {"-ZS---", 10, 16, "0100 0111 ssN0 dddd address_src", "and rd,address_src(rs)", 0},
108 1.1 christos {"-ZS---", 7, 16, "0000 0111 0000 dddd imm16", "and rd,imm16", 0},
109 1.1 christos {"-ZS---", 4, 16, "1000 0111 ssss dddd", "and rd,rs", 0},
110 1.1 christos {"-ZSP--", 7, 8, "0000 0110 ssN0 dddd", "andb rbd,@rs", 0},
111 1.1 christos {"-ZSP--", 9, 8, "0100 0110 0000 dddd address_src", "andb rbd,address_src", 0},
112 1.1 christos {"-ZSP--", 10, 8, "0100 0110 ssN0 dddd address_src", "andb rbd,address_src(rs)", 0},
113 1.1 christos {"-ZSP--", 7, 8, "0000 0110 0000 dddd imm8 imm8", "andb rbd,imm8", 0},
114 1.1 christos {"-ZSP--", 4, 8, "1000 0110 ssss dddd", "andb rbd,rbs", 0},
115 1.1 christos
116 1.1 christos {"-Z----", 8, 16, "0010 0111 ddN0 imm4", "bit @rd,imm4", 0},
117 1.1 christos {"-Z----", 11, 16, "0110 0111 ddN0 imm4 address_dst", "bit address_dst(rd),imm4", 0},
118 1.1 christos {"-Z----", 10, 16, "0110 0111 0000 imm4 address_dst", "bit address_dst,imm4", 0},
119 1.1 christos {"-Z----", 4, 16, "1010 0111 dddd imm4", "bit rd,imm4", 0},
120 1.1 christos {"-Z----", 10, 16, "0010 0111 0000 ssss 0000 dddd 0000 0000", "bit rd,rs", 0},
121 1.1 christos
122 1.1 christos {"-Z----", 8, 8, "0010 0110 ddN0 imm4", "bitb @rd,imm4", 0},
123 1.1 christos {"-Z----", 11, 8, "0110 0110 ddN0 imm4 address_dst", "bitb address_dst(rd),imm4", 0},
124 1.1 christos {"-Z----", 10, 8, "0110 0110 0000 imm4 address_dst", "bitb address_dst,imm4", 0},
125 1.1 christos {"-Z----", 4, 8, "1010 0110 dddd imm4", "bitb rbd,imm4", 0},
126 1.1 christos {"-Z----", 10, 8, "0010 0110 0000 ssss 0000 dddd 0000 0000", "bitb rbd,rs", 0},
127 1.1 christos
128 1.1 christos {"------", 10, 32, "0001 1111 ddN0 0000", "call @rd", 0},
129 1.1 christos {"------", 12, 32, "0101 1111 0000 0000 address_dst", "call address_dst", 0},
130 1.1 christos {"------", 13, 32, "0101 1111 ddN0 0000 address_dst", "call address_dst(rd)", 0},
131 1.1 christos {"------", 10, 16, "1101 disp12", "calr disp12", 0},
132 1.1 christos
133 1.1 christos {"------", 8, 16, "0000 1101 ddN0 1000", "clr @rd", 0},
134 1.1 christos {"------", 11, 16, "0100 1101 0000 1000 address_dst", "clr address_dst", 0},
135 1.1 christos {"------", 12, 16, "0100 1101 ddN0 1000 address_dst", "clr address_dst(rd)", 0},
136 1.1 christos {"------", 7, 16, "1000 1101 dddd 1000", "clr rd", 0},
137 1.1 christos {"------", 8, 8, "0000 1100 ddN0 1000", "clrb @rd", 0},
138 1.1 christos {"------", 11, 8, "0100 1100 0000 1000 address_dst", "clrb address_dst", 0},
139 1.1 christos {"------", 12, 8, "0100 1100 ddN0 1000 address_dst", "clrb address_dst(rd)", 0},
140 1.1 christos {"------", 7, 8, "1000 1100 dddd 1000", "clrb rbd", 0},
141 1.1 christos {"-ZS---", 12, 16, "0000 1101 ddN0 0000", "com @rd", 0},
142 1.1 christos {"-ZS---", 15, 16, "0100 1101 0000 0000 address_dst", "com address_dst", 0},
143 1.1 christos {"-ZS---", 16, 16, "0100 1101 ddN0 0000 address_dst", "com address_dst(rd)", 0},
144 1.1 christos {"-ZS---", 7, 16, "1000 1101 dddd 0000", "com rd", 0},
145 1.1 christos {"-ZSP--", 12, 8, "0000 1100 ddN0 0000", "comb @rd", 0},
146 1.1 christos {"-ZSP--", 15, 8, "0100 1100 0000 0000 address_dst", "comb address_dst", 0},
147 1.1 christos {"-ZSP--", 16, 8, "0100 1100 ddN0 0000 address_dst", "comb address_dst(rd)", 0},
148 1.1 christos {"-ZSP--", 7, 8, "1000 1100 dddd 0000", "comb rbd", 0},
149 1.1 christos {"CZSP--", 7, 16, "1000 1101 flags 0101", "comflg flags", 0},
150 1.1 christos
151 1.1 christos {"CZSV--", 11, 16, "0000 1101 ddN0 0001 imm16", "cp @rd,imm16", 0},
152 1.1 christos {"CZSV--", 15, 16, "0100 1101 ddN0 0001 address_dst imm16", "cp address_dst(rd),imm16", 0},
153 1.1 christos {"CZSV--", 14, 16, "0100 1101 0000 0001 address_dst imm16", "cp address_dst,imm16", 0},
154 1.1 christos
155 1.1 christos {"CZSV--", 7, 16, "0000 1011 ssN0 dddd", "cp rd,@rs", 0},
156 1.1 christos {"CZSV--", 9, 16, "0100 1011 0000 dddd address_src", "cp rd,address_src", 0},
157 1.1 christos {"CZSV--", 10, 16, "0100 1011 ssN0 dddd address_src", "cp rd,address_src(rs)", 0},
158 1.1 christos {"CZSV--", 7, 16, "0000 1011 0000 dddd imm16", "cp rd,imm16", 0},
159 1.1 christos {"CZSV--", 4, 16, "1000 1011 ssss dddd", "cp rd,rs", 0},
160 1.1 christos
161 1.1 christos {"CZSV--", 11, 8, "0000 1100 ddN0 0001 imm8 imm8", "cpb @rd,imm8", 0},
162 1.1 christos {"CZSV--", 15, 8, "0100 1100 ddN0 0001 address_dst imm8 imm8", "cpb address_dst(rd),imm8", 0},
163 1.1 christos {"CZSV--", 14, 8, "0100 1100 0000 0001 address_dst imm8 imm8", "cpb address_dst,imm8", 0},
164 1.1 christos {"CZSV--", 7, 8, "0000 1010 ssN0 dddd", "cpb rbd,@rs", 0},
165 1.1 christos {"CZSV--", 9, 8, "0100 1010 0000 dddd address_src", "cpb rbd,address_src", 0},
166 1.1 christos {"CZSV--", 10, 8, "0100 1010 ssN0 dddd address_src", "cpb rbd,address_src(rs)", 0},
167 1.1 christos {"CZSV--", 7, 8, "0000 1010 0000 dddd imm8 imm8", "cpb rbd,imm8", 0},
168 1.1 christos {"CZSV--", 4, 8, "1000 1010 ssss dddd", "cpb rbd,rbs", 0},
169 1.1 christos
170 1.1 christos {"CZSV--", 14, 32, "0001 0000 ssN0 dddd", "cpl rrd,@rs", 0},
171 1.1 christos {"CZSV--", 15, 32, "0101 0000 0000 dddd address_src", "cpl rrd,address_src", 0},
172 1.1 christos {"CZSV--", 16, 32, "0101 0000 ssN0 dddd address_src", "cpl rrd,address_src(rs)", 0},
173 1.1 christos {"CZSV--", 14, 32, "0001 0000 0000 dddd imm32", "cpl rrd,imm32", 0},
174 1.1 christos {"CZSV--", 8, 32, "1001 0000 ssss dddd", "cpl rrd,rrs", 0},
175 1.1 christos
176 1.1 christos {"CZS---", 5, 8, "1011 0000 dddd 0000", "dab rbd", 0},
177 1.1 christos {"------", 11, 16, "1111 dddd 0disp7", "dbjnz rbd,disp7", 0},
178 1.1 christos {"-ZSV--", 11, 16, "0010 1011 ddN0 imm4m1", "dec @rd,imm4m1", 0},
179 1.1 christos {"-ZSV--", 14, 16, "0110 1011 ddN0 imm4m1 address_dst", "dec address_dst(rd),imm4m1", 0},
180 1.1 christos {"-ZSV--", 13, 16, "0110 1011 0000 imm4m1 address_dst", "dec address_dst,imm4m1", 0},
181 1.1 christos {"-ZSV--", 4, 16, "1010 1011 dddd imm4m1", "dec rd,imm4m1", 0},
182 1.1 christos {"-ZSV--", 11, 8, "0010 1010 ddN0 imm4m1", "decb @rd,imm4m1", 0},
183 1.1 christos {"-ZSV--", 14, 8, "0110 1010 ddN0 imm4m1 address_dst", "decb address_dst(rd),imm4m1", 0},
184 1.1 christos {"-ZSV--", 13, 8, "0110 1010 0000 imm4m1 address_dst", "decb address_dst,imm4m1", 0},
185 1.1 christos {"-ZSV--", 4, 8, "1010 1010 dddd imm4m1", "decb rbd,imm4m1", 0},
186 1.1 christos
187 1.1 christos {"------", 7, 16, "0111 1100 0000 00ii", "di i2", 0},
188 1.1 christos {"CZSV--", 107, 16, "0001 1011 ssN0 dddd", "div rrd,@rs", 0},
189 1.1 christos {"CZSV--", 107, 16, "0101 1011 0000 dddd address_src", "div rrd,address_src", 0},
190 1.1 christos {"CZSV--", 107, 16, "0101 1011 ssN0 dddd address_src", "div rrd,address_src(rs)", 0},
191 1.1 christos {"CZSV--", 107, 16, "0001 1011 0000 dddd imm16", "div rrd,imm16", 0},
192 1.1 christos {"CZSV--", 107, 16, "1001 1011 ssss dddd", "div rrd,rs", 0},
193 1.1 christos {"CZSV--", 744, 32, "0001 1010 ssN0 dddd", "divl rqd,@rs", 0},
194 1.1 christos {"CZSV--", 745, 32, "0101 1010 0000 dddd address_src", "divl rqd,address_src", 0},
195 1.1 christos {"CZSV--", 746, 32, "0101 1010 ssN0 dddd address_src", "divl rqd,address_src(rs)", 0},
196 1.1 christos {"CZSV--", 744, 32, "0001 1010 0000 dddd imm32", "divl rqd,imm32", 0},
197 1.1 christos {"CZSV--", 744, 32, "1001 1010 ssss dddd", "divl rqd,rrs", 0},
198 1.1 christos
199 1.1 christos {"------", 11, 16, "1111 dddd 1disp7", "djnz rd,disp7", 0},
200 1.1 christos {"------", 7, 16, "0111 1100 0000 01ii", "ei i2", 0},
201 1.1 christos {"------", 6, 16, "1010 1101 ssss dddd", "ex rd,rs", 0},
202 1.1 christos {"------", 12, 16, "0010 1101 ssN0 dddd", "ex rd,@rs", 0},
203 1.1 christos {"------", 15, 16, "0110 1101 0000 dddd address_src", "ex rd,address_src", 0},
204 1.1 christos {"------", 16, 16, "0110 1101 ssN0 dddd address_src", "ex rd,address_src(rs)", 0},
205 1.1 christos
206 1.1 christos {"------", 12, 8, "0010 1100 ssN0 dddd", "exb rbd,@rs", 0},
207 1.1 christos {"------", 15, 8, "0110 1100 0000 dddd address_src", "exb rbd,address_src", 0},
208 1.1 christos {"------", 16, 8, "0110 1100 ssN0 dddd address_src", "exb rbd,address_src(rs)", 0},
209 1.1 christos {"------", 6, 8, "1010 1100 ssss dddd", "exb rbd,rbs", 0},
210 1.1 christos
211 1.1 christos {"------", 11, 16, "1011 0001 dddd 1010", "exts rrd", 0},
212 1.1 christos {"------", 11, 8, "1011 0001 dddd 0000", "extsb rd", 0},
213 1.1 christos {"------", 11, 32, "1011 0001 dddd 0111", "extsl rqd", 0},
214 1.1 christos
215 1.1 christos {"------", 8, 16, "0111 1010 0000 0000", "halt", 0},
216 1.1 christos {"------", 10, 16, "0011 1101 ssss dddd", "in rd,@ri", 0},
217 1.1 christos {"------", 12, 8, "0011 1100 ssss dddd", "inb rbd,@ri", 0},
218 1.1 christos {"------", 12, 16, "0011 1011 dddd 0100 imm16", "in rd,imm16", 0},
219 1.1 christos {"------", 10, 8, "0011 1010 dddd 0100 imm16", "inb rbd,imm16", 0},
220 1.1 christos {"-ZSV--", 11, 16, "0010 1001 ddN0 imm4m1", "inc @rd,imm4m1", 0},
221 1.1 christos {"-ZSV--", 14, 16, "0110 1001 ddN0 imm4m1 address_dst", "inc address_dst(rd),imm4m1", 0},
222 1.1 christos {"-ZSV--", 13, 16, "0110 1001 0000 imm4m1 address_dst", "inc address_dst,imm4m1", 0},
223 1.1 christos {"-ZSV--", 4, 16, "1010 1001 dddd imm4m1", "inc rd,imm4m1", 0},
224 1.1 christos {"-ZSV--", 11, 8, "0010 1000 ddN0 imm4m1", "incb @rd,imm4m1", 0},
225 1.1 christos {"-ZSV--", 14, 8, "0110 1000 ddN0 imm4m1 address_dst", "incb address_dst(rd),imm4m1", 0},
226 1.1 christos {"-ZSV--", 13, 8, "0110 1000 0000 imm4m1 address_dst", "incb address_dst,imm4m1", 0},
227 1.1 christos {"-ZSV--", 4, 8, "1010 1000 dddd imm4m1", "incb rbd,imm4m1", 0},
228 1.1 christos {"---V--", 21, 16, "0011 1011 ssss 1000 0000 aaaa ddN0 1000", "ind @rd,@ri,ra", 0},
229 1.1 christos {"---V--", 21, 8, "0011 1010 ssss 1000 0000 aaaa ddN0 1000", "indb @rd,@ri,ra", 0},
230 1.1 christos {"---V--", 11, 16, "0011 1011 ssss 1000 0000 aaaa ddN0 0000", "indr @rd,@ri,ra", 0},
231 1.1 christos {"---V--", 11, 8, "0011 1010 ssss 1000 0000 aaaa ddN0 0000", "indrb @rd,@ri,ra", 0},
232 1.1 christos {"---V--", 21, 16, "0011 1011 ssss 0000 0000 aaaa ddN0 1000", "ini @rd,@ri,ra", 0},
233 1.1 christos {"---V--", 21, 8, "0011 1010 ssss 0000 0000 aaaa ddN0 1000", "inib @rd,@ri,ra", 0},
234 1.1 christos {"---V--", 11, 16, "0011 1011 ssss 0000 0000 aaaa ddN0 0000", "inir @rd,@ri,ra", 0},
235 1.1 christos {"---V--", 11, 8, "0011 1010 ssss 0000 0000 aaaa ddN0 0000", "inirb @rd,@ri,ra", 0},
236 1.1 christos {"CZSVDH", 13, 16, "0111 1011 0000 0000", "iret", 0},
237 1.1 christos {"------", 10, 16, "0001 1110 ddN0 cccc", "jp cc,@rd", 0},
238 1.1 christos {"------", 7, 16, "0101 1110 0000 cccc address_dst", "jp cc,address_dst", 0},
239 1.1 christos {"------", 8, 16, "0101 1110 ddN0 cccc address_dst", "jp cc,address_dst(rd)", 0},
240 1.1 christos {"------", 6, 16, "1110 cccc disp8", "jr cc,disp8", 0},
241 1.1 christos
242 1.1 christos {"------", 7, 16, "0000 1101 ddN0 0101 imm16", "ld @rd,imm16", 0},
243 1.1 christos {"------", 8, 16, "0010 1111 ddN0 ssss", "ld @rd,rs", 0},
244 1.1 christos {"------", 15, 16, "0100 1101 ddN0 0101 address_dst imm16", "ld address_dst(rd),imm16", 0},
245 1.1 christos {"------", 12, 16, "0110 1111 ddN0 ssss address_dst", "ld address_dst(rd),rs", 0},
246 1.1 christos {"------", 14, 16, "0100 1101 0000 0101 address_dst imm16", "ld address_dst,imm16", 0},
247 1.1 christos {"------", 11, 16, "0110 1111 0000 ssss address_dst", "ld address_dst,rs", 0},
248 1.1 christos {"------", 14, 16, "0011 0011 ddN0 ssss imm16", "ld rd(imm16),rs", 0},
249 1.1 christos {"------", 14, 16, "0111 0011 ddN0 ssss 0000 xxxx 0000 0000", "ld rd(rx),rs", 0},
250 1.1 christos {"------", 7, 16, "0010 0001 ssN0 dddd", "ld rd,@rs", 0},
251 1.1 christos {"------", 9, 16, "0110 0001 0000 dddd address_src", "ld rd,address_src", 0},
252 1.1 christos {"------", 10, 16, "0110 0001 ssN0 dddd address_src", "ld rd,address_src(rs)", 0},
253 1.1 christos {"------", 7, 16, "0010 0001 0000 dddd imm16", "ld rd,imm16", 0},
254 1.1 christos {"------", 3, 16, "1010 0001 ssss dddd", "ld rd,rs", 0},
255 1.1 christos {"------", 14, 16, "0011 0001 ssN0 dddd imm16", "ld rd,rs(imm16)", 0},
256 1.1 christos {"------", 14, 16, "0111 0001 ssN0 dddd 0000 xxxx 0000 0000", "ld rd,rs(rx)", 0},
257 1.1 christos
258 1.1 christos {"------", 7, 8, "0000 1100 ddN0 0101 imm8 imm8", "ldb @rd,imm8", 0},
259 1.1 christos {"------", 8, 8, "0010 1110 ddN0 ssss", "ldb @rd,rbs", 0},
260 1.1 christos {"------", 15, 8, "0100 1100 ddN0 0101 address_dst imm8 imm8", "ldb address_dst(rd),imm8", 0},
261 1.1 christos {"------", 12, 8, "0110 1110 ddN0 ssss address_dst", "ldb address_dst(rd),rbs", 0},
262 1.1 christos {"------", 14, 8, "0100 1100 0000 0101 address_dst imm8 imm8", "ldb address_dst,imm8", 0},
263 1.1 christos {"------", 11, 8, "0110 1110 0000 ssss address_dst", "ldb address_dst,rbs", 0},
264 1.1 christos {"------", 14, 8, "0011 0010 ddN0 ssss imm16", "ldb rd(imm16),rbs", 0},
265 1.1 christos {"------", 14, 8, "0111 0010 ddN0 ssss 0000 xxxx 0000 0000", "ldb rd(rx),rbs", 0},
266 1.1 christos {"------", 7, 8, "0010 0000 ssN0 dddd", "ldb rbd,@rs", 0},
267 1.1 christos {"------", 9, 8, "0110 0000 0000 dddd address_src", "ldb rbd,address_src", 0},
268 1.1 christos {"------", 10, 8, "0110 0000 ssN0 dddd address_src", "ldb rbd,address_src(rs)", 0},
269 1.1 christos {"------", 5, 8, "1100 dddd imm8", "ldb rbd,imm8", 0},
270 1.1 christos {"------", 7, 8, "0010 0000 0000 dddd imm8 imm8", "ldb rbd,imm8", 0},
271 1.1 christos {"------", 3, 8, "1010 0000 ssss dddd", "ldb rbd,rbs", 0},
272 1.1 christos {"------", 14, 8, "0011 0000 ssN0 dddd imm16", "ldb rbd,rs(imm16)", 0},
273 1.1 christos {"------", 14, 8, "0111 0000 ssN0 dddd 0000 xxxx 0000 0000", "ldb rbd,rs(rx)", 0},
274 1.1 christos
275 1.1 christos {"------", 11, 32, "0001 1101 ddN0 ssss", "ldl @rd,rrs", 0},
276 1.1 christos {"------", 14, 32, "0101 1101 ddN0 ssss address_dst", "ldl address_dst(rd),rrs", 0},
277 1.1 christos {"------", 15, 32, "0101 1101 0000 ssss address_dst", "ldl address_dst,rrs", 0},
278 1.1 christos {"------", 17, 32, "0011 0111 ddN0 ssss imm16", "ldl rd(imm16),rrs", 0},
279 1.1 christos {"------", 17, 32, "0111 0111 ddN0 ssss 0000 xxxx 0000 0000", "ldl rd(rx),rrs", 0},
280 1.1 christos {"------", 11, 32, "0001 0100 ssN0 dddd", "ldl rrd,@rs", 0},
281 1.1 christos {"------", 12, 32, "0101 0100 0000 dddd address_src", "ldl rrd,address_src", 0},
282 1.1 christos {"------", 13, 32, "0101 0100 ssN0 dddd address_src", "ldl rrd,address_src(rs)", 0},
283 1.1 christos {"------", 11, 32, "0001 0100 0000 dddd imm32", "ldl rrd,imm32", 0},
284 1.1 christos {"------", 5, 32, "1001 0100 ssss dddd", "ldl rrd,rrs", 0},
285 1.1 christos {"------", 17, 32, "0011 0101 ssN0 dddd imm16", "ldl rrd,rs(imm16)", 0},
286 1.1 christos {"------", 17, 32, "0111 0101 ssN0 dddd 0000 xxxx 0000 0000", "ldl rrd,rs(rx)", 0},
287 1.1 christos
288 1.1 christos {"------", 12, 16, "0111 0110 0000 dddd address_src", "lda prd,address_src", 0},
289 1.1 christos {"------", 13, 16, "0111 0110 ssN0 dddd address_src", "lda prd,address_src(rs)", 0},
290 1.1 christos {"------", 15, 16, "0011 0100 ssN0 dddd imm16", "lda prd,rs(imm16)", 0},
291 1.1 christos {"------", 15, 16, "0111 0100 ssN0 dddd 0000 xxxx 0000 0000", "lda prd,rs(rx)", 0},
292 1.1 christos {"------", 15, 16, "0011 0100 0000 dddd disp16", "ldar prd,disp16", 0},
293 1.1 christos {"------", 7, 32, "0111 1101 ssss 1ccc", "ldctl ctrl,rs", 0},
294 1.1 christos {"------", 7, 32, "0111 1101 dddd 0ccc", "ldctl rd,ctrl", 0},
295 1.1 christos
296 1.1 christos {"------", 5, 16, "1011 1101 dddd imm4", "ldk rd,imm4", 0},
297 1.1 christos
298 1.1 christos {"------", 11, 16, "0001 1100 ddN0 1001 0000 ssss 0000 imm4m1", "ldm @rd,rs,n", 0},
299 1.1 christos {"------", 15, 16, "0101 1100 ddN0 1001 0000 ssss 0000 imm4m1 address_dst", "ldm address_dst(rd),rs,n", 0},
300 1.1 christos {"------", 14, 16, "0101 1100 0000 1001 0000 ssss 0000 imm4m1 address_dst", "ldm address_dst,rs,n", 0},
301 1.1 christos {"------", 11, 16, "0001 1100 ssN0 0001 0000 dddd 0000 imm4m1", "ldm rd,@rs,n", 0},
302 1.1 christos {"------", 15, 16, "0101 1100 ssN0 0001 0000 dddd 0000 imm4m1 address_src", "ldm rd,address_src(rs),n", 0},
303 1.1 christos {"------", 14, 16, "0101 1100 0000 0001 0000 dddd 0000 imm4m1 address_src", "ldm rd,address_src,n", 0},
304 1.1 christos
305 1.1 christos {"CZSVDH", 12, 16, "0011 1001 ssN0 0000", "ldps @rs", 0},
306 1.1 christos {"CZSVDH", 16, 16, "0111 1001 0000 0000 address_src", "ldps address_src", 0},
307 1.1 christos {"CZSVDH", 17, 16, "0111 1001 ssN0 0000 address_src", "ldps address_src(rs)", 0},
308 1.1 christos
309 1.1 christos {"------", 14, 16, "0011 0011 0000 ssss disp16", "ldr disp16,rs", 0},
310 1.1 christos {"------", 14, 16, "0011 0001 0000 dddd disp16", "ldr rd,disp16", 0},
311 1.1 christos {"------", 14, 8, "0011 0010 0000 ssss disp16", "ldrb disp16,rbs", 0},
312 1.1 christos {"------", 14, 8, "0011 0000 0000 dddd disp16", "ldrb rbd,disp16", 0},
313 1.1 christos {"------", 17, 32, "0011 0111 0000 ssss disp16", "ldrl disp16,rrs", 0},
314 1.1 christos {"------", 17, 32, "0011 0101 0000 dddd disp16", "ldrl rrd,disp16", 0},
315 1.1 christos
316 1.1 christos {"CZS---", 7, 16, "0111 1011 0000 1010", "mbit", 0},
317 1.1 christos {"-ZS---", 12, 16, "0111 1011 dddd 1101", "mreq rd", 0},
318 1.1 christos {"------", 5, 16, "0111 1011 0000 1001", "mres", 0},
319 1.1 christos {"------", 5, 16, "0111 1011 0000 1000", "mset", 0},
320 1.1 christos
321 1.1 christos {"CZSV--", 70, 16, "0001 1001 ssN0 dddd", "mult rrd,@rs", 0},
322 1.1 christos {"CZSV--", 70, 16, "0101 1001 0000 dddd address_src", "mult rrd,address_src", 0},
323 1.1 christos {"CZSV--", 70, 16, "0101 1001 ssN0 dddd address_src", "mult rrd,address_src(rs)", 0},
324 1.1 christos {"CZSV--", 70, 16, "0001 1001 0000 dddd imm16", "mult rrd,imm16", 0},
325 1.1 christos {"CZSV--", 70, 16, "1001 1001 ssss dddd", "mult rrd,rs", 0},
326 1.1 christos {"CZSV--", 282, 32, "0001 1000 ssN0 dddd", "multl rqd,@rs", 0},
327 1.1 christos {"CZSV--", 282, 32, "0101 1000 0000 dddd address_src", "multl rqd,address_src", 0},
328 1.1 christos {"CZSV--", 282, 32, "0101 1000 ssN0 dddd address_src", "multl rqd,address_src(rs)", 0},
329 1.1 christos {"CZSV--", 282, 32, "0001 1000 0000 dddd imm32", "multl rqd,imm32", 0},
330 1.1 christos {"CZSV--", 282, 32, "1001 1000 ssss dddd", "multl rqd,rrs", 0},
331 1.1 christos {"CZSV--", 12, 16, "0000 1101 ddN0 0010", "neg @rd", 0},
332 1.1 christos {"CZSV--", 15, 16, "0100 1101 0000 0010 address_dst", "neg address_dst", 0},
333 1.1 christos {"CZSV--", 16, 16, "0100 1101 ddN0 0010 address_dst", "neg address_dst(rd)", 0},
334 1.1 christos {"CZSV--", 7, 16, "1000 1101 dddd 0010", "neg rd", 0},
335 1.1 christos {"CZSV--", 12, 8, "0000 1100 ddN0 0010", "negb @rd", 0},
336 1.1 christos {"CZSV--", 15, 8, "0100 1100 0000 0010 address_dst", "negb address_dst", 0},
337 1.1 christos {"CZSV--", 16, 8, "0100 1100 ddN0 0010 address_dst", "negb address_dst(rd)", 0},
338 1.1 christos {"CZSV--", 7, 8, "1000 1100 dddd 0010", "negb rbd", 0},
339 1.1 christos
340 1.1 christos {"------", 7, 16, "1000 1101 0000 0111", "nop", 0},
341 1.1 christos
342 1.1 christos {"CZS---", 7, 16, "0000 0101 ssN0 dddd", "or rd,@rs", 0},
343 1.1 christos {"CZS---", 9, 16, "0100 0101 0000 dddd address_src", "or rd,address_src", 0},
344 1.1 christos {"CZS---", 10, 16, "0100 0101 ssN0 dddd address_src", "or rd,address_src(rs)", 0},
345 1.1 christos {"CZS---", 7, 16, "0000 0101 0000 dddd imm16", "or rd,imm16", 0},
346 1.1 christos {"CZS---", 4, 16, "1000 0101 ssss dddd", "or rd,rs", 0},
347 1.1 christos
348 1.1 christos {"CZSP--", 7, 8, "0000 0100 ssN0 dddd", "orb rbd,@rs", 0},
349 1.1 christos {"CZSP--", 9, 8, "0100 0100 0000 dddd address_src", "orb rbd,address_src", 0},
350 1.1 christos {"CZSP--", 10, 8, "0100 0100 ssN0 dddd address_src", "orb rbd,address_src(rs)", 0},
351 1.1 christos {"CZSP--", 7, 8, "0000 0100 0000 dddd imm8 imm8", "orb rbd,imm8", 0},
352 1.1 christos {"CZSP--", 4, 8, "1000 0100 ssss dddd", "orb rbd,rbs", 0},
353 1.1 christos
354 1.1 christos {"------", 10, 16, "0011 1111 dddd ssss", "out @ro,rs", 0},
355 1.1 christos {"------", 12, 16, "0011 1011 ssss 0110 imm16", "out imm16,rs", 0},
356 1.1 christos {"------", 10, 8, "0011 1110 dddd ssss", "outb @ro,rbs", 0},
357 1.1 christos {"------", 12, 8, "0011 1010 ssss 0110 imm16", "outb imm16,rbs", 0},
358 1.1 christos {"---V--", 21, 16, "0011 1011 ssN0 1010 0000 aaaa dddd 1000", "outd @ro,@rs,ra", 0},
359 1.1 christos {"---V--", 21, 8, "0011 1010 ssN0 1010 0000 aaaa dddd 1000", "outdb @ro,@rs,ra", 0},
360 1.1 christos {"---V--", 11, 16, "0011 1011 ssN0 1010 0000 aaaa dddd 0000", "otdr @ro,@rs,ra", 0},
361 1.1 christos {"---V--", 11, 8, "0011 1010 ssN0 1010 0000 aaaa dddd 0000", "otdrb @ro,@rs,ra", 0},
362 1.1 christos {"---V--", 21, 16, "0011 1011 ssN0 0010 0000 aaaa dddd 1000", "outi @ro,@rs,ra", 0},
363 1.1 christos {"---V--", 21, 8, "0011 1010 ssN0 0010 0000 aaaa dddd 1000", "outib @ro,@rs,ra", 0},
364 1.1 christos {"---V--", 11, 16, "0011 1011 ssN0 0010 0000 aaaa dddd 0000", "otir @ro,@rs,ra", 0},
365 1.1 christos {"---V--", 11, 8, "0011 1010 ssN0 0010 0000 aaaa dddd 0000", "otirb @ro,@rs,ra", 0},
366 1.1 christos
367 1.1 christos {"------", 12, 16, "0001 0111 ssN0 ddN0", "pop @rd,@rs", 0},
368 1.1 christos {"------", 16, 16, "0101 0111 ssN0 ddN0 address_dst", "pop address_dst(rd),@rs", 0},
369 1.1 christos {"------", 16, 16, "0101 0111 ssN0 0000 address_dst", "pop address_dst,@rs", 0},
370 1.1 christos {"------", 8, 16, "1001 0111 ssN0 dddd", "pop rd,@rs", 0},
371 1.1 christos
372 1.1 christos {"------", 19, 32, "0001 0101 ssN0 ddN0", "popl @rd,@rs", 0},
373 1.1 christos {"------", 23, 32, "0101 0101 ssN0 ddN0 address_dst", "popl address_dst(rd),@rs", 0},
374 1.1 christos {"------", 23, 32, "0101 0101 ssN0 0000 address_dst", "popl address_dst,@rs", 0},
375 1.1 christos {"------", 12, 32, "1001 0101 ssN0 dddd", "popl rrd,@rs", 0},
376 1.1 christos
377 1.1 christos {"------", 13, 16, "0001 0011 ddN0 ssN0", "push @rd,@rs", 0},
378 1.1 christos {"------", 14, 16, "0101 0011 ddN0 0000 address_src", "push @rd,address_src", 0},
379 1.1 christos {"------", 14, 16, "0101 0011 ddN0 ssN0 address_src", "push @rd,address_src(rs)", 0},
380 1.1 christos {"------", 12, 16, "0000 1101 ddN0 1001 imm16", "push @rd,imm16", 0},
381 1.1 christos {"------", 9, 16, "1001 0011 ddN0 ssss", "push @rd,rs", 0},
382 1.1 christos
383 1.1 christos {"------", 20, 32, "0001 0001 ddN0 ssN0", "pushl @rd,@rs", 0},
384 1.1 christos {"------", 21, 32, "0101 0001 ddN0 ssN0 address_src", "pushl @rd,address_src(rs)", 0},
385 1.1 christos {"------", 21, 32, "0101 0001 ddN0 0000 address_src", "pushl @rd,address_src", 0},
386 1.1 christos {"------", 12, 32, "1001 0001 ddN0 ssss", "pushl @rd,rrs", 0},
387 1.1 christos
388 1.1 christos {"------", 11, 16, "0010 0011 ddN0 imm4", "res @rd,imm4", 0},
389 1.1 christos {"------", 14, 16, "0110 0011 ddN0 imm4 address_dst", "res address_dst(rd),imm4", 0},
390 1.1 christos {"------", 13, 16, "0110 0011 0000 imm4 address_dst", "res address_dst,imm4", 0},
391 1.1 christos {"------", 4, 16, "1010 0011 dddd imm4", "res rd,imm4", 0},
392 1.1 christos {"------", 10, 16, "0010 0011 0000 ssss 0000 dddd 0000 0000", "res rd,rs", 0},
393 1.1 christos
394 1.1 christos {"------", 11, 8, "0010 0010 ddN0 imm4", "resb @rd,imm4", 0},
395 1.1 christos {"------", 14, 8, "0110 0010 ddN0 imm4 address_dst", "resb address_dst(rd),imm4", 0},
396 1.1 christos {"------", 13, 8, "0110 0010 0000 imm4 address_dst", "resb address_dst,imm4", 0},
397 1.1 christos {"------", 4, 8, "1010 0010 dddd imm4", "resb rbd,imm4", 0},
398 1.1 christos {"------", 10, 8, "0010 0010 0000 ssss 0000 dddd 0000 0000", "resb rbd,rs", 0},
399 1.1 christos
400 1.1 christos {"CZSV--", 7, 16, "1000 1101 flags 0011", "resflg flags", 0},
401 1.1 christos {"------", 10, 16, "1001 1110 0000 cccc", "ret cc", 0},
402 1.1 christos
403 1.1 christos {"CZSV--", 6, 16, "1011 0011 dddd 00I0", "rl rd,imm1or2", 0},
404 1.1 christos {"CZSV--", 6, 8, "1011 0010 dddd 00I0", "rlb rbd,imm1or2", 0},
405 1.1 christos {"CZSV--", 6, 16, "1011 0011 dddd 10I0", "rlc rd,imm1or2", 0},
406 1.1 christos
407 1.1 christos {"-Z----", 9, 8, "1011 0010 dddd 10I0", "rlcb rbd,imm1or2", 0},
408 1.1 christos {"-Z----", 9, 8, "1011 1110 aaaa bbbb", "rldb rbb,rba", 0},
409 1.1 christos
410 1.1 christos {"CZSV--", 6, 16, "1011 0011 dddd 01I0", "rr rd,imm1or2", 0},
411 1.1 christos {"CZSV--", 6, 8, "1011 0010 dddd 01I0", "rrb rbd,imm1or2", 0},
412 1.1 christos {"CZSV--", 6, 16, "1011 0011 dddd 11I0", "rrc rd,imm1or2", 0},
413 1.1 christos
414 1.1 christos {"-Z----", 9, 8, "1011 0010 dddd 11I0", "rrcb rbd,imm1or2", 0},
415 1.1 christos {"-Z----", 9, 8, "1011 1100 aaaa bbbb", "rrdb rbb,rba", 0},
416 1.1 christos {"CZSV--", 5, 16, "1011 0111 ssss dddd", "sbc rd,rs", 0},
417 1.1 christos {"CZSVDH", 5, 8, "1011 0110 ssss dddd", "sbcb rbd,rbs", 0},
418 1.1 christos
419 1.1 christos {"CZSVDH", 33, 8, "0111 1111 imm8", "sc imm8", 0},
420 1.1 christos
421 1.1 christos {"CZSV--", 15, 16, "1011 0011 dddd 1011 0000 ssss 0000 0000", "sda rd,rs", 0},
422 1.1 christos {"CZSV--", 15, 8, "1011 0010 dddd 1011 0000 ssss 0000 0000", "sdab rbd,rs", 0},
423 1.1 christos {"CZSV--", 15, 32, "1011 0011 dddd 1111 0000 ssss 0000 0000", "sdal rrd,rs", 0},
424 1.1 christos
425 1.1 christos {"CZS---", 15, 16, "1011 0011 dddd 0011 0000 ssss 0000 0000", "sdl rd,rs", 0},
426 1.1 christos {"CZS---", 15, 8, "1011 0010 dddd 0011 0000 ssss 0000 0000", "sdlb rbd,rs", 0},
427 1.1 christos {"CZS---", 15, 32, "1011 0011 dddd 0111 0000 ssss 0000 0000", "sdll rrd,rs", 0},
428 1.1 christos
429 1.1 christos {"------", 11, 16, "0010 0101 ddN0 imm4", "set @rd,imm4", 0},
430 1.1 christos {"------", 14, 16, "0110 0101 ddN0 imm4 address_dst", "set address_dst(rd),imm4", 0},
431 1.1 christos {"------", 13, 16, "0110 0101 0000 imm4 address_dst", "set address_dst,imm4", 0},
432 1.1 christos {"------", 4, 16, "1010 0101 dddd imm4", "set rd,imm4", 0},
433 1.1 christos {"------", 10, 16, "0010 0101 0000 ssss 0000 dddd 0000 0000", "set rd,rs", 0},
434 1.1 christos {"------", 11, 8, "0010 0100 ddN0 imm4", "setb @rd,imm4", 0},
435 1.1 christos {"------", 14, 8, "0110 0100 ddN0 imm4 address_dst", "setb address_dst(rd),imm4", 0},
436 1.1 christos {"------", 13, 8, "0110 0100 0000 imm4 address_dst", "setb address_dst,imm4", 0},
437 1.1 christos {"------", 4, 8, "1010 0100 dddd imm4", "setb rbd,imm4", 0},
438 1.1 christos {"------", 10, 8, "0010 0100 0000 ssss 0000 dddd 0000 0000", "setb rbd,rs", 0},
439 1.1 christos
440 1.1 christos {"CZSV--", 7, 16, "1000 1101 flags 0001", "setflg flags", 0},
441 1.1 christos
442 1.1 christos {"------", 12, 16, "0011 1011 dddd 0101 imm16", "sin rd,imm16", 0},
443 1.1 christos {"------", 10, 8, "0011 1010 dddd 0101 imm16", "sinb rbd,imm16", 0},
444 1.1 christos {"---V--", 21, 16, "0011 1011 ssss 1001 0000 aaaa ddN0 1000", "sind @rd,@ri,ra", 0},
445 1.1 christos {"---V--", 21, 8, "0011 1010 ssss 1001 0000 aaaa ddN0 1000", "sindb @rd,@ri,ra", 0},
446 1.1 christos {"---V--", 11, 16, "0011 1011 ssss 1001 0000 aaaa ddN0 0000", "sindr @rd,@ri,ra", 0},
447 1.1 christos {"---V--", 11, 8, "0011 1010 ssss 1001 0000 aaaa ddN0 0000", "sindrb @rd,@ri,ra", 0},
448 1.1 christos {"---V--", 21, 16, "0011 1011 ssss 0001 0000 aaaa ddN0 1000", "sini @rd,@ri,ra", 0},
449 1.1 christos {"---V--", 21, 8, "0011 1010 ssss 0001 0000 aaaa ddN0 1000", "sinib @rd,@ri,ra", 0},
450 1.1 christos {"---V--", 11, 16, "0011 1011 ssss 0001 0000 aaaa ddN0 0000", "sinir @rd,@ri,ra", 0},
451 1.1 christos {"---V--", 11, 8, "0011 1010 ssss 0001 0000 aaaa ddN0 0000", "sinirb @rd,@ri,ra", 0},
452 1.1 christos
453 1.1 christos {"CZSV--", 13, 16, "1011 0011 dddd 1001 0000 0000 imm8", "sla rd,imm8", 0},
454 1.1 christos {"CZSV--", 13, 8, "1011 0010 dddd 1001 iiii iiii 0000 imm4", "slab rbd,imm4", 0},
455 1.1 christos {"CZSV--", 13, 32, "1011 0011 dddd 1101 0000 0000 imm8", "slal rrd,imm8", 0},
456 1.1 christos
457 1.1 christos {"CZS---", 13, 16, "1011 0011 dddd 0001 0000 0000 imm8", "sll rd,imm8", 0},
458 1.1 christos {"CZS---", 13, 8, "1011 0010 dddd 0001 iiii iiii 0000 imm4", "sllb rbd,imm4", 0},
459 1.1 christos {"CZS---", 13, 32, "1011 0011 dddd 0101 0000 0000 imm8", "slll rrd,imm8", 0},
460 1.1 christos
461 1.1 christos {"------", 12, 16, "0011 1011 ssss 0110 imm16", "sout imm16,rs", 0},
462 1.1 christos {"------", 12, 8, "0011 1010 ssss 0110 imm16", "soutb imm16,rbs", 0},
463 1.1 christos {"---V--", 21, 16, "0011 1011 ssN0 1011 0000 aaaa dddd 1000", "soutd @ro,@rs,ra", 0},
464 1.1 christos {"---V--", 21, 8, "0011 1010 ssN0 1011 0000 aaaa dddd 1000", "soutdb @ro,@rs,ra", 0},
465 1.1 christos {"---V--", 11, 16, "0011 1011 ssN0 1011 0000 aaaa dddd 0000", "sotdr @ro,@rs,ra", 0},
466 1.1 christos {"---V--", 11, 8, "0011 1010 ssN0 1011 0000 aaaa dddd 0000", "sotdrb @ro,@rs,ra", 0},
467 1.1 christos {"---V--", 21, 16, "0011 1011 ssN0 0011 0000 aaaa dddd 1000", "souti @ro,@rs,ra", 0},
468 1.1 christos {"---V--", 21, 8, "0011 1010 ssN0 0011 0000 aaaa dddd 1000", "soutib @ro,@rs,ra", 0},
469 1.1 christos {"---V--", 11, 16, "0011 1011 ssN0 0011 0000 aaaa dddd 0000", "sotir @ro,@rs,ra", 0},
470 1.1 christos {"---V--", 11, 8, "0011 1010 ssN0 0011 0000 aaaa dddd 0000", "sotirb @ro,@rs,ra", 0},
471 1.1 christos
472 1.1 christos {"CZSV--", 13, 16, "1011 0011 dddd 1001 1111 1111 nim8", "sra rd,imm8", 0},
473 1.1 christos {"CZSV--", 13, 8, "1011 0010 dddd 1001 iiii iiii 1111 nim4", "srab rbd,imm4", 0},
474 1.1 christos {"CZSV--", 13, 32, "1011 0011 dddd 1101 1111 1111 nim8", "sral rrd,imm8", 0},
475 1.1 christos
476 1.1 christos {"CZSV--", 13, 16, "1011 0011 dddd 0001 1111 1111 nim8", "srl rd,imm8", 0},
477 1.1 christos {"CZSV--", 13, 8, "1011 0010 dddd 0001 iiii iiii 1111 nim4", "srlb rbd,imm4", 0},
478 1.1 christos {"CZSV--", 13, 32, "1011 0011 dddd 0101 1111 1111 nim8", "srll rrd,imm8", 0},
479 1.1 christos
480 1.1 christos {"CZSV--", 7, 16, "0000 0011 ssN0 dddd", "sub rd,@rs", 0},
481 1.1 christos {"CZSV--", 9, 16, "0100 0011 0000 dddd address_src", "sub rd,address_src", 0},
482 1.1 christos {"CZSV--", 10, 16, "0100 0011 ssN0 dddd address_src", "sub rd,address_src(rs)", 0},
483 1.1 christos {"CZSV--", 7, 16, "0000 0011 0000 dddd imm16", "sub rd,imm16", 0},
484 1.1 christos {"CZSV--", 4, 16, "1000 0011 ssss dddd", "sub rd,rs", 0},
485 1.1 christos
486 1.1 christos {"CZSVDH", 7, 8, "0000 0010 ssN0 dddd", "subb rbd,@rs", 0},
487 1.1 christos {"CZSVDH", 9, 8, "0100 0010 0000 dddd address_src", "subb rbd,address_src", 0},
488 1.1 christos {"CZSVDH", 10, 8, "0100 0010 ssN0 dddd address_src", "subb rbd,address_src(rs)", 0},
489 1.1 christos {"CZSVDH", 7, 8, "0000 0010 0000 dddd imm8 imm8", "subb rbd,imm8", 0},
490 1.1 christos {"CZSVDH", 4, 8, "1000 0010 ssss dddd", "subb rbd,rbs", 0},
491 1.1 christos
492 1.1 christos {"CZSV--", 14, 32, "0001 0010 ssN0 dddd", "subl rrd,@rs", 0},
493 1.1 christos {"CZSV--", 15, 32, "0101 0010 0000 dddd address_src", "subl rrd,address_src", 0},
494 1.1 christos {"CZSV--", 16, 32, "0101 0010 ssN0 dddd address_src", "subl rrd,address_src(rs)", 0},
495 1.1 christos {"CZSV--", 14, 32, "0001 0010 0000 dddd imm32", "subl rrd,imm32", 0},
496 1.1 christos {"CZSV--", 8, 32, "1001 0010 ssss dddd", "subl rrd,rrs", 0},
497 1.1 christos
498 1.1 christos {"------", 5, 16, "1010 1111 dddd cccc", "tcc cc,rd", 0},
499 1.1 christos {"------", 5, 8, "1010 1110 dddd cccc", "tccb cc,rbd", 0},
500 1.1 christos
501 1.1 christos {"-ZS---", 8, 16, "0000 1101 ddN0 0100", "test @rd", 0},
502 1.1 christos {"------", 11, 16, "0100 1101 0000 0100 address_dst", "test address_dst", 0},
503 1.1 christos {"------", 12, 16, "0100 1101 ddN0 0100 address_dst", "test address_dst(rd)", 0},
504 1.1 christos {"------", 7, 16, "1000 1101 dddd 0100", "test rd", 0},
505 1.1 christos
506 1.1 christos {"-ZSP--", 8, 8, "0000 1100 ddN0 0100", "testb @rd", 0},
507 1.1 christos {"-ZSP--", 11, 8, "0100 1100 0000 0100 address_dst", "testb address_dst", 0},
508 1.1 christos {"-ZSP--", 12, 8, "0100 1100 ddN0 0100 address_dst", "testb address_dst(rd)", 0},
509 1.1 christos {"-ZSP--", 7, 8, "1000 1100 dddd 0100", "testb rbd", 0},
510 1.1 christos
511 1.1 christos {"-ZS---", 13, 32, "0001 1100 ddN0 1000", "testl @rd", 0},
512 1.1 christos {"-ZS---", 16, 32, "0101 1100 0000 1000 address_dst", "testl address_dst", 0},
513 1.1 christos {"-ZS---", 17, 32, "0101 1100 ddN0 1000 address_dst", "testl address_dst(rd)", 0},
514 1.1 christos {"-ZS---", 13, 32, "1001 1100 dddd 1000", "testl rrd", 0},
515 1.1 christos
516 1.1.1.2 christos {"---V--", 25, 8, "1011 1000 ddN0 1000 0000 rrrr ssN0 0000", "trdb @rd,@rs,rr", 0},
517 1.1.1.2 christos {"---V--", 25, 8, "1011 1000 ddN0 1100 0000 rrrr ssN0 0000", "trdrb @rd,@rs,rr", 0},
518 1.1.1.2 christos {"---V--", 25, 8, "1011 1000 ddN0 0000 0000 rrrr ssN0 0000", "trib @rd,@rs,rr", 0},
519 1.1.1.2 christos {"---V--", 25, 8, "1011 1000 ddN0 0100 0000 rrrr ssN0 0000", "trirb @rd,@rs,rr", 0},
520 1.1.1.2 christos {"-Z-V--", 25, 8, "1011 1000 aaN0 1010 0000 rrrr bbN0 0000", "trtdb @ra,@rb,rr", 0},
521 1.1.1.2 christos {"-Z-V--", 25, 8, "1011 1000 aaN0 1110 0000 rrrr bbN0 1110", "trtdrb @ra,@rb,rr", 0},
522 1.1.1.2 christos {"-Z-V--", 25, 8, "1011 1000 aaN0 0010 0000 rrrr bbN0 0000", "trtib @ra,@rb,rr", 0},
523 1.1.1.2 christos {"-Z-V--", 25, 8, "1011 1000 aaN0 0110 0000 rrrr bbN0 1110", "trtirb @ra,@rb,rr", 0},
524 1.1 christos
525 1.1 christos {"--S---", 11, 16, "0000 1101 ddN0 0110", "tset @rd", 0},
526 1.1 christos {"--S---", 14, 16, "0100 1101 0000 0110 address_dst", "tset address_dst", 0},
527 1.1 christos {"--S---", 15, 16, "0100 1101 ddN0 0110 address_dst", "tset address_dst(rd)", 0},
528 1.1 christos {"--S---", 7, 16, "1000 1101 dddd 0110", "tset rd", 0},
529 1.1 christos
530 1.1 christos {"--S---", 11, 8, "0000 1100 ddN0 0110", "tsetb @rd", 0},
531 1.1 christos {"--S---", 14, 8, "0100 1100 0000 0110 address_dst", "tsetb address_dst", 0},
532 1.1 christos {"--S---", 15, 8, "0100 1100 ddN0 0110 address_dst", "tsetb address_dst(rd)", 0},
533 1.1 christos {"--S---", 7, 8, "1000 1100 dddd 0110", "tsetb rbd", 0},
534 1.1 christos
535 1.1 christos {"-ZS---", 7, 16, "0000 1001 ssN0 dddd", "xor rd,@rs", 0},
536 1.1 christos {"-ZS---", 9, 16, "0100 1001 0000 dddd address_src", "xor rd,address_src", 0},
537 1.1 christos {"-ZS---", 10, 16, "0100 1001 ssN0 dddd address_src", "xor rd,address_src(rs)", 0},
538 1.1 christos {"-ZS---", 7, 16, "0000 1001 0000 dddd imm16", "xor rd,imm16", 0},
539 1.1 christos {"-ZS---", 4, 16, "1000 1001 ssss dddd", "xor rd,rs", 0},
540 1.1 christos
541 1.1 christos {"-ZSP--", 7, 8, "0000 1000 ssN0 dddd", "xorb rbd,@rs", 0},
542 1.1 christos {"-ZSP--", 9, 8, "0100 1000 0000 dddd address_src", "xorb rbd,address_src", 0},
543 1.1 christos {"-ZSP--", 10, 8, "0100 1000 ssN0 dddd address_src", "xorb rbd,address_src(rs)", 0},
544 1.1 christos {"-ZSP--", 7, 8, "0000 1000 0000 dddd imm8 imm8", "xorb rbd,imm8", 0},
545 1.1 christos {"-ZSP--", 4, 8, "1000 1000 ssss dddd", "xorb rbd,rbs", 0},
546 1.1 christos
547 1.1 christos {"------", 7, 32, "1000 1100 dddd 0001", "ldctlb rbd,ctrl", 0},
548 1.1 christos {"CZSVDH", 7, 32, "1000 1100 ssss 1001", "ldctlb ctrl,rbs", 0},
549 1.1 christos
550 1.1 christos {"*", 0, 0, 0, 0, 0}
551 1.1 christos };
552 1.1 christos
553 1.1 christos static int
554 1.1 christos count (void)
555 1.1 christos {
556 1.1 christos struct op *p = opt;
557 1.1 christos int r = 0;
558 1.1 christos
559 1.1 christos while (p->name)
560 1.1 christos {
561 1.1 christos r++;
562 1.1 christos p++;
563 1.1 christos }
564 1.1 christos return r;
565 1.1 christos
566 1.1 christos }
567 1.1 christos
568 1.1 christos static int
569 1.1 christos func (const void *p1, const void *p2)
570 1.1 christos {
571 1.1 christos const struct op *a = p1;
572 1.1 christos const struct op *b = p2;
573 1.1 christos int ret = strcmp (a->name, b->name);
574 1.1 christos if (ret != 0)
575 1.1 christos return ret;
576 1.1 christos return a->id > b->id ? 1 : -1;
577 1.1 christos }
578 1.1 christos
579 1.1 christos
580 1.1 christos /* opcode
581 1.1 christos
582 1.1 christos literal 0000 nnnn insert nnn into stream
583 1.1 christos operand 0001 nnnn insert operand reg nnn into stream
584 1.1 christos */
585 1.1 christos
586 1.1 christos struct tok_struct
587 1.1 christos {
588 1.1 christos char *match;
589 1.1 christos char *token;
590 1.1 christos int length;
591 1.1 christos };
592 1.1 christos
593 1.1 christos static struct tok_struct args[] =
594 1.1 christos {
595 1.1 christos {"address_src(rs)", "CLASS_X+(ARG_RS)",},
596 1.1 christos {"address_dst(rd)", "CLASS_X+(ARG_RD)",},
597 1.1 christos
598 1.1 christos {"rs(imm16)", "CLASS_BA+(ARG_RS)",},
599 1.1 christos {"rd(imm16)", "CLASS_BA+(ARG_RD)",},
600 1.1 christos {"prd", "CLASS_PR+(ARG_RD)",},
601 1.1 christos {"address_src", "CLASS_DA+(ARG_SRC)",},
602 1.1 christos {"address_dst", "CLASS_DA+(ARG_DST)",},
603 1.1 christos {"rd(rx)", "CLASS_BX+(ARG_RD)",},
604 1.1 christos {"rs(rx)", "CLASS_BX+(ARG_RS)",},
605 1.1 christos
606 1.1 christos {"disp16", "CLASS_DISP",},
607 1.1 christos {"disp12", "CLASS_DISP",},
608 1.1 christos {"disp7", "CLASS_DISP",},
609 1.1 christos {"disp8", "CLASS_DISP",},
610 1.1 christos {"flags", "CLASS_FLAGS",},
611 1.1 christos
612 1.1 christos {"imm16", "CLASS_IMM+(ARG_IMM16)",},
613 1.1 christos {"imm1or2", "CLASS_IMM+(ARG_IMM1OR2)",},
614 1.1 christos {"imm32", "CLASS_IMM+(ARG_IMM32)",},
615 1.1 christos {"imm4m1", "CLASS_IMM +(ARG_IMM4M1)",},
616 1.1 christos {"imm4", "CLASS_IMM +(ARG_IMM4)",},
617 1.1 christos {"n", "CLASS_IMM + (ARG_IMM4M1)",},
618 1.1 christos {"ctrl", "CLASS_CTRL",},
619 1.1 christos {"rba", "CLASS_REG_BYTE+(ARG_RA)",},
620 1.1 christos {"rbb", "CLASS_REG_BYTE+(ARG_RB)",},
621 1.1 christos {"rbd", "CLASS_REG_BYTE+(ARG_RD)",},
622 1.1 christos {"rbs", "CLASS_REG_BYTE+(ARG_RS)",},
623 1.1 christos {"rbr", "CLASS_REG_BYTE+(ARG_RR)",},
624 1.1 christos
625 1.1 christos {"rrd", "CLASS_REG_LONG+(ARG_RD)",},
626 1.1 christos {"rrs", "CLASS_REG_LONG+(ARG_RS)",},
627 1.1 christos
628 1.1 christos {"rqd", "CLASS_REG_QUAD+(ARG_RD)",},
629 1.1 christos
630 1.1 christos {"rd", "CLASS_REG_WORD+(ARG_RD)",},
631 1.1 christos {"rs", "CLASS_REG_WORD+(ARG_RS)",},
632 1.1 christos
633 1.1 christos {"@rd", "CLASS_IR+(ARG_RD)",},
634 1.1 christos {"@ra", "CLASS_IR+(ARG_RA)",},
635 1.1 christos {"@rb", "CLASS_IR+(ARG_RB)",},
636 1.1 christos {"@rs", "CLASS_IR+(ARG_RS)",},
637 1.1 christos {"@ri", "CLASS_IRO+(ARG_RS)",},
638 1.1 christos {"@ro", "CLASS_IRO+(ARG_RD)",},
639 1.1 christos
640 1.1 christos {"imm8", "CLASS_IMM+(ARG_IMM8)",},
641 1.1 christos {"i2", "CLASS_IMM+(ARG_IMM2)",},
642 1.1 christos {"cc", "CLASS_CC",},
643 1.1 christos
644 1.1 christos {"rr", "CLASS_REG_WORD+(ARG_RR)",},
645 1.1 christos {"ra", "CLASS_REG_WORD+(ARG_RA)",},
646 1.1 christos {"rs", "CLASS_REG_WORD+(ARG_RS)",},
647 1.1 christos
648 1.1 christos {"1", "CLASS_IMM+(ARG_IMM_1)",},
649 1.1 christos {"2", "CLASS_IMM+(ARG_IMM_2)",},
650 1.1 christos
651 1.1 christos {0, 0}
652 1.1 christos };
653 1.1 christos
654 1.1 christos static struct tok_struct toks[] =
655 1.1 christos {
656 1.1 christos {"0000", "CLASS_BIT+0", 1},
657 1.1 christos {"0001", "CLASS_BIT+1", 1},
658 1.1 christos {"0010", "CLASS_BIT+2", 1},
659 1.1 christos {"0011", "CLASS_BIT+3", 1},
660 1.1 christos {"0100", "CLASS_BIT+4", 1},
661 1.1 christos {"0101", "CLASS_BIT+5", 1},
662 1.1 christos {"0110", "CLASS_BIT+6", 1},
663 1.1 christos {"0111", "CLASS_BIT+7", 1},
664 1.1 christos {"1000", "CLASS_BIT+8", 1},
665 1.1 christos {"1001", "CLASS_BIT+9", 1},
666 1.1 christos {"1010", "CLASS_BIT+0xa", 1},
667 1.1 christos {"1011", "CLASS_BIT+0xb", 1},
668 1.1 christos {"1100", "CLASS_BIT+0xc", 1},
669 1.1 christos {"1101", "CLASS_BIT+0xd", 1},
670 1.1 christos {"1110", "CLASS_BIT+0xe", 1},
671 1.1 christos {"1111", "CLASS_BIT+0xf", 1},
672 1.1 christos
673 1.1 christos {"00I0", "CLASS_BIT_1OR2+0", 1},
674 1.1 christos {"00I0", "CLASS_BIT_1OR2+1", 1},
675 1.1 christos {"00I0", "CLASS_BIT_1OR2+2", 1},
676 1.1 christos {"00I0", "CLASS_BIT_1OR2+3", 1},
677 1.1 christos {"01I0", "CLASS_BIT_1OR2+4", 1},
678 1.1 christos {"01I0", "CLASS_BIT_1OR2+5", 1},
679 1.1 christos {"01I0", "CLASS_BIT_1OR2+6", 1},
680 1.1 christos {"01I0", "CLASS_BIT_1OR2+7", 1},
681 1.1 christos {"10I0", "CLASS_BIT_1OR2+8", 1},
682 1.1 christos {"10I0", "CLASS_BIT_1OR2+9", 1},
683 1.1 christos {"10I0", "CLASS_BIT_1OR2+0xa", 1},
684 1.1 christos {"10I0", "CLASS_BIT_1OR2+0xb", 1},
685 1.1 christos {"11I0", "CLASS_BIT_1OR2+0xc", 1},
686 1.1 christos {"11I0", "CLASS_BIT_1OR2+0xd", 1},
687 1.1 christos {"11I0", "CLASS_BIT_1OR2+0xe", 1},
688 1.1 christos {"11I0", "CLASS_BIT_1OR2+0xf", 1},
689 1.1 christos
690 1.1 christos {"ssss", "CLASS_REG+(ARG_RS)", 1},
691 1.1 christos {"dddd", "CLASS_REG+(ARG_RD)", 1},
692 1.1 christos {"aaaa", "CLASS_REG+(ARG_RA)", 1},
693 1.1 christos {"bbbb", "CLASS_REG+(ARG_RB)", 1},
694 1.1 christos {"rrrr", "CLASS_REG+(ARG_RR)", 1},
695 1.1 christos
696 1.1 christos {"ssN0", "CLASS_REGN0+(ARG_RS)", 1},
697 1.1 christos {"ddN0", "CLASS_REGN0+(ARG_RD)", 1},
698 1.1 christos {"aaN0", "CLASS_REGN0+(ARG_RA)", 1},
699 1.1 christos {"bbN0", "CLASS_REGN0+(ARG_RB)", 1},
700 1.1 christos {"rrN0", "CLASS_REGN0+(ARG_RR)", 1},
701 1.1 christos
702 1.1 christos {"cccc", "CLASS_CC", 1},
703 1.1 christos {"nnnn", "CLASS_IMM+(ARG_IMMN)", 1},
704 1.1 christos {"xxxx", "CLASS_REG+(ARG_RX)", 1},
705 1.1 christos {"xxN0", "CLASS_REGN0+(ARG_RX)", 1},
706 1.1 christos {"nminus1", "CLASS_IMM+(ARG_IMMNMINUS1)", 1},
707 1.1 christos
708 1.1 christos {"disp16", "CLASS_DISP+(ARG_DISP16)", 4},
709 1.1 christos {"disp12", "CLASS_DISP+(ARG_DISP12)", 3},
710 1.1 christos {"flags", "CLASS_FLAGS", 1},
711 1.1 christos {"address_dst", "CLASS_ADDRESS+(ARG_DST)", 4},
712 1.1 christos {"address_src", "CLASS_ADDRESS+(ARG_SRC)", 4},
713 1.1 christos {"imm4m1", "CLASS_IMM+(ARG_IMM4M1)", 1},
714 1.1 christos {"imm4", "CLASS_IMM+(ARG_IMM4)", 1},
715 1.1 christos
716 1.1 christos {"imm8", "CLASS_IMM+(ARG_IMM8)", 2},
717 1.1 christos {"imm16", "CLASS_IMM+(ARG_IMM16)", 4},
718 1.1 christos {"imm32", "CLASS_IMM+(ARG_IMM32)", 8},
719 1.1 christos {"nim4", "CLASS_IMM+(ARG_NIM4)", 2},
720 1.1 christos {"nim8", "CLASS_IMM+(ARG_NIM8)", 2},
721 1.1 christos {"0ccc", "CLASS_0CCC", 1},
722 1.1 christos {"1ccc", "CLASS_1CCC", 1},
723 1.1 christos {"disp8", "CLASS_DISP8", 2},
724 1.1 christos {"0disp7", "CLASS_0DISP7", 2},
725 1.1 christos {"1disp7", "CLASS_1DISP7", 2},
726 1.1 christos {"01ii", "CLASS_01II", 1},
727 1.1 christos {"00ii", "CLASS_00II", 1},
728 1.1 christos
729 1.1 christos {"iiii", "CLASS_IGNORE", 1},
730 1.1 christos {0, 0}
731 1.1 christos };
732 1.1 christos
733 1.1 christos static char *
734 1.1 christos translate (struct tok_struct *table, char *x, int *length)
735 1.1 christos {
736 1.1 christos
737 1.1 christos int found;
738 1.1 christos
739 1.1 christos found = 0;
740 1.1 christos while (table->match)
741 1.1 christos {
742 1.1 christos int l = strlen (table->match);
743 1.1 christos
744 1.1 christos if (strncmp (table->match, x, l) == 0)
745 1.1 christos {
746 1.1 christos /* Got a hit */
747 1.1 christos printf ("%s", table->token);
748 1.1 christos *length += table->length;
749 1.1 christos return x + l;
750 1.1 christos }
751 1.1 christos
752 1.1 christos table++;
753 1.1 christos }
754 1.1 christos fprintf (stderr, "Can't find %s\n", x);
755 1.1 christos printf ("**** Can't find %s\n", x);
756 1.1 christos while (*x)
757 1.1 christos x++;
758 1.1 christos return x;
759 1.1 christos }
760 1.1 christos
761 1.1 christos static void
762 1.1 christos chewbits (char *bits, int *length)
763 1.1 christos {
764 1.1 christos int n = 0;
765 1.1 christos
766 1.1 christos *length = 0;
767 1.1 christos printf ("{");
768 1.1 christos while (*bits)
769 1.1 christos {
770 1.1 christos while (*bits == ' ')
771 1.1 christos {
772 1.1 christos bits++;
773 1.1 christos }
774 1.1 christos bits = translate (toks, bits, length);
775 1.1 christos n++;
776 1.1 christos printf (",");
777 1.1 christos
778 1.1 christos }
779 1.1 christos while (n < BYTE_INFO_LEN - 1)
780 1.1 christos {
781 1.1 christos printf ("0,");
782 1.1 christos n++;
783 1.1 christos }
784 1.1 christos printf ("}");
785 1.1 christos }
786 1.1 christos
787 1.1 christos static int
788 1.1 christos chewname (char **name)
789 1.1 christos {
790 1.1 christos char *n;
791 1.1 christos int nargs = 0;
792 1.1 christos
793 1.1 christos n = *name;
794 1.1 christos while (*n && !iswhite (*n))
795 1.1 christos n++;
796 1.1 christos
797 1.1 christos if (*n)
798 1.1 christos {
799 1.1 christos size_t len = n - *name;
800 1.1 christos char *newname = xmalloc (len + 1);
801 1.1 christos memcpy (newname, *name, len);
802 1.1 christos newname[len] = 0;
803 1.1 christos *name = newname;
804 1.1 christos }
805 1.1 christos
806 1.1 christos printf ("\"%s\",OPC_%s,0,{", *name, *name);
807 1.1 christos
808 1.1 christos /* Scan the operands and make entries for them.
809 1.1 christos Remember indirect things. */
810 1.1 christos while (*n)
811 1.1 christos {
812 1.1 christos int d;
813 1.1 christos
814 1.1 christos while (*n == ',' || iswhite (*n))
815 1.1 christos n++;
816 1.1 christos nargs++;
817 1.1 christos n = translate (args, n, &d);
818 1.1 christos printf (",");
819 1.1 christos }
820 1.1 christos if (nargs == 0)
821 1.1 christos {
822 1.1 christos printf ("0");
823 1.1 christos }
824 1.1 christos printf ("},");
825 1.1 christos return nargs;
826 1.1 christos }
827 1.1 christos
828 1.1 christos static char *
829 1.1 christos sub (char *x, char c)
830 1.1 christos {
831 1.1 christos /* Create copy. */
832 1.1 christos char *ret = xstrdup (x);
833 1.1 christos x = ret;
834 1.1 christos while (*x)
835 1.1 christos {
836 1.1 christos if (x[0] == c && x[1] == c &&
837 1.1 christos x[2] == c && x[3] == c)
838 1.1 christos {
839 1.1 christos x[2] = 'N';
840 1.1 christos x[3] = '0';
841 1.1 christos }
842 1.1 christos x++;
843 1.1 christos }
844 1.1 christos return ret;
845 1.1 christos }
846 1.1 christos
847 1.1 christos
848 1.1 christos #if 0
849 1.1 christos #define D(x) ((x) == '1' || (x) =='0')
850 1.1 christos #define M(y) (strncmp(y,x,4)==0)
851 1.1 christos static void
852 1.1 christos printmangled (char *x)
853 1.1 christos {
854 1.1 christos return;
855 1.1 christos while (*x)
856 1.1 christos {
857 1.1 christos if (D (x[0]) && D (x[1]) && D (x[2]) && D (x[3]))
858 1.1 christos {
859 1.1 christos printf ("XXXX");
860 1.1 christos }
861 1.1 christos else if (M ("ssss"))
862 1.1 christos {
863 1.1 christos printf ("ssss");
864 1.1 christos }
865 1.1 christos else if (M ("dddd"))
866 1.1 christos {
867 1.1 christos printf ("dddd");
868 1.1 christos }
869 1.1 christos else
870 1.1 christos printf ("____");
871 1.1 christos
872 1.1 christos x += 4;
873 1.1 christos
874 1.1 christos if (x[0] == ' ')
875 1.1 christos {
876 1.1 christos printf ("_");
877 1.1 christos x++;
878 1.1 christos }
879 1.1 christos }
880 1.1 christos
881 1.1 christos }
882 1.1 christos #endif
883 1.1 christos
884 1.1 christos /*#define WORK_TYPE*/
885 1.1 christos static void
886 1.1 christos print_type (struct op *n)
887 1.1 christos {
888 1.1 christos #ifdef WORK_TYPE
889 1.1 christos while (*s && !iswhite (*s))
890 1.1 christos {
891 1.1 christos l = *s;
892 1.1 christos s++;
893 1.1 christos }
894 1.1 christos switch (l)
895 1.1 christos {
896 1.1 christos case 'l':
897 1.1 christos printf ("32,");
898 1.1 christos break;
899 1.1 christos case 'b':
900 1.1 christos printf ("8,");
901 1.1 christos break;
902 1.1 christos default:
903 1.1 christos printf ("16,");
904 1.1 christos break;
905 1.1 christos }
906 1.1 christos #else
907 1.1 christos printf ("%2d,", n->type);
908 1.1 christos #endif
909 1.1 christos }
910 1.1 christos
911 1.1 christos static void
912 1.1 christos internal (void)
913 1.1 christos {
914 1.1 christos int c = count ();
915 1.1 christos int id;
916 1.1 christos struct op *new_op = xmalloc (sizeof (struct op) * (c + 1));
917 1.1 christos struct op *p = opt;
918 1.1 christos memcpy (new_op, p, (c + 1) * sizeof (struct op));
919 1.1 christos
920 1.1 christos /* Assign unique id. */
921 1.1 christos for (id = 0; id < c; id++)
922 1.1 christos new_op[id].id = id;
923 1.1 christos
924 1.1 christos /* Sort all names in table alphabetically. */
925 1.1 christos qsort (new_op, c, sizeof (struct op), func);
926 1.1 christos
927 1.1 christos p = new_op;
928 1.1 christos while (p->flags && p->flags[0] != '*')
929 1.1 christos {
930 1.1 christos /* If there are any @rs, sub the ssss into a ssn0, (rs), (ssn0). */
931 1.1 christos int loop = 1;
932 1.1 christos
933 1.1 christos printf ("\"%s\",%2d, ", p->flags, p->cycles);
934 1.1 christos while (loop)
935 1.1 christos {
936 1.1 christos char *s = p->name;
937 1.1 christos
938 1.1 christos loop = 0;
939 1.1 christos while (*s)
940 1.1 christos {
941 1.1 christos if (s[0] == '@')
942 1.1 christos {
943 1.1 christos char c;
944 1.1 christos
945 1.1 christos /* Skip the r and sub the string. */
946 1.1 christos s++;
947 1.1 christos c = s[1];
948 1.1 christos p->bits = sub (p->bits, c);
949 1.1 christos }
950 1.1 christos if (s[0] == '(' && s[3] == ')')
951 1.1 christos {
952 1.1 christos p->bits = sub (p->bits, s[2]);
953 1.1 christos }
954 1.1 christos if (s[0] == '(')
955 1.1 christos {
956 1.1 christos p->bits = sub (p->bits, s[-1]);
957 1.1 christos }
958 1.1 christos
959 1.1 christos s++;
960 1.1 christos }
961 1.1 christos
962 1.1 christos }
963 1.1 christos print_type (p);
964 1.1 christos printf ("\"%s\",\"%s\",0,\n", p->bits, p->name);
965 1.1 christos p++;
966 1.1 christos }
967 1.1 christos }
968 1.1 christos
969 1.1 christos static void
970 1.1 christos gas (void)
971 1.1 christos {
972 1.1 christos int c = count ();
973 1.1 christos int id;
974 1.1 christos struct op *p = opt;
975 1.1 christos int idx = -1;
976 1.1 christos char *oldname = "";
977 1.1 christos struct op *new_op = xmalloc (sizeof (struct op) * (c + 1));
978 1.1 christos
979 1.1 christos memcpy (new_op, p, (c + 1) * sizeof (struct op));
980 1.1 christos
981 1.1 christos /* Assign unique id. */
982 1.1 christos for (id = 0; id < c; id++)
983 1.1 christos new_op[id].id = id;
984 1.1 christos
985 1.1 christos /* Sort all names in table alphabetically. */
986 1.1 christos qsort (new_op, c, sizeof (struct op), func);
987 1.1 christos
988 1.1 christos printf ("/* DO NOT EDIT! -*- buffer-read-only: t -*-\n");
989 1.1 christos printf (" This file is automatically generated by z8kgen. */\n\n");
990 1.1.1.6 christos printf ("/* Copyright (C) 2007-2019 Free Software Foundation, Inc.\n\
991 1.1 christos \n\
992 1.1 christos This file is part of the GNU opcodes library.\n\
993 1.1 christos \n\
994 1.1 christos This library is free software; you can redistribute it and/or modify\n\
995 1.1 christos it under the terms of the GNU General Public License as published by\n\
996 1.1 christos the Free Software Foundation; either version 3, or (at your option)\n\
997 1.1 christos any later version.\n\
998 1.1 christos \n\
999 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT\n\
1000 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n\
1001 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n\
1002 1.1 christos License for more details.\n\
1003 1.1 christos \n\
1004 1.1 christos You should have received a copy of the GNU General Public License\n\
1005 1.1 christos along with this file; see the file COPYING. If not, write to the\n\
1006 1.1 christos Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,\n\
1007 1.1 christos MA 02110-1301, USA. */\n\n");
1008 1.1 christos
1009 1.1 christos printf ("#define ARG_MASK 0x0f\n");
1010 1.1 christos
1011 1.1 christos printf ("#define ARG_SRC 0x01\n");
1012 1.1 christos printf ("#define ARG_DST 0x02\n");
1013 1.1 christos
1014 1.1 christos printf ("#define ARG_RS 0x01\n");
1015 1.1 christos printf ("#define ARG_RD 0x02\n");
1016 1.1 christos printf ("#define ARG_RA 0x03\n");
1017 1.1 christos printf ("#define ARG_RB 0x04\n");
1018 1.1 christos printf ("#define ARG_RR 0x05\n");
1019 1.1 christos printf ("#define ARG_RX 0x06\n");
1020 1.1 christos
1021 1.1 christos printf ("#define ARG_IMM4 0x01\n");
1022 1.1 christos printf ("#define ARG_IMM8 0x02\n");
1023 1.1 christos printf ("#define ARG_IMM16 0x03\n");
1024 1.1 christos printf ("#define ARG_IMM32 0x04\n");
1025 1.1 christos printf ("#define ARG_IMMN 0x05\n");
1026 1.1 christos printf ("#define ARG_IMMNMINUS1 0x05\n");
1027 1.1 christos printf ("#define ARG_IMM_1 0x06\n");
1028 1.1 christos printf ("#define ARG_IMM_2 0x07\n");
1029 1.1 christos printf ("#define ARG_DISP16 0x08\n");
1030 1.1 christos printf ("#define ARG_NIM8 0x09\n");
1031 1.1 christos printf ("#define ARG_IMM2 0x0a\n");
1032 1.1 christos printf ("#define ARG_IMM1OR2 0x0b\n");
1033 1.1 christos
1034 1.1 christos printf ("#define ARG_DISP12 0x0b\n");
1035 1.1 christos printf ("#define ARG_NIM4 0x0c\n");
1036 1.1 christos printf ("#define ARG_DISP8 0x0c\n");
1037 1.1 christos printf ("#define ARG_IMM4M1 0x0d\n");
1038 1.1 christos
1039 1.1 christos printf ("#define CLASS_X 0x10\n");
1040 1.1 christos printf ("#define CLASS_BA 0x20\n");
1041 1.1 christos printf ("#define CLASS_DA 0x30\n");
1042 1.1 christos printf ("#define CLASS_BX 0x40\n");
1043 1.1 christos printf ("#define CLASS_DISP 0x50\n");
1044 1.1 christos printf ("#define CLASS_IMM 0x60\n");
1045 1.1 christos printf ("#define CLASS_CC 0x70\n");
1046 1.1 christos printf ("#define CLASS_CTRL 0x80\n");
1047 1.1 christos printf ("#define CLASS_IGNORE 0x90\n");
1048 1.1 christos printf ("#define CLASS_ADDRESS 0xd0\n");
1049 1.1 christos printf ("#define CLASS_0CCC 0xe0\n");
1050 1.1 christos printf ("#define CLASS_1CCC 0xf0\n");
1051 1.1 christos printf ("#define CLASS_0DISP7 0x100\n");
1052 1.1 christos printf ("#define CLASS_1DISP7 0x200\n");
1053 1.1 christos printf ("#define CLASS_01II 0x300\n");
1054 1.1 christos printf ("#define CLASS_00II 0x400\n");
1055 1.1 christos printf ("#define CLASS_BIT 0x500\n");
1056 1.1 christos printf ("#define CLASS_FLAGS 0x600\n");
1057 1.1 christos printf ("#define CLASS_IR 0x700\n");
1058 1.1 christos printf ("#define CLASS_IRO 0x800\n");
1059 1.1 christos printf ("#define CLASS_DISP8 0x900\n");
1060 1.1 christos
1061 1.1 christos printf ("#define CLASS_BIT_1OR2 0xa00\n");
1062 1.1 christos printf ("#define CLASS_REG 0x7000\n");
1063 1.1 christos printf ("#define CLASS_REG_BYTE 0x2000\n");
1064 1.1 christos printf ("#define CLASS_REG_WORD 0x3000\n");
1065 1.1 christos printf ("#define CLASS_REG_QUAD 0x4000\n");
1066 1.1 christos printf ("#define CLASS_REG_LONG 0x5000\n");
1067 1.1 christos printf ("#define CLASS_REGN0 0x8000\n");
1068 1.1 christos printf ("#define CLASS_PR 0x10000\n");
1069 1.1 christos printf ("#define CLASS_MASK 0x1fff0\n");
1070 1.1 christos
1071 1.1 christos printf ("#define OPC_adc 0\n");
1072 1.1 christos printf ("#define OPC_adcb 1\n");
1073 1.1 christos printf ("#define OPC_add 2\n");
1074 1.1 christos printf ("#define OPC_addb 3\n");
1075 1.1 christos printf ("#define OPC_addl 4\n");
1076 1.1 christos printf ("#define OPC_and 5\n");
1077 1.1 christos printf ("#define OPC_andb 6\n");
1078 1.1 christos printf ("#define OPC_bit 7\n");
1079 1.1 christos printf ("#define OPC_bitb 8\n");
1080 1.1 christos printf ("#define OPC_call 9\n");
1081 1.1 christos printf ("#define OPC_calr 10\n");
1082 1.1 christos printf ("#define OPC_clr 11\n");
1083 1.1 christos printf ("#define OPC_clrb 12\n");
1084 1.1 christos printf ("#define OPC_com 13\n");
1085 1.1 christos printf ("#define OPC_comb 14\n");
1086 1.1 christos printf ("#define OPC_comflg 15\n");
1087 1.1 christos printf ("#define OPC_cp 16\n");
1088 1.1 christos printf ("#define OPC_cpb 17\n");
1089 1.1 christos printf ("#define OPC_cpd 18\n");
1090 1.1 christos printf ("#define OPC_cpdb 19\n");
1091 1.1 christos printf ("#define OPC_cpdr 20\n");
1092 1.1 christos printf ("#define OPC_cpdrb 21\n");
1093 1.1 christos printf ("#define OPC_cpi 22\n");
1094 1.1 christos printf ("#define OPC_cpib 23\n");
1095 1.1 christos printf ("#define OPC_cpir 24\n");
1096 1.1 christos printf ("#define OPC_cpirb 25\n");
1097 1.1 christos printf ("#define OPC_cpl 26\n");
1098 1.1 christos printf ("#define OPC_cpsd 27\n");
1099 1.1 christos printf ("#define OPC_cpsdb 28\n");
1100 1.1 christos printf ("#define OPC_cpsdr 29\n");
1101 1.1 christos printf ("#define OPC_cpsdrb 30\n");
1102 1.1 christos printf ("#define OPC_cpsi 31\n");
1103 1.1 christos printf ("#define OPC_cpsib 32\n");
1104 1.1 christos printf ("#define OPC_cpsir 33\n");
1105 1.1 christos printf ("#define OPC_cpsirb 34\n");
1106 1.1 christos printf ("#define OPC_dab 35\n");
1107 1.1 christos printf ("#define OPC_dbjnz 36\n");
1108 1.1 christos printf ("#define OPC_dec 37\n");
1109 1.1 christos printf ("#define OPC_decb 38\n");
1110 1.1 christos printf ("#define OPC_di 39\n");
1111 1.1 christos printf ("#define OPC_div 40\n");
1112 1.1 christos printf ("#define OPC_divl 41\n");
1113 1.1 christos printf ("#define OPC_djnz 42\n");
1114 1.1 christos printf ("#define OPC_ei 43\n");
1115 1.1 christos printf ("#define OPC_ex 44\n");
1116 1.1 christos printf ("#define OPC_exb 45\n");
1117 1.1 christos printf ("#define OPC_exts 46\n");
1118 1.1 christos printf ("#define OPC_extsb 47\n");
1119 1.1 christos printf ("#define OPC_extsl 48\n");
1120 1.1 christos printf ("#define OPC_halt 49\n");
1121 1.1 christos printf ("#define OPC_in 50\n");
1122 1.1 christos printf ("#define OPC_inb 51\n");
1123 1.1 christos printf ("#define OPC_inc 52\n");
1124 1.1 christos printf ("#define OPC_incb 53\n");
1125 1.1 christos printf ("#define OPC_ind 54\n");
1126 1.1 christos printf ("#define OPC_indb 55\n");
1127 1.1 christos printf ("#define OPC_indr 56\n");
1128 1.1 christos printf ("#define OPC_indrb 57\n");
1129 1.1 christos printf ("#define OPC_ini 58\n");
1130 1.1 christos printf ("#define OPC_inib 59\n");
1131 1.1 christos printf ("#define OPC_inir 60\n");
1132 1.1 christos printf ("#define OPC_inirb 61\n");
1133 1.1 christos printf ("#define OPC_iret 62\n");
1134 1.1 christos printf ("#define OPC_jp 63\n");
1135 1.1 christos printf ("#define OPC_jr 64\n");
1136 1.1 christos printf ("#define OPC_ld 65\n");
1137 1.1 christos printf ("#define OPC_lda 66\n");
1138 1.1 christos printf ("#define OPC_ldar 67\n");
1139 1.1 christos printf ("#define OPC_ldb 68\n");
1140 1.1 christos printf ("#define OPC_ldctl 69\n");
1141 1.1 christos printf ("#define OPC_ldir 70\n");
1142 1.1 christos printf ("#define OPC_ldirb 71\n");
1143 1.1 christos printf ("#define OPC_ldk 72\n");
1144 1.1 christos printf ("#define OPC_ldl 73\n");
1145 1.1 christos printf ("#define OPC_ldm 74\n");
1146 1.1 christos printf ("#define OPC_ldps 75\n");
1147 1.1 christos printf ("#define OPC_ldr 76\n");
1148 1.1 christos printf ("#define OPC_ldrb 77\n");
1149 1.1 christos printf ("#define OPC_ldrl 78\n");
1150 1.1 christos printf ("#define OPC_mbit 79\n");
1151 1.1 christos printf ("#define OPC_mreq 80\n");
1152 1.1 christos printf ("#define OPC_mres 81\n");
1153 1.1 christos printf ("#define OPC_mset 82\n");
1154 1.1 christos printf ("#define OPC_mult 83\n");
1155 1.1 christos printf ("#define OPC_multl 84\n");
1156 1.1 christos printf ("#define OPC_neg 85\n");
1157 1.1 christos printf ("#define OPC_negb 86\n");
1158 1.1 christos printf ("#define OPC_nop 87\n");
1159 1.1 christos printf ("#define OPC_or 88\n");
1160 1.1 christos printf ("#define OPC_orb 89\n");
1161 1.1 christos printf ("#define OPC_otdr 90\n");
1162 1.1 christos printf ("#define OPC_otdrb 91\n");
1163 1.1 christos printf ("#define OPC_otir 92\n");
1164 1.1 christos printf ("#define OPC_otirb 93\n");
1165 1.1 christos printf ("#define OPC_out 94\n");
1166 1.1 christos printf ("#define OPC_outb 95\n");
1167 1.1 christos printf ("#define OPC_outd 96\n");
1168 1.1 christos printf ("#define OPC_outdb 97\n");
1169 1.1 christos printf ("#define OPC_outi 98\n");
1170 1.1 christos printf ("#define OPC_outib 99\n");
1171 1.1 christos printf ("#define OPC_pop 100\n");
1172 1.1 christos printf ("#define OPC_popl 101\n");
1173 1.1 christos printf ("#define OPC_push 102\n");
1174 1.1 christos printf ("#define OPC_pushl 103\n");
1175 1.1 christos printf ("#define OPC_res 104\n");
1176 1.1 christos printf ("#define OPC_resb 105\n");
1177 1.1 christos printf ("#define OPC_resflg 106\n");
1178 1.1 christos printf ("#define OPC_ret 107\n");
1179 1.1 christos printf ("#define OPC_rl 108\n");
1180 1.1 christos printf ("#define OPC_rlb 109\n");
1181 1.1 christos printf ("#define OPC_rlc 110\n");
1182 1.1 christos printf ("#define OPC_rlcb 111\n");
1183 1.1 christos printf ("#define OPC_rldb 112\n");
1184 1.1 christos printf ("#define OPC_rr 113\n");
1185 1.1 christos printf ("#define OPC_rrb 114\n");
1186 1.1 christos printf ("#define OPC_rrc 115\n");
1187 1.1 christos printf ("#define OPC_rrcb 116\n");
1188 1.1 christos printf ("#define OPC_rrdb 117\n");
1189 1.1 christos printf ("#define OPC_sbc 118\n");
1190 1.1 christos printf ("#define OPC_sbcb 119\n");
1191 1.1 christos printf ("#define OPC_sda 120\n");
1192 1.1 christos printf ("#define OPC_sdab 121\n");
1193 1.1 christos printf ("#define OPC_sdal 122\n");
1194 1.1 christos printf ("#define OPC_sdl 123\n");
1195 1.1 christos printf ("#define OPC_sdlb 124\n");
1196 1.1 christos printf ("#define OPC_sdll 125\n");
1197 1.1 christos printf ("#define OPC_set 126\n");
1198 1.1 christos printf ("#define OPC_setb 127\n");
1199 1.1 christos printf ("#define OPC_setflg 128\n");
1200 1.1 christos printf ("#define OPC_sin 129\n");
1201 1.1 christos printf ("#define OPC_sinb 130\n");
1202 1.1 christos printf ("#define OPC_sind 131\n");
1203 1.1 christos printf ("#define OPC_sindb 132\n");
1204 1.1 christos printf ("#define OPC_sindr 133\n");
1205 1.1 christos printf ("#define OPC_sindrb 134\n");
1206 1.1 christos printf ("#define OPC_sini 135\n");
1207 1.1 christos printf ("#define OPC_sinib 136\n");
1208 1.1 christos printf ("#define OPC_sinir 137\n");
1209 1.1 christos printf ("#define OPC_sinirb 138\n");
1210 1.1 christos printf ("#define OPC_sla 139\n");
1211 1.1 christos printf ("#define OPC_slab 140\n");
1212 1.1 christos printf ("#define OPC_slal 141\n");
1213 1.1 christos printf ("#define OPC_sll 142\n");
1214 1.1 christos printf ("#define OPC_sllb 143\n");
1215 1.1 christos printf ("#define OPC_slll 144\n");
1216 1.1 christos printf ("#define OPC_sotdr 145\n");
1217 1.1 christos printf ("#define OPC_sotdrb 146\n");
1218 1.1 christos printf ("#define OPC_sotir 147\n");
1219 1.1 christos printf ("#define OPC_sotirb 148\n");
1220 1.1 christos printf ("#define OPC_sout 149\n");
1221 1.1 christos printf ("#define OPC_soutb 150\n");
1222 1.1 christos printf ("#define OPC_soutd 151\n");
1223 1.1 christos printf ("#define OPC_soutdb 152\n");
1224 1.1 christos printf ("#define OPC_souti 153\n");
1225 1.1 christos printf ("#define OPC_soutib 154\n");
1226 1.1 christos printf ("#define OPC_sra 155\n");
1227 1.1 christos printf ("#define OPC_srab 156\n");
1228 1.1 christos printf ("#define OPC_sral 157\n");
1229 1.1 christos printf ("#define OPC_srl 158\n");
1230 1.1 christos printf ("#define OPC_srlb 159\n");
1231 1.1 christos printf ("#define OPC_srll 160\n");
1232 1.1 christos printf ("#define OPC_sub 161\n");
1233 1.1 christos printf ("#define OPC_subb 162\n");
1234 1.1 christos printf ("#define OPC_subl 163\n");
1235 1.1 christos printf ("#define OPC_tcc 164\n");
1236 1.1 christos printf ("#define OPC_tccb 165\n");
1237 1.1 christos printf ("#define OPC_test 166\n");
1238 1.1 christos printf ("#define OPC_testb 167\n");
1239 1.1 christos printf ("#define OPC_testl 168\n");
1240 1.1 christos printf ("#define OPC_trdb 169\n");
1241 1.1 christos printf ("#define OPC_trdrb 170\n");
1242 1.1 christos printf ("#define OPC_trib 171\n");
1243 1.1 christos printf ("#define OPC_trirb 172\n");
1244 1.1 christos printf ("#define OPC_trtdrb 173\n");
1245 1.1 christos printf ("#define OPC_trtib 174\n");
1246 1.1 christos printf ("#define OPC_trtirb 175\n");
1247 1.1 christos printf ("#define OPC_trtrb 176\n");
1248 1.1 christos printf ("#define OPC_tset 177\n");
1249 1.1 christos printf ("#define OPC_tsetb 178\n");
1250 1.1 christos printf ("#define OPC_xor 179\n");
1251 1.1 christos printf ("#define OPC_xorb 180\n");
1252 1.1 christos
1253 1.1 christos printf ("#define OPC_ldd 181\n");
1254 1.1 christos printf ("#define OPC_lddb 182\n");
1255 1.1 christos printf ("#define OPC_lddr 183\n");
1256 1.1 christos printf ("#define OPC_lddrb 184\n");
1257 1.1 christos printf ("#define OPC_ldi 185\n");
1258 1.1 christos printf ("#define OPC_ldib 186\n");
1259 1.1 christos printf ("#define OPC_sc 187\n");
1260 1.1 christos printf ("#define OPC_bpt 188\n");
1261 1.1 christos printf ("#define OPC_ext0e 188\n");
1262 1.1 christos printf ("#define OPC_ext0f 188\n");
1263 1.1 christos printf ("#define OPC_ext8e 188\n");
1264 1.1 christos printf ("#define OPC_ext8f 188\n");
1265 1.1 christos printf ("#define OPC_rsvd36 188\n");
1266 1.1 christos printf ("#define OPC_rsvd38 188\n");
1267 1.1 christos printf ("#define OPC_rsvd78 188\n");
1268 1.1 christos printf ("#define OPC_rsvd7e 188\n");
1269 1.1 christos printf ("#define OPC_rsvd9d 188\n");
1270 1.1 christos printf ("#define OPC_rsvd9f 188\n");
1271 1.1 christos printf ("#define OPC_rsvdb9 188\n");
1272 1.1 christos printf ("#define OPC_rsvdbf 188\n");
1273 1.1 christos printf ("#define OPC_ldctlb 189\n");
1274 1.1 christos printf ("#define OPC_trtdb 190\n");
1275 1.1 christos printf ("#define OPC_brk 191\n");
1276 1.1 christos #if 0
1277 1.1 christos for (i = 0; toks[i].token; i++)
1278 1.1 christos printf ("#define %s\t0x%x\n", toks[i].token, i * 16);
1279 1.1 christos #endif
1280 1.1 christos printf ("\ntypedef struct {\n");
1281 1.1 christos
1282 1.1 christos printf ("#ifdef NICENAMES\n");
1283 1.1 christos printf (" const char *nicename;\n");
1284 1.1 christos printf (" int type;\n");
1285 1.1 christos printf (" int cycles;\n");
1286 1.1 christos printf (" int flags;\n");
1287 1.1 christos printf ("#endif\n");
1288 1.1 christos printf (" const char *name;\n");
1289 1.1 christos printf (" unsigned char opcode;\n");
1290 1.1 christos printf (" void (*func) (void);\n");
1291 1.1 christos printf (" unsigned int arg_info[4];\n");
1292 1.1 christos printf (" unsigned int byte_info[%d];\n", BYTE_INFO_LEN);
1293 1.1 christos printf (" int noperands;\n");
1294 1.1 christos printf (" int length;\n");
1295 1.1 christos printf (" int idx;\n");
1296 1.1 christos printf ("} opcode_entry_type;\n\n");
1297 1.1 christos printf ("#ifdef DEFINE_TABLE\n");
1298 1.1 christos printf ("const opcode_entry_type z8k_table[] = {\n");
1299 1.1 christos
1300 1.1 christos while (new_op->flags && new_op->flags[0] != '*')
1301 1.1 christos {
1302 1.1 christos int nargs;
1303 1.1 christos int length;
1304 1.1 christos
1305 1.1 christos printf ("\n/* %s *** %s */\n", new_op->bits, new_op->name);
1306 1.1 christos printf ("{\n");
1307 1.1 christos
1308 1.1 christos printf ("#ifdef NICENAMES\n");
1309 1.1 christos printf ("\"%s\",%d,%d,", new_op->name, new_op->type, new_op->cycles);
1310 1.1 christos {
1311 1.1 christos int answer = 0;
1312 1.1 christos char *p = new_op->flags;
1313 1.1 christos
1314 1.1 christos while (*p)
1315 1.1 christos {
1316 1.1 christos answer <<= 1;
1317 1.1 christos
1318 1.1 christos if (*p != '-')
1319 1.1 christos answer |= 1;
1320 1.1 christos p++;
1321 1.1 christos }
1322 1.1 christos printf ("0x%02x,\n", answer);
1323 1.1 christos }
1324 1.1 christos
1325 1.1 christos printf ("#endif\n");
1326 1.1 christos
1327 1.1 christos nargs = chewname (&new_op->name);
1328 1.1 christos
1329 1.1 christos printf ("\n\t");
1330 1.1 christos chewbits (new_op->bits, &length);
1331 1.1 christos length /= 2;
1332 1.1 christos if (length & 1)
1333 1.1 christos abort();
1334 1.1 christos
1335 1.1 christos if (strcmp (oldname, new_op->name) != 0)
1336 1.1 christos idx++;
1337 1.1 christos printf (",%d,%d,%d", nargs, length, idx);
1338 1.1 christos oldname = new_op->name;
1339 1.1 christos printf ("},\n");
1340 1.1 christos new_op++;
1341 1.1 christos }
1342 1.1 christos printf ("\n/* end marker */\n");
1343 1.1 christos printf ("{\n#ifdef NICENAMES\nNULL,0,0,\n0,\n#endif\n");
1344 1.1 christos printf ("NULL,0,0,{0,0,0,0},{0,0,0,0,0,0,0,0,0,0},0,0,0}\n};\n");
1345 1.1 christos printf ("#endif\n");
1346 1.1 christos }
1347 1.1 christos
1348 1.1 christos int
1349 1.1 christos main (int ac, char **av)
1350 1.1 christos {
1351 1.1 christos struct op *p = opt;
1352 1.1 christos
1353 1.1 christos if (ac == 2 && strcmp (av[1], "-t") == 0)
1354 1.1 christos {
1355 1.1 christos internal ();
1356 1.1 christos }
1357 1.1 christos else if (ac == 2 && strcmp (av[1], "-h") == 0)
1358 1.1 christos {
1359 1.1 christos while (p->name)
1360 1.1 christos {
1361 1.1 christos printf ("%-25s\t%s\n", p->name, p->bits);
1362 1.1 christos p++;
1363 1.1 christos }
1364 1.1 christos }
1365 1.1 christos
1366 1.1 christos else if (ac == 2 && strcmp (av[1], "-a") == 0)
1367 1.1 christos {
1368 1.1 christos gas ();
1369 1.1 christos }
1370 1.1 christos else
1371 1.1 christos {
1372 1.1 christos printf ("Usage: %s -t\n", av[0]);
1373 1.1 christos printf ("-t : generate new internal table\n");
1374 1.1 christos printf ("-a : generate new table for gas\n");
1375 1.1 christos printf ("-h : generate new table for humans\n");
1376 1.1 christos }
1377 1.1 christos return 0;
1378 1.1 christos }
1379