Rizin
unix-like reverse engineering framework and cli tools
arc.h
Go to the documentation of this file.
1 /* Opcode table for the ARC.
2  Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2007, 2008, 2009
3  Free Software Foundation, Inc.
4  Contributed by Doug Evans (dje@cygnus.com).
5 
6  Copyright 2008-2012 Synopsys Inc.
7 
8  This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
9  the GNU Binutils.
10 
11  GAS/GDB is free software; you can redistribute it and/or modify
12  it under the terms of the GNU General Public License as published by
13  the Free Software Foundation; either version 2, or (at your option)
14  any later version.
15 
16  GAS/GDB is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  GNU General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with GAS or GDB; see the file COPYING. If not, write to
23  the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
24  MA 02110-1301, USA. */
25 
26 
27 /* List of the various cpu types.
28  The tables currently use bit masks to say whether the instruction or
29  whatever is supported by a particular cpu. This lets us have one entry
30  apply to several cpus.
31 
32  This duplicates bfd_mach_arc_xxx. For now I wish to isolate this from bfd
33  and bfd from this. Also note that these numbers are bit values as we want
34  to allow for things available on more than one ARC (but not necessarily all
35  ARCs). */
36 
37 /* The `base' cpu must be 0 (table entries are omitted for the base cpu).
38  The cpu type is treated independently of endianness.
39  The complete `mach' number includes endianness.
40  These values are internal to opcodes/bfd/binutils/gas. */
41 #define ARC_MACH_ARC4 1
42 #define ARC_MACH_ARC5 2
43 #define ARC_MACH_ARC6 4
44 #define ARC_MACH_ARC7 8
45 #define ARC_MACH_ARC601 16
46 
47 #define E_ARC_MACH_A4 0x00000000
48 #define EM_ARCOMPACT 93 /* ARC Cores */
49 
50 /* Additional cpu values can be inserted here and ARC_MACH_BIG moved down. */
51 #define ARC_MACH_BIG 32
52 
53 /* ARC processors which implement ARCompact ISA. */
54 #define ARCOMPACT (ARC_MACH_ARC5 | ARC_MACH_ARC6 | ARC_MACH_ARC601 | ARC_MACH_ARC7)
55 
56 /* Mask of number of bits necessary to record cpu type. */
57 #define ARC_MACH_CPU_MASK (ARC_MACH_BIG - 1)
58 /* Mask of number of bits necessary to record cpu type + endianness. */
59 #define ARC_MACH_MASK ((ARC_MACH_BIG << 1) - 1)
60 
61 /* Type to denote an ARC instruction (at least a 32 bit unsigned int). */
62 typedef unsigned int arc_insn;
63 
64 struct arc_opcode {
65  char *syntax; /* syntax of insn */
66  unsigned long mask, value; /* recognize insn if (op&mask)==value */
67  int flags; /* various flag bits */
68 
69 
70 /* Values for `flags'. */
71 
72 /* Return CPU number, given flag bits. */
73 #define ARC_OPCODE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
74 /* Return MACH number, given flag bits. */
75 #define ARC_OPCODE_MACH(bits) ((bits) & ARC_MACH_MASK)
76 /* First opcode flag bit available after machine mask. */
77 #define ARC_OPCODE_FLAG_START (ARC_MACH_MASK + 1)
78 
79 /* This insn is a conditional branch. */
80 #define ARC_OPCODE_COND_BRANCH (ARC_OPCODE_FLAG_START)
81 #define SYNTAX_LENGTH (ARC_OPCODE_COND_BRANCH << 1)
82 #define SYNTAX_3OP (SYNTAX_LENGTH )
83 #define SYNTAX_2OP (SYNTAX_3OP << 1)
84 #define SYNTAX_1OP (SYNTAX_2OP << 1)
85 #define SYNTAX_NOP (SYNTAX_1OP << 1)
86 #define OP1_DEST_IGNORED (SYNTAX_NOP << 1)
87 #define OP1_MUST_BE_IMM (OP1_DEST_IGNORED << 1)
88 #define OP1_IMM_IMPLIED (OP1_MUST_BE_IMM << 1)
89 #define SUFFIX_NONE (OP1_IMM_IMPLIED << 1)
90 #define SUFFIX_COND (SUFFIX_NONE << 1)
91 #define SUFFIX_FLAG (SUFFIX_COND << 1)
92 #define SYNTAX_VALID (SUFFIX_FLAG << 1)
93 #define SIMD_LONG_INST (SYNTAX_VALID << 1)
94 
95 #define AC_SYNTAX_3OP (0x01)
96 #define AC_SYNTAX_2OP (AC_SYNTAX_3OP << 1)
97 #define AC_SYNTAX_1OP (AC_SYNTAX_2OP << 1)
98 #define AC_SYNTAX_NOP (AC_SYNTAX_1OP << 1)
99 #define AC_SYNTAX_SIMD (AC_SYNTAX_NOP << 1)
100 #define AC_OP1_DEST_IGNORED (AC_SYNTAX_SIMD << 1)
101 #define AC_OP1_MUST_BE_IMM (AC_OP1_DEST_IGNORED << 1)
102 #define AC_OP1_IMM_IMPLIED (AC_OP1_MUST_BE_IMM << 1)
103 #define AC_SIMD_SYNTAX_DISC (AC_OP1_IMM_IMPLIED << 1)
104 #define AC_SIMD_IREGA (AC_SIMD_SYNTAX_DISC << 1)
105 #define AC_SIMD_IREGB (AC_SIMD_IREGA << 1)
106 
107 #define AC_SIMD_SYNTAX_VVV (AC_SIMD_IREGB << 1)
108 #define AC_SIMD_SYNTAX_VV0 (AC_SIMD_SYNTAX_VVV << 1)
109 #define AC_SIMD_SYNTAX_VbI0 (AC_SIMD_SYNTAX_VV0 << 1)
110 #define AC_SIMD_SYNTAX_Vb00 (AC_SIMD_SYNTAX_VbI0 << 1)
111 #define AC_SIMD_SYNTAX_VbC0 (AC_SIMD_SYNTAX_Vb00 << 1)
112 #define AC_SIMD_SYNTAX_V00 (AC_SIMD_SYNTAX_VbC0 << 1)
113 #define AC_SIMD_SYNTAX_VC0 (AC_SIMD_SYNTAX_V00 << 1)
114 #define AC_SIMD_SYNTAX_VVC (AC_SIMD_SYNTAX_VC0 << 1)
115 #define AC_SIMD_SYNTAX_VV (AC_SIMD_SYNTAX_VVC << 1)
116 #define AC_SIMD_SYNTAX_VVI (AC_SIMD_SYNTAX_VV << 1)
117 #define AC_SIMD_SYNTAX_C (AC_SIMD_SYNTAX_VVI << 1)
118 #define AC_SIMD_SYNTAX_0 (AC_SIMD_SYNTAX_C << 1)
119 #define AC_SIMD_SYNTAX_CC (AC_SIMD_SYNTAX_0 << 1)
120 #define AC_SIMD_SYNTAX_C0 (AC_SIMD_SYNTAX_CC << 1)
121 #define AC_SIMD_SYNTAX_DC (AC_SIMD_SYNTAX_C0 << 1)
122 #define AC_SIMD_SYNTAX_D0 (AC_SIMD_SYNTAX_DC << 1)
123 #define AC_SIMD_SYNTAX_VD (AC_SIMD_SYNTAX_D0 << 1)
124 #define AC_SIMD_SYNTAX_VVL (AC_SIMD_SYNTAX_VD << 1)
125 #define AC_SIMD_SYNTAX_VU0 (AC_SIMD_SYNTAX_VVL << 1)
126 #define AC_SIMD_SYNTAX_VL0 (AC_SIMD_SYNTAX_VU0 << 1)
127 #define AC_SIMD_SYNTAX_C00 (AC_SIMD_SYNTAX_VL0 << 1)
128 
129 
130  //#define AC_SUFFIX_NONE (AC_SIMD_SYNTAX_VD << 1)
131 #define AC_SUFFIX_NONE (0x1)
132 /* START ARC LOCAL */
133 #define AC_SUFFIX_DIRECT (AC_SUFFIX_NONE << 1)
134 /* END ARC LOCAL */
135 #define AC_SUFFIX_COND (AC_SUFFIX_DIRECT << 1)
136 #define AC_SUFFIX_FLAG (AC_SUFFIX_COND << 1)
137 #define AC_SIMD_FLAGS_NONE (AC_SUFFIX_FLAG << 1)
138 #define AC_SIMD_FLAG_SET (AC_SIMD_FLAGS_NONE << 1)
139 #define AC_SIMD_FLAG1_SET (AC_SIMD_FLAG_SET << 1)
140 #define AC_SIMD_FLAG2_SET (AC_SIMD_FLAG1_SET << 1)
141 #define AC_SIMD_ENCODE_U8 (AC_SIMD_FLAG2_SET << 1)
142 #define AC_SIMD_ENCODE_U6 (AC_SIMD_ENCODE_U8 << 1)
143 #define AC_SIMD_SCALE_1 (AC_SIMD_ENCODE_U6 << 1)
144 #define AC_SIMD_SCALE_2 (AC_SIMD_SCALE_1 << 1)
145 #define AC_SIMD_SCALE_3 (AC_SIMD_SCALE_2 << 1)
146 #define AC_SIMD_SCALE_4 (AC_SIMD_SCALE_3 << 1)
147 #define AC_SIMD_SCALE_0 (AC_SIMD_SCALE_4 << 1)
148 #define AC_SIMD_ENCODE_LIMM (AC_SIMD_SCALE_0 << 1)
149 #define AC_SIMD_EXTENDED (AC_SIMD_ENCODE_LIMM << 1)
150 #define AC_SIMD_EXTEND2 (AC_SIMD_EXTENDED << 1)
151 #define AC_SIMD_EXTEND3 (AC_SIMD_EXTEND2 << 1)
152 #define AC_SUFFIX_LANEMASK (AC_SIMD_EXTEND3 << 1)
153 #define AC_SIMD_ENCODE_S12 (AC_SUFFIX_LANEMASK << 1)
154 #define AC_SIMD_ZERVA (AC_SIMD_ENCODE_S12 << 1)
155 #define AC_SIMD_ZERVB (AC_SIMD_ZERVA << 1)
156 #define AC_SIMD_ZERVC (AC_SIMD_ZERVB << 1)
157 #define AC_SIMD_SETLM (AC_SIMD_ZERVC << 1)
158 #define AC_SIMD_EXTEND1 (AC_SIMD_SETLM << 1)
159 #define AC_SIMD_KREG (AC_SIMD_EXTEND1 << 1)
160 #define AC_SIMD_ENCODE_U16 (AC_SIMD_KREG << 1)
161 #define AC_SIMD_ENCODE_ZR (AC_SIMD_ENCODE_U16 << 1)
162 #define AC_EXTENDED_MULTIPLY AC_SIMD_EXTENDED
163 
164 #define I(x) (((unsigned) (x) & 31) << 27)
165 #define A(x) (((unsigned) (x) & ARC_MASK_REG) << ARC_SHIFT_REGA)
166 #define B(x) (((unsigned) (x) & ARC_MASK_REG) << ARC_SHIFT_REGB)
167 #define C(x) (((unsigned) (x) & ARC_MASK_REG) << ARC_SHIFT_REGC)
168 #define R(x,b,m) (((unsigned) (x) & (m)) << (b)) /* value X, mask M, at bit B */
169 
170  /* These values are used to optimize assembly and disassembly. Each insn is
171  on a list of related insns (same first letter for assembly, same insn code
172  for disassembly). */
173  struct arc_opcode *next_asm; /* Next instruction to try during assembly. */
174  struct arc_opcode *next_dis; /* Next instruction to try during disassembly. */
175 
176  /* Macros to create the hash values for the lists. */
177 #define ARC_HASH_OPCODE(string) \
178  ((string)[0] >= 'a' && (string)[0] <= 'z' ? (string)[0] - 'a' : 26)
179 #define ARC_HASH_ICODE(insn) \
180  ((unsigned int) (insn) >> 27)
181 
182  /* Macros to access `next_asm', `next_dis' so users needn't care about the
183  underlying mechanism. */
184 #define ARC_OPCODE_NEXT_ASM(op) ((op)->next_asm)
185 #define ARC_OPCODE_NEXT_DIS(op) ((op)->next_dis)
186  unsigned long mask2,value2; /* second word for 64 bit instructions*/
187 };
188 
190  char *name; /* eg: "eq" */
191  short value; /* eg: 1 */
192  unsigned char type; /* index into `arc_operands' */
193  unsigned char flags; /* various flag bits */
194 
195 /* Values for `flags'. */
196 
197 /* Return CPU number, given flag bits. */
198 #define ARC_OPVAL_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
199 /* Return MACH number, given flag bits. */
200 #define ARC_OPVAL_MACH(bits) ((bits) & ARC_MACH_MASK)
201 };
202 
205  struct arc_operand_value operand;
206 };
207 
208 /* List of extension condition codes, core registers and auxiliary registers.
209  Calls to gas/config/tc-arc.c:arc_extoper built up this list. */
211 
212 struct arc_operand {
213  /* One of the insn format chars. */
214  unsigned char fmt;
215 
216  /* The number of bits in the operand (may be unused for a modifier). */
217  unsigned char bits;
218 
219  /* How far the operand is left shifted in the instruction, or
220  the modifier's flag bit (may be unused for a modifier. */
221  unsigned char shift;
222 
223  /* Various flag bits. */
224  int flags;
225 
226 /* Values for `flags'. */
227 
228 /* This operand is a suffix to the opcode. */
229 #define ARC_OPERAND_SUFFIX 1
230 
231 /* This operand is a relative branch displacement. The disassembler
232  prints these symbolically if possible. */
233 #define ARC_OPERAND_RELATIVE_BRANCH 2
234 
235 /* This operand is an absolute branch address. The disassembler
236  prints these symbolically if possible. */
237 #define ARC_OPERAND_ABSOLUTE_BRANCH 4
238 
239 /* This operand is an address. The disassembler
240  prints these symbolically if possible. */
241 #define ARC_OPERAND_ADDRESS 8
242 
243 /* This operand is a long immediate value. */
244 #define ARC_OPERAND_LIMM 0x10
245 
246 /* This operand takes signed values. */
247 #define ARC_OPERAND_SIGNED 0x20
248 
249 /* This operand takes signed values, but also accepts a full positive
250  range of values. That is, if bits is 16, it takes any value from
251  -0x8000 to 0xffff. */
252 #define ARC_OPERAND_SIGNOPT 0x40
253 
254 /* This operand should be regarded as a negative number for the
255  purposes of overflow checking (i.e., the normal most negative
256  number is disallowed and one more than the normal most positive
257  number is allowed). This flag will only be set for a signed
258  operand. */
259 #define ARC_OPERAND_NEGATIVE 0x80
260 
261 /* This operand doesn't really exist. The program uses these operands
262  in special ways. */
263 #define ARC_OPERAND_FAKE 0x100
264 
265 /* separate flags operand for j and jl instructions */
266 #define ARC_OPERAND_JUMPFLAGS 0x200
267 
268 /* allow warnings and errors to be issued after call to insert_xxxxxx */
269 
270 #define ARC_OPERAND_WARN 0x400
271 #define ARC_OPERAND_ERROR 0x800
272 
273 /* this is a load operand */
274 #define ARC_OPERAND_LOAD 0x8000
275 
276 /* this is a store operand */
277 #define ARC_OPERAND_STORE 0x10000
278 
279 /* this is an unsigned operand */
280 #define ARC_OPERAND_UNSIGNED 0x20000
281 
282 /* this operand's value must be 2-byte aligned */
283 #define ARC_OPERAND_2BYTE_ALIGNED 0x40000
284 
285 /* this operand's value must be 4-byte aligned */
286 #define ARC_OPERAND_4BYTE_ALIGNED 0x80000
287 
288 /* Modifier values. */
289 /* A dot is required before a suffix. Eg: .le */
290 #define ARC_MOD_DOT 0x1000
291 
292 /* A normal register is allowed (not used, but here for completeness). */
293 #define ARC_MOD_REG 0x2000
294 
295 /* An auxiliary register name is expected. */
296 #define ARC_MOD_AUXREG 0x4000
297 
298  /* This should be a small data symbol, i.e. suffixed with an @sda */
299 #define ARC_MOD_SDASYM 0x100000
300 
301 /* Sum of all ARC_MOD_XXX bits. */
302 #define ARC_MOD_BITS 0x107000
303 
304 /* Non-zero if the operand type is really a modifier. */
305 #define ARC_MOD_P(X) ((X) & ARC_MOD_BITS)
306 
307 /* enforce read/write only register restrictions */
308 
309 #define ARC_REGISTER_READONLY 0x01
310 #define ARC_REGISTER_WRITEONLY 0x02
311 #define ARC_REGISTER_NOSHORT_CUT 0x04
312 
313 /* Registers which are normally used in 16-bit ARCompact insns */
314 #define ARC_REGISTER_16 0x8
315 
316  /*
317  FIXME: The following 5 definitions is a unclean way of passing
318  information to md_assemble. New opcode is a possibility but its
319  already very crowded.
320  */
321  /*The u6 operand needs to be incremented by 1 for some pseudo mnemonics of
322  the BRcc instruction. */
323 #define ARC_INCR_U6 0x100000
324 
325 #define ARC_SIMD_SCALE1 (ARC_INCR_U6 << 0x1)
326 #define ARC_SIMD_SCALE2 (ARC_SIMD_SCALE1 << 0x1)
327 #define ARC_SIMD_SCALE3 (ARC_SIMD_SCALE2 << 0x1)
328 #define ARC_SIMD_SCALE4 (ARC_SIMD_SCALE3 << 0x1)
329 #define ARC_SIMD_LANEMASK (ARC_SIMD_SCALE4 <<0x1)
330 #define ARC_SIMD_REGISTER (ARC_SIMD_LANEMASK <<0x1)
331 #define ARC_SIMD_ZERVA (ARC_SIMD_REGISTER <<0x1)
332 #define ARC_SIMD_ZERVB (ARC_SIMD_ZERVA <<0x1)
333 #define ARC_SIMD_ZERVC (ARC_SIMD_ZERVB <<0x1)
334 #define ARC_SIMD_SETLM (ARC_SIMD_ZERVC <<0x1)
335 
336 /* Registers for the Aurora SIMD ISA*/
337 #define ARC_REGISTER_SIMD_VR 0x10
338 #define ARC_REGISTER_SIMD_I 0x20
339 #define ARC_REGISTER_SIMD_DR 0x40
340 #define ARC_REGISTER_SIMD_K 0x80
341 
342 
343  /* Insertion function. This is used by the assembler. To insert an
344  operand value into an instruction, check this field.
345 
346  If it is NULL, execute
347  i |= (p & ((1 << o->bits) - 1)) << o->shift;
348  (I is the instruction which we are filling in, O is a pointer to
349  this structure, and OP is the opcode value; this assumes twos
350  complement arithmetic).
351 
352  If this field is not NULL, then simply call it with the
353  instruction and the operand value. It will return the new value
354  of the instruction. If the ERRMSG argument is not NULL, then if
355  the operand value is illegal, *ERRMSG will be set to a warning
356  string (the operand will be inserted in any case). If the
357  operand value is legal, *ERRMSG will be unchanged.
358 
359  REG is non-NULL when inserting a register value.
360  extend is only meaningful for extended length instructions
361  and the special fields that use them.
362  */
363 
364  arc_insn (*insert) (arc_insn insn, long *extend, const struct arc_operand *operand,
365  int mods, const struct arc_operand_value *reg,
366  long value, const char **errmsg);
367 
368  /* Extraction function. This is used by the disassembler. To
369  extract this operand type from an instruction, check this field.
370 
371  If it is NULL, compute
372  op = ((i) >> o->shift) & ((1 << o->bits) - 1);
373  if ((o->flags & ARC_OPERAND_SIGNED) != 0
374  && (op & (1 << (o->bits - 1))) != 0)
375  op -= 1 << o->bits;
376  (I is the instruction, O is a pointer to this structure, and OP
377  is the result; this assumes twos complement arithmetic).
378 
379  If this field is not NULL, then simply call it with the
380  instruction value. It will return the value of the operand. If
381  the INVALID argument is not NULL, *INVALID will be set to
382  non-zero if this operand type can not actually be extracted from
383  this operand (i.e., the instruction does not match). If the
384  operand is valid, *INVALID will not be changed.
385 
386  INSN is a pointer to an array of two `arc_insn's. The first element is
387  the insn, the second is the limm if present.
388 
389  Operands that have a printable form like registers and suffixes have
390  their struct arc_operand_value pointer stored in OPVAL. */
391 
392  long (*extract) (arc_insn *insn,
393  const struct arc_operand *operand, int mods,
394  const struct arc_operand_value **opval, int *invalid);
395 };
396 
397 /* Bits that say what version of cpu we have.
398  These should be passed to arc_init_opcode_tables.
399  At present, all there is is the cpu type. */
400 
401 /* CPU number, given value passed to `arc_init_opcode_tables'. */
402 #define ARC_HAVE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK)
403 /* MACH number, given value passed to `arc_init_opcode_tables'. */
404 #define ARC_HAVE_MACH(bits) ((bits) & ARC_MACH_MASK)
405 
406 /* Special register values: */
407 #define ARC_REG_SHIMM_UPDATE 61
408 #define ARC_REG_SHIMM 63
409 #define ARC_REG_LIMM 62
410 
411 /* Non-zero if REG is a constant marker. */
412 #define ARC_REG_CONSTANT_P(REG) ((REG) >= 61)
413 
414 /* Positions and masks of various fields: */
415 #define ARC_SHIFT_REGA 21
416 #define ARC_SHIFT_REGB 15
417 #define ARC_SHIFT_REGC 9
418 #define ARC_SHIFT_REGA_AC 0
419 #define ARC_SHIFT_REGB_LOW_AC 24
420 #define ARC_SHIFT_REGB_HIGH_AC 12
421 #define ARC_SHIFT_REGC_AC 6
422 #define ARC_MASK_REG 63
423 
424 /* Delay slot types. */
425 #define ARC_DELAY_NONE 0 /* no delay slot */
426 #define ARC_DELAY_NORMAL 1 /* delay slot in both cases */
427 #define ARC_DELAY_JUMP 2 /* delay slot only if branch taken */
428 
429 /* Non-zero if X will fit in a signed 9 bit field. */
430 #define ARC_SHIMM_CONST_P(x) ((long) (x) >= -256 && (long) (x) <= 255)
431 
432 extern const struct arc_operand *arc_operands;
433 extern int arc_operand_count;
434 
435 extern const struct arc_operand_value *arc_suffixes;
436 extern int arc_suffixes_count;
437 
438 extern const struct arc_operand_value *arc_reg_names;
439 extern int arc_reg_names_count;
440 
441 extern unsigned char *arc_operand_map;
442 
443 /* Nonzero if we've seen a 'q' suffix (condition code).
444  * 'Q' FORCELIMM set `arc_cond_p' to 1 to ensure a constant is a limm */
445 extern int arc_cond_p;
446 
447 extern int arc_mach_a4;
448 extern unsigned long arc_ld_ext_mask;
449 extern int arc_user_mode_only;
450 
451 /* Utility fns in arc-opc.c. */
452 int arc_get_opcode_mach (int, int);
453 /* `arc_opcode_init_tables' must be called before `arc_xxx_supported'. */
454 void arc_opcode_init_tables (int);
455 void arc_opcode_init_insert (void);
456 void arc_opcode_init_extract (void);
457 const struct arc_opcode *arc_opcode_lookup_asm (const char *);
458 const struct arc_opcode *arc_opcode_lookup_dis (unsigned int);
459 int arc_opcode_limm_p (long *);
460 const struct arc_operand_value *arc_opcode_lookup_suffix (const struct arc_operand *type, int value);
461 int arc_opcode_supported (const struct arc_opcode *);
464 
465 extern char *arc_aux_reg_name (int);
466 extern struct arc_operand_value *get_ext_suffix (char *,char);
467 
468 extern int ac_branch_or_jump_insn (arc_insn, int);
469 extern int ac_lpcc_insn (arc_insn);
470 extern int ac_constant_operand (const struct arc_operand *);
471 extern int ac_register_operand (const struct arc_operand *);
472 extern int ac_symbol_operand (const struct arc_operand *);
473 extern int ARC700_register_simd_operand (char);
474 extern int arc_operand_type (int);
475 extern int ac_add_reg_sdasym_insn (arc_insn);
476 extern int ac_get_load_sdasym_insn_type (arc_insn, int);
478 extern int arc_limm_fixup_adjust (arc_insn);
479 extern int arc_test_wb (void);
operand
Definition: arc-opc.c:39
char * arc_aux_reg_name(int)
Definition: arc-opc.c:4965
int ac_get_store_sdasym_insn_type(arc_insn, int)
int ARC700_register_simd_operand(char)
Definition: arc-opc.c:4776
int ac_add_reg_sdasym_insn(arc_insn)
Definition: arc-opc.c:4595
const struct arc_opcode * arc_opcode_lookup_dis(unsigned int)
Definition: arc-opc.c:4441
int ac_constant_operand(const struct arc_operand *)
Definition: arc-opc.c:4737
int ac_get_load_sdasym_insn_type(arc_insn, int)
Definition: arc-opc.c:4625
int arc_opcode_limm_p(long *)
Definition: arc-opc.c:4481
int arc_reg_names_count
Definition: arc-opc.c:4101
int arc_operand_count
int arc_opval_supported(const struct arc_operand_value *)
void arc_opcode_init_tables(int)
Definition: arc-opc.c:4304
int arc_mach_a4
Definition: arc-opc.c:866
void arc_opcode_init_insert(void)
Definition: arc-opc.c:4457
const struct arc_operand_value * arc_reg_names
Definition: arc-opc.c:4100
int arc_suffixes_count
Definition: arc-opc.c:4265
const struct arc_operand * arc_operands
Definition: arc-opc.c:893
struct arc_ext_operand_value * arc_ext_operands
Definition: arc-opc.c:880
int ac_branch_or_jump_insn(arc_insn, int)
Definition: arc-opc.c:4569
int arc_get_opcode_mach(int, int)
Definition: arc-opc.c:4282
void arc_opcode_init_extract(void)
Definition: arc-opc.c:2131
int arc_operand_type(int)
Definition: arc-opc.c:4856
const struct arc_operand_value * arc_opcode_lookup_suffix(const struct arc_operand *type, int value)
Definition: arc-opc.c:4494
int arc_user_mode_only
Definition: arc-opc.c:878
unsigned int arc_insn
Definition: arc.h:62
int arc_opcode_supported(const struct arc_opcode *)
Definition: arc-opc.c:4400
const struct arc_opcode * arc_opcode_lookup_asm(const char *)
Definition: arc-opc.c:4432
int ac_lpcc_insn(arc_insn)
Definition: arc-opc.c:4586
int ac_register_operand(const struct arc_operand *)
Definition: arc-opc.c:4803
const struct arc_operand_value * arc_suffixes
Definition: arc-opc.c:4264
unsigned long arc_ld_ext_mask
Definition: arc-opc.c:876
unsigned char * arc_operand_map
Definition: arc-opc.c:889
int arc_insn_not_jl(arc_insn)
Definition: arc-opc.c:4539
int arc_test_wb(void)
Definition: arc-opc.c:4448
struct arc_operand_value * get_ext_suffix(char *, char)
Definition: arc-opc.c:4873
int arc_limm_fixup_adjust(arc_insn)
Definition: arc-opc.c:1658
int ac_symbol_operand(const struct arc_operand *)
Definition: arc-opc.c:4833
int arc_cond_p
Definition: arc-opc.c:858
static RzILOpBitVector * extend(ut32 dst_bits, arm64_extender ext, RZ_OWN RzILOpBitVector *v, ut32 v_bits)
Definition: arm_il64.c:270
static int value
Definition: cmd_api.c:93
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags long
Definition: sflib.h:79
#define reg(n)
int type
Definition: mipsasm.c:17
struct arc_ext_operand_value * next
Definition: arc.h:204
Definition: arc.h:64
unsigned long mask2
Definition: arc.h:186
char * syntax
Definition: arc.h:65
unsigned long mask
Definition: arc.h:66
struct arc_opcode * next_asm
Definition: arc.h:173
unsigned long value
Definition: arc.h:66
int flags
Definition: arc.h:67
struct arc_opcode * next_dis
Definition: arc.h:174
unsigned long value2
Definition: arc.h:186
char * name
Definition: arc.h:190
short value
Definition: arc.h:191
unsigned char type
Definition: arc.h:192
unsigned char flags
Definition: arc.h:193
int flags
Definition: arc.h:224
unsigned char bits
Definition: arc.h:217
unsigned char fmt
Definition: arc.h:214
long(* extract)(arc_insn *insn, const struct arc_operand *operand, int mods, const struct arc_operand_value **opval, int *invalid)
Definition: arc.h:392
arc_insn(* insert)(arc_insn insn, long *extend, const struct arc_operand *operand, int mods, const struct arc_operand_value *reg, long value, const char **errmsg)
Definition: arc.h:364
unsigned char shift
Definition: arc.h:221