ppc.h 15.4 KB
Newer Older
Richard Henderson's avatar
Richard Henderson committed
1
/* ppc.h -- Header file for PowerPC opcode table
Alan Modra's avatar
Alan Modra committed
2
   Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
Alan Modra's avatar
Alan Modra committed
3
   2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
Richard Henderson's avatar
Richard Henderson committed
4 5
   Written by Ian Lance Taylor, Cygnus Support

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   This file is part of GDB, GAS, and the GNU binutils.

   GDB, GAS, and the GNU binutils are free software; you can redistribute
   them and/or modify them under the terms of the GNU General Public
   License as published by the Free Software Foundation; either version 3,
   or (at your option) any later version.

   GDB, GAS, and the GNU binutils are distributed in the hope that they
   will be useful, but WITHOUT ANY WARRANTY; without even the implied
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
   the GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this file; see the file COPYING3.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */
Richard Henderson's avatar
Richard Henderson committed
22 23 24 25

#ifndef PPC_H
#define PPC_H

26 27 28
#include "bfd_stdint.h"

typedef uint64_t ppc_cpu_t;
Peter Bergner's avatar
Peter Bergner committed
29

Richard Henderson's avatar
Richard Henderson committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
/* The opcode table is an array of struct powerpc_opcode.  */

struct powerpc_opcode
{
  /* The opcode name.  */
  const char *name;

  /* The opcode itself.  Those bits which will be filled in with
     operands are zeroes.  */
  unsigned long opcode;

  /* The opcode mask.  This is used by the disassembler.  This is a
     mask containing ones indicating those bits which must match the
     opcode field, and zeroes indicating those bits which need not
     match (and are presumably filled in by operands).  */
  unsigned long mask;

  /* One bit flags for the opcode.  These are used to indicate which
     specific processors support the instructions.  The defined values
     are listed below.  */
Peter Bergner's avatar
Peter Bergner committed
50
  ppc_cpu_t flags;
Richard Henderson's avatar
Richard Henderson committed
51

Peter Bergner's avatar
gas/  
Peter Bergner committed
52 53 54 55 56
  /* One bit flags for the opcode.  These are used to indicate which
     specific processors no longer support the instructions.  The defined
     values are listed below.  */
  ppc_cpu_t deprecated;

Richard Henderson's avatar
Richard Henderson committed
57 58 59 60 61 62 63 64 65 66 67
  /* An array of operand codes.  Each code is an index into the
     operand table.  They appear in the order which the operands must
     appear in assembly code, and are terminated by a zero.  */
  unsigned char operands[8];
};

/* The table itself is sorted by major opcode number, and is otherwise
   in the order in which the disassembler should consider
   instructions.  */
extern const struct powerpc_opcode powerpc_opcodes[];
extern const int powerpc_num_opcodes;
James Lemke's avatar
 
James Lemke committed
68 69
extern const struct powerpc_opcode vle_opcodes[];
extern const int vle_num_opcodes;
Richard Henderson's avatar
Richard Henderson committed
70 71 72 73

/* Values defined for the flags field of a struct powerpc_opcode.  */

/* Opcode is defined for the PowerPC architecture.  */
74
#define PPC_OPCODE_PPC			 1
Richard Henderson's avatar
Richard Henderson committed
75 76

/* Opcode is defined for the POWER (RS/6000) architecture.  */
77
#define PPC_OPCODE_POWER		 2
Richard Henderson's avatar
Richard Henderson committed
78 79

/* Opcode is defined for the POWER2 (Rios 2) architecture.  */
80
#define PPC_OPCODE_POWER2		 4
Richard Henderson's avatar
Richard Henderson committed
81 82 83 84

/* Opcode is supported by the Motorola PowerPC 601 processor.  The 601
   is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
   but it also supports many additional POWER instructions.  */
Alan Modra's avatar
Alan Modra committed
85
#define PPC_OPCODE_601			 8
Richard Henderson's avatar
Richard Henderson committed
86 87

/* Opcode is supported in both the Power and PowerPC architectures
88 89 90 91
   (ie, compiler's -mcpu=common or assembler's -mcom).  More than just
   the intersection of PPC_OPCODE_PPC with the union of PPC_OPCODE_POWER
   and PPC_OPCODE_POWER2 because many instructions changed mnemonics
   between POWER and POWERPC.  */
