Home | History | Annotate | Download | only in cpu
      1 ; IQ10-only CPU description. -*- Scheme -*-
      2 ;
      3 ; Copyright 2001, 2002, 2007, 2009 Free Software Foundation, Inc.
      4 ;
      5 ; Contributed by Red Hat Inc; developed under contract from Vitesse.
      6 ;
      7 ; This file is part of the GNU Binutils.
      8 ;
      9 ; This program is free software; you can redistribute it and/or modify
     10 ; it under the terms of the GNU General Public License as published by
     11 ; the Free Software Foundation; either version 3 of the License, or
     12 ; (at your option) any later version.
     13 ;
     14 ; This program is distributed in the hope that it will be useful,
     15 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 ; GNU General Public License for more details.
     18 ;
     19 ; You should have received a copy of the GNU General Public License
     20 ; along with this program; if not, write to the Free Software
     21 ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     22 ; MA 02110-1301, USA.
     23 
     24 
     25 ; Instructions.
     26 
     27 (dni andoui-q10 "iq10 and upper ones immediate" (MACH10 USES-RS USES-RT)
     28      "andoui $rt,$rs,$hi16"
     29      (+ OP10_ANDOUI rs rt hi16)
     30      (set rt (and rs (or (sll hi16 16) #xFFFF)))
     31      ())
     32 
     33 (dni andoui2-q10 "iq10 and upper ones immediate" (ALIAS NO-DIS MACH10 USES-RS USES-RT)
     34      "andoui ${rt-rs},$hi16"
     35      (+ OP10_ANDOUI rt-rs hi16)
     36      (set rt-rs (and rt-rs (or (sll hi16 16) #xFFFF)))
     37      ())
     38 
     39 (dni orui-q10 "or upper immediate" (MACH10 USES-RS USES-RT)
     40      "orui $rt,$rs,$hi16"
     41      (+ OP10_ORUI rs rt hi16)
     42      (set rt (or rs (sll hi16 16)))
     43      ())
     44 
     45 (dni orui2-q10 "or upper immediate" (ALIAS NO-DIS MACH10 USES-RS USES-RT)
     46      "orui ${rt-rs},$hi16"
     47      (+ OP10_ORUI rt-rs hi16)
     48      (set rt-rs (or rt-rs (sll hi16 16)))
     49      ())
     50 
     51 (dni mrgbq10 "merge bytes" (MACH10 USES-RD USES-RS USES-RT)
     52      "mrgb $rd,$rs,$rt,$maskq10"
     53      (+ OP_SPECIAL rs rt rd maskq10 FUNC_MRGB)
     54      (sequence ((SI temp))
     55 	       (if (bitclear? mask 0)
     56 		   (set temp (and rs #xFF))
     57 		   (set temp (and rt #xFF)))
     58 	       (if (bitclear? mask 1)
     59 		   (set temp (or temp (and rs #xFF00)))
     60 		   (set temp (or temp (and rt #xFF00))))
     61 	       (if (bitclear? mask 2)
     62 		   (set temp (or temp (and rs #xFF0000)))
     63 		   (set temp (or temp (and rt #xFF0000))))
     64 	       (if (bitclear? mask 3)
     65 		   (set temp (or temp (and rs #xFF000000)))
     66 		   (set temp (or temp (and rt #xFF000000))))
     67 	       (set rd temp))
     68      ())
     69 
     70 (dni mrgbq102 "merge bytes" (ALIAS NO-DIS MACH10 USES-RD USES-RS USES-RT)
     71      "mrgb ${rd-rs},$rt,$maskq10"
     72      (+ OP_SPECIAL rt rd-rs maskq10 FUNC_MRGB)
     73      (sequence ((SI temp))
     74 	       (if (bitclear? mask 0)
     75 		   (set temp (and rd-rs #xFF))
     76 		   (set temp (and rt #xFF)))
     77 	       (if (bitclear? mask 1)
     78 		   (set temp (or temp (and rd-rs #xFF00)))
     79 		   (set temp (or temp (and rt #xFF00))))
     80 	       (if (bitclear? mask 2)
     81 		   (set temp (or temp (and rd-rs #xFF0000)))
     82 		   (set temp (or temp (and rt #xFF0000))))
     83 	       (if (bitclear? mask 3)
     84 		   (set temp (or temp (and rd-rs #xFF000000)))
     85 		   (set temp (or temp (and rt #xFF000000))))
     86 	       (set rd-rs temp))
     87      ())
     88 
     89 ; In the future, we'll want the j & jal to use the 21 bit target, with 
     90 ; the upper five bits shifted up.  For now, give 'em the 16 bit target.
     91 
     92 (dni jq10 "jump" (MACH10)
     93      "j $jmptarg"
     94      (+ OP_J (f-rs 0) (f-rt 0) jmptarg)
     95 ;     "j $jmptargq10"
     96 ;     (+ OP_J upper-5-jmptargq10 (f-rt 0) lower-16-jmptargq10)
     97      (delay 1 (set pc jmptarg))
     98      ())
     99 
    100 (dni jalq10 "jump and link" (MACH10 USES-RT)
    101      "jal $rt,$jmptarg"
    102      (+ OP_JAL (f-rs 0) rt jmptarg)
    103 ;     "jal $rt,$jmptargq10"
    104 ;     (+ OP_JAL upper-5-jmptargq10 rt lower-16-jmptargq10)
    105      (delay 1
    106 	    (sequence ()
    107 		      (set rt (add pc 8))
    108 		      (set pc jmptarg)))
    109      ())
    110 
    111 (dni jalq10-2 "jump and link, implied r31" (MACH10 USES-RT)
    112      "jal $jmptarg"
    113      (+ OP_JAL (f-rs 0) (f-rt 31) jmptarg)
    114      (delay 1
    115 	    (sequence ()
    116 		      (set rt (add pc 8))
    117 		      (set pc jmptarg)))
    118      ())
    119 
    121 ; Branch instructions.
    122 
    123 (dni bbil "branch bit immediate likely" (MACH10 USES-RS)
    124      "bbil $rs($bitnum),$offset"
    125      (+ OP10_BBIL rs bitnum offset)
    126      (if (bitset? rs bitnum)
    127 	 (delay 1 (set pc offset))
    128 	 (skip 1))
    129      ())
    130 
    131 (dni bbinl "branch bit immediate negated likely" (MACH10 USES-RS)
    132      "bbinl $rs($bitnum),$offset"
    133      (+ OP10_BBINL rs bitnum offset)
    134      (if (bitclear? rs bitnum)
    135 	 (delay 1 (set pc offset))
    136 	 (skip 1))
    137      ())
    138 
    139 (dni bbvl "branch bit variable likely" (MACH10 USES-RS USES-RT)
    140      "bbvl $rs,$rt,$offset"
    141      (+ OP10_BBVL rs rt offset)
    142      (if (bitset? rs (and rt #x1F))
    143 	 (delay 1 (set pc offset))
    144 	 (skip 1))
    145      ())
    146 
    147 (dni bbvnl "branch bit variable negated likely" (MACH10 USES-RS USES-RT)
    148      "bbvnl $rs,$rt,$offset"
    149      (+ OP10_BBVNL rs rt offset)
    150      (if (bitclear? rs (and rt #x1F))
    151 	 (delay 1 (set pc offset))
    152 	 (skip 1))
    153      ())
    154 
    155 (dni bgtzal "branch if greater than zero and link" (MACH10 USES-RS USES-R31)
    156      "bgtzal $rs,$offset"
    157      (+ OP_REGIMM rs FUNC_BGTZAL offset)
    158      (if (gt rs 0)
    159 	 (sequence ()
    160 		   (set (reg h-gr 31) (add pc 8))
    161 		   (delay 1 (set pc offset))))
    162      ())
    163 
    164 (dni bgtzall
    165      "branch if greater than zero and link likely" (MACH10 USES-RS USES-R31)
    166      "bgtzall $rs,$offset"
    167      (+ OP_REGIMM rs FUNC_BGTZALL offset)
    168      (if (gt rs 0)
    169 	 (sequence ()
    170 		   (set (reg h-gr 31) (add pc 8))
    171 		   (delay 1 (set pc offset)))
    172 	 (skip 1))
    173      ())
    174 
    175 (dni blezal "branch if less than or equal to zero and link" (MACH10 USES-RS USES-R31)
    176      "blezal $rs,$offset"
    177      (+ OP_REGIMM rs FUNC_BLEZAL offset)
    178      (if (le rs 0)
    179 	 (sequence ()
    180 		   (set (reg h-gr 31) (add pc 8))
    181 		   (delay 1 (set pc offset))))
    182      ())
    183 
    184 (dni blezall
    185      "branch if less than or equal to zero and link likely" (MACH10 USES-RS USES-R31)
    186      "blezall $rs,$offset"
    187      (+ OP_REGIMM rs FUNC_BLEZALL offset)
    188      (if (le rs 0)
    189 	 (sequence ()
    190 		   (set (reg h-gr 31) (add pc 8))
    191 		   (delay 1 (set pc offset)))
    192 	 (skip 1))
    193      ())
    194 
    195 (dni bgtz-q10 "branch if greater than zero" (MACH10 USES-RS)
    196      "bgtz $rs,$offset"
    197      (+ OP_REGIMM rs FUNC_BGTZ offset)
    198      (if (gt rs 0)
    199 	 (delay 1 (set pc offset)))
    200      ())
    201 
    202 (dni bgtzl-q10 "branch if greater than zero likely" (MACH10 USES-RS)
    203      "bgtzl $rs,$offset"
    204      (+ OP_REGIMM rs FUNC_BGTZL offset)
    205      (if (gt rs 0)
    206 	 (delay 1 (set pc offset))
    207 	 (skip 1))
    208      ())
    209 
    210 
    211 (dni blez-q10 "branch if less than or equal to zero" (MACH10 USES-RS)
    212      "blez $rs,$offset"
    213      (+ OP_REGIMM rs FUNC_BLEZ offset)
    214      (if (le rs 0)
    215 	 (delay 1 (set pc offset)))
    216      ())
    217 
    218 (dni blezl-q10 "branch if less than or equal to zero likely" (MACH10 USES-RS)
    219      "blezl $rs,$offset"
    220      (+ OP_REGIMM rs FUNC_BLEZL offset)
    221      (if (le rs 0)
    222 	 (delay 1 (set pc offset))
    223 	 (skip 1))
    224      ())
    225 
    226 (dni bmb-q10 "branch if matching byte-lane" (MACH10 USES-RS USES-RT)
    227      "bmb $rs,$rt,$offset"
    228      (+ OP10_BMB rs rt offset)
    229      (sequence ((BI branch?))
    230 	       (set branch? 0)
    231 	       (if (eq (and rs #xFF) (and rt #xFF))
    232 		   (set branch? 1))
    233 	       (if (eq (and rs #xFF00) (and rt #xFF00))
    234 		   (set branch? 1))
    235 	       (if (eq (and rs #xFF0000) (and rt #xFF0000))
    236 		   (set branch? 1))
    237 	       (if (eq (and rs #xFF000000) (and rt #xFF000000))
    238 		   (set branch? 1))
    239 	       (if branch?
    240 		   (delay 1 (set pc offset))))
    241      ())
    242 
    243 (dni bmbl "branch if matching byte-lane likely" (MACH10 USES-RS USES-RT)
    244      "bmbl $rs,$rt,$offset"
    245      (+ OP10_BMBL rs rt offset)
    246      (sequence ((BI branch?))
    247 	       (set branch? 0)
    248 	       (if (eq (and rs #xFF) (and rt #xFF))
    249 		   (set branch? 1))
    250 	       (if (eq (and rs #xFF00) (and rt #xFF00))
    251 		   (set branch? 1))
    252 	       (if (eq (and rs #xFF0000) (and rt #xFF0000))
    253 		   (set branch? 1))
    254 	       (if (eq (and rs #xFF000000) (and rt #xFF000000))
    255 		   (set branch? 1))
    256 	       (if branch?
    257 		   (delay 1 (set pc offset))
    258 		   (skip 1)))
    259      ())
    260 
    261 (dni bri "branch if register invalid" (MACH10 USES-RS)
    262      "bri $rs,$offset"
    263      (+ OP_REGIMM rs FUNC_BRI offset)
    264      (if (gt rs 0)
    265 	 (delay 1 (set pc offset))
    266 	 (skip 1))
    267      ())
    268 
    269 (dni brv "branch if register invalid" (MACH10 USES-RS)
    270      "brv $rs,$offset"
    271      (+ OP_REGIMM rs FUNC_BRV offset)
    272      (if (gt rs 0)
    273 	 (delay 1 (set pc offset))
    274 	 (skip 1))
    275      ())
    276 
    277 ; debug instructions
    278 
    279 (dni bctx "branch if the current context == instruction[21]" (MACH10 USES-RS)
    280      "bctx $rs,$offset"
    281      (+ OP_REGIMM rs FUNC_BCTX offset)
    282      (delay 1 (set pc offset))
    283      ())
    284 
    285 (dni yield "unconditional yield to the other context" (MACH10)
    286      "yield"
    287      (+ OP_SPECIAL (f-rs 0) (f-rt 0) (f-rd 0) (f-shamt 0) FUNC10_YIELD)
    288      (unimp yield)
    289      ())
    290 
    291 ; Special instructions.
    292 
    293 (dni crc32 "CRC, 32 bit input" (MACH10 USES-RD USES-RS USES-RT)
    294      "crc32 $rd,$rs,$rt"
    295      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_CRC32)
    296      (unimp crc32)
    297      ())
    298 
    299 (dni crc32b "CRC, 8 bit input" (MACH10 USES-RD USES-RS USES-RT)
    300      "crc32b $rd,$rs,$rt"
    301      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_CRC32B)
    302      (unimp crc32b)
    303      ())
    304 
    305 (dni cnt1s "Count ones" (MACH10 USES-RD USES-RS)
    306      "cnt1s $rd,$rs"
    307      (+ OP_SPECIAL rs rt rd (f-shamt 0) FUNC10_CNT1S)
    308      (unimp crcp)
    309      ())
    310 
    311 
    313 ; Special Instructions
    314 
    315 (dni avail "Mark Header Buffer Available" (MACH10 USES-RD)
    316      "avail $rd"
    317      (+ OP_COP3 (f-rs 0) (f-rt 0) rd (f-shamt 0) FUNC10_AVAIL)
    318      (unimp avail)
    319      ())
    320 
    321 (dni free "Mark Header Buffer Free" (MACH10 USES-RS USES-RD)
    322      "free $rd,$rs"
    323      (+ OP_COP3 rs (f-rt 0) rd (f-shamt 0) FUNC10_FREE)
    324      (unimp free)
    325      ())
    326 
    327 (dni tstod "Test Header Buffer Order Dependency" (MACH10 USES-RS USES-RD)
    328      "tstod $rd,$rs"
    329      (+ OP_COP3 rs (f-rt 0) rd (f-shamt 0) FUNC10_TSTOD)
    330      (unimp tstod)
    331      ())
    332 
    333 (dni cmphdr "Get a Complete Header" (MACH10 USES-RD)
    334      "cmphdr $rd"
    335      (+ OP_COP3 (f-rs 0) (f-rt 0) rd (f-shamt 0) FUNC10_CMPHDR)
    336      (unimp cmphdr)
    337      ())
    338 
    339 (dni mcid "Allocate a Multicast ID" (MACH10 USES-RD USES-RT)
    340      "mcid $rd,$rt"
    341      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_MCID)
    342      (unimp mcid)
    343      ())
    344 
    345 (dni dba "Allocate a Data Buffer Pointer" (MACH10 USES-RD)
    346      "dba $rd"
    347      (+ OP_COP3 (f-rs 0) (f-rt 0) rd (f-shamt 0) FUNC10_DBA)
    348      (unimp dba)
    349      ())
    350 
    351 (dni dbd "Deallocate a Data Buffer Pointer" (MACH10 USES-RS USES-RT USES-RD)
    352      "dbd $rd,$rs,$rt"
    353      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_DBD)
    354      (unimp dbd)
    355      ())
    356 
    357 (dni dpwt "DSTN_PORT Write" (MACH10 USES-RS USES-RD)
    358      "dpwt $rd,$rs"
    359      (+ OP_COP3 rs (f-rt 0) rd (f-shamt 0) FUNC10_DPWT)
    360      (unimp dpwt)
    361      ())
    362 
    363 ; Architectural and coprocessor instructions.
    364 
    365 (dni chkhdrq10 "" (MACH10 USES-RS USES-RD)
    366      "chkhdr $rd,$rs"
    367      (+ OP_COP3 rs (f-rt 0) rd (f-shamt 0) FUNC10_CHKHDR)
    368      (unimp chkhdr)
    369      ())
    370 
    371 ; Coprocessor DMA Instructions (IQ10)
    372 
    373 (dni rba "Read Bytes Absolute" (MACH10 USES-RS USES-RT USES-RD)
    374      "rba $rd,$rs,$rt"
    375      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_RBA)
    376      (unimp rba)
    377      ())
    378 
    379 (dni rbal "Read Bytes Absolute and Lock" (MACH10 USES-RS USES-RT USES-RD)
    380      "rbal $rd,$rs,$rt"
    381      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_RBAL)
    382      (unimp rbal)
    383      ())
    384 
    385 (dni rbar "Read Bytes Absolute and Release" (MACH10 USES-RS USES-RT USES-RD)
    386      "rbar $rd,$rs,$rt"
    387      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_RBAR)
    388      (unimp rbar)
    389      ())
    390 
    391 (dni wba "Write Bytes Absolute" (MACH10 USES-RS USES-RT USES-RD)
    392      "wba $rd,$rs,$rt"
    393      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_WBA)
    394      (unimp wba)
    395      ())
    396 
    397 (dni wbau "Write Bytes Absolute and Unlock" (MACH10 USES-RS USES-RT USES-RD)
    398      "wbau $rd,$rs,$rt"
    399      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_WBAU)
    400      (unimp wbau)
    401      ())
    402 
    403 (dni wbac "Write Bytes Absolute Cacheable" (MACH10 USES-RS USES-RT USES-RD)
    404      "wbac $rd,$rs,$rt"
    405      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_WBAC)
    406      (unimp wbac)
    407      ())
    408 
    409 (dni rbi "Read Bytes Immediate" (MACH10 USES-RD USES-RS USES-RT)
    410      "rbi $rd,$rs,$rt,$bytecount"
    411      (+ OP_COP3 rs rt rd FUNC10_RBI bytecount)
    412      (unimp rbi)
    413      ())
    414 
    415 (dni rbil "Read Bytes Immediate and Lock" (MACH10 USES-RD USES-RS USES-RT)
    416      "rbil $rd,$rs,$rt,$bytecount"
    417      (+ OP_COP3 rs rt rd FUNC10_RBIL bytecount)
    418      (unimp rbil)
    419      ())
    420 
    421 (dni rbir "Read Bytes Immediate and Release" (MACH10 USES-RD USES-RS USES-RT)
    422      "rbir $rd,$rs,$rt,$bytecount"
    423      (+ OP_COP3 rs rt rd FUNC10_RBIR bytecount)
    424      (unimp rbir)
    425      ())
    426 
    427 (dni wbi "Write Bytes Immediate" (MACH10 USES-RD USES-RS USES-RT)
    428      "wbi $rd,$rs,$rt,$bytecount"
    429      (+ OP_COP3 rs rt rd FUNC10_WBI bytecount)
    430      (unimp wbi)
    431      ())
    432 
    433 (dni wbic "Write Bytes Immediate Cacheable" (MACH10 USES-RD USES-RS USES-RT)
    434      "wbic $rd,$rs,$rt,$bytecount"
    435      (+ OP_COP3 rs rt rd FUNC10_WBIC bytecount)
    436      (unimp wbic)
    437      ())
    438 
    439 (dni wbiu "Write Bytes Immediate" (MACH10 USES-RD USES-RS USES-RT)
    440      "wbiu $rd,$rs,$rt,$bytecount"
    441      (+ OP_COP3 rs rt rd FUNC10_WBIU bytecount)
    442      (unimp wbiu)
    443      ())
    444 
    445 (dni pkrli "Packet Release Immediate" (MACH10 USES-RD USES-RS USES-RT)
    446      "pkrli $rd,$rs,$rt,$bytecount"
    447      (+ OP_COP2 rs rt rd FUNC10_PKRLI bytecount)
    448      (unimp pkrli)
    449      ())
    450 
    451 (dni pkrlih "Packet Release Immediate and Hold" (MACH10 USES-RD USES-RS USES-RT)
    452      "pkrlih $rd,$rs,$rt,$bytecount"
    453      (+ OP_COP2 rs rt rd FUNC10_PKRLIH bytecount)
    454      (unimp pkrlih)
    455      ())
    456 
    457 (dni pkrliu "Packet Release Immediate Unconditional" (MACH10 USES-RD USES-RS USES-RT)
    458      "pkrliu $rd,$rs,$rt,$bytecount"
    459      (+ OP_COP2 rs rt rd FUNC10_PKRLIU bytecount)
    460      (unimp pkrliu)
    461      ())
    462 
    463 (dni pkrlic "Packet Release Immediate Continue" (MACH10 USES-RD USES-RS USES-RT)
    464      "pkrlic $rd,$rs,$rt,$bytecount"
    465      (+ OP_COP2 rs rt rd FUNC10_PKRLIC bytecount)
    466      (unimp pkrlic)
    467      ())
    468 
    469 (dni pkrla "Packet Release Absolute" (MACH10 USES-RS USES-RT USES-RD)
    470      "pkrla $rd,$rs,$rt"
    471      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_PKRLA)
    472      (unimp pkrla)
    473      ())
    474 
    475 (dni pkrlau "Packet Release Absolute Unconditional" (MACH10 USES-RS USES-RT USES-RD)
    476      "pkrlau $rd,$rs,$rt"
    477      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_PKRLAU)
    478      (unimp pkrlau)
    479      ())
    480 
    481 (dni pkrlah "Packet Release Absolute and Hold" (MACH10 USES-RS USES-RT USES-RD)
    482      "pkrlah $rd,$rs,$rt"
    483      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_PKRLAH)
    484      (unimp pkrlah)
    485      ())
    486 
    487 (dni pkrlac "Packet Release Absolute Continue" (MACH10 USES-RS USES-RT USES-RD)
    488      "pkrlac $rd,$rs,$rt"
    489      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_PKRLAC)
    490      (unimp pkrlac)
    491      ())
    492 
    493 ; Main Memory Access Instructions
    494 
    495 (dni lock "lock memory" (MACH10 USES-RD USES-RT)
    496      "lock $rd,$rt"
    497      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_LOCK)
    498      (unimp lock)
    499      ())
    500 
    501 (dni unlk "unlock memory" (MACH10 USES-RT USES-RD)
    502      "unlk $rd,$rt"
    503      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_UNLK)
    504      (unimp unlk)
    505      ())
    506      
    507 (dni swrd "Single Word Read" (MACH10 USES-RT USES-RD)
    508      "swrd $rd,$rt"
    509      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_SWRD)
    510      (unimp swrd)
    511      ())
    512 
    513 (dni swrdl "Single Word Read and Lock" (MACH10 USES-RT USES-RD)
    514      "swrdl $rd,$rt"
    515      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_SWRDL)
    516      (unimp swrdl)
    517      ())
    518 
    519 (dni swwr "Single Word Write" (MACH10 USES-RS USES-RT USES-RD)
    520      "swwr $rd,$rs,$rt"
    521      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_SWWR)
    522      (unimp swwr)
    523      ())
    524 
    525 (dni swwru "Single Word Write and Unlock" (MACH10 USES-RS USES-RT USES-RD)
    526      "swwru $rd,$rs,$rt"
    527      (+ OP_COP3 rs rt rd (f-shamt 0) FUNC10_SWWRU)
    528      (unimp swwru)
    529      ())
    530 
    531 (dni dwrd "Double Word Read" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    532      "dwrd $rd,$rt"
    533      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_DWRD)
    534      (unimp dwrd)
    535      ())
    536 
    537 (dni dwrdl "Double Word Read and Lock" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    538      "dwrdl $rd,$rt"
    539      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_DWRDL)
    540      (unimp dwrdl)
    541      ())
    542 
    543 ; CAM access instructions (IQ10)
    544 
    545 (dni cam36 "CAM Access in 36-bit Mode" (MACH10 USES-RT USES-RD)
    546      "cam36 $rd,$rt,${cam-z},${cam-y}"
    547      (+ OP_COP3 (f-rs 0) rt rd FUNC10_CAM36 cam-z cam-y)
    548      (unimp cam36)
    549      ())
    550 
    551 (dni cam72 "CAM Access in 72-bit Mode" (MACH10 USES-RT USES-RD)
    552      "cam72 $rd,$rt,${cam-y},${cam-z}"
    553      (+ OP_COP3 (f-rs 0) rt rd FUNC10_CAM72 cam-z cam-y)
    554      (unimp cam72)
    555      ())
    556 
    557 (dni cam144 "CAM Access in 144-bit Mode" (MACH10 USES-RT USES-RD)
    558      "cam144 $rd,$rt,${cam-y},${cam-z}"
    559      (+ OP_COP3 (f-rs 0) rt rd FUNC10_CAM144 cam-z cam-y)
    560      (unimp cam144)
    561      ())
    562 
    563 (dni cam288 "CAM Access in 288-bit Mode" (MACH10 USES-RT USES-RD)
    564      "cam288 $rd,$rt,${cam-y},${cam-z}"
    565      (+ OP_COP3 (f-rs 0) rt rd FUNC10_CAM288 cam-z cam-y)
    566      (unimp cam288)
    567      ())
    568 
    569 ; Counter manager instructions (IQ10)
    570 
    571 (dni cm32and "Counter Manager And" (MACH10 USES-RS USES-RT USES-RD)
    572      "cm32and $rd,$rs,$rt"
    573      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32AND)
    574      (unimp cm32and)
    575      ())
    576 
    577 (dni cm32andn "Counter Manager And With Inverse" (MACH10 USES-RS USES-RT USES-RD)
    578      "cm32andn $rd,$rs,$rt"
    579      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32ANDN)
    580      (unimp cm32andn)
    581      ())
    582 
    583 (dni cm32or "Counter Manager Or" (MACH10 USES-RS USES-RT USES-RD)
    584      "cm32or $rd,$rs,$rt"
    585      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32OR)
    586      (unimp cm32or)
    587      ())
    588 
    589 (dni cm32ra "Counter Manager 32-bit Rolling Add" (MACH10 USES-RS USES-RT USES-RD)
    590      "cm32ra $rd,$rs,$rt"
    591      (+ OP_COP3 rs rt rd (f-shamt 2) FUNC10_CM32RA)
    592      (unimp cm32ra)
    593      ())
    594 
    595 (dni cm32rd "Counter Manager 32-bit Rolling Decrement" (MACH10 USES-RT USES-RD)
    596      "cm32rd $rd,$rt"
    597      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32RD)
    598      (unimp cm32rd)
    599      ())
    600 
    601 (dni cm32ri "Counter Manager 32-bit Rolling Increment" (MACH10 USES-RT USES-RD)
    602      "cm32ri $rd,$rt"
    603      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32RI)
    604      (unimp cm32ri)
    605      ())
    606 
    607 (dni cm32rs "Counter Manager 32-bit Rolling Subtract" (MACH10 USES-RS USES-RT USES-RD)
    608      "cm32rs $rd,$rs,$rt"
    609      (+ OP_COP3 rs rt rd (f-shamt 2) FUNC10_CM32RS)
    610      (unimp cm32rs)
    611      ())
    612 
    613 (dni cm32sa "Counter Manager 32-bit Saturating Add" (MACH10 USES-RS USES-RT USES-RD)
    614      "cm32sa $rd,$rs,$rt"
    615      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32SA)
    616      (unimp cm32sa)
    617      ())
    618 
    619 (dni cm32sd "Counter Manager 32-bit Saturating Decrement" (MACH10 USES-RT USES-RD)
    620      "cm32sd $rd,$rt"
    621      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32SD)
    622      (unimp cm32sd)
    623      ())
    624 
    625 (dni cm32si "Counter Manager 32-bit Saturating Increment" (MACH10 USES-RT USES-RD)
    626      "cm32si $rd,$rt"
    627      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32SI)
    628      (unimp cm32si)
    629      ())
    630 
    631 (dni cm32ss "Counter Manager 32-bit Saturating Subtract" (MACH10 USES-RS USES-RT USES-RD)
    632      "cm32ss $rd,$rs,$rt"
    633      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32SS)
    634      (unimp cm32ss)
    635      ())
    636 
    637 (dni cm32xor "Counter Manager Xor" (MACH10 USES-RS USES-RT USES-RD)
    638      "cm32xor $rd,$rs,$rt"
    639      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM32XOR)
    640      (unimp cm32xor)
    641      ())
    642 
    643 (dni cm64clr "Counter Manager Clear" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    644      "cm64clr $rd,$rt"
    645      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64CLR)
    646      (unimp cm64clr)
    647      ())
    648 
    649 (dni cm64ra "Counter Manager 64-bit Rolling Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    650      "cm64ra $rd,$rs,$rt"
    651      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64RA)
    652      (unimp cm64ra)
    653      ())
    654 
    655 (dni cm64rd "Counter Manager 64-bit Rolling Decrement" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    656      "cm64rd $rd,$rt"
    657      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64RD)
    658      (unimp cm64rd)
    659      ())
    660 
    661 (dni cm64ri "Counter Manager 32-bit Rolling Increment" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    662      "cm64ri $rd,$rt"
    663      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64RI)
    664      (unimp cm64ri)
    665      ())
    666 
    667 (dni cm64ria2 "Counter Manager 32/32 Rolling Increment/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    668      "cm64ria2 $rd,$rs,$rt"
    669      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64RIA2)
    670      (unimp cm64ria2)
    671      ())
    672 
    673 (dni cm64rs "Counter Manager 64-bit Rolling Subtract" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    674      "cm64rs $rd,$rs,$rt"
    675      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64RS)
    676      (unimp cm64rs)
    677      ())
    678 
    679 (dni cm64sa "Counter Manager 64-bit Saturating Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    680      "cm64sa $rd,$rs,$rt"
    681      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64SA)
    682      (unimp cm64sa)
    683      ())
    684 
    685 (dni cm64sd "Counter Manager 64-bit Saturating Decrement" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    686      "cm64sd $rd,$rt"
    687      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64SD)
    688      (unimp cm64sd)
    689      ())
    690 
    691 (dni cm64si "Counter Manager 64-bit Saturating Increment" (MACH10 EVEN-REG-NUM USES-RT USES-RD)
    692      "cm64si $rd,$rt"
    693      (+ OP_COP3 (f-rs 0) rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64SI)
    694      (unimp cm64si)
    695      ())
    696 
    697 (dni cm64sia2 "Counter Manager 32/32 Saturating Increment/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    698      "cm64sia2 $rd,$rs,$rt"
    699      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64SIA2)
    700      (unimp cm64sia2)
    701      ())
    702 
    703 (dni cm64ss "Counter Manager 64-bit Saturating Subtract" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    704      "cm64ss $rd,$rs,$rt"
    705      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM64SS)
    706      (unimp cm64ss)
    707      ())
    708 
    709 (dni cm128ria2 "Counter Manager 128-bit 64/64 Rolling Increment/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    710      "cm128ria2 $rd,$rs,$rt"
    711      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128RIA2)
    712      (unimp cm128ria2)
    713      ())
    714 
    715 (dni cm128ria3 "Counter Manager 128-bit 32/32/64 Rolling Increment/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    716      "cm128ria3 $rd,$rs,$rt,${cm-3z}"
    717      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128RIA3 cm-3z)
    718      (unimp cm128ria3)
    719      ())
    720 
    721 (dni cm128ria4 "Counter Manager 128-bit 32/32/32/32 Rolling Inc/Add" (MACH10 USES-RS USES-RT USES-RD)
    722      "cm128ria4 $rd,$rs,$rt,${cm-4z}"
    723      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128RIA4 cm-4z)
    724      (unimp cm128ria4)
    725      ())
    726 
    727 (dni cm128sia2 "Counter Manager 128-bit 64/64 Saturating Inc/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    728      "cm128sia2 $rd,$rs,$rt"
    729      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128SIA2)
    730      (unimp cm128sia2)
    731      ())
    732 
    733 (dni cm128sia3 "Counter Manager 128-bit 32/32/64 Saturating Inc/Add" (MACH10 EVEN-REG-NUM USES-RS USES-RT USES-RD)
    734      "cm128sia3 $rd,$rs,$rt,${cm-3z}"
    735      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128SIA3 cm-3z)
    736      (unimp cm128sia3)
    737      ())
    738 
    739 (dni cm128sia4 "Counter Manager 128-bit 32/32/32/32 Saturating Inc/Add" (MACH10 USES-RS USES-RT USES-RD)
    740      "cm128sia4 $rd,$rs,$rt,${cm-4z}"
    741      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128SIA4 cm-4z)
    742      (unimp cm128sia4)
    743      ())
    744 
    745 (dni cm128vsa "Counter Manager Continuous State Dual Leaky Token Bucket Policing" (MACH10 USES-RS USES-RT USES-RD)
    746      "cm128vsa $rd,$rs,$rt"
    747      (+ OP_COP3 rs rt rd (f-cp-op 0) (f-cp-grp 2) FUNC10_CM128VSA)
    748      (unimp cm128vsa)
    749      ())
    750 
    751 ; Coprocessor Data Movement Instructions
    752 
    753 ; Note that we don't set the USES-RD or USES-RT attributes for many of the following 
    754 ; instructions, as it's the COP register that's being specified.
    755 
    756 ; ??? Is YIELD-INSN the right attribute for IQ10?  The IQ2000 used the attribute to warn about 
    757 ; yielding instructions in a delay slot, but that's not relevant in IQ10.  What *is* relevant 
    758 ; (and unique to IQ10) is instructions that yield if the destination register is accessed 
    759 ; before the value is there, causing a yield.
    760 
    761 (dni cfc "copy from coprocessor control register" (MACH10 LOAD-DELAY USES-RD YIELD-INSN)
    762      "cfc $rd,$rt"
    763      (+ OP_COP3 (f-rs 0) rt rd (f-shamt 0) FUNC10_CFC)
    764      (unimp cfc)
    765      ())
    766 
    767 (dni ctc "copy to coprocessor control register" (MACH10 USES-RS)
    768      "ctc $rs,$rt"
    769      (+ OP_COP3 rs rt (f-rd 0) (f-shamt 0) FUNC10_CTC)
    770      (unimp ctc)
    771      ())
    772 
    773 ; Macros
    774 
    775 (dnmi m-avail "Mark Header Buffer Available" (MACH10 NO-DIS)
    776      "avail"
    777      (emit avail (f-rd 0))
    778 )
    779 
    780 (dnmi m-cam36 "CAM Access in 36-bit Mode" (MACH10 USES-RT USES-RD NO-DIS)
    781      "cam36 $rd,$rt,${cam-z}"
    782      (emit cam36 rd rt cam-z (f-cam-y 0))
    783 )
    784 
    785 (dnmi m-cam72 "CAM Access in 72-bit Mode" (MACH10 USES-RT USES-RD NO-DIS)
    786      "cam72 $rd,$rt,${cam-z}"
    787      (emit cam72 rd rt cam-z (f-cam-y 0))
    788 )
    789 
    790 (dnmi m-cam144 "CAM Access in 144-bit Mode" (MACH10 USES-RT USES-RD NO-DIS)
    791      "cam144 $rd,$rt,${cam-z}"
    792      (emit cam144 rd rt cam-z (f-cam-y 0))
    793 )
    794 
    795 (dnmi m-cam288 "CAM Access in 288-bit Mode" (MACH10 USES-RT USES-RD NO-DIS)
    796      "cam288 $rd,$rt,${cam-z}"
    797      (emit cam288 rd rt cam-z (f-cam-y 0))
    798 )
    799 
    800 (dnmi m-cm32read "Counter Manager 32-bit Rolling Add R0" (MACH10 USES-RT USES-RD NO-DIS)
    801      "cm32read $rd,$rt"
    802      (emit cm32ra rd (f-rs 0) rt)
    803 )
    804 
    805 (dnmi m-cm64read "Counter Manager 64-bit Rolling Add R0" (MACH10 USES-RT USES-RD NO-DIS)
    806      "cm64read $rd,$rt"
    807      (emit cm64ra rd (f-rs 0) rt)
    808 )
    809 
    810 (dnmi m-cm32mlog "Counter Manager 32-bit or R0" (MACH10 USES-RS USES-RT NO-DIS)
    811      "cm32mlog $rs,$rt"
    812      (emit cm32or (f-rd 0) rs rt)
    813 )
    814 
    815 (dnmi m-cm32and "Counter Manager And" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    816      "cm32and $rs,$rt"
    817      (emit cm32and (f-rd 0) rs rt)
    818 )
    819 
    820 (dnmi m-cm32andn "Counter Manager And With Inverse" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    821      "cm32andn $rs,$rt"
    822      (emit cm32andn (f-rd 0) rs rt)
    823 )
    824 
    825 (dnmi m-cm32or "Counter Manager Or" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    826      "cm32or $rs,$rt"
    827      (emit cm32or (f-rd 0) rs rt)
    828 )
    829 
    830 (dnmi m-cm32ra "Counter Manager 32-bit Rolling Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    831      "cm32ra $rs,$rt"
    832      (emit cm32ra (f-rd 0) rs rt)
    833 )
    834 
    835 (dnmi m-cm32rd "Counter Manager 32-bit Rolling Decrement" (MACH10 USES-RT USES-RD NO-DIS)
    836      "cm32rd $rt"
    837      (emit cm32rd (f-rd 0) rt)
    838 )
    839 
    840 (dnmi m-cm32ri "Counter Manager 32-bit Rolling Increment" (MACH10 USES-RT USES-RD NO-DIS)
    841      "cm32ri $rt"
    842      (emit cm32ri (f-rd 0) rt)
    843 )
    844 
    845 (dnmi m-cm32rs "Counter Manager 32-bit Rolling Subtract" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    846      "cm32rs $rs,$rt"
    847      (emit cm32rs (f-rd 0) rs rt)
    848 )
    849 
    850 (dnmi m-cm32sa "Counter Manager 32-bit Saturating Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    851      "cm32sa $rs,$rt"
    852      (emit cm32sa (f-rd 0) rs rt)
    853 )
    854 
    855 (dnmi m-cm32sd "Counter Manager 32-bit Saturating Decrement" (MACH10 USES-RT USES-RD NO-DIS)
    856      "cm32sd $rt"
    857      (emit cm32sd (f-rd 0) rt)
    858 )
    859 
    860 (dnmi m-cm32si "Counter Manager 32-bit Saturating Increment" (MACH10 USES-RT USES-RD NO-DIS)
    861      "cm32si $rt"
    862      (emit cm32si (f-rd 0) rt)
    863 )
    864 
    865 (dnmi m-cm32ss "Counter Manager 32-bit Saturating Subtract" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    866      "cm32ss $rs,$rt"
    867      (emit cm32ss (f-rd 0) rs rt)
    868 )
    869 
    870 (dnmi m-cm32xor "Counter Manager Xor" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    871      "cm32xor $rs,$rt"
    872      (emit cm32xor (f-rd 0) rs rt)
    873 )
    874 
    875 (dnmi m-cm64clr "Counter Manager Clear" (MACH10 USES-RT USES-RD NO-DIS)
    876      "cm64clr $rt"
    877      (emit cm64clr (f-rd 0) rt)
    878 )
    879 
    880 (dnmi m-cm64ra "Counter Manager 64-bit Rolling Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    881      "cm64ra $rs,$rt"
    882      (emit cm64ra (f-rd 0) rs rt)
    883 )
    884 
    885 (dnmi m-cm64rd "Counter Manager 64-bit Rolling Decrement" (MACH10 USES-RT USES-RD NO-DIS)
    886      "cm64rd $rt"
    887      (emit cm64rd (f-rd 0) rt)
    888 )
    889 
    890 (dnmi m-cm64ri "Counter Manager 32-bit Rolling Increment" (MACH10 USES-RT USES-RD NO-DIS)
    891      "cm64ri $rt"
    892      (emit cm64ri (f-rd 0) rt)
    893 )
    894 
    895 (dnmi m-cm64ria2 "Counter Manager 32/32 Rolling Increment/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    896      "cm64ria2 $rs,$rt"
    897      (emit cm64ria2 (f-rd 0) rs rt)
    898 )
    899 
    900 (dnmi m-cm64rs "Counter Manager 64-bit Rolling Subtract" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    901      "cm64rs $rs,$rt"
    902      (emit cm64rs (f-rd 0) rs rt)
    903 )
    904 
    905 (dnmi m-cm64sa "Counter Manager 64-bit Saturating Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    906      "cm64sa $rs,$rt"
    907      (emit cm64sa (f-rd 0) rs rt)
    908 )
    909 
    910 (dnmi m-cm64sd "Counter Manager 64-bit Saturating Decrement" (MACH10 USES-RT USES-RD NO-DIS)
    911      "cm64sd $rt"
    912      (emit cm64sd (f-rd 0) rt)
    913 )
    914 
    915 (dnmi m-cm64si "Counter Manager 64-bit Saturating Increment" (MACH10 USES-RT USES-RD NO-DIS)
    916      "cm64si $rt"
    917      (emit cm64si (f-rd 0) rt)
    918 )
    919 
    920 (dnmi m-cm64sia2 "Counter Manager 32/32 Saturating Increment/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    921      "cm64sia2 $rs,$rt"
    922      (emit cm64sia2 (f-rd 0) rs rt)
    923 )
    924 
    925 (dnmi m-cm64ss "Counter Manager 64-bit Saturating Subtract" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    926      "cm64ss $rs,$rt"
    927      (emit cm64ss (f-rd 0) rs rt)
    928 )
    929 
    930 (dnmi m-cm128ria2 "Counter Manager 128-bit 64/64 Rolling Increment/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    931      "cm128ria2 $rs,$rt"
    932      (emit cm128ria2 (f-rd 0) rs rt)
    933 )
    934 
    935 (dnmi m-cm128ria3 "Counter Manager 128-bit 32/32/64 Rolling Increment/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    936      "cm128ria3 $rs,$rt,${cm-3z}"
    937      (emit cm128ria3 (f-rd 0) rs rt cm-3z)
    938 )
    939 
    940 (dnmi m-cm128ria4 "Counter Manager 128-bit 32/32/32/32 Rolling Inc/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    941      "cm128ria4 $rs,$rt,${cm-4z}"
    942      (emit cm128ria4 (f-rd 0) rs rt cm-4z)
    943 )
    944 
    945 (dnmi m-cm128sia2 "Counter Manager 128-bit 64/64 Saturating Inc/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    946      "cm128sia2 $rs,$rt"
    947      (emit cm128sia2 (f-rd 0) rs rt)
    948 )
    949 
    950 (dnmi m-cm128sia3 "Counter Manager 128-bit 32/32/64 Saturating Inc/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    951      "cm128sia3 $rs,$rt,${cm-3z}"
    952      (emit cm128sia3 (f-rd 0) rs rt cm-3z)
    953 )
    954 
    955 (dnmi m-cm128sia4 "Counter Manager 128-bit 32/32/32/32 Saturating Inc/Add" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    956      "cm128sia4 $rs,$rt,${cm-4z}"
    957      (emit cm128sia4 (f-rd 0) rs rt cm-4z)
    958 )
    959 
    960 (dnmi m-cmphdr "Get a Complete Header" (MACH10 NO-DIS)
    961      "cmphdr"
    962      (emit cmphdr (f-rd 0))
    963 )
    964 
    965 (dnmi m-dbd "Deallocate a Data Buffer Pointer" (MACH10 USES-RD USES-RT NO-DIS)
    966      "dbd $rd,$rt"
    967      (emit dbd rd (f-rs 0) rt)
    968 )
    969 
    970 (dnmi m2-dbd "Deallocate a Data Buffer Pointer" (MACH10 USES-RT NO-DIS)
    971      "dbd $rt"
    972      (emit dbd (f-rd 0) (f-rs 0) rt)
    973 )
    974 
    975 (dnmi m-dpwt "DSTN_PORT Write" (MACH10 USES-RS NO-DIS)
    976      "dpwt $rs"
    977      (emit dpwt (f-rd 0) rs)
    978 )
    979 
    980 (dnmi m-free "" (MACH10 USES-RS USES-RD NO-DIS)
    981      "free $rs"
    982      (emit free (f-rd 0) rs)
    983 )
    984 
    985 ;(dnmi m-jal "jump and link, implied r31" (MACH10 USES-RT NO-DIS)
    986 ;     "jal $jmptarg"
    987 ;     (emit jal (f-rt 31) jmptarg)
    988 ;)
    989 
    990 (dnmi m-lock "lock memory" (MACH10 USES-RT NO-DIS)
    991      "lock $rt"
    992      (emit lock (f-rd 0) rt)
    993 )
    994 
    995 (dnmi m-pkrla "Packet Release Absolute" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
    996      "pkrla $rs,$rt"
    997      (emit pkrla (f-rd 0) rs rt)
    998 )
    999 
   1000 (dnmi m-pkrlac "Packet Release Absolute Continue" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1001      "pkrlac $rs,$rt"
   1002      (emit pkrlac (f-rd 0) rs rt)
   1003 )
   1004 
   1005 (dnmi m-pkrlah "Packet Release Absolute and Hold" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1006      "pkrlah $rs,$rt"
   1007      (emit pkrlah (f-rd 0) rs rt)
   1008 )
   1009 
   1010 (dnmi m-pkrlau "Packet Release Absolute Unconditional" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1011      "pkrlau $rs,$rt"
   1012      (emit pkrlau (f-rd 0) rs rt)
   1013 )
   1014 
   1015 (dnmi m-pkrli "Packet Release Immediate" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1016      "pkrli $rs,$rt,$bytecount"
   1017      (emit pkrli (f-rd 0) rs rt bytecount)
   1018 )
   1019 
   1020 (dnmi m-pkrlic "Packet Release Immediate Continue" (MACH10 USES-RS USES-RT NO-DIS)
   1021      "pkrlic $rs,$rt,$bytecount"
   1022      (emit pkrlic (f-rd 0) rs rt bytecount)
   1023 )
   1024 
   1025 (dnmi m-pkrlih "Packet Release Immediate and Hold" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1026      "pkrlih $rs,$rt,$bytecount"
   1027      (emit pkrlih (f-rd 0) rs rt bytecount)
   1028 )
   1029 
   1030 (dnmi m-pkrliu "Packet Release Immediate Unconditional" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1031      "pkrliu $rs,$rt,$bytecount"
   1032      (emit pkrliu (f-rd 0) rs rt bytecount)
   1033 )
   1034 
   1035 (dnmi m-rba "Read Bytes Absolute" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1036      "rba $rs,$rt"
   1037      (emit rba (f-rd 0) rs rt)
   1038 )
   1039 
   1040 (dnmi m-rbal "Read Bytes Absolute and Lock" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1041      "rbal $rs,$rt"
   1042      (emit rbal (f-rd 0) rs rt)
   1043 )
   1044 
   1045 (dnmi m-rbar "Read Bytes Absolute and Release" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1046      "rbar $rs,$rt"
   1047      (emit rbar (f-rd 0) rs rt)
   1048 )
   1049 
   1050 (dnmi m-rbi "Read Bytes Immediate" (MACH10 USES-RS USES-RT NO-DIS)
   1051      "rbi $rs,$rt,$bytecount"
   1052      (emit rbi (f-rd 0) rs rt bytecount)
   1053 )
   1054 
   1055 (dnmi m-rbil "Read Bytes Immediate and Lock" (MACH10 USES-RS USES-RT NO-DIS)
   1056      "rbil $rs,$rt,$bytecount"
   1057      (emit rbil (f-rd 0) rs rt bytecount)
   1058 )
   1059 
   1060 (dnmi m-rbir "Read Bytes Immediate and Release" (MACH10 USES-RS USES-RT NO-DIS)
   1061      "rbir $rs,$rt,$bytecount"
   1062      (emit rbir (f-rd 0) rs rt bytecount)
   1063 )
   1064 
   1065 (dnmi m-swwr "Single Word Write" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1066      "swwr $rs,$rt"
   1067      (emit swwr (f-rd 0) rs rt)
   1068 )
   1069 
   1070 (dnmi m-swwru "Single Word Write and Unlock" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1071      "swwru $rs,$rt"
   1072      (emit swwru (f-rd 0) rs rt)
   1073 )
   1074 
   1075 (dnmi m-tstod "Test Header Buffer Order Dependency" (MACH10 USES-RS USES-RD NO-DIS)
   1076      "tstod $rs"
   1077      (emit tstod (f-rd 0) rs)
   1078 )
   1079 
   1080 (dnmi m-unlk "" (MACH10 USES-RT USES-RD NO-DIS)
   1081      "unlk $rt"
   1082      (emit unlk (f-rd 0) rt)
   1083 )
   1084      
   1085 (dnmi m-wba "Write Bytes Absolute" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1086      "wba $rs,$rt"
   1087      (emit wba (f-rd 0) rs rt)
   1088 )
   1089 
   1090 (dnmi m-wbac "Write Bytes Absolute Cacheable" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1091      "wbac $rs,$rt"
   1092      (emit wbac (f-rd 0) rs rt)
   1093 )
   1094 
   1095 (dnmi m-wbau "Write Bytes Absolute and Unlock" (MACH10 USES-RS USES-RT USES-RD NO-DIS)
   1096      "wbau $rs,$rt"
   1097      (emit wbau (f-rd 0) rs rt)
   1098 )
   1099 
   1100 (dnmi m-wbi "Write Bytes Immediate" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1101      "wbi $rs,$rt,$bytecount"
   1102      (emit wbi (f-rd 0) rs rt bytecount)
   1103 )
   1104 
   1105 (dnmi m-wbic "Write Bytes Immediate Cacheable" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1106      "wbic $rs,$rt,$bytecount"
   1107      (emit wbic (f-rd 0) rs rt bytecount)
   1108 )
   1109 
   1110 (dnmi m-wbiu "Write Bytes Immediate" (MACH10 USES-RD USES-RS USES-RT NO-DIS)
   1111      "wbiu $rs,$rt,$bytecount"
   1112      (emit wbiu (f-rd 0) rs rt bytecount)
   1113 )
   1114 
   1116