1*012771d8Swdenk /* $Id$ */ 2*012771d8Swdenk 3*012771d8Swdenk #ifndef _PPC_H 4*012771d8Swdenk #define _PPC_H 5*012771d8Swdenk 6*012771d8Swdenk /*====================================================================== 7*012771d8Swdenk * 8*012771d8Swdenk * OPERANDS 9*012771d8Swdenk * 10*012771d8Swdenk *======================================================================*/ 11*012771d8Swdenk 12*012771d8Swdenk enum OP_FIELD { 13*012771d8Swdenk O_AA = 1, O_BD, O_BI, O_BO, O_crbD, O_crbA, O_crbB, O_CRM, O_d, O_frC, O_frD, 14*012771d8Swdenk O_frS, O_IMM, O_LI, O_LK, O_MB, O_ME, O_NB, O_OE, O_rA, O_rB, O_Rc, O_rD, 15*012771d8Swdenk O_rS, O_SH, O_SIMM, O_SR, O_TO, O_UIMM, O_crfD, O_crfS, O_L, O_spr, O_tbr, 16*012771d8Swdenk O_cr2 }; 17*012771d8Swdenk 18*012771d8Swdenk struct operand { 19*012771d8Swdenk enum OP_FIELD field; /* The operand identifier from the 20*012771d8Swdenk enum above */ 21*012771d8Swdenk 22*012771d8Swdenk char * name; /* Symbolic name of this operand */ 23*012771d8Swdenk 24*012771d8Swdenk unsigned int bits; /* The number of bits used by this 25*012771d8Swdenk operand */ 26*012771d8Swdenk 27*012771d8Swdenk unsigned int shift; /* How far to the right the operand 28*012771d8Swdenk should be shifted so that it is 29*012771d8Swdenk aligned at the beginning of the 30*012771d8Swdenk word */ 31*012771d8Swdenk 32*012771d8Swdenk unsigned int hint; /* A bitwise-inclusive-OR of the 33*012771d8Swdenk values shown below. These are used 34*012771d8Swdenk tell the disassembler how to print 35*012771d8Swdenk this operand */ 36*012771d8Swdenk }; 37*012771d8Swdenk 38*012771d8Swdenk /* Values for operand hint */ 39*012771d8Swdenk #define OH_SILENT 0x01 /* dont print this operand */ 40*012771d8Swdenk #define OH_ADDR 0x02 /* this operand is an address */ 41*012771d8Swdenk #define OH_REG 0x04 /* this operand is a register */ 42*012771d8Swdenk #define OH_SPR 0x08 /* this operand is an SPR */ 43*012771d8Swdenk #define OH_TBR 0x10 /* this operand is a TBR */ 44*012771d8Swdenk #define OH_OFFSET 0x20 /* this operand is an offset */ 45*012771d8Swdenk #define OH_LITERAL 0x40 /* a literal string */ 46*012771d8Swdenk 47*012771d8Swdenk 48*012771d8Swdenk /*====================================================================== 49*012771d8Swdenk * 50*012771d8Swdenk * OPCODES 51*012771d8Swdenk * 52*012771d8Swdenk *======================================================================*/ 53*012771d8Swdenk 54*012771d8Swdenk /* From the MPCxxx instruction set documentation, all instructions are 55*012771d8Swdenk * 32 bits long and word aligned. Bits 0-5 always specify the primary 56*012771d8Swdenk * opcode. Many instructions also have an extended opcode. 57*012771d8Swdenk */ 58*012771d8Swdenk 59*012771d8Swdenk #define GET_OPCD(i) (((unsigned long)(i) >> 26) & 0x3f) 60*012771d8Swdenk #define MAKE_OPCODE(i) ((((unsigned long)(i)) & 0x3f) << 26) 61*012771d8Swdenk 62*012771d8Swdenk /* The MPC860 User's Manual, Appendix D.4 contains the definitions of the 63*012771d8Swdenk * instruction forms 64*012771d8Swdenk */ 65*012771d8Swdenk 66*012771d8Swdenk 67*012771d8Swdenk /*------------------------------------------------- 68*012771d8Swdenk * I-Form Instructions: 69*012771d8Swdenk * bX 70*012771d8Swdenk *------------------------------------------------- 71*012771d8Swdenk * OPCD | LI |AA|LK 72*012771d8Swdenk *-------------------------------------------------*/ 73*012771d8Swdenk 74*012771d8Swdenk #define I_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1)) 75*012771d8Swdenk #define I_MASK I_OPCODE(0x3f,0x1,0x1) 76*012771d8Swdenk 77*012771d8Swdenk 78*012771d8Swdenk /*------------------------------------------------- 79*012771d8Swdenk * B-Form Instructions: 80*012771d8Swdenk * bcX 81*012771d8Swdenk *------------------------------------------------- 82*012771d8Swdenk * OPCD | BO | BI | BD |AA|LK 83*012771d8Swdenk *-------------------------------------------------*/ 84*012771d8Swdenk 85*012771d8Swdenk #define B_OPCODE(i,aa,lk) (MAKE_OPCODE(i) | (((aa) & 0x1) << 1) | ((lk) & 0x1)) 86*012771d8Swdenk #define B_MASK B_OPCODE(0x3f,0x1,0x1) 87*012771d8Swdenk 88*012771d8Swdenk 89*012771d8Swdenk /*------------------------------------------------- 90*012771d8Swdenk * SC-Form Instructions: 91*012771d8Swdenk * sc 92*012771d8Swdenk *------------------------------------------------- 93*012771d8Swdenk * OPCD | 00000 | 00000 | 00000000000000 |1|0 94*012771d8Swdenk *-------------------------------------------------*/ 95*012771d8Swdenk 96*012771d8Swdenk #define SC_OPCODE(i) (MAKE_OPCODE(i) | 0x2) 97*012771d8Swdenk #define SC_MASK SC_OPCODE(0x3f) 98*012771d8Swdenk 99*012771d8Swdenk 100*012771d8Swdenk /*------------------------------------------------- 101*012771d8Swdenk * D-Form Instructions: 102*012771d8Swdenk * addi addic addic. addis andi. andis. cmpi cmpli 103*012771d8Swdenk * lbz lbzu lha lhau lhz lhzu lmw lwz lwzu mulli 104*012771d8Swdenk * ori oris stb stbu sth sthu stmw stw stwu subfic 105*012771d8Swdenk * twi xori xoris 106*012771d8Swdenk *------------------------------------------------- 107*012771d8Swdenk * OPCD | D | A | d 108*012771d8Swdenk * OPCD | D | A | SIMM 109*012771d8Swdenk * OPCD | S | A | d 110*012771d8Swdenk * OPCD | S | A | UIMM 111*012771d8Swdenk * OPCD |crfD|0|L| A | SIMM 112*012771d8Swdenk * OPCD |crfD|0|L| A | UIMM 113*012771d8Swdenk * OPCD | TO | A | SIMM 114*012771d8Swdenk *-------------------------------------------------*/ 115*012771d8Swdenk 116*012771d8Swdenk #define D_OPCODE(i) MAKE_OPCODE(i) 117*012771d8Swdenk #define D_MASK MAKE_OPCODE(0x3f) 118*012771d8Swdenk 119*012771d8Swdenk 120*012771d8Swdenk /*------------------------------------------------- 121*012771d8Swdenk * DS-Form Instructions: 122*012771d8Swdenk * (none supported by MPC860) 123*012771d8Swdenk *------------------------------------------------- 124*012771d8Swdenk * OPCD | D | A | ds |XO 125*012771d8Swdenk * OPCD | S | A | ds |XO 126*012771d8Swdenk *-------------------------------------------------*/ 127*012771d8Swdenk 128*012771d8Swdenk #define DS_OPCODE(i,xo) (MAKE_OPCODE(i) | ((xo) & 0x3)) 129*012771d8Swdenk #define DS_MASK DS_OPCODE(0x3f,0x1) 130*012771d8Swdenk 131*012771d8Swdenk 132*012771d8Swdenk /*--------------------------------------------------- 133*012771d8Swdenk * X-Form Instructions: 134*012771d8Swdenk * andX andcX cmp cmpl cntlzwX dcbf dcbi dcbst dcbt 135*012771d8Swdenk * dcbtst dcbz eciwx ecowx eieio eqvX extsbX extshX 136*012771d8Swdenk * icbi lbzux lbxz lhaux lhax lhbrx lhzux lhxz lswi 137*012771d8Swdenk * lswx lwarx lwbrx lwzux lwxz mcrfs mcrxr mfcr 138*012771d8Swdenk * mfmsr mfsr mfsrin mtmsr mtsr mtsrin nandX norX 139*012771d8Swdenk * orX orcX slwX srawX srawiX srwX stbux stbx 140*012771d8Swdenk * sthbrx sthuxsthx stswi stswx stwbrx stwcx. stwux 141*012771d8Swdenk * stwx sync tlbie tlbld tlbli tlbsync tw xorX 142*012771d8Swdenk *--------------------------------------------------- 143*012771d8Swdenk * OPCD | D | A | B | XO |0 144*012771d8Swdenk * OPCD | D | A | NB | XO |0 145*012771d8Swdenk * OPCD | D | 00000 | B | XO |0 146*012771d8Swdenk * OPCD | D | 00000 | 00000 | XO |0 147*012771d8Swdenk * OPCD | D |0| SR | 00000 | XO |0 148*012771d8Swdenk * OPCD | S | A | B | XO |Rc 149*012771d8Swdenk * OPCD | S | A | B | XO |1 150*012771d8Swdenk * OPCD | S | A | B | XO |0 151*012771d8Swdenk * OPCD | S | A | NB | XO |0 152*012771d8Swdenk * OPCD | S | A | 00000 | XO |Rc 153*012771d8Swdenk * OPCD | S | 00000 | B | XO |0 154*012771d8Swdenk * OPCD | S | 00000 | 00000 | XO |0 155*012771d8Swdenk * OPCD | S |0| SR | 00000 | XO |0 156*012771d8Swdenk * OPCD | S | A | SH | XO |Rc 157*012771d8Swdenk * OPCD |crfD|0|L| A | SH | XO |0 158*012771d8Swdenk * OPCD |crfD |00| A | B | XO |0 159*012771d8Swdenk * OPCD |crfD |00|crfS |00| 00000 | XO |0 160*012771d8Swdenk * OPCD |crfD |00| 00000 | 00000 | XO |0 161*012771d8Swdenk * OPCD |crfD |00| 00000 | IMM |0| XO |Rc 162*012771d8Swdenk * OPCD | TO | A | B | XO |0 163*012771d8Swdenk * OPCD | D | 00000 | B | XO |Rc 164*012771d8Swdenk * OPCD | D | 00000 | 00000 | XO |Rc 165*012771d8Swdenk * OPCD | crbD | 00000 | 00000 | XO |Rc 166*012771d8Swdenk * OPCD | 00000 | A | B | XO |0 167*012771d8Swdenk * OPCD | 00000 | 00000 | B | XO |0 168*012771d8Swdenk * OPCD | 00000 | 00000 | 00000 | XO |0 169*012771d8Swdenk *---------------------------------------------------*/ 170*012771d8Swdenk 171*012771d8Swdenk #define X_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \ 172*012771d8Swdenk ((rc) & 0x1)) 173*012771d8Swdenk #define X_MASK X_OPCODE(0x3f,0x3ff,0x1) 174*012771d8Swdenk 175*012771d8Swdenk 176*012771d8Swdenk /*--------------------------------------------------- 177*012771d8Swdenk * XL-Form Instructions: 178*012771d8Swdenk * bcctrX bclrX crand crandc creqv crnand crnor cror 179*012771d8Swdenk * croc crxorisync mcrf rfi 180*012771d8Swdenk *--------------------------------------------------- 181*012771d8Swdenk * OPCD | BO | BI | 00000 | XO |LK 182*012771d8Swdenk * OPCD | crbD | crbA | crbB | XO |0 183*012771d8Swdenk * OPCD |crfD |00|crfS |00| 00000 | XO |0 184*012771d8Swdenk * OPCD | 00000 | 00000 | 00000 | XO |0 185*012771d8Swdenk *---------------------------------------------------*/ 186*012771d8Swdenk 187*012771d8Swdenk #define XL_OPCODE(i,xo,lk) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \ 188*012771d8Swdenk ((lk) & 0x1)) 189*012771d8Swdenk #define XL_MASK XL_OPCODE(0x3f,0x3ff,0x1) 190*012771d8Swdenk 191*012771d8Swdenk 192*012771d8Swdenk /*--------------------------------------------------- 193*012771d8Swdenk * XFX-Form Instructions: 194*012771d8Swdenk * mfspr mftb mtcrf mtspr 195*012771d8Swdenk *--------------------------------------------------- 196*012771d8Swdenk * OPCD | D | spr | XO |0 197*012771d8Swdenk * OPCD | D |0| CRM |0| XO |0 198*012771d8Swdenk * OPCD | S | spr | XO |0 199*012771d8Swdenk * OPCD | D | tbr | XO |0 200*012771d8Swdenk *---------------------------------------------------*/ 201*012771d8Swdenk 202*012771d8Swdenk #define XFX_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \ 203*012771d8Swdenk ((rc) & 0x1)) 204*012771d8Swdenk #define XFX_MASK XFX_OPCODE(0x3f,0x3ff,0x1) 205*012771d8Swdenk 206*012771d8Swdenk 207*012771d8Swdenk /*--------------------------------------------------- 208*012771d8Swdenk * XFL-Form Instructions: 209*012771d8Swdenk * (none supported by MPC860) 210*012771d8Swdenk *--------------------------------------------------- 211*012771d8Swdenk * OPCD |0| FM |0| B | XO |0 212*012771d8Swdenk *---------------------------------------------------*/ 213*012771d8Swdenk 214*012771d8Swdenk #define XFL_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x3ff) << 1) | \ 215*012771d8Swdenk ((rc) & 0x1)) 216*012771d8Swdenk #define XFL_MASK XFL_OPCODE(0x3f,0x3ff,0x1) 217*012771d8Swdenk 218*012771d8Swdenk 219*012771d8Swdenk /*--------------------------------------------------- 220*012771d8Swdenk * XS-Form Instructions: 221*012771d8Swdenk * (none supported by MPC860) 222*012771d8Swdenk *--------------------------------------------------- 223*012771d8Swdenk * OPCD | S | A | sh | XO |sh|LK 224*012771d8Swdenk *---------------------------------------------------*/ 225*012771d8Swdenk 226*012771d8Swdenk #define XS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1ff) << 2) | \ 227*012771d8Swdenk ((rc) & 0x1)) 228*012771d8Swdenk #define XS_MASK XS_OPCODE(0x3f,0x1ff,0x1) 229*012771d8Swdenk 230*012771d8Swdenk 231*012771d8Swdenk /*--------------------------------------------------- 232*012771d8Swdenk * XO-Form Instructions: 233*012771d8Swdenk * addX addcXaddeX addmeX addzeX divwX divwuX mulhwX 234*012771d8Swdenk * mulhwuX mullwX negX subfX subfcX subfeX subfmeX 235*012771d8Swdenk * subfzeX 236*012771d8Swdenk *--------------------------------------------------- 237*012771d8Swdenk * OPCD | D | A | B |OE| XO |Rc 238*012771d8Swdenk * OPCD | D | A | B |0 | XO |Rc 239*012771d8Swdenk * OPCD | D | A | 00000 |OE| XO |Rc 240*012771d8Swdenk *---------------------------------------------------*/ 241*012771d8Swdenk 242*012771d8Swdenk #define XO_OPCODE(i,xo,oe,rc) (MAKE_OPCODE(i) | (((oe) & 0x1) << 10) | \ 243*012771d8Swdenk (((xo) & 0x1ff) << 1) | ((rc) & 0x1)) 244*012771d8Swdenk #define XO_MASK XO_OPCODE(0x3f,0x1ff,0x1,0x1) 245*012771d8Swdenk 246*012771d8Swdenk 247*012771d8Swdenk /*--------------------------------------------------- 248*012771d8Swdenk * A-Form Instructions: 249*012771d8Swdenk * (none supported by MPC860) 250*012771d8Swdenk *--------------------------------------------------- 251*012771d8Swdenk * OPCD | D | A | B |00000| XO |Rc 252*012771d8Swdenk * OPCD | D | A | B | C | XO |Rc 253*012771d8Swdenk * OPCD | D | A | 00000 | C | XO |Rc 254*012771d8Swdenk * OPCD | D | 00000 | B |00000| XO |Rc 255*012771d8Swdenk *---------------------------------------------------*/ 256*012771d8Swdenk 257*012771d8Swdenk #define A_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x1f) << 1) | \ 258*012771d8Swdenk ((rc) & 0x1)) 259*012771d8Swdenk #define A_MASK A_OPCODE(0x3f,0x1f,0x1) 260*012771d8Swdenk 261*012771d8Swdenk 262*012771d8Swdenk /*--------------------------------------------------- 263*012771d8Swdenk * M-Form Instructions: 264*012771d8Swdenk * rlwimiX rlwinmX rlwnmX 265*012771d8Swdenk *--------------------------------------------------- 266*012771d8Swdenk * OPCD | S | A | SH | MB | ME |Rc 267*012771d8Swdenk * OPCD | S | A | B | MB | ME |Rc 268*012771d8Swdenk *---------------------------------------------------*/ 269*012771d8Swdenk 270*012771d8Swdenk #define M_OPCODE(i,rc) (MAKE_OPCODE(i) | ((rc) & 0x1)) 271*012771d8Swdenk #define M_MASK M_OPCODE(0x3f,0x1) 272*012771d8Swdenk 273*012771d8Swdenk 274*012771d8Swdenk /*--------------------------------------------------- 275*012771d8Swdenk * MD-Form Instructions: 276*012771d8Swdenk * (none supported by MPC860) 277*012771d8Swdenk *--------------------------------------------------- 278*012771d8Swdenk * OPCD | S | A | sh | mb | XO |sh|Rc 279*012771d8Swdenk * OPCD | S | A | sh | me | XO |sh|Rc 280*012771d8Swdenk *---------------------------------------------------*/ 281*012771d8Swdenk 282*012771d8Swdenk #define MD_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0x7) << 2) | \ 283*012771d8Swdenk ((rc) & 0x1)) 284*012771d8Swdenk #define MD_MASK MD_OPCODE(0x3f,0x7,0x1) 285*012771d8Swdenk 286*012771d8Swdenk 287*012771d8Swdenk /*--------------------------------------------------- 288*012771d8Swdenk * MDS-Form Instructions: 289*012771d8Swdenk * (none supported by MPC860) 290*012771d8Swdenk *--------------------------------------------------- 291*012771d8Swdenk * OPCD | S | A | B | mb | XO |Rc 292*012771d8Swdenk * OPCD | S | A | B | me | XO |Rc 293*012771d8Swdenk *---------------------------------------------------*/ 294*012771d8Swdenk 295*012771d8Swdenk #define MDS_OPCODE(i,xo,rc) (MAKE_OPCODE(i) | (((xo) & 0xf) << 1) | \ 296*012771d8Swdenk ((rc) & 0x1)) 297*012771d8Swdenk #define MDS_MASK MDS_OPCODE(0x3f,0xf,0x1) 298*012771d8Swdenk 299*012771d8Swdenk #define INSTRUCTION( memaddr ) ntohl(*(unsigned long *)(memaddr)) 300*012771d8Swdenk 301*012771d8Swdenk #define MAX_OPERANDS 8 302*012771d8Swdenk 303*012771d8Swdenk struct ppc_ctx; 304*012771d8Swdenk 305*012771d8Swdenk struct opcode { 306*012771d8Swdenk unsigned long opcode; /* The complete opcode as produced by 307*012771d8Swdenk one of the XXX_OPCODE macros above */ 308*012771d8Swdenk 309*012771d8Swdenk unsigned long mask; /* The mask to use on an instruction 310*012771d8Swdenk before comparing with the opcode 311*012771d8Swdenk field to see if it matches */ 312*012771d8Swdenk 313*012771d8Swdenk enum OP_FIELD fields[MAX_OPERANDS]; 314*012771d8Swdenk /* An array defining the operands for 315*012771d8Swdenk this opcode. The values of the 316*012771d8Swdenk array are the operand identifiers */ 317*012771d8Swdenk 318*012771d8Swdenk int (*hfunc)(struct ppc_ctx *); 319*012771d8Swdenk /* Address of a function to handle the given 320*012771d8Swdenk mnemonic */ 321*012771d8Swdenk 322*012771d8Swdenk char * name; /* The symbolic name of this opcode */ 323*012771d8Swdenk 324*012771d8Swdenk unsigned int hint; /* A bitwise-inclusive-OR of the 325*012771d8Swdenk values shown below. These are used 326*012771d8Swdenk tell the disassembler how to print 327*012771d8Swdenk some operands for this opcode */ 328*012771d8Swdenk }; 329*012771d8Swdenk 330*012771d8Swdenk /* values for opcode hints */ 331*012771d8Swdenk #define H_RELATIVE 0x1 /* The address operand is relative */ 332*012771d8Swdenk #define H_IMM_HIGH 0x2 /* [U|S]IMM field shifted high */ 333*012771d8Swdenk #define H_RA0_IS_0 0x4 /* If rA = 0 then treat as literal 0 */ 334*012771d8Swdenk 335*012771d8Swdenk struct ppc_ctx { 336*012771d8Swdenk struct opcode * op; 337*012771d8Swdenk unsigned long instr; 338*012771d8Swdenk unsigned int flags; 339*012771d8Swdenk int datalen; 340*012771d8Swdenk char data[ 256 ]; 341*012771d8Swdenk char radix_fmt[ 8 ]; 342*012771d8Swdenk unsigned char * virtual; 343*012771d8Swdenk }; 344*012771d8Swdenk 345*012771d8Swdenk 346*012771d8Swdenk /*====================================================================== 347*012771d8Swdenk * 348*012771d8Swdenk * FUNCTIONS 349*012771d8Swdenk * 350*012771d8Swdenk *======================================================================*/ 351*012771d8Swdenk 352*012771d8Swdenk /* Values for flags as passed to various ppc routines */ 353*012771d8Swdenk #define F_RADOCTAL 0x1 /* output radix = unsigned octal */ 354*012771d8Swdenk #define F_RADUDECIMAL 0x2 /* output radix = unsigned decimal */ 355*012771d8Swdenk #define F_RADSDECIMAL 0x4 /* output radix = signed decimal */ 356*012771d8Swdenk #define F_RADHEX 0x8 /* output radix = unsigned hex */ 357*012771d8Swdenk #define F_SIMPLE 0x10 /* use simplified mnemonics */ 358*012771d8Swdenk #define F_SYMBOL 0x20 /* use symbol lookups for addresses */ 359*012771d8Swdenk #define F_INSTR 0x40 /* output the raw instruction */ 360*012771d8Swdenk #define F_LOCALMEM 0x80 /* retrieve opcodes from local memory 361*012771d8Swdenk rather than from the HMI */ 362*012771d8Swdenk #define F_LINENO 0x100 /* show line number info if available */ 363*012771d8Swdenk #define F_VALIDONLY 0x200 /* cache: valid entries only */ 364*012771d8Swdenk 365*012771d8Swdenk /* Values for assembler error codes */ 366*012771d8Swdenk #define E_ASM_BAD_OPCODE 1 367*012771d8Swdenk #define E_ASM_NUM_OPERANDS 2 368*012771d8Swdenk #define E_ASM_BAD_REGISTER 3 369*012771d8Swdenk #define E_ASM_BAD_SPR 4 370*012771d8Swdenk #define E_ASM_BAD_TBR 5 371*012771d8Swdenk 372*012771d8Swdenk extern int disppc __P((unsigned char *,unsigned char *,int, 373*012771d8Swdenk int (*)(const char *), unsigned long)); 374*012771d8Swdenk extern int print_source_line __P((char *,char *,int, 375*012771d8Swdenk int (*pfunc)(const char *))); 376*012771d8Swdenk extern int find_next_address __P((unsigned char *,int,struct pt_regs *)); 377*012771d8Swdenk extern int handle_bc __P((struct ppc_ctx *)); 378*012771d8Swdenk extern unsigned long asmppc __P((unsigned long,char*,int*)); 379*012771d8Swdenk extern char *asm_error_str __P((int)); 380*012771d8Swdenk 381*012771d8Swdenk /*====================================================================== 382*012771d8Swdenk * 383*012771d8Swdenk * GLOBAL VARIABLES 384*012771d8Swdenk * 385*012771d8Swdenk *======================================================================*/ 386*012771d8Swdenk 387*012771d8Swdenk extern struct operand operands[]; 388*012771d8Swdenk extern const unsigned int n_operands; 389*012771d8Swdenk extern struct opcode opcodes[]; 390*012771d8Swdenk extern const unsigned int n_opcodes; 391*012771d8Swdenk 392*012771d8Swdenk #endif /* _PPC_H */ 393*012771d8Swdenk 394*012771d8Swdenk 395*012771d8Swdenk /* 396*012771d8Swdenk * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks 397*012771d8Swdenk * All rights reserved. 398*012771d8Swdenk * 399*012771d8Swdenk * Redistribution and use in source and binary forms are freely 400*012771d8Swdenk * permitted provided that the above copyright notice and this 401*012771d8Swdenk * paragraph and the following disclaimer are duplicated in all 402*012771d8Swdenk * such forms. 403*012771d8Swdenk * 404*012771d8Swdenk * This software is provided "AS IS" and without any express or 405*012771d8Swdenk * implied warranties, including, without limitation, the implied 406*012771d8Swdenk * warranties of merchantability and fitness for a particular 407*012771d8Swdenk * purpose. 408*012771d8Swdenk */ 409