Alan Modra's avatar
Alan Modra committed
92
#define PPC_OPCODE_COMMON	      0x10
Richard Henderson's avatar
Richard Henderson committed
93 94 95

/* Opcode is supported for any Power or PowerPC platform (this is
   for the assembler's -many option, and it eliminates duplicates).  */
Alan Modra's avatar
Alan Modra committed
96 97 98 99
#define PPC_OPCODE_ANY		      0x20

/* Opcode is only defined on 64 bit architectures.  */
#define PPC_OPCODE_64		      0x40
Richard Henderson's avatar
Richard Henderson committed
100

101
/* Opcode is supported as part of the 64-bit bridge.  */
Alan Modra's avatar
Alan Modra committed
102
#define PPC_OPCODE_64_BRIDGE	      0x80
103

104
/* Opcode is supported by Altivec Vector Unit */
Alan Modra's avatar
Alan Modra committed
105
#define PPC_OPCODE_ALTIVEC	     0x100
Matthew Green's avatar
Matthew Green committed
106 107

/* Opcode is supported by PowerPC 403 processor.  */
Alan Modra's avatar
Alan Modra committed
108
#define PPC_OPCODE_403		     0x200
Matthew Green's avatar
Matthew Green committed
109

Matthew Green's avatar
Matthew Green committed
110
/* Opcode is supported by PowerPC BookE processor.  */
Alan Modra's avatar
Alan Modra committed
111
#define PPC_OPCODE_BOOKE	     0x400
112 113

/* Opcode is supported by PowerPC 440 processor.  */
Alan Modra's avatar
Alan Modra committed
114
#define PPC_OPCODE_440		     0x800
115

116
/* Opcode is only supported by Power4 architecture.  */
Alan Modra's avatar
Alan Modra committed
117
#define PPC_OPCODE_POWER4	    0x1000
118

Peter Bergner's avatar
gas/  
Peter Bergner committed
119
/* Opcode is only supported by Power7 architecture.  */
Alan Modra's avatar
Alan Modra committed
120
#define PPC_OPCODE_POWER7	    0x2000
121 122

/* Opcode is only supported by e500x2 Core.  */
Alan Modra's avatar
Alan Modra committed
123
#define PPC_OPCODE_SPE		    0x4000
124 125

/* Opcode is supported by e500x2 Integer select APU.  */
Alan Modra's avatar
Alan Modra committed
126
#define PPC_OPCODE_ISEL		    0x8000
127 128

/* Opcode is an e500 SPE floating point instruction.  */
Alan Modra's avatar
Alan Modra committed
129
#define PPC_OPCODE_EFS		   0x10000
130 131

/* Opcode is supported by branch locking APU.  */
Alan Modra's avatar
Alan Modra committed
132
#define PPC_OPCODE_BRLOCK	   0x20000
133 134

/* Opcode is supported by performance monitor APU.  */
Alan Modra's avatar
Alan Modra committed
135
#define PPC_OPCODE_PMR		   0x40000
136 137

/* Opcode is supported by cache locking APU.  */
Alan Modra's avatar
Alan Modra committed
138
#define PPC_OPCODE_CACHELCK	   0x80000
139 140

/* Opcode is supported by machine check APU.  */
Alan Modra's avatar
Alan Modra committed
141
#define PPC_OPCODE_RFMCI	  0x100000
142

143
/* Opcode is only supported by Power5 architecture.  */
Alan Modra's avatar
Alan Modra committed
144
#define PPC_OPCODE_POWER5	  0x200000
145

Daniel Jacobowitz's avatar
gas/  
Daniel Jacobowitz committed
146
/* Opcode is supported by PowerPC e300 family.  */
Alan Modra's avatar
Alan Modra committed
147
#define PPC_OPCODE_E300           0x400000
Alan Modra's avatar
Alan Modra committed
148 149

/* Opcode is only supported by Power6 architecture.  */
Alan Modra's avatar
Alan Modra committed
150
#define PPC_OPCODE_POWER6	  0x800000
Alan Modra's avatar
Alan Modra committed
151

Alan Modra's avatar
Alan Modra committed
152
/* Opcode is only supported by PowerPC Cell family.  */
Alan Modra's avatar
Alan Modra committed
153
#define PPC_OPCODE_CELL		 0x1000000
Daniel Jacobowitz's avatar
gas/  
Daniel Jacobowitz committed
154

