This documentation was automatically generated with AcDoc tool.
- 00001     /* ex: set tabstop=2 expandtab:
- 00002     -*- Mode: C; tab-width: 2; indent-tabs-mode nil -*-
- 00003     */
- 00004     /**
- 00005     * @file powerpc_isa.ac
- 00006     * @author Bruno Corsi dos Santos
- 00007     * Alexandro Baldassin (assembly information)
- 00008     *
- 00009     * The ArchC Team
- 00010     * http://www.archc.org/
- 00011     *
- 00012     * Computer Systems Laboratory (LSC)
- 00013     * IC-UNICAMP
- 00014     * http://www.lsc.ic.unicamp.br
- 00015     *
- 00016     * @version 1.0
- 00017     * @date Thu, 29 Jun 2006 14:49:06 -0300
- 00018     *
- 00019     * @brief The ArchC POWERPC functional model.
- 00020     *
- 00021     * @attention Copyright (C) 2002-2006 --- The ArchC Team
- 00022     *
- 00023     * This program is free software; you can redistribute it and/or modify
- 00024     * it under the terms of the GNU General Public License as published by
- 00025     * the Free Software Foundation; either version 2 of the License, or
- 00026     * (at your option) any later version.
- 00027     *
- 00028     * This program is distributed in the hope that it will be useful,
- 00029     * but WITHOUT ANY WARRANTY; without even the implied warranty of
- 00030     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- 00031     * GNU General Public License for more details.
- 00032     *
- 00033     * You should have received a copy of the GNU General Public License
- 00034     * along with this program; if not, write to the Free Software
- 00035     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- 00036     *
- 00037     */
- 00038    
- 00039     /* Note: Instructions of 405 processor are not implemented */
- 00040    
- 00041     AC_ISA (powerpc) {
- 00042    
- 00043     ac_format I1 = "%opcd:6 %li:24:s %aa:1 %lk:1" ;
- 00044    
- 00045     ac_format B1 = "%opcd:6 %bo:5 %bi:5 %bd:14:s %aa:1 %lk:1" ;
- 00046    
- 00047     ac_format SC1 = "%opcd:6 0x00:5 0x00:5 0x00:4 %lev:7 0x00:3 0x01:1 0x00:1" ;
- 00048    
- 00049     ac_format D1 = "%opcd:6 %rt:5 %ra:5 %d:16:s" ;
- 00050     ac_format D2 = "%opcd:6 %rs:5 %ra:5 %si:16:s" ;
- 00051     ac_format D3 = "%opcd:6 %rs:5 %ra:5 %d:16:s" ;
- 00052     ac_format D4 = "%opcd:6 %rs:5 %ra:5 %ui:16" ;
- 00053     ac_format D5 = "%opcd:6 %bf:3 0x00:1 %l:1 %ra:5 %si:16:s" ;
- 00054     ac_format D6 = "%opcd:6 %bf:3 0x00:1 %l:1 %ra:5 %ui:16" ;
- 00055     ac_format D7 = "%opcd:6 %to:5 %ra:5 %si:16:s" ;
- 00056    
- 00057     ac_format X1 = "%opcd:6 %rt:5 %ra:5 %rb:5 %xog:10 %rc:1" ;
- 00058     ac_format X2 = "%opcd:6 %rt:5 %ra:5 %rb:5 %xog:10 0x00:1" ;
- 00059     ac_format X3 = "%opcd:6 %rt:5 %ra:5 %nb:5 %xog:10 0x00:1" ;
- 00060     ac_format X4 = "%opcd:6 %rt:5 %ra:5 %ws:5 %xog:10 0x00:1" ;
- 00061     ac_format X5 = "%opcd:6 %rt:5 0x00:5 %rb:5 %xog:10 0x00:1" ;
- 00062     ac_format X6 = "%opcd:6 %rt:5 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00063     ac_format X7 = "%opcd:6 %rs:5 %ra:5 %rb:5 %xog:10 %rc:1" ;
- 00064     ac_format X8 = "%opcd:6 %rs:5 %ra:5 %rb:5 %xog:10 0x01:1" ;
- 00065     ac_format X9 = "%opcd:6 %rs:5 %ra:5 %rb:5 %xog:10 0x00:1" ;
- 00066     ac_format X10 = "%opcd:6 %rs:5 %ra:5 %nb:5 %xog:10 0x00:1" ;
- 00067     ac_format X11 = "%opcd:6 %rs:5 %ra:5 %ws:5 %xog:10 0x00:1" ;
- 00068     ac_format X12 = "%opcd:6 %rs:5 %ra:5 %sh:5 %xog:10 %rc:1" ;
- 00069     ac_format X13 = "%opcd:6 %rs:5 %ra:5 0x00:5 %xog:10 %rc:1" ;
- 00070     ac_format X14 = "%opcd:6 %rs:5 0x00:5 %rb:5 %xog:10 0x00:1" ;
- 00071     ac_format X15 = "%opcd:6 %rs:5 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00072     ac_format X16 = "%opcd:6 %bf:3 0x00:1 %l:1 %ra:5 %rb:5 %xog:10 0x00:1" ;
- 00073     ac_format X17 = "%opcd:6 %bf:3 0x00:2 %bfa:3 0x00:2 0x00:5 %xog:10 %rc:1" ;
- 00074     ac_format X18 = "%opcd:6 %bf:3 0x00:2 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00075     ac_format X19 = "%opcd:6 %bf:3 0x00:2 0x00:5 %u:5 %xog:10 %rc:1" ;
- 00076     ac_format X20 = "%opcd:6 %bf:3 0x00:2 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00077     ac_format X21 = "%opcd:6 %to:5 %ra:5 %rb:5 %xog:10 0x00:1" ;
- 00078     ac_format X22 = "%opcd:6 %bt:5 0x00:5 0x00:5 %xog:10 %rc:1" ;
- 00079     ac_format X23 = "%opcd:6 0x00:5 %ra:5 %rb:5 %xog:10 0x00:1" ;
- 00080     ac_format X24 = "%opcd:6 0x00:5 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00081     ac_format X25 = "%opcd:6 0x00:5 0x00:5 %e:1 0x00:4 %xog:10 0x00:1" ;
- 00082    
- 00083     ac_format XL1 = "%opcd:6 %bt:5 %ba:5 %bb:5 %xog:10 0x00:1" ;
- 00084     ac_format XL2 = "%opcd:6 %bo:5 %bi:5 0x00:3 %bh:2 %xog:10 %lk:1" ;
- 00085     ac_format XL3 = "%opcd:6 %bf:3 0x00:2 %bfa:3 0x00:2 0x00:5 %xog:10 0x00:1" ;
- 00086     ac_format XL4 = "%opcd:6 0x00:5 0x00:5 0x00:5 %xog:10 0x00:1" ;
- 00087    
- 00088     ac_format XFX1 = "%opcd:6 %rt:5 %sprf:10 %xog:10 0x00:1" ;
- 00089     ac_format XFX2 = "%opcd:6 %rt:5 %dcrf:10 %xog:10 0x00:1" ;
- 00090     ac_format XFX3 = "%opcd:6 %rs:5 0x00:1 %xfm:8 0x00:1 %xog:10 0x00:1" ;
- 00091     ac_format XFX4 = "%opcd:6 %rs:5 %sprf:10 %xog:10 0x00:1" ;
- 00092     ac_format XFX5 = "%opcd:6 %rs:5 %dcrf:10 %xog:10 0x00:1" ;
- 00093    
- 00094     ac_format XO1 = "%opcd:6 %rt:5 %ra:5 %rb:5 %oe:1 %xos:9 %rc:1" ;
- 00095     ac_format XO2 = "%opcd:6 %rt:5 %ra:5 %rb:5 0x00:1 %xos:9 %rc:1" ;
- 00096     ac_format XO3 = "%opcd:6 %rt:5 %ra:5 0x00:5 %oe:1 %xos:9 %rc:1" ;
- 00097    
- 00098     ac_format M1 = "%opcd:6 %rs:5 %ra:5 %rb:5 %mb:5 %me:5 %rc:1" ;
- 00099     ac_format M2 = "%opcd:6 %rs:5 %ra:5 %sh:5 %mb:5 %me:5 %rc:1" ;
- 00100    
- 00101     ac_instr b, ba, bl, bla;
- 00102    
- 00103     ac_instr bc, bca, bcl, bcla;
- 00104    
- 00105     ac_instr sc;
- 00106    
- 00107     ac_instr addi, addic, addic_, addis, lbz, lbzu, lha, lhau, lhz,
- 00108     lhzu, lmw, lwz, lwzu, mulli, subfic;
- 00109    
- 00110     ac_instr stb, stbu, sth, sthu, stmw, stw, stwu;
- 00111    
- 00112     ac_instr andi_, andis_, ori, oris, xori, xoris;
- 00113    
- 00114     ac_instr cmpi;
- 00115    
- 00116     ac_instr cmpli;
- 00117    
- 00118     ac_instr mullhw, mullhw_, mullhwu, mullhwu_;
- 00119    
- 00120     ac_instr lbzux, lbzx, lhaux, lhax, lhbrx, lhzux, lhzx, lswx,
- 00121     lwbrx, lwzux, lwzx;
- 00122    
- 00123     ac_instr lswi;
- 00124    
- 00125     ac_instr mfcr;
- 00126    
- 00127     ac_instr ande, ande_, andc, andc_, eqv, eqv_, nand, nand_,
- 00128     nor, nor_, ore, ore_, orc, orc_, slw, slw_, sraw,
- 00129     sraw_, srw, srw_, xxor, xxor_;
- 00130    
- 00131     ac_instr stbux, stbx, sthbrx, sthux, stswx, stwbrx, stwux, stwx,
- 00132     sthx;
- 00133    
- 00134     ac_instr stswi;
- 00135    
- 00136     ac_instr srawi, srawi_;
- 00137    
- 00138     ac_instr cntlzw, cntlzw_, extsb, extsb_, extsh, extsh_;
- 00139    
- 00140     ac_instr cmp, cmpl;
- 00141    
- 00142     ac_instr mcrxr;
- 00143    
- 00144     ac_instr crand, crandc, creqv, crnand, crnor, cror, crorc, crxor;
- 00145    
- 00146     ac_instr bcctr, bcctrl, bclr, bclrl;
- 00147    
- 00148     ac_instr mcrf;
- 00149    
- 00150     ac_instr mfspr;
- 00151    
- 00152     ac_instr mtcrf;
- 00153    
- 00154     ac_instr mtspr;
- 00155    
- 00156     ac_instr add, add_, addo, addo_, addc, addc_, addco, addco_,
- 00157     adde, adde_, addeo, addeo_, mullw, mullw_, mullwo,
- 00158     mullwo_, divw, divw_, divwo, divwo_, divwu, divwu_,
- 00159     divwou, divwou_, subf, subf_, subfo, subfo_, subfc,
- 00160     subfc_, subfco, subfco_, subfe, subfe_, subfeo,
- 00161     subfeo_;
- 00162     /*
- 00163    
- 00164     macchw, macchw_, macchwo, macchwo_,
- 00165     macchws, macchws_, macchwso, macchwso_, macchwsu,
- 00166     macchwsu_, macchwsuo, macchwsuo_, macchwu,
- 00167     macchwu_, macchwuo, macchwuo_, machhw, machhw_,
- 00168     machhwo, machhwo_, machhws, machhws_, machhwso,
- 00169     machhwso_, machhwsu, machhwsu_, machhwsuo, machhwsuo_,
- 00170     machhwu, machhwu_, machhwuo, machhwuo_, maclhw,
- 00171     maclhw_, maclhwo, maclhwo_, maclhws, maclhws_,
- 00172     maclhwso, maclhwso_, maclhwsu, maclhwsu_, maclhwsuo,
- 00173     maclhwsuo_, maclhwu, maclhwu_, maclhwuo, maclhwuo_,
- 00174     nmacchw, nmacchw_, nmacchwo, nmacchwo_,
- 00175     nmacchws, nmacchws_, nmacchwso, nmacchwso_,
- 00176     nmachhw, nmachhw_, nmachhwo, nmachhwo_,
- 00177     nmachhws, nmachhws_, nmachhwso, nmachhwso_,
- 00178     nmaclhw, nmaclhw_, nmaclhwo, nmaclhwo_,
- 00179     nmaclhws, nmaclhws_, nmaclhwso, nmaclhwso_;
- 00180     */
- 00181    
- 00182    
- 00183     ac_instr mulhw, mulhw_, mulhwu, mulhwu_;
- 00184    
- 00185     ac_instr addme, addme_, addmeo, addmeo_,
- 00186     addze, addze_, addzeo, addzeo_,
- 00187     neg, neg_, nego, nego_,
- 00188     subfme, subfme_, subfmeo, subfmeo_,
- 00189     subfze, subfze_, subfzeo, subfzeo_;
- 00190    
- 00191     ac_instr rlwnm, rlwnm_;
- 00192    
- 00193     ac_instr rlwimi, rlwimi_, rlwinm, rlwinm_;
- 00194    
- 00195    
- 00196     ac_asm_map reg {
- 00197     /* default gas assembler uses numbers as register names */
- 00198     "" [0..31] = [0..31];
- 00199     }
- 00200    
- 00201    
- 00202     ISA_CTOR (powerpc) {
- 00203    
- 00204     add.set_asm ("add %reg, %reg, %reg" , rt, ra, rb);
- 00205     add.set_decoder (opcd=31, oe=0, xos=266, rc=0);
- 00206    
- 00207     add_.set_asm ("add. %reg, %reg, %reg" , rt, ra, rb);
- 00208     add_.set_decoder (opcd=31, oe=0, xos=266, rc=1);
- 00209    
- 00210     addo.set_asm ("addo %reg, %reg, %reg" , rt, ra, rb);
- 00211     addo.set_decoder (opcd=31, oe=1, xos=266, rc=0);
- 00212    
- 00213     addo_.set_asm ("addo. %reg, %reg, %reg" , rt, ra, rb);
- 00214     addo_.set_decoder (opcd=31, oe=1, xos=266, rc=1);
- 00215    
- 00216     addc.set_asm ("addc %reg, %reg, %reg" , rt, ra, rb);
- 00217     addc.set_decoder (opcd=31, oe=0, xos=10, rc=0);
- 00218    
- 00219     addc_.set_asm ("addc. %reg, %reg, %reg" , rt, ra, rb);
- 00220     addc_.set_decoder (opcd=31, oe=0, xos=10, rc=1);
- 00221    
- 00222     addco.set_asm ("addco %reg, %reg, %reg" , rt, ra, rb);
- 00223     addco.set_decoder (opcd=31, oe=1, xos=10, rc=0);
- 00224    
- 00225     addco_.set_asm ("addco. %reg, %reg, %reg" , rt, ra, rb);
- 00226     addco_.set_decoder (opcd=31, oe=1, xos=10, rc=1);
- 00227    
- 00228     adde.set_asm ("adde %reg, %reg, %reg" , rt, ra, rb);
- 00229     adde.set_decoder (opcd=31, oe=0, xos=138, rc=0);
- 00230    
- 00231     adde_.set_asm ("adde. %reg, %reg, %reg" , rt, ra, rb);
- 00232     adde_.set_decoder (opcd=31, oe=0, xos=138, rc=1);
- 00233    
- 00234     addeo.set_asm ("addeo %reg, %reg, %reg" , rt, ra, rb);
- 00235     addeo.set_decoder (opcd=31, oe=1, xos=138, rc=0);
- 00236    
- 00237     addeo_.set_asm ("addeo. %reg, %reg, %reg" , rt, ra, rb);
- 00238     addeo_.set_decoder (opcd=31, oe=1, xos=138, rc=1);
- 00239    
- 00240     addi.set_asm ("li %reg, %exp" , rt, ra=0, d);
- 00241     addi.set_asm ("li %reg, %exp(carry)@ha" , rt, ra=0, d);
- 00242     addi.set_asm ("la %reg, %exp@l(%imm)" , rt, d, ra );
- 00243     addi.set_asm ("addi %reg, %reg, %exp" , rt, ra, d);
- 00244     addi.set_decoder (opcd=14);
- 00245    
- 00246     addic.set_asm ("addic %reg, %reg, %exp" , rt, ra, d);
- 00247     addic.set_decoder (opcd=12);
- 00248    
- 00249     addic_.set_asm ("addic. %reg, %reg, %exp" , rt, ra, d);
- 00250     addic_.set_decoder (opcd=13);
- 00251    
- 00252     addis.set_asm ("lis %reg, %exp" , rt, ra=0, d);
- 00253     addis.set_asm ("lis %reg, %exp(carry)@ha" , rt, ra=0, d);
- 00254     addis.set_asm ("addis %reg, %reg, %exp" , rt, ra, d);
- 00255     addis.set_decoder (opcd=15);
- 00256    
- 00257     addme.set_asm ("addme %reg, %reg" , rt, ra);
- 00258     addme.set_decoder (opcd=31, oe=0, xos=234, rc=0);
- 00259    
- 00260     addme_.set_asm ("addme. %reg, %reg" , rt, ra);
- 00261     addme_.set_decoder (opcd=31, oe=0, xos=234, rc=1);
- 00262    
- 00263     addmeo.set_asm ("addmeo %reg, %reg" , rt, ra);
- 00264     addmeo.set_decoder (opcd=31, oe=1, xos=234, rc=0);
- 00265    
- 00266     addmeo_.set_asm ("addmeo. %reg, %reg" , rt, ra);
- 00267     addmeo_.set_decoder (opcd=31, oe=1, xos=234, rc=1);
- 00268    
- 00269     addze.set_asm ("addze %reg, %reg" , rt, ra);
- 00270     addze.set_decoder (opcd=31, oe=0, xos=202, rc=0);
- 00271    
- 00272     addze_.set_asm ("addze. %reg, %reg" , rt, ra);
- 00273     addze_.set_decoder (opcd=31, oe=0, xos=202, rc=1);
- 00274    
- 00275     addzeo.set_asm ("addzeo %reg, %reg" , rt, ra);
- 00276     addzeo.set_decoder (opcd=31, oe=1, xos=202, rc=0);
- 00277    
- 00278     addzeo_.set_asm ("addzeo. %reg, %reg" , rt, ra);
- 00279     addzeo_.set_decoder (opcd=31, oe=1, xos=202, rc=1);
- 00280    
- 00281     ande.set_asm ("and %reg, %reg, %reg" , ra, rs, rb);
- 00282     ande.set_decoder (opcd=31, xog=28, rc=0);
- 00283    
- 00284     ande_.set_asm ("and. %reg, %reg, %reg" , ra, rs, rb);
- 00285     ande_.set_decoder (opcd=31, xog=28, rc=1);
- 00286    
- 00287     andc.set_asm ("andc %reg, %reg, %reg" , ra, rs, rb);
- 00288     andc.set_decoder (opcd=31, xog=60, rc=0);
- 00289    
- 00290     andc_.set_asm ("andc. %reg, %reg, %reg" , ra, rs, rb);
- 00291     andc_.set_decoder (opcd=31, xog=60, rc=1);
- 00292    
- 00293     andi_.set_asm ("andi. %reg, %reg, %imm" , ra, rs, ui);
- 00294     andi_.set_decoder (opcd=28);
- 00295    
- 00296     andis_.set_asm ("andis. %reg, %reg, %imm" , ra, rs, ui);
- 00297     andis_.set_decoder (opcd=29);
- 00298    
- 00299     b.set_asm ("b %addr(pcrel)" , li);
- 00300     b.set_decoder (opcd=18, aa=0, lk=0);
- 00301    
- 00302     ba.set_asm ("ba %addr(pcrel)" , li);
- 00303     ba.set_decoder (opcd=18, aa=1, lk=0);
- 00304    
- 00305     bl.set_asm ("bl %addr(pcrel)" , li);
- 00306     bl.set_decoder (opcd=18, aa=0, lk=1);
- 00307    
- 00308     bla.set_asm ("bla %addr(pcrel)" , li);
- 00309     bla.set_decoder (opcd=18, aa=1, lk=1);
- 00310    
- 00311     bc.set_asm ("bc %imm, %exp, %addr(pcrel)" , bo, bi, bd);
- 00312     bc.set_decoder (opcd=16, aa=0, lk=0);
- 00313    
- 00314     bca.set_asm ("bca %imm, %exp, %addr(pcrel)" , bo, bi, bd);
- 00315     bca.set_decoder (opcd=16, aa=1, lk=0);
- 00316    
- 00317     bcl.set_asm ("bcl %imm, %exp, %addr(pcrel)" , bo, bi, bd);
- 00318     bcl.set_decoder (opcd=16, aa=0, lk=1);
- 00319    
- 00320     bcla.set_asm ("bcla %imm, %exp, %addr(pcrel)" , bo, bi, bd);
- 00321     bcla.set_decoder (opcd=16, aa=1, lk=1);
- 00322    
- 00323     bcctr.set_asm ("bctr" , bo=0x14, bi=0, bh=0);
- 00324     bcctr.set_asm ("bcctr %reg, %reg, %reg" , bo, bi, bh);
- 00325     bcctr.set_decoder (opcd=19, xog=528, lk=0);
- 00326    
- 00327     bcctrl.set_asm ("bctrl" , bo=0x14, bi=0, bh=0);
- 00328     bcctrl.set_asm ("bcctrl %reg, %reg, %reg" , bo, bi, bh);
- 00329     bcctrl.set_decoder (opcd=19, xog=528, lk=1);
- 00330    
- 00331     bclr.set_asm ("blr" , bo=0x14, bi=0, bh=0);
- 00332     bclr.set_asm ("bclr %reg, %reg, %reg" , bo, bi, bh);
- 00333     bclr.set_decoder (opcd=19, xog=16, lk=0);
- 00334    
- 00335     bclrl.set_asm ("bclrl %reg, %reg, %reg" , bo, bi, bh);
- 00336     bclrl.set_decoder (opcd=19, xog=16, lk=1);
- 00337    
- 00338     cmp.set_asm ("cmpw %imm, %imm, %imm" , bf, ra, rb, l=0);
- 00339     cmp.set_asm ("cmp %imm, %imm, %reg, %reg" , bf, l, ra, rb);
- 00340     cmp.set_decoder (opcd=31, l=0, xog=0);
- 00341    
- 00342     cmpi.set_asm ("cmpwi %imm, %reg, %imm" , bf, ra, si, l=0);
- 00343     cmpi.set_asm ("cmpi %reg, %imm, %reg, %imm" , bf, l, ra, si);
- 00344     cmpi.set_decoder (opcd=11, l=0);
- 00345    
- 00346     cmpl.set_asm ("cmplw %reg, %reg, %reg" , bf, ra, rb, l=0);
- 00347     cmpl.set_asm ("cmpl %imm, %imm, %reg, %reg" , bf, l, ra, rb);
- 00348     cmpl.set_decoder (opcd=31, l=0, xog=32);
- 00349    
- 00350     cmpli.set_asm ("cmplwi %reg, %reg, %imm" , bf, ra, ui, l=0);
- 00351     cmpli.set_asm ("cmpli %reg, %imm, %reg, %imm" , bf, l, ra, ui);
- 00352     cmpli.set_decoder (opcd=10, l=0);
- 00353    
- 00354     cntlzw.set_asm ("cntlzw %reg, %reg" , ra, rs);
- 00355     cntlzw.set_decoder (opcd=31, xog=26, rc=0);
- 00356    
- 00357     cntlzw_.set_asm ("cntlzw. %reg, %reg" , ra, rs);
- 00358     cntlzw_.set_decoder (opcd=31, xog=26, rc=1);
- 00359    
- 00360     crand.set_asm ("crand %reg, %reg, %reg" , bt, ba, bb);
- 00361     crand.set_decoder (opcd=19, xog=257);
- 00362    
- 00363     crandc.set_asm ("crandc %reg, %reg, %reg" , bt, ba, bb);
- 00364     crandc.set_decoder (opcd=19, xog=129);
- 00365    
- 00366     creqv.set_asm ("creqv %reg, %reg, %reg" , bt, ba, bb);
- 00367     creqv.set_decoder (opcd=19, xog=289);
- 00368    
- 00369     crnand.set_asm ("crnand %reg, %reg, %reg" , bt, ba, bb);
- 00370     crnand.set_decoder (opcd=19, xog=225);
- 00371    
- 00372     crnor.set_asm ("crnor %reg, %reg, %reg" , bt, ba, bb);
- 00373     crnor.set_decoder (opcd=19, xog=33);
- 00374    
- 00375     cror.set_asm ("cror %reg, %reg, %reg" , bt, ba, bb);
- 00376     cror.set_decoder (opcd=19, xog=449);
- 00377    
- 00378     crorc.set_asm ("crorc %reg, %reg, %reg" , bt, ba, bb);
- 00379     crorc.set_decoder (opcd=19, xog=417);
- 00380    
- 00381     crxor.set_asm ("crxor %reg, %reg, %reg" , bt, ba, bb);
- 00382     crxor.set_decoder (opcd=19, xog=193);
- 00383    
- 00384     divw.set_asm ("divw %reg, %reg, %reg" , rt, ra, rb);
- 00385     divw.set_decoder (opcd=31, xos=491, oe=0, rc=0);
- 00386    
- 00387     divw_.set_asm ("divw. %reg, %reg, %reg" , rt, ra, rb);
- 00388     divw_.set_decoder (opcd=31, xos=491, oe=0, rc=1);
- 00389    
- 00390     divwo.set_asm ("divwo %reg, %reg, %reg" , rt, ra, rb);
- 00391     divwo.set_decoder (opcd=31, xos=491, oe=1, rc=0);
- 00392    
- 00393     divwo_.set_asm ("divwo. %reg, %reg, %reg" , rt, ra, rb);
- 00394     divwo_.set_decoder (opcd=31, xos=491, oe=1, rc=1);
- 00395    
- 00396     divwu.set_asm ("divwu %reg, %reg, %reg" , rt, ra, rb);
- 00397     divwu.set_decoder (opcd=31, xos=459, oe=0, rc=0);
- 00398    
- 00399     divwu_.set_asm ("divwu. %reg, %reg, %reg" , rt, ra, rb);
- 00400     divwu_.set_decoder (opcd=31, xos=459, oe=0, rc=1);
- 00401    
- 00402     divwou.set_asm ("divwou %reg, %reg, %reg" , rt, ra, rb);
- 00403     divwou.set_decoder (opcd=31, xos=459, oe=1, rc=0);
- 00404    
- 00405     divwou_.set_asm ("divwou. %reg, %reg, %reg" , rt, ra, rb);
- 00406     divwou_.set_decoder (opcd=31, xos=459, oe=1, rc=1);
- 00407    
- 00408     eqv.set_asm ("eqv %reg, %reg, %reg" , ra, rs, rb);
- 00409     eqv.set_decoder (opcd=31, xog=284, rc=0);
- 00410    
- 00411     eqv_.set_asm ("eqv. %reg, %reg, %reg" , ra, rs, rb);
- 00412     eqv_.set_decoder (opcd=31, xog=284, rc=1);
- 00413    
- 00414     extsb.set_asm ("extsb %reg, %reg" , ra, rs);
- 00415     extsb.set_decoder (opcd=31, xog=954, rc=0);
- 00416    
- 00417     extsb_.set_asm ("extsb. %reg, %reg" , ra, rs);
- 00418     extsb_.set_decoder (opcd=31, xog=954, rc=1);
- 00419    
- 00420     extsh.set_asm ("extsh %reg, %reg" , ra, rs);
- 00421     extsh.set_decoder (opcd=31, xog=922, rc=0);
- 00422    
- 00423     extsh_.set_asm ("extsh. %reg, %reg" , ra, rs);
- 00424     extsh_.set_decoder (opcd=31, xog=922, rc=1);
- 00425    
- 00426     lbz.set_asm ("lbz %reg, %imm (%reg)" , rt, d, ra);
- 00427     lbz.set_asm ("lbz %reg, %exp@l(%reg)" , rt, d, ra);
- 00428     lbz.set_decoder (opcd=34);
- 00429    
- 00430     lbzu.set_asm ("lbzu %reg, %imm (%reg)" , rt, d, ra);
- 00431     lbzu.set_asm ("lbzu %reg, %exp@l(%reg)" , rt, d, ra);
- 00432     lbzu.set_decoder (opcd=35);
- 00433    
- 00434     lbzux.set_asm ("lbzux %reg, %reg, %reg" , rt, ra, rb);
- 00435     lbzux.set_decoder (opcd=31, xog=119);
- 00436    
- 00437     lbzx.set_asm ("lbzx %reg, %reg, %reg" , rt, ra, rb);
- 00438     lbzx.set_decoder (opcd=31, xog=87);
- 00439    
- 00440     lha.set_asm ("lha %reg, %imm (%reg)" , rt, d, ra);
- 00441     lha.set_asm ("lha %reg, %exp@l(%reg)" , rt, d, ra);
- 00442     lha.set_decoder (opcd=42);
- 00443    
- 00444     lhau.set_asm ("lhau %reg, %imm (%reg)" , rt, d, ra);
- 00445     lhau.set_asm ("lhau %reg, %exp@l(%reg)" , rt, d, ra);
- 00446     lhau.set_decoder (opcd=43);
- 00447    
- 00448     lhaux.set_asm ("lhaux %reg, %reg, %reg" , rt, ra, rb);
- 00449     lhaux.set_decoder (opcd=31, xog=375);
- 00450    
- 00451     lhax.set_asm ("lhax %reg, %reg, %reg" , rt, ra, rb);
- 00452     lhax.set_decoder (opcd=31, xog=343);
- 00453    
- 00454     lhbrx.set_asm ("lhbrx %reg, %reg, %reg" , rt, ra, rb);
- 00455     lhbrx.set_decoder (opcd=31, xog=790);
- 00456    
- 00457     lhz.set_asm ("lhz %reg, %imm (%reg)" , rt, d, ra);
- 00458     lhz.set_asm ("lhz %reg, %exp@l(%reg)" , rt, d, ra);
- 00459     lhz.set_decoder (opcd=40);
- 00460    
- 00461     lhzu.set_asm ("lhzu %reg, %imm (%reg)" , rt, d, ra);
- 00462     lhzu.set_asm ("lhzu %reg, %exp@l(%reg)" , rt, d, ra);
- 00463     lhzu.set_decoder (opcd=41);
- 00464    
- 00465     lhzux.set_asm ("lhzux %reg, %reg, %reg" , rt, ra, rb);
- 00466     lhzux.set_decoder (opcd=31, xog=311);
- 00467    
- 00468     lhzx.set_asm ("lhzx %reg, %reg, %reg" , rt, ra, rb);
- 00469     lhzx.set_decoder (opcd=31, xog=279);
- 00470    
- 00471     lmw.set_asm ("lmw %reg, %imm (%reg)" , rt, d, ra);
- 00472     lmw.set_asm ("lmw %reg, %exp@l(%reg)" , rt, d, ra);
- 00473     lmw.set_decoder (opcd=46);
- 00474    
- 00475     lswi.set_asm ("lswi %imm, %imm, %imm" , rt, ra, nb);
- 00476     lswi.set_decoder (opcd=31, xog=597);
- 00477    
- 00478     lswx.set_asm ("lswx %reg, %reg, %reg" , rt, ra, rb);
- 00479     lswx.set_decoder (opcd=31, xog=533);
- 00480    
- 00481     lwbrx.set_asm ("lwbrx %reg, %reg, %reg" , rt, ra, rb);
- 00482     lwbrx.set_decoder (opcd=31, xog=534);
- 00483    
- 00484     lwz.set_asm ("lwz %imm, %imm (%imm)" , rt, d, ra);
- 00485     lwz.set_asm ("lwz %imm, %exp@l(%imm)" , rt, d, ra);
- 00486     lwz.set_decoder (opcd=32);
- 00487    
- 00488     lwzu.set_asm ("lwzu %reg, %imm (%reg)" , rt, d, ra);
- 00489     lwzu.set_asm ("lwzu %reg, %exp@l(%reg)" , rt, d, ra);
- 00490     lwzu.set_decoder (opcd=33);
- 00491    
- 00492     lwzux.set_asm ("lwzux %reg, %reg, %reg" , rt, ra, rb);
- 00493     lwzux.set_decoder (opcd=31, xog=55);
- 00494    
- 00495     lwzx.set_asm ("lwzx %reg, %reg, %reg" , rt, ra, rb);
- 00496     lwzx.set_decoder (opcd=31, xog=23);
- 00497    
- 00498    
- 00499     /* BEGIN NOT IMPLEMENTED! 405 Family! */
- 00500     // macchw.set_asm("macchw %rt, %ra, %rb");
- 00501     // macchw.set_decoder(opcd=4, xos=172, oe=0, rc=0);
- 00502    
- 00503     // macchw_.set_asm("macchw_ %rt, %ra, %rb");
- 00504     // macchw_.set_decoder(opcd=4, xos=172, oe=0, rc=1);
- 00505    
- 00506     // macchwo.set_asm("macchwo %rt, %ra, %rb");
- 00507     // macchwo.set_decoder(opcd=4, xos=172, oe=1, rc=0);
- 00508    
- 00509     // macchwo_.set_asm("macchwo_ %rt, %ra, %rb");
- 00510     // macchwo_.set_decoder(opcd=4, xos=172, oe=1, rc=1);
- 00511    
- 00512     // macchws.set_asm("macchws %rt, %ra, %rb");
- 00513     // macchws.set_decoder(opcd=4, xos=236, oe=0, rc=0);
- 00514    
- 00515     // macchws_.set_asm("macchws_ %rt, %ra, %rb");
- 00516     // macchws_.set_decoder(opcd=4, xos=236, oe=0, rc=1);
- 00517    
- 00518     // macchwso.set_asm("macchwso %rt, %ra, %rb");
- 00519     // macchwso.set_decoder(opcd=4, xos=236, oe=1, rc=0);
- 00520    
- 00521     // macchwso_.set_asm("macchwso_ %rt, %ra, %rb");
- 00522     // macchwso_.set_decoder(opcd=4, xos=236, oe=1, rc=1);
- 00523    
- 00524     // macchwsu.set_asm("macchwsu %rt, %ra, %rb");
- 00525     // macchwsu.set_decoder(opcd=4, xos=204, oe=0, rc=0);
- 00526    
- 00527     // macchwsu_.set_asm("macchwsu_ %rt, %ra, %rb");
- 00528     // macchwsu_.set_decoder(opcd=4, xos=204, oe=0, rc=1);
- 00529    
- 00530     // macchwsuo.set_asm("macchwsuo %rt, %ra, %rb");
- 00531     // macchwsuo.set_decoder(opcd=4, xos=204, oe=1, rc=0);
- 00532    
- 00533     // macchwsuo_.set_asm("macchwsuo_ %rt, %ra, %rb");
- 00534     // macchwsuo_.set_decoder(opcd=4, xos=204, oe=1, rc=1);
- 00535    
- 00536     // macchwu.set_asm("macchwu %rt, %ra, %rb");
- 00537     // macchwu.set_decoder(opcd=4, xos=140, oe=0, rc=0);
- 00538    
- 00539     // macchwu_.set_asm("macchwu_ %rt, %ra, %rb");
- 00540     // macchwu_.set_decoder(opcd=4, xos=140, oe=0, rc=1);
- 00541    
- 00542     // macchwuo.set_asm("macchwuo %rt, %ra, %rb");
- 00543     // macchwuo.set_decoder(opcd=4, xos=140, oe=1, rc=0);
- 00544    
- 00545     // macchwuo_.set_asm("macchwuo_ %rt, %ra, %rb");
- 00546     // macchwuo_.set_decoder(opcd=4, xos=140, oe=1, rc=1);
- 00547    
- 00548     // machhw.set_asm("machhw %rt, %ra, %rb");
- 00549     // machhw.set_decoder(opcd=4, xos=44, oe=0, rc=0);
- 00550    
- 00551     // machhw_.set_asm("machhw_ %rt, %ra, %rb");
- 00552     // machhw_.set_decoder(opcd=4, xos=44, oe=0, rc=1);
- 00553    
- 00554     // machhwo.set_asm("machhwo %rt, %ra, %rb");
- 00555     // machhwo.set_decoder(opcd=4, xos=44, oe=1, rc=0);
- 00556    
- 00557     // machhwo_.set_asm("machhwo_ %rt, %ra, %rb");
- 00558     // machhwo_.set_decoder(opcd=4, xos=44, oe=1, rc=1);
- 00559    
- 00560     // machhws.set_asm("machhws %rt, %ra, %rb");
- 00561     // machhws.set_decoder(opcd=4, xos=108, oe=0, rc=0);
- 00562    
- 00563     // machhws_.set_asm("machhws_ %rt, %ra, %rb");
- 00564     // machhws_.set_decoder(opcd=4, xos=108, oe=0, rc=1);
- 00565    
- 00566     // machhwso.set_asm("machhwso %rt, %ra, %rb");
- 00567     // machhwso.set_decoder(opcd=4, xos=108, oe=1, rc=0);
- 00568    
- 00569     // machhwso_.set_asm("machhwso_ %rt, %ra, %rb");
- 00570     // machhwso_.set_decoder(opcd=4, xos=108, oe=1, rc=1);
- 00571    
- 00572     // machhwsu.set_asm("machhwsu %rt, %ra, %rb");
- 00573     // machhwsu.set_decoder(opcd=4, xos=76, oe=0, rc=0);
- 00574    
- 00575     // machhwsu_.set_asm("machhwsu_ %rt, %ra, %rb");
- 00576     // machhwsu_.set_decoder(opcd=4, xos=76, oe=0, rc=1);
- 00577    
- 00578     // machhwsuo.set_asm("machhwsuo %rt, %ra, %rb");
- 00579     // machhwsuo.set_decoder(opcd=4, xos=76, oe=1, rc=0);
- 00580    
- 00581     // machhwsuo_.set_asm("machhwsuo_ %rt, %ra, %rb");
- 00582     // machhwsuo_.set_decoder(opcd=4, xos=76, oe=1, rc=1);
- 00583    
- 00584     // machhwu.set_asm("machhwu %rt, %ra, %rb");
- 00585     // machhwu.set_decoder(opcd=4, xos=12, oe=0, rc=0);
- 00586    
- 00587     // machhwu_.set_asm("machhwu_ %rt, %ra, %rb");
- 00588     // machhwu_.set_decoder(opcd=4, xos=12, oe=0, rc=1);
- 00589    
- 00590     // machhwuo.set_asm("machhwuo %rt, %ra, %rb");
- 00591     // machhwuo.set_decoder(opcd=4, xos=12, oe=1, rc=0);
- 00592    
- 00593     // machhwuo_.set_asm("machhwuo_ %rt, %ra, %rb");
- 00594     // machhwuo_.set_decoder(opcd=4, xos=12, oe=1, rc=1);
- 00595    
- 00596     // maclhw.set_asm("maclhw %rt, %ra, %rb");
- 00597     // maclhw.set_decoder(opcd=4, xos=428, oe=0, rc=0);
- 00598    
- 00599     // maclhw_.set_asm("maclhw_ %rt, %ra, %rb");
- 00600     // maclhw_.set_decoder(opcd=4, xos=428, oe=0, rc=1);
- 00601    
- 00602     // maclhwo.set_asm("maclhwo %rt, %ra, %rb");
- 00603     // maclhwo.set_decoder(opcd=4, xos=428, oe=1, rc=0);
- 00604    
- 00605     // maclhwo_.set_asm("maclhwo_ %rt, %ra, %rb");
- 00606     // maclhwo_.set_decoder(opcd=4, xos=428, oe=1, rc=1);
- 00607    
- 00608     // maclhws.set_asm("maclhws %rt, %ra, %rb");
- 00609     // maclhws.set_decoder(opcd=4, xos=492, oe=0, rc=0);
- 00610    
- 00611     // maclhws_.set_asm("maclhws_ %rt, %ra, %rb");
- 00612     // maclhws_.set_decoder(opcd=4, xos=492, oe=0, rc=1);
- 00613    
- 00614     // maclhwso.set_asm("maclhwso %rt, %ra, %rb");
- 00615     // maclhwso.set_decoder(opcd=4, xos=492, oe=1, rc=0);
- 00616    
- 00617     // maclhwso_.set_asm("maclhwso_ %rt, %ra, %rb");
- 00618     // maclhwso_.set_decoder(opcd=4, xos=492, oe=1, rc=1);
- 00619    
- 00620     // maclhwsu.set_asm("maclhwsu %rt, %ra, %rb");
- 00621     // maclhwsu.set_decoder(opcd=4, xos=460, oe=0, rc=0);
- 00622    
- 00623     // maclhwsu_.set_asm("maclhwsu_ %rt, %ra, %rb");
- 00624     // maclhwsu_.set_decoder(opcd=4, xos=460, oe=0, rc=1);
- 00625    
- 00626     // maclhwsuo.set_asm("maclhwsuo %rt, %ra, %rb");
- 00627     // maclhwsuo.set_decoder(opcd=4, xos=460, oe=1, rc=0);
- 00628    
- 00629     // maclhwsuo_.set_asm("maclhwsuo_ %rt, %ra, %rb");
- 00630     // maclhwsuo_.set_decoder(opcd=4, xos=460, oe=1, rc=1);
- 00631    
- 00632     // maclhwu.set_asm("maclhwu %rt, %ra, %rb");
- 00633     // maclhwu.set_decoder(opcd=4, xos=396, oe=0, rc=0);
- 00634    
- 00635     // maclhwu_.set_asm("maclhwu_ %rt, %ra, %rb");
- 00636     // maclhwu_.set_decoder(opcd=4, xos=396, oe=0, rc=1);
- 00637    
- 00638     // maclhwuo.set_asm("maclhwuo %rt, %ra, %rb");
- 00639     // maclhwuo.set_decoder(opcd=4, xos=396, oe=1, rc=0);
- 00640    
- 00641     // maclhwuo_.set_asm("maclhwuo_ %rt, %ra, %rb");
- 00642     // maclhwuo_.set_decoder(opcd=4, xos=396, oe=1, rc=1);
- 00643     /* END NOT IMPLEMENTED! 405 Family! */
- 00644    
- 00645    
- 00646     mcrf.set_asm ("mcrf %imm, %imm" , bf, bfa);
- 00647     mcrf.set_decoder (opcd=19, xog=0);
- 00648    
- 00649     mcrxr.set_asm ("mcrxr %imm" , bf);
- 00650     mcrxr.set_decoder (opcd=31, xog=512);
- 00651    
- 00652     mfcr.set_asm ("mfcr %imm" , rt);
- 00653     mfcr.set_decoder (opcd=31, xog=19);
- 00654    
- 00655     /* INCOMPLETE IMPLEMENTATION! */
- 00656     mfspr.set_asm ("mfctr %imm" , rt, sprf=0x120);
- 00657     mfspr.set_asm ("mflr %imm" , rt, sprf=0x100);
- 00658     mfspr.set_asm ("mfspr %imm, %imm" , rt, sprf);
- 00659     mfspr.set_decoder (opcd=31, xog=339);
- 00660    
- 00661     mtcrf.set_asm ("mtcrf %imm, %imm" , xfm, rs);
- 00662     mtcrf.set_decoder (opcd=31, xog=144);
- 00663    
- 00664     /* INCOMPLETE IMPLEMENTATION! */
- 00665     mtspr.set_asm ("mtctr %imm" , rs, sprf=0x120);
- 00666     mtspr.set_asm ("mtlr %imm" , rs, sprf=0x100);
- 00667     mtspr.set_asm ("mtspr %imm, %imm" , sprf, rs);
- 00668     mtspr.set_decoder (opcd=31, xog=467);
- 00669    
- 00670     mulhw.set_asm ("mulhw %reg, %reg, %reg" , rt, ra, rb);
- 00671     mulhw.set_decoder (opcd=31, xos=75, rc=0);
- 00672    
- 00673     mulhw_.set_asm ("mulhw. %reg, %reg, %reg" , rt, ra, rb);
- 00674     mulhw_.set_decoder (opcd=31, xos=75, rc=1);
- 00675    
- 00676     mulhwu.set_asm ("mulhwu %reg, %reg, %reg" , rt, ra, rb);
- 00677     mulhwu.set_decoder (opcd=31, xos=11, rc=0);
- 00678    
- 00679     mulhwu_.set_asm ("mulhwu. %reg, %reg, %reg" , rt, ra, rb);
- 00680     mulhwu_.set_decoder (opcd=31, xos=11, rc=1);
- 00681    
- 00682     mullhw.set_asm ("mullhw %reg, %reg, %reg" , rt, ra, rb);
- 00683     mullhw.set_decoder (opcd=4, xog=424, rc=0);
- 00684    
- 00685     mullhw_.set_asm ("mullhw. %reg, %reg, %reg" , rt, ra, rb);
- 00686     mullhw_.set_decoder (opcd=4, xog=424, rc=1);
- 00687    
- 00688     mullhwu.set_asm ("mullhwu %reg, %reg, %reg" , rt, ra, rb);
- 00689     mullhwu.set_decoder (opcd=4, xog=392, rc=0);
- 00690    
- 00691     mullhwu_.set_asm ("mullhwu. %reg, %reg, %reg" , rt, ra, rb);
- 00692     mullhwu_.set_decoder (opcd=4, xog=392, rc=1);
- 00693    
- 00694     mulli.set_asm ("mulli %reg, %reg, %exp" , rt, ra, d);
- 00695     mulli.set_decoder (opcd=7);
- 00696    
- 00697     mullw.set_asm ("mullw %reg, %reg, %reg" , rt, ra, rb);
- 00698     mullw.set_decoder (opcd=31,oe=0,xos=235,rc=0);
- 00699    
- 00700     mullw_.set_asm ("mullw. %reg, %reg, %reg" , rt, ra, rb);
- 00701     mullw_.set_decoder (opcd=31,oe=0,xos=235,rc=1);
- 00702    
- 00703     mullwo.set_asm ("mullwo %reg, %reg, %reg" , rt, ra, rb);
- 00704     mullwo.set_decoder (opcd=31,oe=1,xos=235,rc=0);
- 00705    
- 00706     mullwo_.set_asm ("mullw %reg, %reg, %reg" , rt, ra, rb);
- 00707     mullwo_.set_decoder (opcd=31,oe=1,xos=235,rc=1);
- 00708    
- 00709     nand.set_asm ("nand %reg, %reg, %reg" , ra, rs, rb);
- 00710     nand.set_decoder (opcd=31, xog=476, rc=0);
- 00711    
- 00712     nand_.set_asm ("nand. %reg, %reg, %reg" , ra, rs, rb);
- 00713     nand_.set_decoder (opcd=31, xog=476, rc=1);
- 00714    
- 00715     neg.set_asm ("neg %reg, %reg" , rt, ra);
- 00716     neg.set_decoder (opcd=31, xos=104, oe=0, rc=0);
- 00717    
- 00718     neg_.set_asm ("neg. %reg, %reg" , rt, ra);
- 00719     neg_.set_decoder (opcd=31, xos=104, oe=0, rc=1);
- 00720    
- 00721     nego.set_asm ("nego %reg, %reg" , rt, ra);
- 00722     nego.set_decoder (opcd=31, xos=104, oe=1, rc=0);
- 00723    
- 00724     nego_.set_asm ("nego. %reg, %reg" , rt, ra);
- 00725     nego_.set_decoder (opcd=31, xos=104, oe=1, rc=1);
- 00726    
- 00727    
- 00728     /* BEGIN NOT IMPLEMENTED! 405 Family! */
- 00729     // nmacchw.set_asm("nmacchw %rt, %ra, %rb");
- 00730     // nmacchw.set_decoder(opcd=4, xos=174, oe=0, rc=0);
- 00731    
- 00732     // nmacchw_.set_asm("nmacchw_ %rt, %ra, %rb");
- 00733     // nmacchw_.set_decoder(opcd=4, xos=174, oe=0, rc=1);
- 00734    
- 00735     // nmacchwo.set_asm("nmacchwo %rt, %ra, %rb");
- 00736     // nmacchwo.set_decoder(opcd=4, xos=174, oe=1, rc=0);
- 00737    
- 00738     // nmacchwo_.set_asm("nmacchwo_ %rt, %ra, %rb");
- 00739     // nmacchwo_.set_decoder(opcd=4, xos=174, oe=1, rc=1);
- 00740    
- 00741     // nmacchws.set_asm("nmacchws %rt, %ra, %rb");
- 00742     // nmacchws.set_decoder(opcd=4, xos=238, oe=0, rc=0);
- 00743    
- 00744     // nmacchws_.set_asm("nmacchws_ %rt, %ra, %rb");
- 00745     // nmacchws_.set_decoder(opcd=4, xos=238, oe=0, rc=1);
- 00746    
- 00747     // nmacchwso.set_asm("nmacchwso %rt, %ra, %rb");
- 00748     // nmacchwso.set_decoder(opcd=4, xos=238, oe=1, rc=0);
- 00749    
- 00750     // nmacchwso_.set_asm("nmacchwso_ %rt, %ra, %rb");
- 00751     // nmacchwso_.set_decoder(opcd=4, xos=238, oe=1, rc=1);
- 00752    
- 00753     // nmachhw.set_asm("nmachhw %rt, %ra, %rb");
- 00754     // nmachhw.set_decoder(opcd=4, xos=46, oe=0, rc=0);
- 00755    
- 00756     // nmachhw_.set_asm("nmachhw_ %rt, %ra, %rb");
- 00757     // nmachhw_.set_decoder(opcd=4, xos=46, oe=0, rc=1);
- 00758    
- 00759     // nmachhwo.set_asm("nmachhwo %rt, %ra, %rb");
- 00760     // nmachhwo.set_decoder(opcd=4, xos=46, oe=1, rc=0);
- 00761    
- 00762     // nmachhwo_.set_asm("nmachhwo_ %rt, %ra, %rb");
- 00763     // nmachhwo_.set_decoder(opcd=4, xos=46, oe=1, rc=1);
- 00764    
- 00765     // nmachhws.set_asm("nmachhws %rt, %ra, %rb");
- 00766     // nmachhws.set_decoder(opcd=4, xos=110, oe=0, rc=0);
- 00767    
- 00768     // nmachhws_.set_asm("nmachhws_ %rt, %ra, %rb");
- 00769     // nmachhws_.set_decoder(opcd=4, xos=110, oe=0, rc=1);
- 00770    
- 00771     // nmachhwso.set_asm("nmachhwso %rt, %ra, %rb");
- 00772     // nmachhwso.set_decoder(opcd=4, xos=110, oe=1, rc=0);
- 00773    
- 00774     // nmachhwso_.set_asm("nmachhwso_ %rt, %ra, %rb");
- 00775     // nmachhwso_.set_decoder(opcd=4, xos=110, oe=1, rc=1);
- 00776    
- 00777     // nmaclhw.set_asm("nmaclhw %rt, %ra, %rb");
- 00778     // nmaclhw.set_decoder(opcd=4, xos=430, oe=0, rc=0);
- 00779    
- 00780     // nmaclhw_.set_asm("nmaclhw_ %rt, %ra, %rb");
- 00781     // nmaclhw_.set_decoder(opcd=4, xos=430, oe=0, rc=1);
- 00782    
- 00783     // nmaclhwo.set_asm("nmaclhwo %rt, %ra, %rb");
- 00784     // nmaclhwo.set_decoder(opcd=4, xos=430, oe=1, rc=0);
- 00785    
- 00786     // nmaclhwo_.set_asm("nmaclhwo_ %rt, %ra, %rb");
- 00787     // nmaclhwo_.set_decoder(opcd=4, xos=430, oe=1, rc=1);
- 00788    
- 00789     // nmaclhws.set_asm("nmaclhws %rt, %ra, %rb");
- 00790     // nmaclhws.set_decoder(opcd=4, xos=494, oe=0, rc=0);
- 00791    
- 00792     // nmaclhws_.set_asm("nmaclhws_ %rt, %ra, %rb");
- 00793     // nmaclhws_.set_decoder(opcd=4, xos=494, oe=0, rc=1);
- 00794    
- 00795     // nmaclhwso.set_asm("nmaclhwso %rt, %ra, %rb");
- 00796     // nmaclhwso.set_decoder(opcd=4, xos=494, oe=1, rc=0);
- 00797    
- 00798     // nmaclhwso_.set_asm("nmaclhwso_ %rt, %ra, %rb");
- 00799     // nmaclhwso_.set_decoder(opcd=4, xos=494, oe=1, rc=1);
- 00800     /* END NOT IMPLEMENTED! 405 Family! */
- 00801    
- 00802     nor.set_asm ("nor %reg, %reg, %reg" , ra, rs, rb);
- 00803     nor.set_decoder (opcd=31, xog=124, rc=0);
- 00804    
- 00805     nor_.set_asm ("nor. %reg, %reg, %reg" , ra, rs, rb);
- 00806     nor_.set_decoder (opcd=31, xog=124, rc=1);
- 00807    
- 00808     ore.set_asm ("or %reg, %reg, %reg" , ra, rs, rb);
- 00809     ore.set_decoder (opcd=31, xog=444, rc=0);
- 00810    
- 00811     ore_.set_asm ("or. %reg, %reg, %reg" , ra, rs, rb);
- 00812     ore_.set_decoder (opcd=31, xog=444, rc=1);
- 00813    
- 00814     orc.set_asm ("orc %reg, %reg, %reg" , ra, rs, rb);
- 00815     orc.set_decoder (opcd=31, xog=412, rc=0);
- 00816    
- 00817     orc_.set_asm ("orc. %reg, %reg, %reg" , ra, rs, rb);
- 00818     orc_.set_decoder (opcd=31, xog=412, rc=1);
- 00819    
- 00820     ori.set_asm ("ori %reg, %reg, %imm" , ra, rs, ui);
- 00821     ori.set_decoder (opcd=24);
- 00822    
- 00823     oris.set_asm ("oris %reg, %reg, %imm" , ra, rs, ui);
- 00824     oris.set_decoder (opcd=25);
- 00825    
- 00826     rlwimi.set_asm ("rlwimi %reg, %reg, %exp, %imm, %exp" , ra, rs, sh, mb, me);
- 00827     rlwimi.set_decoder (opcd=20, rc=0);
- 00828    
- 00829     rlwimi_.set_asm ("rlwimi. %reg, %reg, %exp, %imm, %exp" , ra, rs, sh, mb, me);
- 00830     rlwimi_.set_decoder (opcd=20,rc=1);
- 00831    
- 00832     rlwinm.set_asm ("rlwinm %reg, %reg, %exp, %imm, %exp" , ra, rs, sh, mb, me);
- 00833     rlwinm.set_decoder (opcd=21, rc=0);
- 00834    
- 00835     rlwinm_.set_asm ("rlwinm. %reg, %reg, %exp, %imm, %exp" , ra, rs, sh, mb, me);
- 00836     rlwinm_.set_decoder (opcd=21,rc=1);
- 00837    
- 00838     rlwnm.set_asm ("rlwnm %imm, %imm, %imm, %imm, %imm" , ra, rs, rb, mb, me);
- 00839     rlwnm.set_decoder (opcd=23, rc=0);
- 00840    
- 00841     rlwnm_.set_asm ("rlwnm. %imm, %imm, %imm, %imm, %imm" , ra, rs, rb, mb, me);
- 00842     rlwnm_.set_decoder (opcd=23,rc=1);
- 00843    
- 00844     sc.set_asm ("sc %imm" , lev);
- 00845     sc.set_decoder (opcd=17);
- 00846    
- 00847     slw.set_asm ("slw %reg, %reg, %reg" , ra, rs, rb);
- 00848     slw.set_decoder (opcd=31, xog=24, rc=0);
- 00849    
- 00850     slw_.set_asm ("slw. %reg, %reg, %reg" , ra, rs, rb);
- 00851     slw_.set_decoder (opcd=31, xog=24, rc=1);
- 00852    
- 00853     sraw.set_asm ("sraw %reg, %reg, %reg" , ra, rs, rb);
- 00854     sraw.set_decoder (opcd=31, xog=792, rc=0);
- 00855    
- 00856     sraw_.set_asm ("sraw. %reg, %reg, %reg" , ra, rs, rb);
- 00857     sraw_.set_decoder (opcd=31, xog=792, rc=1);
- 00858    
- 00859     srawi.set_asm ("srawi %reg, %reg, %reg" , ra, rs, sh);
- 00860     srawi.set_decoder (opcd=31, xog=824, rc=0);
- 00861    
- 00862     srawi_.set_asm ("srawi. %reg, %reg, %reg" , ra, rs, sh);
- 00863     srawi_.set_decoder (opcd=31, xog=824, rc=1);
- 00864    
- 00865     srw.set_asm ("srw %reg, %reg, %reg" , ra, rs, rb);
- 00866     srw.set_decoder (opcd=31, xog=536, rc=0);
- 00867    
- 00868     srw_.set_asm ("srw. %reg, %reg, %reg" , ra, rs, rb);
- 00869     srw_.set_decoder (opcd=31, xog=536, rc=1);
- 00870    
- 00871     stb.set_asm ("stb %reg, %imm (%reg)" , rs, d, ra);
- 00872     stb.set_asm ("stb %reg, %exp@l(%reg)" , rs, d, ra);
- 00873     stb.set_decoder (opcd=38);
- 00874    
- 00875     stbu.set_asm ("stbu %reg, %imm (%reg)" , rs, d, ra);
- 00876     stbu.set_asm ("stbu %reg, %exp@l(%reg)" , rs, d, ra);
- 00877     stbu.set_decoder (opcd=39);
- 00878    
- 00879     stbux.set_asm ("stbux %reg, %reg, %reg" , rs, ra, rb);
- 00880     stbux.set_decoder (opcd=31, xog=247);
- 00881    
- 00882     stbx.set_asm ("stbx %reg, %reg, %reg" , rs, ra, rb);
- 00883     stbx.set_decoder (opcd=31, xog=215);
- 00884    
- 00885     sth.set_asm ("sth %reg, %imm (%reg)" , rs, d, ra);
- 00886     sth.set_asm ("sth %reg, %exp@l(%reg)" , rs, d, ra);
- 00887     sth.set_decoder (opcd=44);
- 00888    
- 00889     sthbrx.set_asm ("sthbrx %reg, %reg, %reg" , rs, ra, rb);
- 00890     sthbrx.set_decoder (opcd=31, xog=918);
- 00891    
- 00892     sthu.set_asm ("sthu %reg, %imm (%reg)" , rs, d, ra);
- 00893     sthu.set_asm ("sthu %reg, %exp@l(%reg)" , rs, d, ra);
- 00894     sthu.set_decoder (opcd=45);
- 00895    
- 00896     sthux.set_asm ("sthux %reg, %reg, %reg" , rs, ra, rb);
- 00897     sthux.set_decoder (opcd=31, xog=439);
- 00898    
- 00899     sthx.set_asm ("sthx %reg, %reg, %reg" , rs, ra, rb);
- 00900     sthx.set_decoder (opcd=31, xog=407);
- 00901    
- 00902     stmw.set_asm ("stmw %reg, %imm (%reg)" , rs, d, ra);
- 00903     stmw.set_asm ("stmw %reg, %exp@l(%reg)" , rs, d, ra);
- 00904     stmw.set_decoder (opcd=47);
- 00905    
- 00906     stswi.set_asm ("stswi %reg, %reg, %reg" , rs, ra, nb);
- 00907     stswi.set_decoder (opcd=31, xog=725);
- 00908    
- 00909     stswx.set_asm ("stswx %reg, %reg, %reg" , rs, ra, rb);
- 00910     stswx.set_decoder (opcd=31, xog=661);
- 00911    
- 00912     stw.set_asm ("stw %reg, %imm (%reg)" , rs, d, ra);
- 00913     stw.set_asm ("stw %reg, %exp@l(%reg)" , rs, d, ra);
- 00914     stw.set_decoder (opcd=36);
- 00915    
- 00916     stwbrx.set_asm ("stwbrx %reg, %reg, %reg" , rs, ra, rb);
- 00917     stwbrx.set_decoder (opcd=31, xog=662);
- 00918    
- 00919     stwu.set_asm ("stwu %reg, %imm (%reg)" , rs, d, ra);
- 00920     stwu.set_asm ("stwu %reg, %imm (%reg)" , rs, d, ra);
- 00921     stwu.set_decoder (opcd=37);
- 00922    
- 00923     stwux.set_asm ("stwux %reg, %reg, %reg" , rs, ra, rb);
- 00924     stwux.set_decoder (opcd=31, xog=183);
- 00925    
- 00926     stwx.set_asm ("stwx %reg, %reg, %reg" , rs, ra, rb);
- 00927     stwx.set_decoder (opcd=31, xog=151);
- 00928    
- 00929     subf.set_asm ("subf %reg, %reg, %reg" , rt, ra, rb);
- 00930     subf.set_decoder (opcd=31, oe=0, xos=40, rc=0);
- 00931    
- 00932     subf_.set_asm ("subf. %reg, %reg, %reg" , rt, ra, rb);
- 00933     subf_.set_decoder (opcd=31, oe=0, xos=40, rc=1);
- 00934    
- 00935     subfo.set_asm ("subfo %reg, %reg, %reg" , rt, ra, rb);
- 00936     subfo.set_decoder (opcd=31, oe=1, xos=40, rc=0);
- 00937    
- 00938     subfo_.set_asm ("subfo. %reg, %reg, %reg" , rt, ra, rb);
- 00939     subfo_.set_decoder (opcd=31, oe=1, xos=40, rc=1);
- 00940    
- 00941     subfc.set_asm ("subfc %reg, %reg, %reg" , rt, ra, rb);
- 00942     subfc.set_decoder (opcd=31, oe=0, xos=8, rc=0);
- 00943    
- 00944     subfc_.set_asm ("subfc. %reg, %reg, %reg" , rt, ra, rb);
- 00945     subfc_.set_decoder (opcd=31, oe=0, xos=8, rc=1);
- 00946    
- 00947     subfco.set_asm ("subfco %reg, %reg, %reg" , rt, ra, rb);
- 00948     subfco.set_decoder (opcd=31, oe=1, xos=8, rc=0);
- 00949    
- 00950     subfco_.set_asm ("subfco. %reg, %reg, %reg" , rt, ra, rb);
- 00951     subfco_.set_decoder (opcd=31, oe=1, xos=8, rc=1);
- 00952    
- 00953     subfe.set_asm ("subfe %reg, %reg, %reg" , rt, ra, rb);
- 00954     subfe.set_decoder (opcd=31, oe=0, xos=136, rc=0);
- 00955    
- 00956     subfe_.set_asm ("subfe. %reg, %reg, %reg" , rt, ra, rb);
- 00957     subfe_.set_decoder (opcd=31, oe=0, xos=136, rc=1);
- 00958    
- 00959     subfeo.set_asm ("subfeo %reg, %reg, %reg" , rt, ra, rb);
- 00960     subfeo.set_decoder (opcd=31, oe=1, xos=136, rc=0);
- 00961    
- 00962     subfeo_.set_asm ("subfeo. %reg, %reg, %reg" , rt, ra, rb);
- 00963     subfeo_.set_decoder (opcd=31, oe=1, xos=136, rc=1);
- 00964    
- 00965     subfic.set_asm ("subfic %reg, %reg, %exp" , rt, ra, d);
- 00966     subfic.set_decoder (opcd=8);
- 00967    
- 00968     subfme.set_asm ("subfme %reg, %reg" , rt, ra);
- 00969     subfme.set_decoder (opcd=31, oe=0, xos=232, rc=0);
- 00970    
- 00971     subfme_.set_asm ("subfme. %reg, %reg" , rt, ra);
- 00972     subfme_.set_decoder (opcd=31, oe=0, xos=232, rc=1);
- 00973    
- 00974     subfmeo.set_asm ("subfmeo %reg, %reg" , rt, ra);
- 00975     subfmeo.set_decoder (opcd=31, oe=1, xos=232, rc=0);
- 00976    
- 00977     subfmeo_.set_asm ("subfmeo. %reg, %reg" , rt, ra);
- 00978     subfmeo_.set_decoder (opcd=31, oe=1, xos=232, rc=1);
- 00979    
- 00980     subfze.set_asm ("subfze %reg, %reg" , rt, ra);
- 00981     subfze.set_decoder (opcd=31, oe=0, xos=200, rc=0);
- 00982    
- 00983     subfze_.set_asm ("subfze. %reg, %reg" , rt, ra);
- 00984     subfze_.set_decoder (opcd=31, oe=0, xos=200, rc=1);
- 00985    
- 00986     subfzeo.set_asm ("subfzeo %reg, %reg" , rt, ra);
- 00987     subfzeo.set_decoder (opcd=31, oe=1, xos=200, rc=0);
- 00988    
- 00989     subfzeo_.set_asm ("subfzeo. %reg, %reg" , rt, ra);
- 00990     subfzeo_.set_decoder (opcd=31, oe=1, xos=200, rc=1);
- 00991    
- 00992     xxor.set_asm ("xor %reg, %reg, %reg" , ra, rs, rb);
- 00993     xxor.set_decoder (opcd=31, xog=316, rc=0);
- 00994    
- 00995     xxor_.set_asm ("xor. %reg, %reg, %reg" , ra, rs, rb);
- 00996     xxor_.set_decoder (opcd=31, xog=316, rc=1);
- 00997    
- 00998     xori.set_asm ("xori %reg, %reg, %imm" , ra, rs, ui);
- 00999     xori.set_decoder (opcd=26);
- 01000    
- 01001     xoris.set_asm ("xoris %reg, %reg, %imm" , ra, rs, ui);
- 01002     xoris.set_decoder (opcd=27);
- 01003    
- 01004    
- 01005    
- 01006     /*******************************************************/
- 01007     /* Optional properties to optimize compiled simulation */
- 01008     /*******************************************************/
- 01009    
- 01010     b.is_jump (ac_pc+(li<<2));
- 01011    
- 01012     ba.is_jump (li<<2);
- 01013    
- 01014     bl.is_jump (ac_pc+(li<<2));
- 01015     bl.behavior (LR.write(ac_pc+4););
- 01016    
- 01017     bla.is_jump (li<<2);
- 01018     bla.behavior (LR.write(ac_pc+4););
- 01019    
- 01020    
- 01021     bc.is_branch (ac_pc+(bd<<2));
- 01022     bc.cond (test_Branch_Cond(bo,bi));
- 01023    
- 01024     bca.is_branch (bd<<2);
- 01025     bca.cond (test_Branch_Cond(bo,bi));
- 01026    
- 01027     bcl.is_branch (ac_pc+(bd<<2));
- 01028     bcl.cond (test_Branch_Cond(bo,bi));
- 01029     bcl.behavior (LR.write(ac_pc+4););
- 01030    
- 01031     bcla.is_branch (bd<<2);
- 01032     bcla.cond (test_Branch_Cond(bo,bi));
- 01033     bcla.behavior (LR.write(ac_pc+4););
- 01034    
- 01035    
- 01036     bcctr.is_branch (CTR.read() & 0xFFFFFFFC);
- 01037     bcctr.cond (test_Branch_Cond(bo,bi));
- 01038    
- 01039     bcctrl.is_branch (CTR.read() & 0xFFFFFFFC);
- 01040     bcctrl.cond (test_Branch_Cond(bo,bi));
- 01041     bcctrl.behavior (LR.write(ac_pc+4););
- 01042    
- 01043    
- 01044     bclr.is_branch (LR.read() & 0xFFFFFFFC);
- 01045     bclr.cond (test_Branch_Cond(bo,bi));
- 01046    
- 01047     bclrl.is_branch (LR.read() & 0xFFFFFFFC);
- 01048     bclrl.cond (test_Branch_Cond(bo,bi));
- 01049     bclrl.behavior (LR.write(ac_pc+4););
- 01050    
- 01051    
- 01052     /***************************************/
- 01053     /* Synthetic Instructions */
- 01054     /***************************************/
- 01055    
- 01056     pseudo_instr ("mr %reg, %reg" ) {
- 01057     "or %0, %1, %1" ;
- 01058     }
- 01059    
- 01060     pseudo_instr ("subi %reg, %reg, %imm" ) {
- 01061     "addi %0, %1, -%2" ;
- 01062     }
- 01063    
- 01064     pseudo_instr ("subis %reg, %reg, %imm" ) {
- 01065     "addis %0, %1, -%2" ;
- 01066     }
- 01067    
- 01068     pseudo_instr ("srwi %reg, %reg, %imm" ) {
- 01069     "rlwinm %0, %1, 32-%2, %2, 31" ;
- 01070     }
- 01071    
- 01072     pseudo_instr ("crnot %reg, %reg" ) {
- 01073     "crnor %0, %1, %1" ;
- 01074     }
- 01075    
- 01076     pseudo_instr ("insrwi %reg, %reg, %imm, %imm" ) {
- 01077     "rlwimi %0, %1, 32-%3-%2, %3, %3+%2-1" ;
- 01078     }
- 01079    
- 01080     pseudo_instr ("slwi %reg, %reg, %imm" ) {
- 01081     "rlwinm %0, %1, %2, 0, 31-%2" ;
- 01082     }
- 01083    
- 01084     pseudo_instr ("ble %imm, %addr" ) {
- 01085     "bc 0x4, %0*4+1, %1" ;
- 01086     }
- 01087    
- 01088     pseudo_instr ("bne %imm, %addr" ) {
- 01089     "bc 0x4, %0*4+2, %1" ;
- 01090     }
- 01091    
- 01092     pseudo_instr ("bgt %imm, %addr" ) {
- 01093     "bc 0xC, %0*4+1, %1" ;
- 01094     }
- 01095    
- 01096     pseudo_instr ("blt %imm, %addr" ) {
- 01097     "bc 0xC, %0*4, %1" ;
- 01098     }
- 01099    
- 01100     pseudo_instr ("bge %imm, %addr" ) {
- 01101     "bc 0x4, %0*4, %1" ;
- 01102     }
- 01103    
- 01104     pseudo_instr ("beq %imm, %addr" ) {
- 01105     "bc 0xC, %0*4+2, %1" ;
- 01106     }
- 01107    
- 01108     };
- 01109    
- 01110     };