Allow both signed and unsigned fields in PowerPC cmpli insn
[deliverable/binutils-gdb.git] / opcodes / s390-opc.c
CommitLineData
a85d7ed0 1/* s390-opc.c -- S390 opcode list
4b95cf5c 2 Copyright (C) 2000-2014 Free Software Foundation, Inc.
a85d7ed0
NC
3 Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
4
9b201bb5 5 This file is part of the GNU opcodes library.
a85d7ed0 6
9b201bb5 7 This library is free software; you can redistribute it and/or modify
a85d7ed0 8 it under the terms of the GNU General Public License as published by
9b201bb5
NC
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
a85d7ed0 11
9b201bb5
NC
12 It is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
a85d7ed0
NC
16
17 You should have received a copy of the GNU General Public License
9b201bb5
NC
18 along with this file; see the file COPYING. If not, write to the
19 Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
a85d7ed0
NC
21
22#include <stdio.h>
23#include "ansidecl.h"
24#include "opcode/s390.h"
25
26/* This file holds the S390 opcode table. The opcode table
27 includes almost all of the extended instruction mnemonics. This
28 permits the disassembler to use them, and simplifies the assembler
29 logic, at the cost of increasing the table size. The table is
30 strictly constant data, so the compiler should be able to put it in
31 the .text section.
32
33 This file also holds the operand table. All knowledge about
34 inserting operands into instructions and vice-versa is kept in this
35 file. */
36
37/* The operands table.
38 The fields are bits, shift, insert, extract, flags. */
39
40const struct s390_operand s390_operands[] =
41{
42#define UNUSED 0
43 { 0, 0, 0 }, /* Indicates the end of the operand list */
44
5746fb46
AK
45/* General purpose register operands. */
46
a85d7ed0
NC
47#define R_8 1 /* GPR starting at position 8 */
48 { 4, 8, S390_OPERAND_GPR },
49#define R_12 2 /* GPR starting at position 12 */
355d475e 50 { 4, 12, S390_OPERAND_GPR },
ce21feb4 51#define RO_12 3 /* optional GPR starting at position 12 */
5e4b319c 52 { 4, 12, S390_OPERAND_GPR | S390_OPERAND_OPTIONAL },
ce21feb4 53#define R_16 4 /* GPR starting at position 16 */
355d475e 54 { 4, 16, S390_OPERAND_GPR },
ce21feb4 55#define R_20 5 /* GPR starting at position 20 */
355d475e 56 { 4, 20, S390_OPERAND_GPR },
ce21feb4 57#define R_24 6 /* GPR starting at position 24 */
355d475e 58 { 4, 24, S390_OPERAND_GPR },
ce21feb4 59#define R_28 7 /* GPR starting at position 28 */
355d475e 60 { 4, 28, S390_OPERAND_GPR },
ce21feb4 61#define RO_28 8 /* optional GPR starting at position 28 */
5746fb46 62 { 4, 28, (S390_OPERAND_GPR | S390_OPERAND_OPTIONAL) },
ce21feb4 63#define R_32 9 /* GPR starting at position 32 */
a85d7ed0
NC
64 { 4, 32, S390_OPERAND_GPR },
65
5e4b319c
AK
66/* General purpose register pair operands. */
67
68#define RE_8 10 /* GPR starting at position 8 */
c8fa16ed 69 { 4, 8, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 70#define RE_12 11 /* GPR starting at position 12 */
c8fa16ed 71 { 4, 12, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 72#define RE_16 12 /* GPR starting at position 16 */
c8fa16ed 73 { 4, 16, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 74#define RE_20 13 /* GPR starting at position 20 */
c8fa16ed 75 { 4, 20, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 76#define RE_24 14 /* GPR starting at position 24 */
c8fa16ed 77 { 4, 24, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 78#define RE_28 15 /* GPR starting at position 28 */
c8fa16ed 79 { 4, 28, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c 80#define RE_32 16 /* GPR starting at position 32 */
c8fa16ed 81 { 4, 32, S390_OPERAND_GPR | S390_OPERAND_REG_PAIR },
5e4b319c
AK
82
83
5746fb46
AK
84/* Floating point register operands. */
85
5e4b319c 86#define F_8 17 /* FPR starting at position 8 */
a85d7ed0 87 { 4, 8, S390_OPERAND_FPR },
5e4b319c 88#define F_12 18 /* FPR starting at position 12 */
a85d7ed0 89 { 4, 12, S390_OPERAND_FPR },
5e4b319c 90#define F_16 19 /* FPR starting at position 16 */
a85d7ed0 91 { 4, 16, S390_OPERAND_FPR },
5e4b319c 92#define F_20 20 /* FPR starting at position 16 */
a85d7ed0 93 { 4, 16, S390_OPERAND_FPR },
5e4b319c 94#define F_24 21 /* FPR starting at position 24 */
a85d7ed0 95 { 4, 24, S390_OPERAND_FPR },
5e4b319c 96#define F_28 22 /* FPR starting at position 28 */
a85d7ed0 97 { 4, 28, S390_OPERAND_FPR },
5e4b319c 98#define F_32 23 /* FPR starting at position 32 */
a85d7ed0
NC
99 { 4, 32, S390_OPERAND_FPR },
100
5e4b319c
AK
101/* Floating point register pair operands. */
102
103#define FE_8 24 /* FPR starting at position 8 */
c8fa16ed 104 { 4, 8, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 105#define FE_12 25 /* FPR starting at position 12 */
c8fa16ed 106 { 4, 12, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 107#define FE_16 26 /* FPR starting at position 16 */
c8fa16ed 108 { 4, 16, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 109#define FE_20 27 /* FPR starting at position 16 */
c8fa16ed 110 { 4, 16, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 111#define FE_24 28 /* FPR starting at position 24 */
c8fa16ed 112 { 4, 24, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 113#define FE_28 29 /* FPR starting at position 28 */
c8fa16ed 114 { 4, 28, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c 115#define FE_32 30 /* FPR starting at position 32 */
c8fa16ed 116 { 4, 32, S390_OPERAND_FPR | S390_OPERAND_REG_PAIR },
5e4b319c
AK
117
118
5746fb46
AK
119/* Access register operands. */
120
5e4b319c 121#define A_8 31 /* Access reg. starting at position 8 */
a85d7ed0 122 { 4, 8, S390_OPERAND_AR },
5e4b319c 123#define A_12 32 /* Access reg. starting at position 12 */
a85d7ed0 124 { 4, 12, S390_OPERAND_AR },
5e4b319c 125#define A_24 33 /* Access reg. starting at position 24 */
a85d7ed0 126 { 4, 24, S390_OPERAND_AR },
5e4b319c 127#define A_28 34 /* Access reg. starting at position 28 */
a85d7ed0
NC
128 { 4, 28, S390_OPERAND_AR },
129
5746fb46
AK
130/* Control register operands. */
131
5e4b319c 132#define C_8 35 /* Control reg. starting at position 8 */
a85d7ed0 133 { 4, 8, S390_OPERAND_CR },
5e4b319c 134#define C_12 36 /* Control reg. starting at position 12 */
a85d7ed0
NC
135 { 4, 12, S390_OPERAND_CR },
136
5746fb46
AK
137/* Base register operands. */
138
5e4b319c
AK
139#define B_16 37 /* Base register starting at position 16 */
140 { 4, 16, S390_OPERAND_BASE | S390_OPERAND_GPR },
141#define B_32 38 /* Base register starting at position 32 */
142 { 4, 32, S390_OPERAND_BASE | S390_OPERAND_GPR },
a85d7ed0 143
5e4b319c
AK
144#define X_12 39 /* Index register starting at position 12 */
145 { 4, 12, S390_OPERAND_INDEX | S390_OPERAND_GPR },
a85d7ed0 146
5746fb46
AK
147/* Address displacement operands. */
148
5e4b319c 149#define D_20 40 /* Displacement starting at position 20 */
355d475e 150 { 12, 20, S390_OPERAND_DISP },
5e4b319c
AK
151#define DO_20 41 /* optional Displ. starting at position 20 */
152 { 12, 20, S390_OPERAND_DISP | S390_OPERAND_OPTIONAL },
153#define D_36 42 /* Displacement starting at position 36 */
355d475e 154 { 12, 36, S390_OPERAND_DISP },
5e4b319c
AK
155#define D20_20 43 /* 20 bit displacement starting at 20 */
156 { 20, 20, S390_OPERAND_DISP | S390_OPERAND_SIGNED },
a85d7ed0 157
5746fb46
AK
158/* Length operands. */
159
5e4b319c 160#define L4_8 44 /* 4 bit length starting at position 8 */
355d475e 161 { 4, 8, S390_OPERAND_LENGTH },
5e4b319c 162#define L4_12 45 /* 4 bit length starting at position 12 */
a85d7ed0 163 { 4, 12, S390_OPERAND_LENGTH },
5e4b319c 164#define L8_8 46 /* 8 bit length starting at position 8 */
355d475e 165 { 8, 8, S390_OPERAND_LENGTH },
a85d7ed0 166
5746fb46
AK
167/* Signed immediate operands. */
168
5e4b319c 169#define I8_8 47 /* 8 bit signed value starting at 8 */
5746fb46 170 { 8, 8, S390_OPERAND_SIGNED },
5e4b319c 171#define I8_32 48 /* 8 bit signed value starting at 32 */
5746fb46 172 { 8, 32, S390_OPERAND_SIGNED },
cfc72779
AK
173#define I12_12 49 /* 12 bit signed value starting at 12 */
174 { 12, 12, S390_OPERAND_SIGNED },
175#define I16_16 50 /* 16 bit signed value starting at 16 */
5746fb46 176 { 16, 16, S390_OPERAND_SIGNED },
cfc72779 177#define I16_32 51 /* 16 bit signed value starting at 32 */
5746fb46 178 { 16, 32, S390_OPERAND_SIGNED },
cfc72779
AK
179#define I24_24 52 /* 24 bit signed value starting at 24 */
180 { 24, 24, S390_OPERAND_SIGNED },
181#define I32_16 53 /* 32 bit signed value starting at 16 */
5746fb46
AK
182 { 32, 16, S390_OPERAND_SIGNED },
183
184/* Unsigned immediate operands. */
185
cfc72779 186#define U4_8 54 /* 4 bit unsigned value starting at 8 */
a85d7ed0 187 { 4, 8, 0 },
cfc72779 188#define U4_12 55 /* 4 bit unsigned value starting at 12 */
a85d7ed0 189 { 4, 12, 0 },
cfc72779 190#define U4_16 56 /* 4 bit unsigned value starting at 16 */
a85d7ed0 191 { 4, 16, 0 },
cfc72779 192#define U4_20 57 /* 4 bit unsigned value starting at 20 */
a85d7ed0 193 { 4, 20, 0 },
cfc72779
AK
194#define U4_24 58 /* 4 bit unsigned value starting at 24 */
195 { 4, 24, 0 },
196#define U4_28 59 /* 4 bit unsigned value starting at 28 */
197 { 4, 28, 0 },
198#define U4_32 60 /* 4 bit unsigned value starting at 32 */
5746fb46 199 { 4, 32, 0 },
cfc72779
AK
200#define U4_36 61 /* 4 bit unsigned value starting at 36 */
201 { 4, 36, 0 },
202#define U8_8 62 /* 8 bit unsigned value starting at 8 */
355d475e 203 { 8, 8, 0 },
cfc72779 204#define U8_16 63 /* 8 bit unsigned value starting at 16 */
a85d7ed0 205 { 8, 16, 0 },
cfc72779 206#define U8_24 64 /* 8 bit unsigned value starting at 24 */
5746fb46 207 { 8, 24, 0 },
cfc72779 208#define U8_32 65 /* 8 bit unsigned value starting at 32 */
5746fb46 209 { 8, 32, 0 },
cfc72779 210#define U16_16 66 /* 16 bit unsigned value starting at 16 */
355d475e 211 { 16, 16, 0 },
cfc72779 212#define U16_32 67 /* 16 bit unsigned value starting at 32 */
5746fb46 213 { 16, 32, 0 },
cfc72779 214#define U32_16 68 /* 32 bit unsigned value starting at 16 */
5746fb46
AK
215 { 32, 16, 0 },
216
217/* PC-relative address operands. */
218
fb798c50 219#define J12_12 69 /* 12 bit PC relative offset at 12 */
cfc72779 220 { 12, 12, S390_OPERAND_PCREL },
fb798c50 221#define J16_16 70 /* 16 bit PC relative offset at 16 */
355d475e 222 { 16, 16, S390_OPERAND_PCREL },
fb798c50 223#define J16_32 71 /* 16 bit PC relative offset at 32 */
cfc72779 224 { 16, 32, S390_OPERAND_PCREL },
fb798c50
AK
225#define J24_24 72 /* 24 bit PC relative offset at 24 */
226 { 24, 24, S390_OPERAND_PCREL },
227#define J32_16 73 /* 32 bit PC relative offset at 16 */
ad101263 228 { 32, 16, S390_OPERAND_PCREL },
5746fb46 229
fb798c50 230
5746fb46
AK
231/* Conditional mask operands. */
232
fb798c50 233#define M_16OPT 74 /* 4 bit optional mask starting at 16 */
b8e55848 234 { 4, 16, S390_OPERAND_OPTIONAL },
fb798c50 235#define M_20OPT 75 /* 4 bit optional mask starting at 20 */
aac129d7 236 { 4, 20, S390_OPERAND_OPTIONAL },
b8e55848 237
a85d7ed0
NC
238};
239
240
241/* Macros used to form opcodes. */
242
b6849f55 243/* 8/16/48 bit opcodes. */
a85d7ed0 244#define OP8(x) { x, 0x00, 0x00, 0x00, 0x00, 0x00 }
82b66b23
NC
245#define OP16(x) { x >> 8, x & 255, 0x00, 0x00, 0x00, 0x00 }
246#define OP48(x) { x >> 40, (x >> 32) & 255, (x >> 24) & 255, \
247 (x >> 16) & 255, (x >> 8) & 255, x & 255}
a85d7ed0 248
b6849f55
NC
249/* The new format of the INSTR_x_y and MASK_x_y defines is based
250 on the following rules:
251 1) the middle part of the definition (x in INSTR_x_y) is the official
252 names of the instruction format that you can find in the principals
253 of operation.
254 2) the last part of the definition (y in INSTR_x_y) gives you an idea
255 which operands the binary represenation of the instruction has.
256 The meanings of the letters in y are:
257 a - access register
258 c - control register
259 d - displacement, 12 bit
260 f - floating pointer register
cfc72779 261 fe - fpr extended operand, a valid floating pointer register pair
ad101263 262 i - signed integer, 4, 8, 16 or 32 bit
b6849f55
NC
263 l - length, 4 or 8 bit
264 p - pc relative
265 r - general purpose register
5e4b319c 266 ro - optional register operand
cfc72779 267 re - gpr extended operand, a valid general purpose register pair
ad101263
MS
268 u - unsigned integer, 4, 8, 16 or 32 bit
269 m - mode field, 4 bit
b6849f55
NC
270 0 - operand skipped.
271 The order of the letters reflects the layout of the format in
272 storage and not the order of the paramaters of the instructions.
273 The use of the letters is not a 100% match with the PoP but it is
274 quite close.
275
276 For example the instruction "mvo" is defined in the PoP as follows:
277
278 MVO D1(L1,B1),D2(L2,B2) [SS]
279
280 --------------------------------------
281 | 'F1' | L1 | L2 | B1 | D1 | B2 | D2 |
282 --------------------------------------
283 0 8 12 16 20 32 36
284
285 The instruction format is: INSTR_SS_LLRDRD / MASK_SS_LLRDRD. */
286
287#define INSTR_E 2, { 0,0,0,0,0,0 } /* e.g. pr */
cfc72779 288#define INSTR_IE_UU 4, { U4_24,U4_28,0,0,0,0 } /* e.g. niai */
fb798c50 289#define INSTR_MII_UPP 6, { U4_8,J12_12,J24_24 } /* e.g. bprp */
b6849f55 290#define INSTR_RIE_RRP 6, { R_8,R_12,J16_16,0,0,0 } /* e.g. brxhg */
5746fb46
AK
291#define INSTR_RIE_RRPU 6, { R_8,R_12,U4_32,J16_16,0,0 } /* e.g. crj */
292#define INSTR_RIE_RRP0 6, { R_8,R_12,J16_16,0,0,0 } /* e.g. crjne */
d9aee5d7 293#define INSTR_RIE_RRI0 6, { R_8,R_12,I16_16,0,0,0 } /* e.g. ahik */
5746fb46
AK
294#define INSTR_RIE_RUPI 6, { R_8,I8_32,U4_12,J16_16,0,0 } /* e.g. cij */
295#define INSTR_RIE_R0PI 6, { R_8,I8_32,J16_16,0,0,0 } /* e.g. cijne */
296#define INSTR_RIE_RUPU 6, { R_8,U8_32,U4_12,J16_16,0,0 } /* e.g. clij */
297#define INSTR_RIE_R0PU 6, { R_8,U8_32,J16_16,0,0,0 } /* e.g. clijne */
298#define INSTR_RIE_R0IU 6, { R_8,I16_16,U4_32,0,0,0 } /* e.g. cit */
299#define INSTR_RIE_R0I0 6, { R_8,I16_16,0,0,0,0 } /* e.g. citne */
300#define INSTR_RIE_R0UU 6, { R_8,U16_16,U4_32,0,0,0 } /* e.g. clfit */
301#define INSTR_RIE_R0U0 6, { R_8,U16_16,0,0,0,0 } /* e.g. clfitne */
302#define INSTR_RIE_RRUUU 6, { R_8,R_12,U8_16,U8_24,U8_32,0 } /* e.g. rnsbg */
b6849f55
NC
303#define INSTR_RIL_0P 6, { J32_16,0,0,0,0 } /* e.g. jg */
304#define INSTR_RIL_RP 6, { R_8,J32_16,0,0,0,0 } /* e.g. brasl */
305#define INSTR_RIL_UP 6, { U4_8,J32_16,0,0,0,0 } /* e.g. brcl */
ad101263
MS
306#define INSTR_RIL_RI 6, { R_8,I32_16,0,0,0,0 } /* e.g. afi */
307#define INSTR_RIL_RU 6, { R_8,U32_16,0,0,0,0 } /* e.g. alfi */
b6849f55
NC
308#define INSTR_RI_0P 4, { J16_16,0,0,0,0,0 } /* e.g. j */
309#define INSTR_RI_RI 4, { R_8,I16_16,0,0,0,0 } /* e.g. ahi */
310#define INSTR_RI_RP 4, { R_8,J16_16,0,0,0,0 } /* e.g. brct */
311#define INSTR_RI_RU 4, { R_8,U16_16,0,0,0,0 } /* e.g. tml */
312#define INSTR_RI_UP 4, { U4_8,J16_16,0,0,0,0 } /* e.g. brc */
5746fb46
AK
313#define INSTR_RIS_RURDI 6, { R_8,I8_32,U4_12,D_20,B_16,0 } /* e.g. cib */
314#define INSTR_RIS_R0RDI 6, { R_8,I8_32,D_20,B_16,0,0 } /* e.g. cibne */
315#define INSTR_RIS_RURDU 6, { R_8,U8_32,U4_12,D_20,B_16,0 } /* e.g. clib */
316#define INSTR_RIS_R0RDU 6, { R_8,U8_32,D_20,B_16,0,0 } /* e.g. clibne*/
b6849f55
NC
317#define INSTR_RRE_00 4, { 0,0,0,0,0,0 } /* e.g. palb */
318#define INSTR_RRE_0R 4, { R_28,0,0,0,0,0 } /* e.g. tb */
319#define INSTR_RRE_AA 4, { A_24,A_28,0,0,0,0 } /* e.g. cpya */
320#define INSTR_RRE_AR 4, { A_24,R_28,0,0,0,0 } /* e.g. sar */
321#define INSTR_RRE_F0 4, { F_24,0,0,0,0,0 } /* e.g. sqer */
5e4b319c 322#define INSTR_RRE_FE0 4, { FE_24,0,0,0,0,0 } /* e.g. lzxr */
b6849f55 323#define INSTR_RRE_FF 4, { F_24,F_28,0,0,0,0 } /* e.g. debr */
5e4b319c
AK
324#define INSTR_RRE_FEF 4, { FE_24,F_28,0,0,0,0 } /* e.g. lxdbr */
325#define INSTR_RRE_FFE 4, { F_24,FE_28,0,0,0,0 } /* e.g. lexr */
326#define INSTR_RRE_FEFE 4, { FE_24,FE_28,0,0,0,0 } /* e.g. dxr */
b6849f55
NC
327#define INSTR_RRE_R0 4, { R_24,0,0,0,0,0 } /* e.g. ipm */
328#define INSTR_RRE_RA 4, { R_24,A_28,0,0,0,0 } /* e.g. ear */
329#define INSTR_RRE_RF 4, { R_24,F_28,0,0,0,0 } /* e.g. cefbr */
5e4b319c 330#define INSTR_RRE_RFE 4, { R_24,FE_28,0,0,0,0 } /* e.g. csxtr */
b6849f55 331#define INSTR_RRE_RR 4, { R_24,R_28,0,0,0,0 } /* e.g. lura */
5e4b319c
AK
332#define INSTR_RRE_RER 4, { RE_24,R_28,0,0,0,0 } /* e.g. tre */
333#define INSTR_RRE_RERE 4, { RE_24,RE_28,0,0,0,0 } /* e.g. cuse */
b5639b37 334#define INSTR_RRE_FR 4, { F_24,R_28,0,0,0,0 } /* e.g. ldgr */
5e4b319c 335#define INSTR_RRE_FER 4, { FE_24,R_28,0,0,0,0 } /* e.g. cxfbr */
b8e55848
MS
336/* Actually efpc and sfpc do not take an optional operand.
337 This is just a workaround for existing code e.g. glibc. */
338#define INSTR_RRE_RR_OPT 4, { R_24,RO_28,0,0,0,0 } /* efpc, sfpc */
b6849f55 339#define INSTR_RRF_F0FF 4, { F_16,F_24,F_28,0,0,0 } /* e.g. madbr */
5e4b319c 340#define INSTR_RRF_FE0FF 4, { F_16,F_24,F_28,0,0,0 } /* e.g. myr */
b5639b37
MS
341#define INSTR_RRF_F0FF2 4, { F_24,F_16,F_28,0,0,0 } /* e.g. cpsdr */
342#define INSTR_RRF_F0FR 4, { F_24,F_16,R_28,0,0,0 } /* e.g. iedtr */
5e4b319c 343#define INSTR_RRF_FE0FER 4, { FE_24,FE_16,R_28,0,0,0 } /* e.g. iextr */
b6849f55 344#define INSTR_RRF_FUFF 4, { F_24,F_16,F_28,U4_20,0,0 } /* e.g. didbr */
5e4b319c 345#define INSTR_RRF_FEUFEFE 4, { FE_24,FE_16,FE_28,U4_20,0,0 } /* e.g. qaxtr */
d9aee5d7 346#define INSTR_RRF_FUFF2 4, { F_24,F_28,F_16,U4_20,0,0 } /* e.g. adtra */
5e4b319c 347#define INSTR_RRF_FEUFEFE2 4, { FE_24,FE_28,FE_16,U4_20,0,0 } /* e.g. axtra */
b6849f55 348#define INSTR_RRF_RURR 4, { R_24,R_28,R_16,U4_20,0,0 } /* e.g. .insn */
aac129d7 349#define INSTR_RRF_RURR2 4, { R_24,R_16,R_28,U4_20,0,0 } /* e.g. lptea */
725a9891 350#define INSTR_RRF_R0RR 4, { R_24,R_16,R_28,0,0,0 } /* e.g. idte */
d9aee5d7 351#define INSTR_RRF_R0RR2 4, { R_24,R_28,R_16,0,0,0 } /* e.g. ark */
aac129d7 352#define INSTR_RRF_RMRR 4, { R_24,R_16,R_28,M_20OPT,0,0 } /* e.g. crdte */
929e4d1a 353#define INSTR_RRF_U0FF 4, { F_24,U4_16,F_28,0,0,0 } /* e.g. fixr */
5e4b319c 354#define INSTR_RRF_U0FEFE 4, { FE_24,U4_16,FE_28,0,0,0 } /* e.g. fixbr */
929e4d1a 355#define INSTR_RRF_U0RF 4, { R_24,U4_16,F_28,0,0,0 } /* e.g. cfebr */
5e4b319c 356#define INSTR_RRF_U0RFE 4, { R_24,U4_16,FE_28,0,0,0 } /* e.g. cfxbr */
b5639b37 357#define INSTR_RRF_UUFF 4, { F_24,U4_16,F_28,U4_20,0,0 } /* e.g. fidtr */
5e4b319c
AK
358#define INSTR_RRF_UUFFE 4, { F_24,U4_16,FE_28,U4_20,0,0 } /* e.g. ldxtr */
359#define INSTR_RRF_UUFEFE 4, { FE_24,U4_16,FE_28,U4_20,0,0 } /* e.g. fixtr */
b5639b37 360#define INSTR_RRF_0UFF 4, { F_24,F_28,U4_20,0,0,0 } /* e.g. ldetr */
c8fa16ed 361#define INSTR_RRF_0UFEF 4, { FE_24,F_28,U4_20,0,0,0 } /* e.g. lxdtr */
7dc6076f 362#define INSTR_RRF_FFRU 4, { F_24,F_16,R_28,U4_20,0,0 } /* e.g. rrdtr */
5e4b319c 363#define INSTR_RRF_FEFERU 4, { FE_24,FE_16,R_28,U4_20,0,0 } /* e.g. rrxtr */
d9aee5d7 364#define INSTR_RRF_M0RR 4, { R_24,R_28,M_16OPT,0,0,0 } /* e.g. sske */
5e4b319c
AK
365#define INSTR_RRF_M0RER 4, { RE_24,R_28,M_16OPT,0,0,0 } /* e.g. trte */
366#define INSTR_RRF_M0RERE 4, { RE_24,RE_28,M_16OPT,0,0,0 } /* e.g. troo */
5746fb46
AK
367#define INSTR_RRF_U0RR 4, { R_24,R_28,U4_16,0,0,0 } /* e.g. clrt */
368#define INSTR_RRF_00RR 4, { R_24,R_28,0,0,0,0 } /* e.g. clrtne */
d9aee5d7 369#define INSTR_RRF_UUFR 4, { F_24,U4_16,R_28,U4_20,0,0 } /* e.g. cdgtra */
5e4b319c 370#define INSTR_RRF_UUFER 4, { FE_24,U4_16,R_28,U4_20,0,0 } /* e.g. cxfbra */
d9aee5d7 371#define INSTR_RRF_UURF 4, { R_24,U4_16,F_28,U4_20,0,0 } /* e.g. cgdtra */
5e4b319c 372#define INSTR_RRF_UURFE 4, { R_24,U4_16,FE_28,U4_20,0,0 } /* e.g. cfxbra */
b6849f55 373#define INSTR_RR_0R 2, { R_12, 0,0,0,0,0 } /* e.g. br */
ce21feb4 374#define INSTR_RR_0R_OPT 2, { RO_12, 0,0,0,0,0 } /* e.g. nopr */
b6849f55 375#define INSTR_RR_FF 2, { F_8,F_12,0,0,0,0 } /* e.g. adr */
5e4b319c
AK
376#define INSTR_RR_FEF 2, { FE_8,F_12,0,0,0,0 } /* e.g. mxdr */
377#define INSTR_RR_FFE 2, { F_8,FE_12,0,0,0,0 } /* e.g. ldxr */
378#define INSTR_RR_FEFE 2, { FE_8,FE_12,0,0,0,0 } /* e.g. axr */
b6849f55
NC
379#define INSTR_RR_R0 2, { R_8, 0,0,0,0,0 } /* e.g. spm */
380#define INSTR_RR_RR 2, { R_8,R_12,0,0,0,0 } /* e.g. lr */
5e4b319c 381#define INSTR_RR_RER 2, { RE_8,R_12,0,0,0,0 } /* e.g. dr */
b6849f55
NC
382#define INSTR_RR_U0 2, { U8_8, 0,0,0,0,0 } /* e.g. svc */
383#define INSTR_RR_UR 2, { U4_8,R_12,0,0,0,0 } /* e.g. bcr */
b5639b37 384#define INSTR_RRR_F0FF 4, { F_24,F_28,F_16,0,0,0 } /* e.g. ddtr */
5e4b319c 385#define INSTR_RRR_FE0FEFE 4, { FE_24,FE_28,FE_16,0,0,0 } /* e.g. axtr */
5746fb46
AK
386#define INSTR_RRS_RRRDU 6, { R_8,R_12,U4_32,D_20,B_16 } /* e.g. crb */
387#define INSTR_RRS_RRRD0 6, { R_8,R_12,D_20,B_16,0 } /* e.g. crbne */
b6849f55 388#define INSTR_RSE_RRRD 6, { R_8,R_12,D_20,B_16,0,0 } /* e.g. lmh */
5e4b319c 389#define INSTR_RSE_RERERD 6, { RE_8,RE_12,D_20,B_16,0,0 } /* e.g. mvclu */
ad101263 390#define INSTR_RSE_CCRD 6, { C_8,C_12,D_20,B_16,0,0 } /* e.g. lmh */
b6849f55 391#define INSTR_RSE_RURD 6, { R_8,U4_12,D_20,B_16,0,0 } /* e.g. icmh */
98c3d905 392#define INSTR_RSL_R0RD 6, { D_20,L4_8,B_16,0,0,0 } /* e.g. tp */
6cf1d90c
AK
393#define INSTR_RSL_LRDFU 6, { F_32,D_20,L8_8,B_16,U4_36,0 } /* e.g. cdzt */
394#define INSTR_RSL_LRDFEU 6, { FE_32,D_20,L8_8,B_16,U4_36,0 } /* e.g. cxzt */
b6849f55 395#define INSTR_RSI_RRP 4, { R_8,R_12,J16_16,0,0,0 } /* e.g. brxh */
bac02689 396#define INSTR_RSY_RRRD 6, { R_8,R_12,D20_20,B_16,0,0 } /* e.g. stmy */
5e4b319c 397#define INSTR_RSY_RERERD 6, { RE_8,RE_12,D20_20,B_16,0,0 } /* e.g. cdsy */
bac02689 398#define INSTR_RSY_RURD 6, { R_8,U4_12,D20_20,B_16,0,0 } /* e.g. icmh */
cfc72779
AK
399#define INSTR_RSY_RURD2 6, { R_8,D20_20,B_16,U4_12,0,0 } /* e.g. loc */
400#define INSTR_RSY_R0RD 6, { R_8,D20_20,B_16,0,0,0 } /* e.g. locgt */
bac02689 401#define INSTR_RSY_AARD 6, { A_8,A_12,D20_20,B_16,0,0 } /* e.g. lamy */
cfc72779 402#define INSTR_RSY_CCRD 6, { C_8,C_12,D20_20,B_16,0,0 } /* e.g. stctg */
b6849f55
NC
403#define INSTR_RS_AARD 4, { A_8,A_12,D_20,B_16,0,0 } /* e.g. lam */
404#define INSTR_RS_CCRD 4, { C_8,C_12,D_20,B_16,0,0 } /* e.g. lctl */
405#define INSTR_RS_R0RD 4, { R_8,D_20,B_16,0,0,0 } /* e.g. sll */
5e4b319c 406#define INSTR_RS_RE0RD 4, { RE_8,D_20,B_16,0,0,0 } /* e.g. slda */
b6849f55 407#define INSTR_RS_RRRD 4, { R_8,R_12,D_20,B_16,0,0 } /* e.g. cs */
5e4b319c 408#define INSTR_RS_RERERD 4, { RE_8,RE_12,D_20,B_16,0,0 } /* e.g. cds */
b6849f55
NC
409#define INSTR_RS_RURD 4, { R_8,U4_12,D_20,B_16,0,0 } /* e.g. icm */
410#define INSTR_RXE_FRRD 6, { F_8,D_20,X_12,B_16,0,0 } /* e.g. axbr */
5e4b319c 411#define INSTR_RXE_FERRD 6, { FE_8,D_20,X_12,B_16,0,0 } /* e.g. lxdb */
b6849f55 412#define INSTR_RXE_RRRD 6, { R_8,D_20,X_12,B_16,0,0 } /* e.g. lg */
5e4b319c 413#define INSTR_RXE_RERRD 6, { RE_8,D_20,X_12,B_16,0,0 } /* e.g. dsg */
b6849f55 414#define INSTR_RXF_FRRDF 6, { F_32,F_8,D_20,X_12,B_16,0 } /* e.g. madb */
5e4b319c
AK
415#define INSTR_RXF_FRRDFE 6, { FE_32,F_8,D_20,X_12,B_16,0 } /* e.g. my */
416#define INSTR_RXF_FERRDFE 6, { FE_32,FE_8,D_20,X_12,B_16,0 } /* e.g. slxt */
b6849f55 417#define INSTR_RXF_RRRDR 6, { R_32,R_8,D_20,X_12,B_16,0 } /* e.g. .insn */
bac02689 418#define INSTR_RXY_RRRD 6, { R_8,D20_20,X_12,B_16,0,0 } /* e.g. ly */
5e4b319c 419#define INSTR_RXY_RERRD 6, { RE_8,D20_20,X_12,B_16,0,0 } /* e.g. dsg */
bac02689 420#define INSTR_RXY_FRRD 6, { F_8,D20_20,X_12,B_16,0,0 } /* e.g. ley */
5746fb46 421#define INSTR_RXY_URRD 6, { U4_8,D20_20,X_12,B_16,0,0 } /* e.g. pfd */
b6849f55 422#define INSTR_RX_0RRD 4, { D_20,X_12,B_16,0,0,0 } /* e.g. be */
ce21feb4 423#define INSTR_RX_0RRD_OPT 4, { DO_20,X_12,B_16,0,0,0 } /* e.g. nop */
b6849f55 424#define INSTR_RX_FRRD 4, { F_8,D_20,X_12,B_16,0,0 } /* e.g. ae */
5e4b319c 425#define INSTR_RX_FERRD 4, { FE_8,D_20,X_12,B_16,0,0 } /* e.g. mxd */
b6849f55 426#define INSTR_RX_RRRD 4, { R_8,D_20,X_12,B_16,0,0 } /* e.g. l */
5e4b319c 427#define INSTR_RX_RERRD 4, { RE_8,D_20,X_12,B_16,0,0 } /* e.g. d */
b6849f55
NC
428#define INSTR_RX_URRD 4, { U4_8,D_20,X_12,B_16,0,0 } /* e.g. bc */
429#define INSTR_SI_URD 4, { D_20,B_16,U8_8,0,0,0 } /* e.g. cli */
bac02689 430#define INSTR_SIY_URD 6, { D20_20,B_16,U8_8,0,0,0 } /* e.g. tmy */
5746fb46
AK
431#define INSTR_SIY_IRD 6, { D20_20,B_16,I8_8,0,0,0 } /* e.g. asi */
432#define INSTR_SIL_RDI 6, { D_20,B_16,I16_32,0,0,0 } /* e.g. chhsi */
433#define INSTR_SIL_RDU 6, { D_20,B_16,U16_32,0,0,0 } /* e.g. clfhsi */
cfc72779 434#define INSTR_SMI_U0RDP 6, { U4_8,J16_32,D_20,B_16,0,0 } /* e.g. bpp */
b6849f55
NC
435#define INSTR_SSE_RDRD 6, { D_20,B_16,D_36,B_32,0,0 } /* e.g. mvsdk */
436#define INSTR_SS_L0RDRD 6, { D_20,L8_8,B_16,D_36,B_32,0 } /* e.g. mvc */
b2e818b7 437#define INSTR_SS_L2RDRD 6, { D_20,B_16,D_36,L8_8,B_32,0 } /* e.g. pka */
b6849f55
NC
438#define INSTR_SS_LIRDRD 6, { D_20,L4_8,B_16,D_36,B_32,U4_12 } /* e.g. srp */
439#define INSTR_SS_LLRDRD 6, { D_20,L4_8,B_16,D_36,L4_12,B_32 } /* e.g. pack */
440#define INSTR_SS_RRRDRD 6, { D_20,R_8,B_16,D_36,B_32,R_12 } /* e.g. mvck */
441#define INSTR_SS_RRRDRD2 6, { R_8,D_20,B_16,R_12,D_36,B_32 } /* e.g. plo */
442#define INSTR_SS_RRRDRD3 6, { R_8,R_12,D_20,B_16,D_36,B_32 } /* e.g. lmd */
5746fb46 443#define INSTR_SSF_RRDRD 6, { D_20,B_16,D_36,B_32,R_8,0 } /* e.g. mvcos */
5e4b319c
AK
444#define INSTR_SSF_RRDRD2 6, { R_8,D_20,B_16,D_36,B_32,0 }
445#define INSTR_SSF_RERDRD2 6, { RE_8,D_20,B_16,D_36,B_32,0 } /* e.g. lpd */
b6849f55
NC
446#define INSTR_S_00 4, { 0,0,0,0,0,0 } /* e.g. hsch */
447#define INSTR_S_RD 4, { D_20,B_16,0,0,0,0 } /* e.g. lpsw */
448
449#define MASK_E { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
cfc72779 450#define MASK_IE_UU { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
fb798c50 451#define MASK_MII_UPP { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55 452#define MASK_RIE_RRP { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
5746fb46
AK
453#define MASK_RIE_RRPU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
454#define MASK_RIE_RRP0 { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
d9aee5d7 455#define MASK_RIE_RRI0 { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
5746fb46
AK
456#define MASK_RIE_RUPI { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
457#define MASK_RIE_R0PI { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
458#define MASK_RIE_RUPU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
459#define MASK_RIE_R0PU { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff }
460#define MASK_RIE_R0IU { 0xff, 0x0f, 0x00, 0x00, 0x0f, 0xff }
461#define MASK_RIE_R0I0 { 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff }
462#define MASK_RIE_R0UU { 0xff, 0x0f, 0x00, 0x00, 0x0f, 0xff }
463#define MASK_RIE_R0U0 { 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff }
464#define MASK_RIE_RRUUU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
b6849f55
NC
465#define MASK_RIL_0P { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
466#define MASK_RIL_RP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
467#define MASK_RIL_UP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
ad101263
MS
468#define MASK_RIL_RI { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
469#define MASK_RIL_RU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
470#define MASK_RI_0P { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
471#define MASK_RI_RI { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
472#define MASK_RI_RP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
473#define MASK_RI_RU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
474#define MASK_RI_UP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
5746fb46
AK
475#define MASK_RIS_RURDI { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
476#define MASK_RIS_R0RDI { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
477#define MASK_RIS_RURDU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
478#define MASK_RIS_R0RDU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
b6849f55
NC
479#define MASK_RRE_00 { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
480#define MASK_RRE_0R { 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00 }
481#define MASK_RRE_AA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
482#define MASK_RRE_AR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
483#define MASK_RRE_F0 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
5e4b319c 484#define MASK_RRE_FE0 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
b6849f55 485#define MASK_RRE_FF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
5e4b319c
AK
486#define MASK_RRE_FEF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
487#define MASK_RRE_FFE { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
488#define MASK_RRE_FEFE { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
b6849f55
NC
489#define MASK_RRE_R0 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
490#define MASK_RRE_RA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
491#define MASK_RRE_RF { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
5e4b319c 492#define MASK_RRE_RFE { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
b6849f55 493#define MASK_RRE_RR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
5e4b319c
AK
494#define MASK_RRE_RER { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
495#define MASK_RRE_RERE { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
b5639b37 496#define MASK_RRE_FR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
5e4b319c 497#define MASK_RRE_FER { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
b8e55848 498#define MASK_RRE_RR_OPT { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
b6849f55 499#define MASK_RRF_F0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c 500#define MASK_RRF_FE0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
b5639b37
MS
501#define MASK_RRF_F0FF2 { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
502#define MASK_RRF_F0FR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c 503#define MASK_RRF_FE0FER { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
b6849f55 504#define MASK_RRF_FUFF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 505#define MASK_RRF_FEUFEFE { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
d9aee5d7 506#define MASK_RRF_FUFF2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 507#define MASK_RRF_FEUFEFE2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
b6849f55 508#define MASK_RRF_RURR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
aac129d7 509#define MASK_RRF_RURR2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
bac02689 510#define MASK_RRF_R0RR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
d9aee5d7 511#define MASK_RRF_R0RR2 { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
aac129d7 512#define MASK_RRF_RMRR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
b6849f55 513#define MASK_RRF_U0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c 514#define MASK_RRF_U0FEFE { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
929e4d1a 515#define MASK_RRF_U0RF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c 516#define MASK_RRF_U0RFE { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
b5639b37 517#define MASK_RRF_UUFF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c
AK
518#define MASK_RRF_UUFFE { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
519#define MASK_RRF_UUFEFE { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
b5639b37 520#define MASK_RRF_0UFF { 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00 }
5e4b319c 521#define MASK_RRF_0UFEF { 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00 }
7dc6076f 522#define MASK_RRF_FFRU { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 523#define MASK_RRF_FEFERU { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
ad101263 524#define MASK_RRF_M0RR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c
AK
525#define MASK_RRF_M0RER { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
526#define MASK_RRF_M0RERE { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5746fb46
AK
527#define MASK_RRF_U0RR { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
528#define MASK_RRF_00RR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
d9aee5d7 529#define MASK_RRF_UUFR { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 530#define MASK_RRF_UUFER { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
d9aee5d7 531#define MASK_RRF_UURF { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 532#define MASK_RRF_UURFE { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
b6849f55 533#define MASK_RR_0R { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
ce21feb4 534#define MASK_RR_0R_OPT { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
b6849f55 535#define MASK_RR_FF { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5e4b319c
AK
536#define MASK_RR_FEF { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
537#define MASK_RR_FFE { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
538#define MASK_RR_FEFE { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
539#define MASK_RR_R0 { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
540#define MASK_RR_RR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 541#define MASK_RR_RER { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
542#define MASK_RR_U0 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
543#define MASK_RR_UR { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b5639b37 544#define MASK_RRR_F0FF { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5e4b319c 545#define MASK_RRR_FE0FEFE { 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00 }
5746fb46
AK
546#define MASK_RRS_RRRDU { 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff }
547#define MASK_RRS_RRRD0 { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
02cbf767 548#define MASK_RSE_RRRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
5e4b319c 549#define MASK_RSE_RERERD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
02cbf767
AK
550#define MASK_RSE_CCRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
551#define MASK_RSE_RURD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
552#define MASK_RSL_R0RD { 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff }
cfc72779
AK
553#define MASK_RSL_LRDFU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
554#define MASK_RSL_LRDFEU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
b6849f55
NC
555#define MASK_RSI_RRP { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
556#define MASK_RS_AARD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
557#define MASK_RS_CCRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
558#define MASK_RS_R0RD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 559#define MASK_RS_RE0RD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
b6849f55 560#define MASK_RS_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 561#define MASK_RS_RERERD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55 562#define MASK_RS_RURD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
bac02689 563#define MASK_RSY_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
5e4b319c 564#define MASK_RSY_RERERD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
bac02689 565#define MASK_RSY_RURD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
cfc72779
AK
566#define MASK_RSY_RURD2 { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
567#define MASK_RSY_R0RD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff }
bac02689 568#define MASK_RSY_AARD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
ad101263 569#define MASK_RSY_CCRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
02cbf767 570#define MASK_RXE_FRRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
5e4b319c 571#define MASK_RXE_FERRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
02cbf767 572#define MASK_RXE_RRRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
5e4b319c 573#define MASK_RXE_RERRD { 0xff, 0x00, 0x00, 0x00, 0xff, 0xff }
02cbf767 574#define MASK_RXF_FRRDF { 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff }
5e4b319c
AK
575#define MASK_RXF_FRRDFE { 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff }
576#define MASK_RXF_FERRDFE { 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff }
02cbf767 577#define MASK_RXF_RRRDR { 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff }
bac02689 578#define MASK_RXY_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
5e4b319c 579#define MASK_RXY_RERRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
bac02689 580#define MASK_RXY_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
5746fb46 581#define MASK_RXY_URRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
b6849f55 582#define MASK_RX_0RRD { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
ce21feb4 583#define MASK_RX_0RRD_OPT { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
b6849f55 584#define MASK_RX_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 585#define MASK_RX_FERRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55 586#define MASK_RX_RRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 587#define MASK_RX_RERRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
588#define MASK_RX_URRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
589#define MASK_SI_URD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
bac02689 590#define MASK_SIY_URD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
5746fb46
AK
591#define MASK_SIY_IRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
592#define MASK_SIL_RDI { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
593#define MASK_SIL_RDU { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
cfc72779 594#define MASK_SMI_U0RDP { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
595#define MASK_SSE_RDRD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
596#define MASK_SS_L0RDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b2e818b7 597#define MASK_SS_L2RDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
598#define MASK_SS_LIRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
599#define MASK_SS_LLRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
600#define MASK_SS_RRRDRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
601#define MASK_SS_RRRDRD2 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
602#define MASK_SS_RRRDRD3 { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
5746fb46 603#define MASK_SSF_RRDRD { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
d9aee5d7 604#define MASK_SSF_RRDRD2 { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
5e4b319c 605#define MASK_SSF_RERDRD2 { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
b6849f55
NC
606#define MASK_S_00 { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
607#define MASK_S_RD { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
5746fb46 608
b6849f55
NC
609
610/* The opcode formats table (blueprints for .insn pseudo mnemonic). */
a85d7ed0 611
82b66b23
NC
612const struct s390_opcode s390_opformats[] =
613 {
af169f23
MS
614 { "e", OP8(0x00LL), MASK_E, INSTR_E, 3, 0 },
615 { "ri", OP8(0x00LL), MASK_RI_RI, INSTR_RI_RI, 3, 0 },
616 { "rie", OP8(0x00LL), MASK_RIE_RRP, INSTR_RIE_RRP, 3, 0 },
617 { "ril", OP8(0x00LL), MASK_RIL_RP, INSTR_RIL_RP, 3, 0 },
ad101263 618 { "rilu", OP8(0x00LL), MASK_RIL_RU, INSTR_RIL_RU, 3, 0 },
5746fb46 619 { "ris", OP8(0x00LL), MASK_RIS_RURDI, INSTR_RIS_RURDI,3, 6 },
af169f23
MS
620 { "rr", OP8(0x00LL), MASK_RR_RR, INSTR_RR_RR, 3, 0 },
621 { "rre", OP8(0x00LL), MASK_RRE_RR, INSTR_RRE_RR, 3, 0 },
622 { "rrf", OP8(0x00LL), MASK_RRF_RURR, INSTR_RRF_RURR, 3, 0 },
5746fb46 623 { "rrs", OP8(0x00LL), MASK_RRS_RRRDU, INSTR_RRS_RRRDU,3, 6 },
af169f23
MS
624 { "rs", OP8(0x00LL), MASK_RS_RRRD, INSTR_RS_RRRD, 3, 0 },
625 { "rse", OP8(0x00LL), MASK_RSE_RRRD, INSTR_RSE_RRRD, 3, 0 },
626 { "rsi", OP8(0x00LL), MASK_RSI_RRP, INSTR_RSI_RRP, 3, 0 },
bac02689 627 { "rsy", OP8(0x00LL), MASK_RSY_RRRD, INSTR_RSY_RRRD, 3, 3 },
af169f23
MS
628 { "rx", OP8(0x00LL), MASK_RX_RRRD, INSTR_RX_RRRD, 3, 0 },
629 { "rxe", OP8(0x00LL), MASK_RXE_RRRD, INSTR_RXE_RRRD, 3, 0 },
630 { "rxf", OP8(0x00LL), MASK_RXF_RRRDR, INSTR_RXF_RRRDR,3, 0 },
bac02689 631 { "rxy", OP8(0x00LL), MASK_RXY_RRRD, INSTR_RXY_RRRD, 3, 3 },
af169f23
MS
632 { "s", OP8(0x00LL), MASK_S_RD, INSTR_S_RD, 3, 0 },
633 { "si", OP8(0x00LL), MASK_SI_URD, INSTR_SI_URD, 3, 0 },
bac02689 634 { "siy", OP8(0x00LL), MASK_SIY_URD, INSTR_SIY_URD, 3, 3 },
5746fb46 635 { "sil", OP8(0x00LL), MASK_SIL_RDI, INSTR_SIL_RDI, 3, 6 },
af169f23
MS
636 { "ss", OP8(0x00LL), MASK_SS_RRRDRD, INSTR_SS_RRRDRD,3, 0 },
637 { "sse", OP8(0x00LL), MASK_SSE_RDRD, INSTR_SSE_RDRD, 3, 0 },
ad101263 638 { "ssf", OP8(0x00LL), MASK_SSF_RRDRD, INSTR_SSF_RRDRD,3, 0 },
a85d7ed0
NC
639};
640
641const int s390_num_opformats =
642 sizeof (s390_opformats) / sizeof (s390_opformats[0]);
643
b6849f55 644#include "s390-opc.tab"
This page took 0.633297 seconds and 4 git commands to generate.