Ben Elliston's avatar
Ben Elliston committed
155
/* Opcode is supported by CPUs with paired singles support.  */
Alan Modra's avatar
Alan Modra committed
156
#define PPC_OPCODE_PPCPS	 0x2000000
Ben Elliston's avatar
Ben Elliston committed
157

Alan Modra's avatar
Alan Modra committed
158
/* Opcode is supported by Power E500MC */
Alan Modra's avatar
Alan Modra committed
159
#define PPC_OPCODE_E500MC        0x4000000
Alan Modra's avatar
Alan Modra committed
160

Alan Modra's avatar
Alan Modra committed
161
/* Opcode is supported by PowerPC 405 processor.  */
Alan Modra's avatar
Alan Modra committed
162
#define PPC_OPCODE_405		 0x8000000
Alan Modra's avatar
Alan Modra committed
163

Peter Bergner's avatar
gas/  
Peter Bergner committed
164
/* Opcode is supported by Vector-Scalar (VSX) Unit */
Alan Modra's avatar
Alan Modra committed
165
#define PPC_OPCODE_VSX		0x10000000
Peter Bergner's avatar
gas/  
Peter Bergner committed
166

Ben Elliston's avatar
gas/  
Ben Elliston committed
167
/* Opcode is supported by A2.  */
Alan Modra's avatar
Alan Modra committed
168
#define PPC_OPCODE_A2	 	0x20000000
Ben Elliston's avatar
gas/  
Ben Elliston committed
169

Peter Bergner's avatar
gas/  
Peter Bergner committed
170
/* Opcode is supported by PowerPC 476 processor.  */
Alan Modra's avatar
Alan Modra committed
171
#define PPC_OPCODE_476		0x40000000
Peter Bergner's avatar
gas/  
Peter Bergner committed
172

Alan Modra's avatar
Alan Modra committed
173
/* Opcode is supported by AppliedMicro Titan core */
Alan Modra's avatar
Alan Modra committed
174
#define PPC_OPCODE_TITAN        0x80000000
Alan Modra's avatar
Alan Modra committed
175

Alan Modra's avatar
gas/  
Alan Modra committed
176
/* Opcode which is supported by the e500 family */
Alan Modra's avatar
Alan Modra committed
177
#define PPC_OPCODE_E500	       0x100000000ull
Alan Modra's avatar
gas/  
Alan Modra committed
178

Alan Modra's avatar
Alan Modra committed
179 180 181 182 183 184 185 186 187
/* Opcode is supported by Extended Altivec Vector Unit */
#define PPC_OPCODE_ALTIVEC2    0x200000000ull

/* Opcode is supported by Power E6500 */
#define PPC_OPCODE_E6500       0x400000000ull

/* Opcode is supported by Thread management APU */
#define PPC_OPCODE_TMR         0x800000000ull

James Lemke's avatar
 
James Lemke committed
188 189 190
/* Opcode which is supported by the VLE extension.  */
#define PPC_OPCODE_VLE	      0x1000000000ull

Peter Bergner's avatar
Peter Bergner committed
191 192 193
/* Opcode is only supported by Power8 architecture.  */
#define PPC_OPCODE_POWER8     0x2000000000ull

Doug Gilbert's avatar
Doug Gilbert committed
194 195 196
/* Opcode is only supported by PPE architecture.  */
#define PPC_OPCODE_PPE        0x8000000000ull

Peter Bergner's avatar
Peter Bergner committed
197 198 199 200 201
/* Opcode which is supported by the Hardware Transactional Memory extension.  */
/* Currently, this is the same as the POWER8 mask.  If another cpu comes out
   that isn't a superset of POWER8, we can define this to its own mask.  */
#define PPC_OPCODE_HTM        PPC_OPCODE_POWER8

Richard Henderson's avatar
Richard Henderson committed
202 203
/* A macro to extract the major opcode from an instruction.  */
#define PPC_OP(i) (((i) >> 26) & 0x3f)
James Lemke's avatar
 
James Lemke committed
204 205 206 207 208 209 210 211 212

/* A macro to determine if the instruction is a 2-byte VLE insn.  */
#define PPC_OP_SE_VLE(m) ((m) <= 0xffff)

/* A macro to extract the major opcode from a VLE instruction.  */
#define VLE_OP(i,m) (((i) >> ((m) <= 0xffff ? 10 : 26)) & 0x3f)

