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