Subversion Repositories Kolibri OS

Rev

Rev 5191 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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