/* A macro to convert a VLE opcode to a VLE opcode segment.  */
#define VLE_OP_TO_SEG(i) ((i) >> 1)
Richard Henderson's avatar
Richard Henderson committed
213 214 215 216 217

/* The operands table is an array of struct powerpc_operand.  */

struct powerpc_operand
{
Alan Modra's avatar
Alan Modra committed
218 219
  /* A bitmask of bits in the operand.  */
  unsigned int bitm;
Richard Henderson's avatar
Richard Henderson committed
220

James Lemke's avatar
 
James Lemke committed
221 222 223 224 225 226
  /* The shift operation to be applied to the operand.  No shift
     is made if this is zero.  For positive values, the operand
     is shifted left by SHIFT.  For negative values, the operand
     is shifted right by -SHIFT.  Use PPC_OPSHIFT_INV to indicate
     that BITM and SHIFT cannot be used to determine where the
     operand goes in the insn.  */
Richard Henderson's avatar
Richard Henderson committed
227 228 229 230 231 232
  int shift;

  /* Insertion function.  This is used by the assembler.  To insert an
     operand value into an instruction, check this field.

     If it is NULL, execute
James Lemke's avatar
 
James Lemke committed
233 234 235 236
	 if (o->shift >= 0)
	   i |= (op & o->bitm) << o->shift;
	 else
	   i |= (op & o->bitm) >> -o->shift;
Richard Henderson's avatar
Richard Henderson committed
237
     (i is the instruction which we are filling in, o is a pointer to
Alan Modra's avatar
Alan Modra committed
238
     this structure, and op is the operand value).
Richard Henderson's avatar
Richard Henderson committed
239 240 241 242 243 244 245 246

     If this field is not NULL, then simply call it with the
     instruction and the operand value.  It will return the new value
     of the instruction.  If the ERRMSG argument is not NULL, then if
     the operand value is illegal, *ERRMSG will be set to a warning
     string (the operand will be inserted in any case).  If the
     operand value is legal, *ERRMSG will be unchanged (most operands
     can accept any value).  */
Alan Modra's avatar
Alan Modra committed
247
  unsigned long (*insert)
Peter Bergner's avatar
Peter Bergner committed
248
    (unsigned long instruction, long op, ppc_cpu_t dialect, const char **errmsg);
Richard Henderson's avatar
Richard Henderson committed
249 250 251 252 253

  /* Extraction function.  This is used by the disassembler.  To
     extract this operand type from an instruction, check this field.

     If it is NULL, compute
James Lemke's avatar
 
James Lemke committed
254 255 256 257
	 if (o->shift >= 0)
	   op = (i >> o->shift) & o->bitm;
	 else
	   op = (i << -o->shift) & o->bitm;
Alan Modra's avatar
Alan Modra committed
258 259
	 if ((o->flags & PPC_OPERAND_SIGNED) != 0)
	   sign_extend (op);
Richard Henderson's avatar
Richard Henderson committed
260
     (i is the instruction, o is a pointer to this structure, and op
Alan Modra's avatar
Alan Modra committed
261
     is the result).
Richard Henderson's avatar
Richard Henderson committed
262 263 264 265 266 267 268

     If this field is not NULL, then simply call it with the
     instruction value.  It will return the value of the operand.  If
     the INVALID argument is not NULL, *INVALID will be set to
     non-zero if this operand type can not actually be extracted from
     this operand (i.e., the instruction does not match).  If the
     operand is valid, *INVALID will not be changed.  */
Peter Bergner's avatar
Peter Bergner committed
269
  long (*extract) (unsigned long instruction, ppc_cpu_t dialect, int *invalid);
Richard Henderson's avatar
Richard Henderson committed
270 271 272 273 274 275 276 277 278

  /* One bit syntax flags.  */
  unsigned long flags;
};

/* Elements in the table are retrieved by indexing with values from
   the operands field of the powerpc_opcodes table.  */

extern const struct powerpc_operand powerpc_operands[];
Alan Modra's avatar
Alan Modra committed
279
extern const unsigned int num_powerpc_operands;
Richard Henderson's avatar
Richard Henderson committed
280

James Lemke's avatar
 
James Lemke committed
281 282 283
/* Use with the shift field of a struct powerpc_operand to indicate
     that BITM and SHIFT cannot be used to determine where the operand
     goes in the insn.  */
