1*16216333SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2ae06e374SMichael Ellerman /* SPU ELF support for BFD. 3ae06e374SMichael Ellerman 4ae06e374SMichael Ellerman Copyright 2006 Free Software Foundation, Inc. 5ae06e374SMichael Ellerman 6ae06e374SMichael Ellerman This file is part of BFD, the Binary File Descriptor library. 7ae06e374SMichael Ellerman 8*16216333SThomas Gleixner */ 9ae06e374SMichael Ellerman 10ae06e374SMichael Ellerman /* SPU Opcode Table 11ae06e374SMichael Ellerman 12ae06e374SMichael Ellerman -=-=-= FORMAT =-=-=- 13ae06e374SMichael Ellerman 14ae06e374SMichael Ellerman +----+-------+-------+-------+-------+ +------------+-------+-------+-------+ 15ae06e374SMichael Ellerman RRR | op | RC | RB | RA | RT | RI7 | op | I7 | RA | RT | 16ae06e374SMichael Ellerman +----+-------+-------+-------+-------+ +------------+-------+-------+-------+ 17ae06e374SMichael Ellerman 0 3 1 1 2 3 0 1 1 2 3 18ae06e374SMichael Ellerman 0 7 4 1 0 7 4 1 19ae06e374SMichael Ellerman 20ae06e374SMichael Ellerman +-----------+--------+-------+-------+ +---------+----------+-------+-------+ 21ae06e374SMichael Ellerman RI8 | op | I8 | RA | RT | RI10 | op | I10 | RA | RT | 22ae06e374SMichael Ellerman +-----------+--------+-------+-------+ +---------+----------+-------+-------+ 23ae06e374SMichael Ellerman 0 9 1 2 3 0 7 1 2 3 24ae06e374SMichael Ellerman 7 4 1 7 4 1 25ae06e374SMichael Ellerman 26ae06e374SMichael Ellerman +----------+-----------------+-------+ +--------+-------------------+-------+ 27ae06e374SMichael Ellerman RI16 | op | I16 | RT | RI18 | op | I18 | RT | 28ae06e374SMichael Ellerman +----------+-----------------+-------+ +--------+-------------------+-------+ 29ae06e374SMichael Ellerman 0 8 2 3 0 6 2 3 30ae06e374SMichael Ellerman 4 1 4 1 31ae06e374SMichael Ellerman 32ae06e374SMichael Ellerman +------------+-------+-------+-------+ +-------+--+-----------------+-------+ 33ae06e374SMichael Ellerman RR | op | RB | RA | RT | LBT | op |RO| I16 | RO | 34ae06e374SMichael Ellerman +------------+-------+-------+-------+ +-------+--+-----------------+-------+ 35ae06e374SMichael Ellerman 0 1 1 2 3 0 6 8 2 3 36ae06e374SMichael Ellerman 0 7 4 1 4 1 37ae06e374SMichael Ellerman 38ae06e374SMichael Ellerman +------------+----+--+-------+-------+ 39ae06e374SMichael Ellerman LBTI | op | // |RO| RA | RO | 40ae06e374SMichael Ellerman +------------+----+--+-------+-------+ 41ae06e374SMichael Ellerman 0 1 1 1 2 3 42ae06e374SMichael Ellerman 0 5 7 4 1 43ae06e374SMichael Ellerman 44ae06e374SMichael Ellerman -=-=-= OPCODE =-=-=- 45ae06e374SMichael Ellerman 46ae06e374SMichael Ellerman OPCODE field specifies the most significant 11bit of the instruction. Some formats don't have 11bits for opcode field, and in this 47ae06e374SMichael Ellerman case, bit field other than op are defined as 0s. For example, opcode of fma instruction which is RRR format is defined as 0x700, 48ae06e374SMichael Ellerman since 0x700 -> 11'b11100000000, this means opcode is 4'b1110, and other 7bits are defined as 7'b0000000. 49ae06e374SMichael Ellerman 50ae06e374SMichael Ellerman -=-=-= ASM_FORMAT =-=-=- 51ae06e374SMichael Ellerman 52ae06e374SMichael Ellerman RRR category RI7 category 53ae06e374SMichael Ellerman ASM_RRR mnemonic RC, RA, RB, RT ASM_RI4 mnemonic RT, RA, I4 54ae06e374SMichael Ellerman ASM_RI7 mnemonic RT, RA, I7 55ae06e374SMichael Ellerman 56ae06e374SMichael Ellerman RI8 category RI10 category 57ae06e374SMichael Ellerman ASM_RUI8 mnemonic RT, RA, UI8 ASM_AI10 mnemonic RA, I10 58ae06e374SMichael Ellerman ASM_RI10 mnemonic RT, RA, R10 59ae06e374SMichael Ellerman ASM_RI10IDX mnemonic RT, I10(RA) 60ae06e374SMichael Ellerman 61ae06e374SMichael Ellerman RI16 category RI18 category 62ae06e374SMichael Ellerman ASM_I16W mnemonic I16W ASM_RI18 mnemonic RT, I18 63ae06e374SMichael Ellerman ASM_RI16 mnemonic RT, I16 64ae06e374SMichael Ellerman ASM_RI16W mnemonic RT, I16W 65ae06e374SMichael Ellerman 66ae06e374SMichael Ellerman RR category LBT category 67ae06e374SMichael Ellerman ASM_MFSPR mnemonic RT, SA ASM_LBT mnemonic brinst, brtarg 68ae06e374SMichael Ellerman ASM_MTSPR mnemonic SA, RT 69ae06e374SMichael Ellerman ASM_NOOP mnemonic LBTI category 70ae06e374SMichael Ellerman ASM_RA mnemonic RA ASM_LBTI mnemonic brinst, RA 71ae06e374SMichael Ellerman ASM_RAB mnemonic RA, RB 72ae06e374SMichael Ellerman ASM_RDCH mnemonic RT, CA 73ae06e374SMichael Ellerman ASM_RR mnemonic RT, RA, RB 74ae06e374SMichael Ellerman ASM_RT mnemonic RT 75ae06e374SMichael Ellerman ASM_RTA mnemonic RT, RA 76ae06e374SMichael Ellerman ASM_WRCH mnemonic CA, RT 77ae06e374SMichael Ellerman 78ae06e374SMichael Ellerman Note that RRR instructions have the names for RC and RT reversed from 79ae06e374SMichael Ellerman what's in the ISA, in order to put RT in the same position it appears 80ae06e374SMichael Ellerman for other formats. 81ae06e374SMichael Ellerman 82ae06e374SMichael Ellerman -=-=-= DEPENDENCY =-=-=- 83ae06e374SMichael Ellerman 84ae06e374SMichael Ellerman DEPENDENCY filed consists of 5 digits. This represents which register is used as source and which register is used as target. 85ae06e374SMichael Ellerman The first(most significant) digit is always 0. Then it is followd by RC, RB, RA and RT digits. 86ae06e374SMichael Ellerman If the digit is 0, this means the corresponding register is not used in the instruction. 87ae06e374SMichael Ellerman If the digit is 1, this means the corresponding register is used as a source in the instruction. 88ae06e374SMichael Ellerman If the digit is 2, this means the corresponding register is used as a target in the instruction. 89ae06e374SMichael Ellerman If the digit is 3, this means the corresponding register is used as both source and target in the instruction. 90ae06e374SMichael Ellerman For example, fms instruction has 00113 as the DEPENDENCY field. This means RC is not used in this operation, RB and RA are 91ae06e374SMichael Ellerman used as sources and RT is the target. 92ae06e374SMichael Ellerman 93ae06e374SMichael Ellerman -=-=-= PIPE =-=-=- 94ae06e374SMichael Ellerman 95ae06e374SMichael Ellerman This field shows which execution pipe is used for the instruction 96ae06e374SMichael Ellerman 97ae06e374SMichael Ellerman pipe0 execution pipelines: 98ae06e374SMichael Ellerman FP6 SP floating pipeline 99ae06e374SMichael Ellerman FP7 integer operations executed in SP floating pipeline 100ae06e374SMichael Ellerman FPD DP floating pipeline 101ae06e374SMichael Ellerman FX2 FXU pipeline 102ae06e374SMichael Ellerman FX3 Rotate/Shift pipeline 103ae06e374SMichael Ellerman FXB Byte pipeline 104ae06e374SMichael Ellerman NOP No pipeline 105ae06e374SMichael Ellerman 106ae06e374SMichael Ellerman pipe1 execution pipelines: 107ae06e374SMichael Ellerman BR Branch pipeline 108ae06e374SMichael Ellerman LNOP No pipeline 109ae06e374SMichael Ellerman LS Load/Store pipeline 110ae06e374SMichael Ellerman SHUF Shuffle pipeline 111ae06e374SMichael Ellerman SPR SPR/CH pipeline 112ae06e374SMichael Ellerman 113ae06e374SMichael Ellerman */ 114ae06e374SMichael Ellerman 115ae06e374SMichael Ellerman #define _A0() {0} 116ae06e374SMichael Ellerman #define _A1(a) {1,a} 117ae06e374SMichael Ellerman #define _A2(a,b) {2,a,b} 118ae06e374SMichael Ellerman #define _A3(a,b,c) {3,a,b,c} 119ae06e374SMichael Ellerman #define _A4(a,b,c,d) {4,a,b,c,d} 120ae06e374SMichael Ellerman 121ae06e374SMichael Ellerman /* TAG FORMAT OPCODE MNEMONIC ASM_FORMAT DEPENDENCY PIPE COMMENT */ 122ae06e374SMichael Ellerman /* 0[RC][RB][RA][RT] */ 123ae06e374SMichael Ellerman /* 1:src, 2:target */ 124ae06e374SMichael Ellerman 125ae06e374SMichael Ellerman APUOP(M_BR, RI16, 0x190, "br", _A1(A_R18), 00000, BR) /* BRel IP<-IP+I16 */ 126ae06e374SMichael Ellerman APUOP(M_BRSL, RI16, 0x198, "brsl", _A2(A_T,A_R18), 00002, BR) /* BRelSetLink RT,IP<-IP,IP+I16 */ 127ae06e374SMichael Ellerman APUOP(M_BRA, RI16, 0x180, "bra", _A1(A_S18), 00000, BR) /* BRAbs IP<-I16 */ 128ae06e374SMichael Ellerman APUOP(M_BRASL, RI16, 0x188, "brasl", _A2(A_T,A_S18), 00002, BR) /* BRAbsSetLink RT,IP<-IP,I16 */ 129ae06e374SMichael Ellerman APUOP(M_FSMBI, RI16, 0x194, "fsmbi", _A2(A_T,A_X16), 00002, SHUF) /* FormSelMask%I RT<-fsm(I16) */ 130ae06e374SMichael Ellerman APUOP(M_LQA, RI16, 0x184, "lqa", _A2(A_T,A_S18), 00002, LS) /* LoadQAbs RT<-M[I16] */ 131ae06e374SMichael Ellerman APUOP(M_LQR, RI16, 0x19C, "lqr", _A2(A_T,A_R18), 00002, LS) /* LoadQRel RT<-M[IP+I16] */ 132ae06e374SMichael Ellerman APUOP(M_STOP, RR, 0x000, "stop", _A0(), 00000, BR) /* STOP stop */ 133ae06e374SMichael Ellerman APUOP(M_STOP2, RR, 0x000, "stop", _A1(A_U14), 00000, BR) /* STOP stop */ 134ae06e374SMichael Ellerman APUOP(M_STOPD, RR, 0x140, "stopd", _A3(A_T,A_A,A_B), 00111, BR) /* STOPD stop (with register dependencies) */ 135ae06e374SMichael Ellerman APUOP(M_LNOP, RR, 0x001, "lnop", _A0(), 00000, LNOP) /* LNOP no_operation */ 136ae06e374SMichael Ellerman APUOP(M_SYNC, RR, 0x002, "sync", _A0(), 00000, BR) /* SYNC flush_pipe */ 137ae06e374SMichael Ellerman APUOP(M_DSYNC, RR, 0x003, "dsync", _A0(), 00000, BR) /* DSYNC flush_store_queue */ 138ae06e374SMichael Ellerman APUOP(M_MFSPR, RR, 0x00c, "mfspr", _A2(A_T,A_S), 00002, SPR) /* MFSPR RT<-SA */ 139ae06e374SMichael Ellerman APUOP(M_RDCH, RR, 0x00d, "rdch", _A2(A_T,A_H), 00002, SPR) /* ReaDCHannel RT<-CA:data */ 140ae06e374SMichael Ellerman APUOP(M_RCHCNT, RR, 0x00f, "rchcnt", _A2(A_T,A_H), 00002, SPR) /* ReaDCHanCouNT RT<-CA:count */ 141ae06e374SMichael Ellerman APUOP(M_HBRA, LBT, 0x080, "hbra", _A2(A_S11,A_S18), 00000, LS) /* HBRA BTB[B9]<-M[I16] */ 142ae06e374SMichael Ellerman APUOP(M_HBRR, LBT, 0x090, "hbrr", _A2(A_S11,A_R18), 00000, LS) /* HBRR BTB[B9]<-M[IP+I16] */ 143ae06e374SMichael Ellerman APUOP(M_BRZ, RI16, 0x100, "brz", _A2(A_T,A_R18), 00001, BR) /* BRZ IP<-IP+I16_if(RT) */ 144ae06e374SMichael Ellerman APUOP(M_BRNZ, RI16, 0x108, "brnz", _A2(A_T,A_R18), 00001, BR) /* BRNZ IP<-IP+I16_if(RT) */ 145ae06e374SMichael Ellerman APUOP(M_BRHZ, RI16, 0x110, "brhz", _A2(A_T,A_R18), 00001, BR) /* BRHZ IP<-IP+I16_if(RT) */ 146ae06e374SMichael Ellerman APUOP(M_BRHNZ, RI16, 0x118, "brhnz", _A2(A_T,A_R18), 00001, BR) /* BRHNZ IP<-IP+I16_if(RT) */ 147ae06e374SMichael Ellerman APUOP(M_STQA, RI16, 0x104, "stqa", _A2(A_T,A_S18), 00001, LS) /* SToreQAbs M[I16]<-RT */ 148ae06e374SMichael Ellerman APUOP(M_STQR, RI16, 0x11C, "stqr", _A2(A_T,A_R18), 00001, LS) /* SToreQRel M[IP+I16]<-RT */ 149ae06e374SMichael Ellerman APUOP(M_MTSPR, RR, 0x10c, "mtspr", _A2(A_S,A_T), 00001, SPR) /* MTSPR SA<-RT */ 150ae06e374SMichael Ellerman APUOP(M_WRCH, RR, 0x10d, "wrch", _A2(A_H,A_T), 00001, SPR) /* ChanWRite CA<-RT */ 151ae06e374SMichael Ellerman APUOP(M_LQD, RI10, 0x1a0, "lqd", _A4(A_T,A_S14,A_P,A_A), 00012, LS) /* LoadQDisp RT<-M[Ra+I10] */ 152ae06e374SMichael Ellerman APUOP(M_BI, RR, 0x1a8, "bi", _A1(A_A), 00010, BR) /* BI IP<-RA */ 153ae06e374SMichael Ellerman APUOP(M_BISL, RR, 0x1a9, "bisl", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */ 154ae06e374SMichael Ellerman APUOP(M_IRET, RR, 0x1aa, "iret", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */ 155ae06e374SMichael Ellerman APUOP(M_IRET2, RR, 0x1aa, "iret", _A0(), 00010, BR) /* IRET IP<-SRR0 */ 156ae06e374SMichael Ellerman APUOP(M_BISLED, RR, 0x1ab, "bisled", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */ 157ae06e374SMichael Ellerman APUOP(M_HBR, LBTI, 0x1ac, "hbr", _A2(A_S11I,A_A), 00010, LS) /* HBR BTB[B9]<-M[Ra] */ 158ae06e374SMichael Ellerman APUOP(M_FREST, RR, 0x1b8, "frest", _A2(A_T,A_A), 00012, SHUF) /* FREST RT<-recip(RA) */ 159ae06e374SMichael Ellerman APUOP(M_FRSQEST, RR, 0x1b9, "frsqest", _A2(A_T,A_A), 00012, SHUF) /* FRSQEST RT<-rsqrt(RA) */ 160ae06e374SMichael Ellerman APUOP(M_FSM, RR, 0x1b4, "fsm", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */ 161ae06e374SMichael Ellerman APUOP(M_FSMH, RR, 0x1b5, "fsmh", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */ 162ae06e374SMichael Ellerman APUOP(M_FSMB, RR, 0x1b6, "fsmb", _A2(A_T,A_A), 00012, SHUF) /* FormSelMask% RT<-expand(Ra) */ 163ae06e374SMichael Ellerman APUOP(M_GB, RR, 0x1b0, "gb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */ 164ae06e374SMichael Ellerman APUOP(M_GBH, RR, 0x1b1, "gbh", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */ 165ae06e374SMichael Ellerman APUOP(M_GBB, RR, 0x1b2, "gbb", _A2(A_T,A_A), 00012, SHUF) /* GatherBits% RT<-gather(RA) */ 166ae06e374SMichael Ellerman APUOP(M_CBD, RI7, 0x1f4, "cbd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */ 167ae06e374SMichael Ellerman APUOP(M_CHD, RI7, 0x1f5, "chd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */ 168ae06e374SMichael Ellerman APUOP(M_CWD, RI7, 0x1f6, "cwd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */ 169ae06e374SMichael Ellerman APUOP(M_CDD, RI7, 0x1f7, "cdd", _A4(A_T,A_U7,A_P,A_A), 00012, SHUF) /* genCtl%%insD RT<-sta(Ra+I4,siz) */ 170ae06e374SMichael Ellerman APUOP(M_ROTQBII, RI7, 0x1f8, "rotqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* ROTQBII RT<-RA<<<I7 */ 171ae06e374SMichael Ellerman APUOP(M_ROTQBYI, RI7, 0x1fc, "rotqbyi", _A3(A_T,A_A,A_S7N), 00012, SHUF) /* ROTQBYI RT<-RA<<<(I7*8) */ 172ae06e374SMichael Ellerman APUOP(M_ROTQMBII, RI7, 0x1f9, "rotqmbii", _A3(A_T,A_A,A_S3), 00012, SHUF) /* ROTQMBII RT<-RA<<I7 */ 173ae06e374SMichael Ellerman APUOP(M_ROTQMBYI, RI7, 0x1fd, "rotqmbyi", _A3(A_T,A_A,A_S6), 00012, SHUF) /* ROTQMBYI RT<-RA<<I7 */ 174ae06e374SMichael Ellerman APUOP(M_SHLQBII, RI7, 0x1fb, "shlqbii", _A3(A_T,A_A,A_U3), 00012, SHUF) /* SHLQBII RT<-RA<<I7 */ 175ae06e374SMichael Ellerman APUOP(M_SHLQBYI, RI7, 0x1ff, "shlqbyi", _A3(A_T,A_A,A_U5), 00012, SHUF) /* SHLQBYI RT<-RA<<I7 */ 176ae06e374SMichael Ellerman APUOP(M_STQD, RI10, 0x120, "stqd", _A4(A_T,A_S14,A_P,A_A), 00011, LS) /* SToreQDisp M[Ra+I10]<-RT */ 177ae06e374SMichael Ellerman APUOP(M_BIHNZ, RR, 0x12b, "bihnz", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */ 178ae06e374SMichael Ellerman APUOP(M_BIHZ, RR, 0x12a, "bihz", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 179ae06e374SMichael Ellerman APUOP(M_BINZ, RR, 0x129, "binz", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */ 180ae06e374SMichael Ellerman APUOP(M_BIZ, RR, 0x128, "biz", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 181ae06e374SMichael Ellerman APUOP(M_CBX, RR, 0x1d4, "cbx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */ 182ae06e374SMichael Ellerman APUOP(M_CHX, RR, 0x1d5, "chx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */ 183ae06e374SMichael Ellerman APUOP(M_CWX, RR, 0x1d6, "cwx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */ 184ae06e374SMichael Ellerman APUOP(M_CDX, RR, 0x1d7, "cdx", _A3(A_T,A_A,A_B), 00112, SHUF) /* genCtl%%insX RT<-sta(Ra+Rb,siz) */ 185ae06e374SMichael Ellerman APUOP(M_LQX, RR, 0x1c4, "lqx", _A3(A_T,A_A,A_B), 00112, LS) /* LoadQindeX RT<-M[Ra+Rb] */ 186ae06e374SMichael Ellerman APUOP(M_ROTQBI, RR, 0x1d8, "rotqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBI RT<-RA<<<Rb */ 187ae06e374SMichael Ellerman APUOP(M_ROTQMBI, RR, 0x1d9, "rotqmbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBI RT<-RA<<Rb */ 188ae06e374SMichael Ellerman APUOP(M_SHLQBI, RR, 0x1db, "shlqbi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBI RT<-RA<<Rb */ 189ae06e374SMichael Ellerman APUOP(M_ROTQBY, RR, 0x1dc, "rotqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBY RT<-RA<<<(Rb*8) */ 190ae06e374SMichael Ellerman APUOP(M_ROTQMBY, RR, 0x1dd, "rotqmby", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBY RT<-RA<<Rb */ 191ae06e374SMichael Ellerman APUOP(M_SHLQBY, RR, 0x1df, "shlqby", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBY RT<-RA<<Rb */ 192ae06e374SMichael Ellerman APUOP(M_ROTQBYBI, RR, 0x1cc, "rotqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQBYBI RT<-RA<<Rb */ 193ae06e374SMichael Ellerman APUOP(M_ROTQMBYBI, RR, 0x1cd, "rotqmbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* ROTQMBYBI RT<-RA<<Rb */ 194ae06e374SMichael Ellerman APUOP(M_SHLQBYBI, RR, 0x1cf, "shlqbybi", _A3(A_T,A_A,A_B), 00112, SHUF) /* SHLQBYBI RT<-RA<<Rb */ 195ae06e374SMichael Ellerman APUOP(M_STQX, RR, 0x144, "stqx", _A3(A_T,A_A,A_B), 00111, LS) /* SToreQindeX M[Ra+Rb]<-RT */ 196ae06e374SMichael Ellerman APUOP(M_SHUFB, RRR, 0x580, "shufb", _A4(A_C,A_A,A_B,A_T), 02111, SHUF) /* SHUFfleBytes RC<-f(RA,RB,RT) */ 197ae06e374SMichael Ellerman APUOP(M_IL, RI16, 0x204, "il", _A2(A_T,A_S16), 00002, FX2) /* ImmLoad RT<-sxt(I16) */ 198ae06e374SMichael Ellerman APUOP(M_ILH, RI16, 0x20c, "ilh", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadH RT<-I16 */ 199ae06e374SMichael Ellerman APUOP(M_ILHU, RI16, 0x208, "ilhu", _A2(A_T,A_X16), 00002, FX2) /* ImmLoadHUpper RT<-I16<<16 */ 200ae06e374SMichael Ellerman APUOP(M_ILA, RI18, 0x210, "ila", _A2(A_T,A_U18), 00002, FX2) /* ImmLoadAddr RT<-zxt(I18) */ 201ae06e374SMichael Ellerman APUOP(M_NOP, RR, 0x201, "nop", _A1(A_T), 00000, NOP) /* XNOP no_operation */ 202ae06e374SMichael Ellerman APUOP(M_NOP2, RR, 0x201, "nop", _A0(), 00000, NOP) /* XNOP no_operation */ 203ae06e374SMichael Ellerman APUOP(M_IOHL, RI16, 0x304, "iohl", _A2(A_T,A_X16), 00003, FX2) /* AddImmeXt RT<-RT+sxt(I16) */ 204ae06e374SMichael Ellerman APUOP(M_ANDBI, RI10, 0x0b0, "andbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* AND%I RT<-RA&I10 */ 205ae06e374SMichael Ellerman APUOP(M_ANDHI, RI10, 0x0a8, "andhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */ 206ae06e374SMichael Ellerman APUOP(M_ANDI, RI10, 0x0a0, "andi", _A3(A_T,A_A,A_S10), 00012, FX2) /* AND%I RT<-RA&I10 */ 207ae06e374SMichael Ellerman APUOP(M_ORBI, RI10, 0x030, "orbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* OR%I RT<-RA|I10 */ 208ae06e374SMichael Ellerman APUOP(M_ORHI, RI10, 0x028, "orhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */ 209ae06e374SMichael Ellerman APUOP(M_ORI, RI10, 0x020, "ori", _A3(A_T,A_A,A_S10), 00012, FX2) /* OR%I RT<-RA|I10 */ 210ae06e374SMichael Ellerman APUOP(M_ORX, RR, 0x1f0, "orx", _A2(A_T,A_A), 00012, BR) /* ORX RT<-RA.w0|RA.w1|RA.w2|RA.w3 */ 211ae06e374SMichael Ellerman APUOP(M_XORBI, RI10, 0x230, "xorbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* XOR%I RT<-RA^I10 */ 212ae06e374SMichael Ellerman APUOP(M_XORHI, RI10, 0x228, "xorhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */ 213ae06e374SMichael Ellerman APUOP(M_XORI, RI10, 0x220, "xori", _A3(A_T,A_A,A_S10), 00012, FX2) /* XOR%I RT<-RA^I10 */ 214ae06e374SMichael Ellerman APUOP(M_AHI, RI10, 0x0e8, "ahi", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */ 215ae06e374SMichael Ellerman APUOP(M_AI, RI10, 0x0e0, "ai", _A3(A_T,A_A,A_S10), 00012, FX2) /* Add%Immed RT<-RA+I10 */ 216ae06e374SMichael Ellerman APUOP(M_SFHI, RI10, 0x068, "sfhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */ 217ae06e374SMichael Ellerman APUOP(M_SFI, RI10, 0x060, "sfi", _A3(A_T,A_A,A_S10), 00012, FX2) /* SubFrom%Imm RT<-I10-RA */ 218ae06e374SMichael Ellerman APUOP(M_CGTBI, RI10, 0x270, "cgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CGT%I RT<-(RA>I10) */ 219ae06e374SMichael Ellerman APUOP(M_CGTHI, RI10, 0x268, "cgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */ 220ae06e374SMichael Ellerman APUOP(M_CGTI, RI10, 0x260, "cgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CGT%I RT<-(RA>I10) */ 221ae06e374SMichael Ellerman APUOP(M_CLGTBI, RI10, 0x2f0, "clgtbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CLGT%I RT<-(RA>I10) */ 222ae06e374SMichael Ellerman APUOP(M_CLGTHI, RI10, 0x2e8, "clgthi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */ 223ae06e374SMichael Ellerman APUOP(M_CLGTI, RI10, 0x2e0, "clgti", _A3(A_T,A_A,A_S10), 00012, FX2) /* CLGT%I RT<-(RA>I10) */ 224ae06e374SMichael Ellerman APUOP(M_CEQBI, RI10, 0x3f0, "ceqbi", _A3(A_T,A_A,A_S10B), 00012, FX2) /* CEQ%I RT<-(RA=I10) */ 225ae06e374SMichael Ellerman APUOP(M_CEQHI, RI10, 0x3e8, "ceqhi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */ 226ae06e374SMichael Ellerman APUOP(M_CEQI, RI10, 0x3e0, "ceqi", _A3(A_T,A_A,A_S10), 00012, FX2) /* CEQ%I RT<-(RA=I10) */ 227ae06e374SMichael Ellerman APUOP(M_HGTI, RI10, 0x278, "hgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */ 228ae06e374SMichael Ellerman APUOP(M_HGTI2, RI10, 0x278, "hgti", _A2(A_A,A_S10), 00010, FX2) /* HaltGTI halt_if(RA>I10) */ 229ae06e374SMichael Ellerman APUOP(M_HLGTI, RI10, 0x2f8, "hlgti", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */ 230ae06e374SMichael Ellerman APUOP(M_HLGTI2, RI10, 0x2f8, "hlgti", _A2(A_A,A_S10), 00010, FX2) /* HaltLGTI halt_if(RA>I10) */ 231ae06e374SMichael Ellerman APUOP(M_HEQI, RI10, 0x3f8, "heqi", _A3(A_T,A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */ 232ae06e374SMichael Ellerman APUOP(M_HEQI2, RI10, 0x3f8, "heqi", _A2(A_A,A_S10), 00010, FX2) /* HaltEQImm halt_if(RA=I10) */ 233ae06e374SMichael Ellerman APUOP(M_MPYI, RI10, 0x3a0, "mpyi", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYI RT<-RA*I10 */ 234ae06e374SMichael Ellerman APUOP(M_MPYUI, RI10, 0x3a8, "mpyui", _A3(A_T,A_A,A_S10), 00012, FP7) /* MPYUI RT<-RA*I10 */ 235ae06e374SMichael Ellerman APUOP(M_CFLTS, RI8, 0x3b0, "cflts", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTS RT<-int(RA,I8) */ 236ae06e374SMichael Ellerman APUOP(M_CFLTU, RI8, 0x3b2, "cfltu", _A3(A_T,A_A,A_U7A), 00012, FP7) /* CFLTU RT<-int(RA,I8) */ 237ae06e374SMichael Ellerman APUOP(M_CSFLT, RI8, 0x3b4, "csflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CSFLT RT<-flt(RA,I8) */ 238ae06e374SMichael Ellerman APUOP(M_CUFLT, RI8, 0x3b6, "cuflt", _A3(A_T,A_A,A_U7B), 00012, FP7) /* CUFLT RT<-flt(RA,I8) */ 239ae06e374SMichael Ellerman APUOP(M_FESD, RR, 0x3b8, "fesd", _A2(A_T,A_A), 00012, FPD) /* FESD RT<-double(RA) */ 240ae06e374SMichael Ellerman APUOP(M_FRDS, RR, 0x3b9, "frds", _A2(A_T,A_A), 00012, FPD) /* FRDS RT<-single(RA) */ 241ae06e374SMichael Ellerman APUOP(M_FSCRRD, RR, 0x398, "fscrrd", _A1(A_T), 00002, FPD) /* FSCRRD RT<-FP_status */ 242ae06e374SMichael Ellerman APUOP(M_FSCRWR, RR, 0x3ba, "fscrwr", _A2(A_T,A_A), 00010, FP7) /* FSCRWR FP_status<-RA */ 243ae06e374SMichael Ellerman APUOP(M_FSCRWR2, RR, 0x3ba, "fscrwr", _A1(A_A), 00010, FP7) /* FSCRWR FP_status<-RA */ 244ae06e374SMichael Ellerman APUOP(M_CLZ, RR, 0x2a5, "clz", _A2(A_T,A_A), 00012, FX2) /* CLZ RT<-clz(RA) */ 245ae06e374SMichael Ellerman APUOP(M_CNTB, RR, 0x2b4, "cntb", _A2(A_T,A_A), 00012, FXB) /* CNT RT<-pop(RA) */ 246ae06e374SMichael Ellerman APUOP(M_XSBH, RR, 0x2b6, "xsbh", _A2(A_T,A_A), 00012, FX2) /* eXtSignBtoH RT<-sign_ext(RA) */ 247ae06e374SMichael Ellerman APUOP(M_XSHW, RR, 0x2ae, "xshw", _A2(A_T,A_A), 00012, FX2) /* eXtSignHtoW RT<-sign_ext(RA) */ 248ae06e374SMichael Ellerman APUOP(M_XSWD, RR, 0x2a6, "xswd", _A2(A_T,A_A), 00012, FX2) /* eXtSignWtoD RT<-sign_ext(RA) */ 249ae06e374SMichael Ellerman APUOP(M_ROTI, RI7, 0x078, "roti", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */ 250ae06e374SMichael Ellerman APUOP(M_ROTMI, RI7, 0x079, "rotmi", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROT%MI RT<-RA<<I7 */ 251ae06e374SMichael Ellerman APUOP(M_ROTMAI, RI7, 0x07a, "rotmai", _A3(A_T,A_A,A_S7), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */ 252ae06e374SMichael Ellerman APUOP(M_SHLI, RI7, 0x07b, "shli", _A3(A_T,A_A,A_U6), 00012, FX3) /* SHL%I RT<-RA<<I7 */ 253ae06e374SMichael Ellerman APUOP(M_ROTHI, RI7, 0x07c, "rothi", _A3(A_T,A_A,A_S7N), 00012, FX3) /* ROT%I RT<-RA<<<I7 */ 254ae06e374SMichael Ellerman APUOP(M_ROTHMI, RI7, 0x07d, "rothmi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROT%MI RT<-RA<<I7 */ 255ae06e374SMichael Ellerman APUOP(M_ROTMAHI, RI7, 0x07e, "rotmahi", _A3(A_T,A_A,A_S6), 00012, FX3) /* ROTMA%I RT<-RA<<I7 */ 256ae06e374SMichael Ellerman APUOP(M_SHLHI, RI7, 0x07f, "shlhi", _A3(A_T,A_A,A_U5), 00012, FX3) /* SHL%I RT<-RA<<I7 */ 257ae06e374SMichael Ellerman APUOP(M_A, RR, 0x0c0, "a", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */ 258ae06e374SMichael Ellerman APUOP(M_AH, RR, 0x0c8, "ah", _A3(A_T,A_A,A_B), 00112, FX2) /* Add% RT<-RA+RB */ 259ae06e374SMichael Ellerman APUOP(M_SF, RR, 0x040, "sf", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */ 260ae06e374SMichael Ellerman APUOP(M_SFH, RR, 0x048, "sfh", _A3(A_T,A_A,A_B), 00112, FX2) /* SubFrom% RT<-RB-RA */ 261ae06e374SMichael Ellerman APUOP(M_CGT, RR, 0x240, "cgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */ 262ae06e374SMichael Ellerman APUOP(M_CGTB, RR, 0x250, "cgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */ 263ae06e374SMichael Ellerman APUOP(M_CGTH, RR, 0x248, "cgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CGT% RT<-(RA>RB) */ 264ae06e374SMichael Ellerman APUOP(M_CLGT, RR, 0x2c0, "clgt", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */ 265ae06e374SMichael Ellerman APUOP(M_CLGTB, RR, 0x2d0, "clgtb", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */ 266ae06e374SMichael Ellerman APUOP(M_CLGTH, RR, 0x2c8, "clgth", _A3(A_T,A_A,A_B), 00112, FX2) /* CLGT% RT<-(RA>RB) */ 267ae06e374SMichael Ellerman APUOP(M_CEQ, RR, 0x3c0, "ceq", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */ 268ae06e374SMichael Ellerman APUOP(M_CEQB, RR, 0x3d0, "ceqb", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */ 269ae06e374SMichael Ellerman APUOP(M_CEQH, RR, 0x3c8, "ceqh", _A3(A_T,A_A,A_B), 00112, FX2) /* CEQ% RT<-(RA=RB) */ 270ae06e374SMichael Ellerman APUOP(M_HGT, RR, 0x258, "hgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */ 271ae06e374SMichael Ellerman APUOP(M_HGT2, RR, 0x258, "hgt", _A2(A_A,A_B), 00110, FX2) /* HaltGT halt_if(RA>RB) */ 272ae06e374SMichael Ellerman APUOP(M_HLGT, RR, 0x2d8, "hlgt", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */ 273ae06e374SMichael Ellerman APUOP(M_HLGT2, RR, 0x2d8, "hlgt", _A2(A_A,A_B), 00110, FX2) /* HaltLGT halt_if(RA>RB) */ 274ae06e374SMichael Ellerman APUOP(M_HEQ, RR, 0x3d8, "heq", _A3(A_T,A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */ 275ae06e374SMichael Ellerman APUOP(M_HEQ2, RR, 0x3d8, "heq", _A2(A_A,A_B), 00110, FX2) /* HaltEQ halt_if(RA=RB) */ 276ae06e374SMichael Ellerman APUOP(M_FCEQ, RR, 0x3c2, "fceq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCEQ RT<-(RA=RB) */ 277ae06e374SMichael Ellerman APUOP(M_FCMEQ, RR, 0x3ca, "fcmeq", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMEQ RT<-(|RA|=|RB|) */ 278ae06e374SMichael Ellerman APUOP(M_FCGT, RR, 0x2c2, "fcgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCGT RT<-(RA<RB) */ 279ae06e374SMichael Ellerman APUOP(M_FCMGT, RR, 0x2ca, "fcmgt", _A3(A_T,A_A,A_B), 00112, FX2) /* FCMGT RT<-(|RA|<|RB|) */ 280ae06e374SMichael Ellerman APUOP(M_AND, RR, 0x0c1, "and", _A3(A_T,A_A,A_B), 00112, FX2) /* AND RT<-RA&RB */ 281ae06e374SMichael Ellerman APUOP(M_NAND, RR, 0x0c9, "nand", _A3(A_T,A_A,A_B), 00112, FX2) /* NAND RT<-!(RA&RB) */ 282ae06e374SMichael Ellerman APUOP(M_OR, RR, 0x041, "or", _A3(A_T,A_A,A_B), 00112, FX2) /* OR RT<-RA|RB */ 283ae06e374SMichael Ellerman APUOP(M_NOR, RR, 0x049, "nor", _A3(A_T,A_A,A_B), 00112, FX2) /* NOR RT<-!(RA&RB) */ 284ae06e374SMichael Ellerman APUOP(M_XOR, RR, 0x241, "xor", _A3(A_T,A_A,A_B), 00112, FX2) /* XOR RT<-RA^RB */ 285ae06e374SMichael Ellerman APUOP(M_EQV, RR, 0x249, "eqv", _A3(A_T,A_A,A_B), 00112, FX2) /* EQuiValent RT<-!(RA^RB) */ 286ae06e374SMichael Ellerman APUOP(M_ANDC, RR, 0x2c1, "andc", _A3(A_T,A_A,A_B), 00112, FX2) /* ANDComplement RT<-RA&!RB */ 287ae06e374SMichael Ellerman APUOP(M_ORC, RR, 0x2c9, "orc", _A3(A_T,A_A,A_B), 00112, FX2) /* ORComplement RT<-RA|!RB */ 288ae06e374SMichael Ellerman APUOP(M_ABSDB, RR, 0x053, "absdb", _A3(A_T,A_A,A_B), 00112, FXB) /* ABSoluteDiff RT<-|RA-RB| */ 289ae06e374SMichael Ellerman APUOP(M_AVGB, RR, 0x0d3, "avgb", _A3(A_T,A_A,A_B), 00112, FXB) /* AVG% RT<-(RA+RB+1)/2 */ 290ae06e374SMichael Ellerman APUOP(M_SUMB, RR, 0x253, "sumb", _A3(A_T,A_A,A_B), 00112, FXB) /* SUM% RT<-f(RA,RB) */ 291ae06e374SMichael Ellerman APUOP(M_DFA, RR, 0x2cc, "dfa", _A3(A_T,A_A,A_B), 00112, FPD) /* DFAdd RT<-RA+RB */ 292ae06e374SMichael Ellerman APUOP(M_DFM, RR, 0x2ce, "dfm", _A3(A_T,A_A,A_B), 00112, FPD) /* DFMul RT<-RA*RB */ 293ae06e374SMichael Ellerman APUOP(M_DFS, RR, 0x2cd, "dfs", _A3(A_T,A_A,A_B), 00112, FPD) /* DFSub RT<-RA-RB */ 294ae06e374SMichael Ellerman APUOP(M_FA, RR, 0x2c4, "fa", _A3(A_T,A_A,A_B), 00112, FP6) /* FAdd RT<-RA+RB */ 295ae06e374SMichael Ellerman APUOP(M_FM, RR, 0x2c6, "fm", _A3(A_T,A_A,A_B), 00112, FP6) /* FMul RT<-RA*RB */ 296ae06e374SMichael Ellerman APUOP(M_FS, RR, 0x2c5, "fs", _A3(A_T,A_A,A_B), 00112, FP6) /* FSub RT<-RA-RB */ 297ae06e374SMichael Ellerman APUOP(M_MPY, RR, 0x3c4, "mpy", _A3(A_T,A_A,A_B), 00112, FP7) /* MPY RT<-RA*RB */ 298ae06e374SMichael Ellerman APUOP(M_MPYH, RR, 0x3c5, "mpyh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYH RT<-(RAh*RB)<<16 */ 299ae06e374SMichael Ellerman APUOP(M_MPYHH, RR, 0x3c6, "mpyhh", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHH RT<-RAh*RBh */ 300ae06e374SMichael Ellerman APUOP(M_MPYHHU, RR, 0x3ce, "mpyhhu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYHHU RT<-RAh*RBh */ 301ae06e374SMichael Ellerman APUOP(M_MPYS, RR, 0x3c7, "mpys", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYS RT<-(RA*RB)>>16 */ 302ae06e374SMichael Ellerman APUOP(M_MPYU, RR, 0x3cc, "mpyu", _A3(A_T,A_A,A_B), 00112, FP7) /* MPYU RT<-RA*RB */ 303ae06e374SMichael Ellerman APUOP(M_FI, RR, 0x3d4, "fi", _A3(A_T,A_A,A_B), 00112, FP7) /* FInterpolate RT<-f(RA,RB) */ 304ae06e374SMichael Ellerman APUOP(M_ROT, RR, 0x058, "rot", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */ 305ae06e374SMichael Ellerman APUOP(M_ROTM, RR, 0x059, "rotm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */ 306ae06e374SMichael Ellerman APUOP(M_ROTMA, RR, 0x05a, "rotma", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */ 307ae06e374SMichael Ellerman APUOP(M_SHL, RR, 0x05b, "shl", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */ 308ae06e374SMichael Ellerman APUOP(M_ROTH, RR, 0x05c, "roth", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT% RT<-RA<<<RB */ 309ae06e374SMichael Ellerman APUOP(M_ROTHM, RR, 0x05d, "rothm", _A3(A_T,A_A,A_B), 00112, FX3) /* ROT%M RT<-RA<<Rb */ 310ae06e374SMichael Ellerman APUOP(M_ROTMAH, RR, 0x05e, "rotmah", _A3(A_T,A_A,A_B), 00112, FX3) /* ROTMA% RT<-RA<<Rb */ 311ae06e374SMichael Ellerman APUOP(M_SHLH, RR, 0x05f, "shlh", _A3(A_T,A_A,A_B), 00112, FX3) /* SHL% RT<-RA<<Rb */ 312ae06e374SMichael Ellerman APUOP(M_MPYHHA, RR, 0x346, "mpyhha", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHA RT<-RAh*RBh+RT */ 313ae06e374SMichael Ellerman APUOP(M_MPYHHAU, RR, 0x34e, "mpyhhau", _A3(A_T,A_A,A_B), 00113, FP7) /* MPYHHAU RT<-RAh*RBh+RT */ 314ae06e374SMichael Ellerman APUOP(M_DFMA, RR, 0x35c, "dfma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMAdd RT<-RT+RA*RB */ 315ae06e374SMichael Ellerman APUOP(M_DFMS, RR, 0x35d, "dfms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFMSub RT<-RA*RB-RT */ 316ae06e374SMichael Ellerman APUOP(M_DFNMS, RR, 0x35e, "dfnms", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMSub RT<-RT-RA*RB */ 317ae06e374SMichael Ellerman APUOP(M_DFNMA, RR, 0x35f, "dfnma", _A3(A_T,A_A,A_B), 00113, FPD) /* DFNMAdd RT<-(-RT)-RA*RB */ 318ae06e374SMichael Ellerman APUOP(M_FMA, RRR, 0x700, "fma", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMAdd RC<-RT+RA*RB */ 319ae06e374SMichael Ellerman APUOP(M_FMS, RRR, 0x780, "fms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FMSub RC<-RA*RB-RT */ 320ae06e374SMichael Ellerman APUOP(M_FNMS, RRR, 0x680, "fnms", _A4(A_C,A_A,A_B,A_T), 02111, FP6) /* FNMSub RC<-RT-RA*RB */ 321ae06e374SMichael Ellerman APUOP(M_MPYA, RRR, 0x600, "mpya", _A4(A_C,A_A,A_B,A_T), 02111, FP7) /* MPYA RC<-RA*RB+RT */ 322ae06e374SMichael Ellerman APUOP(M_SELB, RRR, 0x400, "selb", _A4(A_C,A_A,A_B,A_T), 02111, FX2) /* SELectBits RC<-RA&RT|RB&!RT */ 323ae06e374SMichael Ellerman /* for system function call, this uses op-code of mtspr */ 324ae06e374SMichael Ellerman APUOP(M_SYSCALL, RI7, 0x10c, "syscall", _A3(A_T,A_A,A_S7N), 00002, SPR) /* System Call */ 325ae06e374SMichael Ellerman /* 326ae06e374SMichael Ellerman pseudo instruction: 327ae06e374SMichael Ellerman system call 328ae06e374SMichael Ellerman value of I9 operation 329ae06e374SMichael Ellerman 0 halt 330ae06e374SMichael Ellerman 1 rt[0] = open(MEM[ra[0]], ra[1]) 331ae06e374SMichael Ellerman 2 rt[0] = close(ra[0]) 332ae06e374SMichael Ellerman 3 rt[0] = read(ra[0], MEM[ra[1]], ra[2]) 333ae06e374SMichael Ellerman 4 rt[0] = write(ra[0], MEM[ra[1]], ra[2]) 334ae06e374SMichael Ellerman 5 printf(MEM[ra[0]], ra[1], ra[2], ra[3]) 335ae06e374SMichael Ellerman 42 rt[0] = clock() 336ae06e374SMichael Ellerman 52 rt[0] = lseek(ra0, ra1, ra2) 337ae06e374SMichael Ellerman 338ae06e374SMichael Ellerman */ 339ae06e374SMichael Ellerman 340ae06e374SMichael Ellerman 341ae06e374SMichael Ellerman /* new multiprecision add/sub */ 342ae06e374SMichael Ellerman APUOP(M_ADDX, RR, 0x340, "addx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */ 343ae06e374SMichael Ellerman APUOP(M_CG, RR, 0x0c2, "cg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */ 344ae06e374SMichael Ellerman APUOP(M_CGX, RR, 0x342, "cgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */ 345ae06e374SMichael Ellerman APUOP(M_SFX, RR, 0x341, "sfx", _A3(A_T,A_A,A_B), 00113, FX2) /* Add_eXtended RT<-RA+RB+RT */ 346ae06e374SMichael Ellerman APUOP(M_BG, RR, 0x042, "bg", _A3(A_T,A_A,A_B), 00112, FX2) /* CarryGenerate RT<-cout(RA+RB) */ 347ae06e374SMichael Ellerman APUOP(M_BGX, RR, 0x343, "bgx", _A3(A_T,A_A,A_B), 00113, FX2) /* CarryGen_eXtd RT<-cout(RA+RB+RT) */ 348ae06e374SMichael Ellerman 349ae06e374SMichael Ellerman /* 350ae06e374SMichael Ellerman 351ae06e374SMichael Ellerman The following ops are a subset of above except with feature bits set. 352ae06e374SMichael Ellerman Feature bits are bits 11-17 of the instruction: 353ae06e374SMichael Ellerman 354ae06e374SMichael Ellerman 11 - C & P feature bit 355ae06e374SMichael Ellerman 12 - disable interrupts 356ae06e374SMichael Ellerman 13 - enable interrupts 357ae06e374SMichael Ellerman 358ae06e374SMichael Ellerman */ 359ae06e374SMichael Ellerman APUOPFB(M_BID, RR, 0x1a8, 0x20, "bid", _A1(A_A), 00010, BR) /* BI IP<-RA */ 360ae06e374SMichael Ellerman APUOPFB(M_BIE, RR, 0x1a8, 0x10, "bie", _A1(A_A), 00010, BR) /* BI IP<-RA */ 361ae06e374SMichael Ellerman APUOPFB(M_BISLD, RR, 0x1a9, 0x20, "bisld", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */ 362ae06e374SMichael Ellerman APUOPFB(M_BISLE, RR, 0x1a9, 0x10, "bisle", _A2(A_T,A_A), 00012, BR) /* BISL RT,IP<-IP,RA */ 363ae06e374SMichael Ellerman APUOPFB(M_IRETD, RR, 0x1aa, 0x20, "iretd", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */ 364ae06e374SMichael Ellerman APUOPFB(M_IRETD2, RR, 0x1aa, 0x20, "iretd", _A0(), 00010, BR) /* IRET IP<-SRR0 */ 365ae06e374SMichael Ellerman APUOPFB(M_IRETE, RR, 0x1aa, 0x10, "irete", _A1(A_A), 00010, BR) /* IRET IP<-SRR0 */ 366ae06e374SMichael Ellerman APUOPFB(M_IRETE2, RR, 0x1aa, 0x10, "irete", _A0(), 00010, BR) /* IRET IP<-SRR0 */ 367ae06e374SMichael Ellerman APUOPFB(M_BISLEDD, RR, 0x1ab, 0x20, "bisledd", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */ 368ae06e374SMichael Ellerman APUOPFB(M_BISLEDE, RR, 0x1ab, 0x10, "bislede", _A2(A_T,A_A), 00012, BR) /* BISLED RT,IP<-IP,RA_if(ext) */ 369ae06e374SMichael Ellerman APUOPFB(M_BIHNZD, RR, 0x12b, 0x20, "bihnzd", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */ 370ae06e374SMichael Ellerman APUOPFB(M_BIHNZE, RR, 0x12b, 0x10, "bihnze", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */ 371ae06e374SMichael Ellerman APUOPFB(M_BIHZD, RR, 0x12a, 0x20, "bihzd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 372ae06e374SMichael Ellerman APUOPFB(M_BIHZE, RR, 0x12a, 0x10, "bihze", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 373ae06e374SMichael Ellerman APUOPFB(M_BINZD, RR, 0x129, 0x20, "binzd", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */ 374ae06e374SMichael Ellerman APUOPFB(M_BINZE, RR, 0x129, 0x10, "binze", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */ 375ae06e374SMichael Ellerman APUOPFB(M_BIZD, RR, 0x128, 0x20, "bizd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 376ae06e374SMichael Ellerman APUOPFB(M_BIZE, RR, 0x128, 0x10, "bize", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 377ae06e374SMichael Ellerman APUOPFB(M_SYNCC, RR, 0x002, 0x40, "syncc", _A0(), 00000, BR) /* SYNCC flush_pipe */ 378ae06e374SMichael Ellerman APUOPFB(M_HBRP, LBTI, 0x1ac, 0x40, "hbrp", _A0(), 00010, LS) /* HBR BTB[B9]<-M[Ra] */ 379ae06e374SMichael Ellerman 380ae06e374SMichael Ellerman /* Synonyms required by the AS manual. */ 381ae06e374SMichael Ellerman APUOP(M_LR, RI10, 0x020, "lr", _A2(A_T,A_A), 00012, FX2) /* OR%I RT<-RA|I10 */ 382ae06e374SMichael Ellerman APUOP(M_BIHT, RR, 0x12b, "biht", _A2(A_T,A_A), 00011, BR) /* BIHNZ IP<-RA_if(RT) */ 383ae06e374SMichael Ellerman APUOP(M_BIHF, RR, 0x12a, "bihf", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 384ae06e374SMichael Ellerman APUOP(M_BIT, RR, 0x129, "bit", _A2(A_T,A_A), 00011, BR) /* BINZ IP<-RA_if(RT) */ 385ae06e374SMichael Ellerman APUOP(M_BIF, RR, 0x128, "bif", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 386ae06e374SMichael Ellerman APUOPFB(M_BIHTD, RR, 0x12b, 0x20, "bihtd", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */ 387ae06e374SMichael Ellerman APUOPFB(M_BIHTE, RR, 0x12b, 0x10, "bihte", _A2(A_T,A_A), 00011, BR) /* BIHNF IP<-RA_if(RT) */ 388ae06e374SMichael Ellerman APUOPFB(M_BIHFD, RR, 0x12a, 0x20, "bihfd", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 389ae06e374SMichael Ellerman APUOPFB(M_BIHFE, RR, 0x12a, 0x10, "bihfe", _A2(A_T,A_A), 00011, BR) /* BIHZ IP<-RA_if(RT) */ 390ae06e374SMichael Ellerman APUOPFB(M_BITD, RR, 0x129, 0x20, "bitd", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */ 391ae06e374SMichael Ellerman APUOPFB(M_BITE, RR, 0x129, 0x10, "bite", _A2(A_T,A_A), 00011, BR) /* BINF IP<-RA_if(RT) */ 392ae06e374SMichael Ellerman APUOPFB(M_BIFD, RR, 0x128, 0x20, "bifd", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 393ae06e374SMichael Ellerman APUOPFB(M_BIFE, RR, 0x128, 0x10, "bife", _A2(A_T,A_A), 00011, BR) /* BIZ IP<-RA_if(RT) */ 394ae06e374SMichael Ellerman 395ae06e374SMichael Ellerman #undef _A0 396ae06e374SMichael Ellerman #undef _A1 397ae06e374SMichael Ellerman #undef _A2 398ae06e374SMichael Ellerman #undef _A3 399ae06e374SMichael Ellerman #undef _A4 400