412 lines
21 KiB
TeX
412 lines
21 KiB
TeX
/* $Id$ */
|
|
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
|
|
/* This file is part of DeforaOS Devel asm */
|
|
/* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, version 3 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
/* generic */
|
|
/* registers */
|
|
|
|
/* conditions */
|
|
#define eq (0x0 << 28)
|
|
#define ne (0x1 << 28)
|
|
#define cs (0x2 << 28)
|
|
#define cc (0x3 << 28)
|
|
#define mi (0x4 << 28)
|
|
#define pl (0x5 << 28)
|
|
#define vs (0x6 << 28)
|
|
#define vc (0x7 << 28)
|
|
#define hi (0x8 << 28)
|
|
#define ls (0x9 << 28)
|
|
#define ge (0xa << 28)
|
|
#define lt (0xb << 28)
|
|
#define gt (0xc << 28)
|
|
#define le (0xd << 28)
|
|
#define al (0xe << 28)
|
|
|
|
/* operations */
|
|
#define and (0x0 << 21)
|
|
#define eor (0x1 << 21)
|
|
#define sub (0x2 << 21)
|
|
#define rsb (0x3 << 21)
|
|
#define add (0x4 << 21)
|
|
#define adc (0x5 << 21)
|
|
#define sbc (0x6 << 21)
|
|
#define rsc (0x7 << 21)
|
|
#define tst (0x8 << 21)
|
|
#define teq (0x9 << 21)
|
|
#define cmp (0xa << 21)
|
|
#define cmn (0xb << 21)
|
|
#define orr (0xc << 21)
|
|
#define mov (0xd << 21)
|
|
#define bic (0xe << 21)
|
|
#define mvn (0xf << 21)
|
|
|
|
/* opcodes */
|
|
#define OPNOP AO_IMMEDIATE(0, 32, 0)
|
|
#define OP_R AO_REGISTER(0, 32, 0)
|
|
|
|
/* branch, branch with link */
|
|
#define OPB(cond) (cond | (0x5 << 25))
|
|
#define OPBF (32 << AOD_SIZE)
|
|
#define OPB_S26 AO_IMMEDIATE(AOF_SIGNED, 26, 0)
|
|
#define OPBL(cond) (cond | (0x5 << 25) | (0x1 << 24))
|
|
#define OPBLF (32 << AOD_SIZE)
|
|
#define OPBL_S26 AO_IMMEDIATE(AOF_SIGNED, 26, 0)
|
|
|
|
/* branch and exchange */
|
|
#define OPBX(cond) (cond | (0x12fff1 << 4))
|
|
#define OPBXF (32 << AOD_SIZE)
|
|
|
|
/* data processing */
|
|
#define OPDATA(cond, op)(cond | op)
|
|
#define OPDATAF (32 << AOD_SIZE)
|
|
#define OP_DATA2 AO_IMMEDIATE(0, 12, 0)
|
|
|
|
|
|
/* instructions */
|
|
/* adc */
|
|
{ "adc", OPDATA(al,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adceq", OPDATA(eq,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcne", OPDATA(ne,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adccs", OPDATA(cs,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adccc", OPDATA(cc,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcmi", OPDATA(mi,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcpl", OPDATA(pl,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcvs", OPDATA(vs,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcvc", OPDATA(vc,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adchi", OPDATA(hi,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcls", OPDATA(ls,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcge", OPDATA(ge,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adclt", OPDATA(lt,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcgt", OPDATA(gt,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcle", OPDATA(le,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "adcal", OPDATA(al,adc), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* add */
|
|
{ "add", OPDATA(al,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addeq", OPDATA(eq,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addne", OPDATA(ne,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addcs", OPDATA(cs,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addcc", OPDATA(cc,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addmi", OPDATA(mi,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addpl", OPDATA(pl,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addvs", OPDATA(vs,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addvc", OPDATA(vc,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addhi", OPDATA(hi,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addls", OPDATA(ls,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addge", OPDATA(ge,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addlt", OPDATA(lt,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addgt", OPDATA(gt,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addle", OPDATA(le,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "addal", OPDATA(al,add), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* and */
|
|
{ "and", OPDATA(al,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andeq", OPDATA(eq,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andne", OPDATA(ne,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andcs", OPDATA(cs,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andcc", OPDATA(cc,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andmi", OPDATA(mi,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andpl", OPDATA(pl,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andvs", OPDATA(vs,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andvc", OPDATA(vc,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andhi", OPDATA(hi,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andls", OPDATA(ls,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andge", OPDATA(ge,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andlt", OPDATA(lt,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andgt", OPDATA(gt,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andle", OPDATA(le,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "andal", OPDATA(al,and), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* b */
|
|
{ "b", OPB(al), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "beq", OPB(eq), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bne", OPB(ne), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bcs", OPB(cs), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bcc", OPB(cc), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bmi", OPB(mi), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bpl", OPB(pl), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bvs", OPB(vs), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bvc", OPB(vc), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bhi", OPB(hi), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bls", OPB(ls), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bge", OPB(ge), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "blt", OPB(lt), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bgt", OPB(gt), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bge", OPB(ge), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
{ "bal", OPB(al), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
|
/* bic */
|
|
{ "bic", OPDATA(al,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "biceq", OPDATA(eq,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicne", OPDATA(ne,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "biccs", OPDATA(cs,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "biccc", OPDATA(cc,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicmi", OPDATA(mi,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicpl", OPDATA(pl,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicvs", OPDATA(vs,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicvc", OPDATA(vc,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bichi", OPDATA(hi,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicls", OPDATA(ls,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicge", OPDATA(ge,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "biclt", OPDATA(lt,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicgt", OPDATA(gt,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bicle", OPDATA(le,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "bical", OPDATA(al,bic), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* bl */
|
|
{ "bl", OPBL(al), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "bleq", OPBL(eq), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blne", OPBL(ne), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blcs", OPBL(cs), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blcc", OPBL(cc), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blmi", OPBL(mi), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blpl", OPBL(pl), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blvs", OPBL(vs), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blvc", OPBL(vc), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blhi", OPBL(hi), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blls", OPBL(ls), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blge", OPBL(ge), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "bllt", OPBL(lt), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blgt", OPBL(gt), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blge", OPBL(ge), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
{ "blal", OPBL(al), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
|
/* bx */
|
|
{ "bx", OPBX(al), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxeq", OPBX(eq), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxne", OPBX(ne), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxcs", OPBX(cs), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxcc", OPBX(cc), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxmi", OPBX(mi), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxpl", OPBX(pl), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxvs", OPBX(vs), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxvc", OPBX(vc), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxhi", OPBX(hi), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxls", OPBX(ls), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxge", OPBX(ge), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxlt", OPBX(lt), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxgt", OPBX(gt), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxge", OPBX(ge), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
{ "bxal", OPBX(al), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
|
#if 1 /* FIXME implement correctly */
|
|
/* cdp */
|
|
{ "cdp", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
#endif
|
|
/* cmn */
|
|
{ "cmn", OPDATA(al,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmneq", OPDATA(eq,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnne", OPDATA(ne,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmncs", OPDATA(cs,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmncc", OPDATA(cc,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnmi", OPDATA(mi,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnpl", OPDATA(pl,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnvs", OPDATA(vs,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnvc", OPDATA(vc,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnhi", OPDATA(hi,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnls", OPDATA(ls,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnge", OPDATA(ge,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnlt", OPDATA(lt,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmngt", OPDATA(gt,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnle", OPDATA(le,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmnal", OPDATA(al,cmn), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* cmp */
|
|
{ "cmp", OPDATA(al,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpeq", OPDATA(eq,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpne", OPDATA(ne,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpcs", OPDATA(cs,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpcc", OPDATA(cc,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpmi", OPDATA(mi,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmppl", OPDATA(pl,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpvs", OPDATA(vs,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpvc", OPDATA(vc,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmphi", OPDATA(hi,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpls", OPDATA(ls,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpge", OPDATA(ge,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmplt", OPDATA(lt,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpgt", OPDATA(gt,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmple", OPDATA(le,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "cmpal", OPDATA(al,cmp), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* eor */
|
|
{ "eor", OPDATA(al,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eoreq", OPDATA(eq,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorne", OPDATA(ne,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorcs", OPDATA(cs,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorcc", OPDATA(cc,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eormi", OPDATA(mi,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorpl", OPDATA(pl,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorvs", OPDATA(vs,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorvc", OPDATA(vc,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorhi", OPDATA(hi,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorls", OPDATA(ls,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorge", OPDATA(ge,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorlt", OPDATA(lt,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorgt", OPDATA(gt,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eorle", OPDATA(le,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "eoral", OPDATA(al,eor), OPDATAF,OP_R, OP_R, OP_R },
|
|
#if 1 /* FIXME implement correctly */
|
|
{ "ldc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "ldm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "ldr", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "mla", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
#endif
|
|
/* mov */
|
|
{ "mov", OPDATA(al,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "moveq", OPDATA(eq,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movne", OPDATA(ne,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movcs", OPDATA(cs,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movcc", OPDATA(cc,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movmi", OPDATA(mi,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movpl", OPDATA(pl,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movvs", OPDATA(vs,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movvc", OPDATA(vc,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movhi", OPDATA(hi,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movls", OPDATA(ls,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movge", OPDATA(ge,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movlt", OPDATA(lt,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movgt", OPDATA(gt,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "movle", OPDATA(le,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "moval", OPDATA(al,mov), OPDATAF,OP_R, OP_R, OP_R },
|
|
#if 1 /* FIXME implement correctly */
|
|
{ "mrc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "mrs", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
/* msr */
|
|
{ "msr", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msreq", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrne", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrcs", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrcc", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrmi", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrpl", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrvs", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrvc", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrhi", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrls", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrge", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrlt", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrgt", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msrle", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "msral", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE },
|
|
{ "mul", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
#endif
|
|
/* mvn */
|
|
{ "mvn", OPDATA(al,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvneq", OPDATA(eq,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnne", OPDATA(ne,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvncs", OPDATA(cs,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvncc", OPDATA(cc,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnmi", OPDATA(mi,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnpl", OPDATA(pl,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnvs", OPDATA(vs,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnvc", OPDATA(vc,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnhi", OPDATA(hi,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnls", OPDATA(ls,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnge", OPDATA(ge,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnlt", OPDATA(lt,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvngt", OPDATA(gt,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnle", OPDATA(le,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "mvnal", OPDATA(al,mvn), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "nop", OPDATA(al,mov), OPDATAF,AOT_NONE, AOT_NONE, AOT_NONE },
|
|
/* orr */
|
|
{ "orr", OPDATA(al,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orreq", OPDATA(eq,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrne", OPDATA(ne,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrcs", OPDATA(cs,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrcc", OPDATA(cc,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrmi", OPDATA(mi,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrpl", OPDATA(pl,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrvs", OPDATA(vs,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrvc", OPDATA(vc,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrhi", OPDATA(hi,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrls", OPDATA(ls,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrge", OPDATA(ge,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrlt", OPDATA(lt,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrgt", OPDATA(gt,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orrle", OPDATA(le,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "orral", OPDATA(al,orr), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* rsb */
|
|
{ "rsb", OPDATA(al,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbeq", OPDATA(eq,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbne", OPDATA(ne,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbcs", OPDATA(cs,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbcc", OPDATA(cc,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbmi", OPDATA(mi,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbpl", OPDATA(pl,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbvs", OPDATA(vs,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbvc", OPDATA(vc,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbhi", OPDATA(hi,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbls", OPDATA(ls,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbge", OPDATA(ge,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsblt", OPDATA(lt,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbgt", OPDATA(gt,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsble", OPDATA(le,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsbal", OPDATA(al,rsb), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* rsc */
|
|
{ "rsc", OPDATA(al,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsceq", OPDATA(eq,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscne", OPDATA(ne,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsccs", OPDATA(cs,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsccc", OPDATA(cc,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscmi", OPDATA(mi,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscpl", OPDATA(pl,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscvs", OPDATA(vs,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscvc", OPDATA(vc,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rschi", OPDATA(hi,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscls", OPDATA(ls,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscge", OPDATA(ge,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rsclt", OPDATA(lt,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscgt", OPDATA(gt,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscle", OPDATA(le,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "rscal", OPDATA(al,rsc), OPDATAF,OP_R, OP_R, OP_R },
|
|
/* sbc */
|
|
{ "sbc", OPDATA(al,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbceq", OPDATA(eq,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcne", OPDATA(ne,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbccs", OPDATA(cs,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbccc", OPDATA(cc,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcmi", OPDATA(mi,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcpl", OPDATA(pl,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcvs", OPDATA(vs,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcvc", OPDATA(vc,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbchi", OPDATA(hi,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcls", OPDATA(ls,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcge", OPDATA(ge,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbclt", OPDATA(lt,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcgt", OPDATA(gt,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcle", OPDATA(le,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sbcal", OPDATA(al,sbc), OPDATAF,OP_R, OP_R, OP_R },
|
|
#if 1 /* FIXME implement correctly */
|
|
{ "stc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "stm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "str", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
#endif
|
|
/* sub */
|
|
{ "sub", OPDATA(al,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subeq", OPDATA(eq,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subne", OPDATA(ne,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subcs", OPDATA(cs,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subcc", OPDATA(cc,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "submi", OPDATA(mi,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subpl", OPDATA(pl,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subvs", OPDATA(vs,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subvc", OPDATA(vc,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subhi", OPDATA(hi,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subls", OPDATA(ls,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subge", OPDATA(ge,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "sublt", OPDATA(lt,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subgt", OPDATA(gt,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "suble", OPDATA(le,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
{ "subal", OPDATA(al,sub), OPDATAF,OP_R, OP_R, OP_R },
|
|
#if 1 /* FIXME implement correctly */
|
|
{ "swi", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "swp", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "teq", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
{ "tst", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
#endif
|