284
#define PPC_OPSHIFT_INV (-1U << 31)
James Lemke's avatar
 
James Lemke committed
285

Richard Henderson's avatar
Richard Henderson committed
286 287 288
/* Values defined for the flags field of a struct powerpc_operand.  */

/* This operand takes signed values.  */
Alan Modra's avatar
Alan Modra committed
289
#define PPC_OPERAND_SIGNED (0x1)
Richard Henderson's avatar
Richard Henderson committed
290 291 292 293 294

/* This operand takes signed values, but also accepts a full positive
   range of values when running in 32 bit mode.  That is, if bits is
   16, it takes any value from -0x8000 to 0xffff.  In 64 bit mode,
   this flag is ignored.  */
Alan Modra's avatar
Alan Modra committed
295
#define PPC_OPERAND_SIGNOPT (0x2)
Richard Henderson's avatar
Richard Henderson committed
296 297 298 299 300 301 302

/* This operand does not actually exist in the assembler input.  This
   is used to support extended mnemonics such as mr, for which two
   operands fields are identical.  The assembler should call the
   insert function with any op value.  The disassembler should call
   the extract function, ignore the return value, and check the value
   placed in the valid argument.  */
Alan Modra's avatar
Alan Modra committed
303
#define PPC_OPERAND_FAKE (0x4)
Richard Henderson's avatar
Richard Henderson committed
304 305 306 307 308 309

/* The next operand should be wrapped in parentheses rather than
   separated from this one by a comma.  This is used for the load and
   store instructions which want their operands to look like
       reg,displacement(reg)
   */
Alan Modra's avatar
Alan Modra committed
310
#define PPC_OPERAND_PARENS (0x8)
Richard Henderson's avatar
Richard Henderson committed
311 312 313 314 315 316 317 318

/* This operand may use the symbolic names for the CR fields, which
   are
       lt  0	gt  1	eq  2	so  3	un  3
       cr0 0	cr1 1	cr2 2	cr3 3
       cr4 4	cr5 5	cr6 6	cr7 7
   These may be combined arithmetically, as in cr2*4+gt.  These are
   only supported on the PowerPC, not the POWER.  */
James Lemke's avatar
 
James Lemke committed
319
#define PPC_OPERAND_CR_BIT (0x10)
Richard Henderson's avatar
Richard Henderson committed
320 321 322

/* This operand names a register.  The disassembler uses this to print
   register names with a leading 'r'.  */
Alan Modra's avatar
Alan Modra committed
323
#define PPC_OPERAND_GPR (0x20)
Richard Henderson's avatar
Richard Henderson committed
324

Alan Modra's avatar
Alan Modra committed
325
/* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0.  */
Alan Modra's avatar
Alan Modra committed
326
#define PPC_OPERAND_GPR_0 (0x40)
Alan Modra's avatar
Alan Modra committed
327

Richard Henderson's avatar
Richard Henderson committed
328 329
/* This operand names a floating point register.  The disassembler
   prints these with a leading 'f'.  */
Alan Modra's avatar
Alan Modra committed
330
#define PPC_OPERAND_FPR (0x80)
Richard Henderson's avatar
Richard Henderson committed
331 332 333

/* This operand is a relative branch displacement.  The disassembler
   prints these symbolically if possible.  */
Alan Modra's avatar
Alan Modra committed
334
#define PPC_OPERAND_RELATIVE (0x100)
Richard Henderson's avatar
Richard Henderson committed
335 336 337

/* This operand is an absolute branch address.  The disassembler
   prints these symbolically if possible.  */
Alan Modra's avatar
Alan Modra committed
338
#define PPC_OPERAND_ABSOLUTE (0x200)
Richard Henderson's avatar
Richard Henderson committed
339 340

/* This operand is optional, and is zero if omitted.  This is used for
Alan Modra's avatar
Alan Modra committed
341
   example, in the optional BF field in the comparison instructions.  The
Richard Henderson's avatar
Richard Henderson committed
342 343 344 345
   assembler must count the number of operands remaining on the line,
   and the number of operands remaining for the opcode, and decide
   whether this operand is present or not.  The disassembler should
   print this operand out only if it is not zero.  */
Alan Modra's avatar
Alan Modra committed
346
#define PPC_OPERAND_OPTIONAL (0x400)
Richard Henderson's avatar
Richard Henderson committed
347 348 349 350 351 352 353

/* This flag is only used with PPC_OPERAND_OPTIONAL.  If this operand
   is omitted, then for the next operand use this operand value plus
   1, ignoring the next operand field for the opcode.  This wretched
   hack is needed because the Power rotate instructions can take
   either 4 or 5 operands.  The disassembler should print this operand
   out regardless of the PPC_OPERAND_OPTIONAL field.  */
Alan Modra's avatar
Alan Modra committed
354
#define PPC_OPERAND_NEXT (0x800)
Richard Henderson's avatar
Richard Henderson committed
355 356 357 358 359 360

/* This operand should be regarded as a negative number for the
   purposes of overflow checking (i.e., the normal most negative
   number is disallowed and one more than the normal most positive
   number is allowed).  This flag will only be set for a signed
   operand.  */
Alan Modra's avatar
Alan Modra committed
361
#define PPC_OPERAND_NEGATIVE (0x1000)
362 363 364

/* This operand names a vector unit register.  The disassembler
   prints these with a leading 'v'.  */
Alan Modra's avatar
Alan Modra committed
365
#define PPC_OPERAND_VR (0x2000)
366

367
/* This operand is for the DS field in a DS form instruction.  */
Alan Modra's avatar
Alan Modra committed
368
#define PPC_OPERAND_DS (0x4000)
369 370

/* This operand is for the DQ field in a DQ form instruction.  */
Alan Modra's avatar
Alan Modra committed
371 372
#define PPC_OPERAND_DQ (0x8000)

Alan Modra's avatar
gas/  
Alan Modra committed
373
/* Valid range of operand is 0..n rather than 0..n-1.  */
Alan Modra's avatar
Alan Modra committed
374
#define PPC_OPERAND_PLUS1 (0x10000)
Alan Modra's avatar
Alan Modra committed
375 376 377 378 379

/* Xilinx APU and FSL related operands */
#define PPC_OPERAND_FSL (0x20000)
#define PPC_OPERAND_FCR (0x40000)
#define PPC_OPERAND_UDI (0x80000)
Peter Bergner's avatar
gas/  
Peter Bergner committed
380 381 382 383

/* This operand names a vector-scalar unit register.  The disassembler
   prints these with a leading 'vs'.  */
#define PPC_OPERAND_VSR (0x100000)
James Lemke's avatar
 
James Lemke committed
384 385 386

/* This is a CR FIELD that does not use symbolic names.  */
#define PPC_OPERAND_CR_REG (0x200000)
Richard Henderson's avatar
Richard Henderson committed
387 388 389 390 391

/* The POWER and PowerPC assemblers use a few macros.  We keep them
   with the operands table for simplicity.  The macro table is an
   array of struct powerpc_macro.  */

Doug Gilbert's avatar
Doug Gilbert committed
392 393 394 395 396 397
/* This operand names a general purpose double register.  PPE42 specific.
 * The disassembler uses this to print
   register names with a leading 'd'.  */
#define PPC_OPERAND_GPVDR (0x400000)


Richard Henderson's avatar
Richard Henderson committed
398 399 400 401 402 403 404 405 406 407 408
struct powerpc_macro
{
  /* The macro name.  */
  const char *name;

  /* The number of operands the macro takes.  */
  unsigned int operands;

  /* One bit flags for the opcode.  These are used to indicate which
     specific processors support the instructions.  The values are the
     same as those for the struct powerpc_opcode flags field.  */
Peter Bergner's avatar
Peter Bergner committed
409
  ppc_cpu_t flags;
Richard Henderson's avatar
Richard Henderson committed
410 411 412 413 414 415 416 417 418 419

  /* A format string to turn the macro into a normal instruction.
     Each %N in the string is replaced with operand number N (zero
     based).  */
  const char *format;
};

extern const struct powerpc_macro powerpc_macros[];
extern const int powerpc_num_macros;

Alan Modra's avatar
Alan Modra committed
420
extern ppc_cpu_t ppc_parse_cpu (ppc_cpu_t, ppc_cpu_t *, const char *);
Doug Gilbert's avatar
Doug Gilbert committed
421 422 423
extern int string_print_insn_powerpc (unsigned long insn,
                           uint64_t dialect, char * assemblyString);
extern void disassemble_init_powerpc_standalone (void);
Alan Modra's avatar
Alan Modra committed
424

Richard Henderson's avatar
Richard Henderson committed
425
#endif /* PPC_H */