ack/mach/ns/as/mach3.c
1987-03-09 19:15:41 +00:00

458 lines
18 KiB
C

/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
#define RCSID3 "$Header$"
/*
* NS 16032 keywords
*/
/* Registers */
0, REG, 0, "r0",
0, REG, 1, "r1",
0, REG, 2, "r2",
0, REG, 3, "r3",
0, REG, 4, "r4",
0, REG, 5, "r5",
0, REG, 6, "r6",
0, REG, 7, "r7",
0, FREG, 0, "f0",
0, FREG, 1, "f1",
0, FREG, 2, "f2",
0, FREG, 3, "f3",
0, FREG, 4, "f4",
0, FREG, 5, "f5",
0, FREG, 6, "f6",
0, FREG, 7, "f7",
/* CPU dedicated registers */
0, AREG, 0x0, "us",
0, AREG, 0x8, "fp",
0, AREG, 0x9, "sp",
0, AREG, 0xA, "sb",
0, AREG, 0xD, "psr",
0, AREG, 0xE, "intbase",
0, AREG, 0xF, "mod",
/* Tokens dedicated to addressing modes */
0, TOS, 0x17, "tos",
0, EXTERNAL, 0x16, "external",
0, PC, 0, "pc",
0, INDICATOR, 'b', "b",
0, INDICATOR, 'c', "c",
0, INDICATOR, 'd', "d",
0, INDICATOR, 'f', "f",
0, INDICATOR, 'i', "i",
0, INDICATOR, 'm', "m",
0, INDICATOR, 'q', "q",
0, INDICATOR, 'u', "u",
0, INDICATOR, 'w', "w",
/* Memory management registers */
0, MREG, 0x0, "bpr0",
0, MREG, 0x1, "bpr1",
0, MREG, 0x4, "pf0",
0, MREG, 0x5, "pf1",
0, MREG, 0x8, "sc",
0, MREG, 0xA, "msr",
0, MREG, 0xB, "bcnt",
0, MREG, 0xC, "ptb0",
0, MREG, 0xD, "ptb1",
0, MREG, 0xF, "eia",
/* Instruction types */
/* Integer instructions */
0, ADD_I, mk_op2(0x5,I_BYTE,I_BYTE), "movb",
0, ADD_I, mk_op2(0x5,I_WORD,I_WORD), "movw",
0, ADD_I, mk_op2(0x5,I_DOUBLE,I_DOUBLE), "movd",
0, ADD_I, mk_op2(0x1,I_BYTE,I_BYTE), "cmpb",
0, ADD_I, mk_op2(0x1,I_WORD,I_WORD), "cmpw",
0, ADD_I, mk_op2(0x1,I_DOUBLE,I_DOUBLE), "cmpd",
0, ADD_I, mk_op2(0x0,I_BYTE,I_BYTE), "addb",
0, ADD_I, mk_op2(0x0,I_WORD,I_WORD), "addw",
0, ADD_I, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "addd",
0, ADD_I, mk_op2(0x4,I_BYTE,I_BYTE), "addcb",
0, ADD_I, mk_op2(0x4,I_WORD,I_WORD), "addcw",
0, ADD_I, mk_op2(0x4,I_DOUBLE,I_DOUBLE), "addcd",
0, ADD_I, mk_op2(0x8,I_BYTE,I_BYTE), "subb",
0, ADD_I, mk_op2(0x8,I_WORD,I_WORD), "subw",
0, ADD_I, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "subd",
0, ADD_I, mk_op2(0xC,I_BYTE,I_BYTE), "subcb",
0, ADD_I, mk_op2(0xC,I_WORD,I_WORD), "subcw",
0, ADD_I, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "subcd",
0, COM, mk_op2(0x8,I_BYTE,I_BYTE), "negb",
0, COM, mk_op2(0x8,I_WORD,I_WORD), "negw",
0, COM, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "negd",
0, COM, mk_op2(0xC,I_BYTE,I_BYTE), "absb",
0, COM, mk_op2(0xC,I_WORD,I_WORD), "absw",
0, COM, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "absd",
0, MUL_I, mk_op2(0x8,I_BYTE,I_BYTE), "mulb",
0, MUL_I, mk_op2(0x8,I_WORD,I_WORD), "mulw",
0, MUL_I, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "muld",
0, MUL_I, mk_op2(0xF,I_BYTE,I_BYTE), "divb",
0, MUL_I, mk_op2(0xF,I_WORD,I_WORD), "divw",
0, MUL_I, mk_op2(0xF,I_DOUBLE,I_DOUBLE), "divd",
0, MUL_I, mk_op2(0xE,I_BYTE,I_BYTE), "modb",
0, MUL_I, mk_op2(0xE,I_WORD,I_WORD), "modw",
0, MUL_I, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "modd",
0, MUL_I, mk_op2(0xC,I_BYTE,I_BYTE), "quob",
0, MUL_I, mk_op2(0xC,I_WORD,I_WORD), "quow",
0, MUL_I, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "quod",
0, MUL_I, mk_op2(0xD,I_BYTE,I_BYTE), "remb",
0, MUL_I, mk_op2(0xD,I_WORD,I_WORD), "remw",
0, MUL_I, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "remd",
0, ADD_I, mk_op2(0xA,I_BYTE,I_BYTE), "andb",
0, ADD_I, mk_op2(0xA,I_WORD,I_WORD), "andw",
0, ADD_I, mk_op2(0xA,I_DOUBLE,I_DOUBLE), "andd",
0, ADD_I, mk_op2(0x6,I_BYTE,I_BYTE), "orb",
0, ADD_I, mk_op2(0x6,I_WORD,I_WORD), "orw",
0, ADD_I, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "ord",
0, ADD_I, mk_op2(0x2,I_BYTE,I_BYTE), "bicb",
0, ADD_I, mk_op2(0x2,I_WORD,I_WORD), "bicw",
0, ADD_I, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "bicd",
0, ADD_I, mk_op2(0xE,I_BYTE,I_BYTE), "xorb",
0, ADD_I, mk_op2(0xE,I_WORD,I_WORD), "xorw",
0, ADD_I, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "xord",
0, COM, mk_op2(0xD,I_BYTE,I_BYTE), "comb",
0, COM, mk_op2(0xD,I_WORD,I_WORD), "comw",
0, COM, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "comd",
0, COM, mk_op2(0x1,I_BYTE,I_BYTE), "ashb",
0, COM, mk_op2(0x1,I_BYTE,I_WORD), "ashw",
0, COM, mk_op2(0x1,I_BYTE,I_DOUBLE), "ashd",
0, COM, mk_op2(0x5,I_BYTE,I_BYTE), "lshb",
0, COM, mk_op2(0x5,I_BYTE,I_WORD), "lshw",
0, COM, mk_op2(0x5,I_BYTE,I_DOUBLE), "lshd",
0, COM, mk_op2(0x0,I_BYTE,I_BYTE), "rotb",
0, COM, mk_op2(0x0,I_BYTE,I_WORD), "rotw",
0, COM, mk_op2(0x0,I_BYTE,I_DOUBLE), "rotd",
0, MOVID, mk_op2(0x4,I_BYTE,I_WORD), "movxbw",
0, MOVID, mk_op2(0x7,I_BYTE,I_DOUBLE), "movxbd",
0, MOVID, mk_op2(0x7,I_WORD,I_DOUBLE), "movxwd",
0, MOVID, mk_op2(0x5,I_BYTE,I_WORD), "movzbw",
0, MOVID, mk_op2(0x6,I_BYTE,I_DOUBLE), "movzbd",
0, MOVID, mk_op2(0x6,I_WORD,I_DOUBLE), "movzwd",
#ifdef UNUSED
0, MOVID, mk_op2(0x7,I_DOUBLE,I_DOUBLE), "movxdd",
0, MOVID, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "movzdd",
#endif
0, ADD_I, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "addr",
/* Quick integer instructions */
0, MOVQ, mk_op1(0x5,I_BYTE), "movqb",
0, MOVQ, mk_op1(0x5,I_WORD), "movqw",
0, MOVQ, mk_op1(0x5,I_DOUBLE), "movqd",
0, MOVQ, mk_op1(0x1,I_BYTE), "cmpqb",
0, MOVQ, mk_op1(0x1,I_WORD), "cmpqw",
0, MOVQ, mk_op1(0x1,I_DOUBLE), "cmpqd",
0, MOVQ, mk_op1(0x0,I_BYTE), "addqb",
0, MOVQ, mk_op1(0x0,I_WORD), "addqw",
0, MOVQ, mk_op1(0x0,I_DOUBLE), "addqd",
/* Extended integer instructions */
0, MUL_I, mk_op2(0x9,I_BYTE,I_BYTE), "meib",
0, MUL_I, mk_op2(0x9,I_WORD,I_WORD), "meiw",
0, MUL_I, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "meid",
0, MUL_I, mk_op2(0xB,I_BYTE,I_BYTE), "deib",
0, MUL_I, mk_op2(0xB,I_WORD,I_WORD), "deiw",
0, MUL_I, mk_op2(0xB,I_DOUBLE,I_DOUBLE), "deid",
/* Boolean instructions */
0, COM, mk_op2(0x9,I_BYTE,I_BYTE), "notb",
0, COM, mk_op2(0x9,I_WORD,I_WORD), "notw",
0, COM, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "notd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_EQ), "seqb",
0, SEQ, mk_op1c(0x3,I_WORD,B_EQ), "seqw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_EQ), "seqd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_NE), "sneb",
0, SEQ, mk_op1c(0x3,I_WORD,B_NE), "snew",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_NE), "sned",
0, SEQ, mk_op1c(0x3,I_BYTE,B_CS), "scsb",
0, SEQ, mk_op1c(0x3,I_WORD,B_CS), "scsw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_CS), "scsd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_CC), "sccb",
0, SEQ, mk_op1c(0x3,I_WORD,B_CC), "sccw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_CC), "sccd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_HI), "shib",
0, SEQ, mk_op1c(0x3,I_WORD,B_HI), "shiw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_HI), "shid",
0, SEQ, mk_op1c(0x3,I_BYTE,B_LS), "slsb",
0, SEQ, mk_op1c(0x3,I_WORD,B_LS), "slsw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LS), "slsd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_GT), "sgtb",
0, SEQ, mk_op1c(0x3,I_WORD,B_GT), "sgtw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_GT), "sgtd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_LE), "sleb",
0, SEQ, mk_op1c(0x3,I_WORD,B_LE), "slew",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LE), "sled",
0, SEQ, mk_op1c(0x3,I_BYTE,B_FS), "sfsb",
0, SEQ, mk_op1c(0x3,I_WORD,B_FS), "sfsw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FS), "sfsd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_FC), "sfcb",
0, SEQ, mk_op1c(0x3,I_WORD,B_FC), "sfcw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FC), "sfcd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_LO), "slob",
0, SEQ, mk_op1c(0x3,I_WORD,B_LO), "slow",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LO), "slod",
0, SEQ, mk_op1c(0x3,I_BYTE,B_HS), "shsb",
0, SEQ, mk_op1c(0x3,I_WORD,B_HS), "shsw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_HS), "shsd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_LT), "sltb",
0, SEQ, mk_op1c(0x3,I_WORD,B_LT), "sltw",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LT), "sltd",
0, SEQ, mk_op1c(0x3,I_BYTE,B_GE), "sgeb",
0, SEQ, mk_op1c(0x3,I_WORD,B_GE), "sgew",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_GE), "sged",
#ifdef UNUSED
0, SEQ, mk_op1c(0x3,I_BYTE,B_TRUE), "strueb",
0, SEQ, mk_op1c(0x3,I_WORD,B_TRUE), "struew",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_TRUE), "strued",
0, SEQ, mk_op1c(0x3,I_BYTE,B_FALSE), "sfalseb",
0, SEQ, mk_op1c(0x3,I_WORD,B_FALSE), "sfalsew",
0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FALSE), "sfalsed",
#endif
/* Bit instructions */
0, ADD_I, mk_op2(0xD,I_BYTE,I_BYTE), "tbitb",
0, ADD_I, mk_op2(0xD,I_WORD,I_WORD), "tbitw",
0, ADD_I, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "tbitd",
0, COM, mk_op2(0x6,I_BYTE,I_BYTE), "sbitb",
0, COM, mk_op2(0x6,I_WORD,I_WORD), "sbitw",
0, COM, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "sbitd",
0, COM, mk_op2(0x7,I_BYTE,I_BYTE), "sbitib",
0, COM, mk_op2(0x7,I_WORD,I_WORD), "sbitiw",
0, COM, mk_op2(0x7,I_DOUBLE,I_DOUBLE), "sbitid",
0, COM, mk_op2(0x2,I_BYTE,I_BYTE), "cbitb",
0, COM, mk_op2(0x2,I_WORD,I_WORD), "cbitw",
0, COM, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "cbitd",
0, COM, mk_op2(0x3,I_BYTE,I_BYTE), "cbitib",
0, COM, mk_op2(0x3,I_WORD,I_WORD), "cbitiw",
0, COM, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "cbitid",
0, COM, mk_op2(0xE,I_BYTE,I_BYTE), "ibitb",
0, COM, mk_op2(0xE,I_WORD,I_WORD), "ibitw",
0, COM, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "ibitd",
0, CHECK, mk_op1(0x1,I_DOUBLE), "cvtp",
0, FFS, mk_op2c(0x5,I_BYTE,I_BYTE,0), "ffsb",
0, FFS, mk_op2c(0x5,I_WORD,I_BYTE,0), "ffsw",
0, FFS, mk_op2c(0x5,I_DOUBLE,I_BYTE,0), "ffsd",
/* Field instructions */
0, INS, mk_op2(0x0,I_BYTE,I_BYTE), "extb",
0, INS, mk_op2(0x0,I_WORD,I_WORD), "extw",
0, INS, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "extd",
0, INSS, mk_op2(0x3,I_BYTE,I_BYTE), "extsb",
0, INSS, mk_op2(0x3,I_WORD,I_WORD), "extsw",
0, INSS, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "extsd",
0, INS, mk_op2(0x2,I_BYTE,I_BYTE), "insb",
0, INS, mk_op2(0x2,I_WORD,I_WORD), "insw",
0, INS, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "insd",
0, INSS, mk_op2(0x2,I_BYTE,I_BYTE), "inssb",
0, INSS, mk_op2(0x2,I_WORD,I_WORD), "inssw",
0, INSS, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "inssd",
/* String instructions */
0, MOVS, mk_op1c(0x0,I_BYTE,0), "movsb",
0, MOVS, mk_op1c(0x0,I_WORD,0), "movsw",
0, MOVS, mk_op1c(0x0,I_DOUBLE,0), "movsd",
0, MOVS, mk_op1c(0x0,I_BYTE,SO_TRANS), "movst",
0, MOVS, mk_op1c(0x1,I_BYTE,0), "cmpsb",
0, MOVS, mk_op1c(0x1,I_WORD,0), "cmpsw",
0, MOVS, mk_op1c(0x1,I_DOUBLE,0), "cmpsd",
0, MOVS, mk_op1c(0x1,I_BYTE,SO_TRANS), "cmpst",
0, MOVS, mk_op1c(0x3,I_BYTE,0), "skpsb",
0, MOVS, mk_op1c(0x3,I_WORD,0), "skpsw",
0, MOVS, mk_op1c(0x3,I_DOUBLE,0), "skpsd",
0, MOVS, mk_op1c(0x3,I_BYTE,SO_TRANS), "skpst",
/* Block instructions */
0, MOVM, mk_op2(0x0,I_BYTE,I_BYTE), "movmb",
0, MOVM, mk_op2(0x0,I_WORD,I_WORD), "movmw",
0, MOVM, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "movmd",
0, MOVM, mk_op2(0x1,I_BYTE,I_BYTE), "cmpmb",
0, MOVM, mk_op2(0x1,I_WORD,I_WORD), "cmpmw",
0, MOVM, mk_op2(0x1,I_DOUBLE,I_DOUBLE), "cmpmd",
/* Packed decimal instructions */
0, COM, mk_op2(0xF,I_BYTE,I_BYTE), "addpb",
0, COM, mk_op2(0xF,I_WORD,I_WORD), "addpw",
0, COM, mk_op2(0xF,I_DOUBLE,I_DOUBLE), "addpd",
0, COM, mk_op2(0xB,I_BYTE,I_BYTE), "subpb",
0, COM, mk_op2(0xB,I_WORD,I_WORD), "subpw",
0, COM, mk_op2(0xB,I_DOUBLE,I_DOUBLE), "subpd",
/* Array instructions */
0, CHECK, mk_op2(0x4,I_BYTE,I_BYTE), "indexb",
0, CHECK, mk_op2(0x4,I_WORD,I_WORD), "indexw",
0, CHECK, mk_op2(0x4,I_DOUBLE,I_DOUBLE), "indexd",
0, CHECK, mk_op2(0x3,I_BYTE,I_BYTE), "checkb",
0, CHECK, mk_op2(0x3,I_WORD,I_WORD), "checkw",
0, CHECK, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "checkd",
/* Processor control instructions */
0, JUMP, mk_op1(0x4,I_DOUBLE), "jump",
0, BR, mk_c(B_EQ), "beq",
0, BR, mk_c(B_NE), "bne",
0, BR, mk_c(B_CS), "bcs",
0, BR, mk_c(B_CC), "bcc",
0, BR, mk_c(B_HI), "bhi",
0, BR, mk_c(B_LS), "bls",
0, BR, mk_c(B_GT), "bgt",
0, BR, mk_c(B_LE), "ble",
0, BR, mk_c(B_FS), "bfs",
0, BR, mk_c(B_FC), "bfc",
0, BR, mk_c(B_LO), "blo",
0, BR, mk_c(B_HS), "bhs",
0, BR, mk_c(B_LT), "blt",
0, BR, mk_c(B_GE), "bge",
0, BR, mk_c(B_TRUE), "br",
#ifdef UNUSED
0, BR, mk_c(B_FALSE), "bfalse",
#endif
0, ADJSP, mk_op1(0xE,I_BYTE), "caseb",
0, ADJSP, mk_op1(0xE,I_WORD), "casew",
0, ADJSP, mk_op1(0xE,I_DOUBLE), "cased",
0, ACB, mk_op1(0x4,I_BYTE), "acbb",
0, ACB, mk_op1(0x4,I_WORD), "acbw",
0, ACB, mk_op1(0x4,I_DOUBLE), "acbd",
0, JSR, mk_op1(0xC,I_DOUBLE), "jsr",
0, BSR, mk_op(0x0), "bsr",
0, RET, mk_op(0x1), "ret",
0, RET, mk_op(0x2), "cxp",
0, ADJSP, mk_op1(0x0,I_DOUBLE), "cxpd",
0, RET, mk_op(0x3), "rxp",
0, RET, mk_op(0x4), "rett",
0, WAIT, mk_op(0x5), "reti",
0, WAIT, mk_op(0xC), "dia",
/* Processor service instructions */
0, ADJSP, mk_op1(0xA,I_BYTE), "adjspb",
0, ADJSP, mk_op1(0xA,I_WORD), "adjspw",
0, ADJSP, mk_op1(0xA,I_DOUBLE), "adjspd",
0, ADJSP, mk_op1(0x2,I_BYTE), "bicpsrb",
0, ADJSP, mk_op1(0x2,I_WORD), "bicpsrw",
0, ADJSP, mk_op1(0x6,I_BYTE), "bispsrb",
0, ADJSP, mk_op1(0x6,I_WORD), "bispsrw",
#ifdef UNUSED
0, ADJSP, mk_op1(0x2,I_DOUBLE), "bicpsrd",
0, ADJSP, mk_op1(0x6,I_DOUBLE), "bispsrd",
#endif
0, SAVE, mk_op(0x6), "save",
0, SAVE, mk_op(0x7), "restore",
0, ENTER, mk_op(0x8), "enter",
0, SAVE, mk_op(0x9), "exit",
0, LPR, mk_op1(0x6,I_BYTE), "lprb",
0, LPR, mk_op1(0x6,I_WORD), "lprw",
0, LPR, mk_op1(0x6,I_DOUBLE), "lprd",
0, LPR, mk_op1(0x2,I_BYTE), "sprb",
0, LPR, mk_op1(0x2,I_WORD), "sprw",
0, LPR, mk_op1(0x2,I_DOUBLE), "sprd",
0, SETCFG, mk_op1(0x2,I_DOUBLE), "setcfg",
0, WAIT, mk_op(0xF), "bpt",
0, WAIT, mk_op(0xD), "flag",
0, WAIT, mk_op(0xE), "svc",
0, WAIT, mk_op(0xA), "nop",
0, WAIT, mk_op(0xB), "wait",
/* Memory management instructions */
0, LMR, mk_op1(0x2,I_DOUBLE), "lmr",
0, LMR, mk_op1(0x3,I_DOUBLE), "smr",
0, RDVAL, mk_op1(0x0,I_DOUBLE), "rdval",
0, RDVAL, mk_op1(0x1,I_DOUBLE), "wrval",
#ifdef SU_ASSEM
/* The assembler ref. man and the CPU description booklet differ
in the encoding of these instructions
*/
0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,1), "movsub",
0, FFS, mk_op2c(0x6,I_WORD,I_WORD,1), "movsuw",
0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,1),"movsud",
0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,3), "movusb",
0, FFS, mk_op2c(0x6,I_WORD,I_WORD,3), "movusw",
0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,3),"movusd",
#else
/* assembler reference manual version */
0, FFS, mk_op2c(0x7,I_BYTE,I_BYTE,0), "movsub",
0, FFS, mk_op2c(0x7,I_WORD,I_WORD,0), "movsuw",
0, FFS, mk_op2c(0x7,I_DOUBLE,I_DOUBLE,0),"movsud",
0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,0), "movusb",
0, FFS, mk_op2c(0x6,I_WORD,I_WORD,0), "movusw",
0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,0),"movusd",
#endif
/* Floating point instructions */
0, ADD_F, mk_op2(0xD,F_FLOAT,F_FLOAT), "absf",
0, ADD_F, mk_op2(0xD,F_LONG,F_LONG), "absl",
0, ADD_F, mk_op2(0x0,F_FLOAT,F_FLOAT), "addf",
0, ADD_F, mk_op2(0x0,F_LONG,F_LONG), "addl",
0, ADD_F, mk_op2(0x2,F_FLOAT,F_FLOAT), "cmpf",
0, ADD_F, mk_op2(0x2,F_LONG,F_LONG), "cmpl",
0, ADD_F, mk_op2(0x8,F_FLOAT,F_FLOAT), "divf",
0, ADD_F, mk_op2(0x8,F_LONG,F_LONG), "divl",
0, ADD_F, mk_op2(0xC,F_FLOAT,F_FLOAT), "mulf",
0, ADD_F, mk_op2(0xC,F_LONG,F_LONG), "mull",
0, ADD_F, mk_op2(0x4,F_FLOAT,F_FLOAT), "subf",
0, ADD_F, mk_op2(0x4,F_LONG,F_LONG), "subl",
0, ADD_F, mk_op2(0x5,F_FLOAT,F_FLOAT), "negf",
0, ADD_F, mk_op2(0x5,F_LONG,F_LONG), "negl",
0, ADD_F, mk_op2(0x1,F_FLOAT,F_FLOAT), "movf",
0, ADD_F, mk_op2(0x1,F_LONG,F_LONG), "movl",
0, MOVIF, mk_op2(0x0,I_BYTE,F_FLOAT), "movbf",
0, MOVIF, mk_op2(0x0,I_WORD,F_FLOAT), "movwf",
0, MOVIF, mk_op2(0x0,I_DOUBLE,F_FLOAT), "movdf",
0, MOVIF, mk_op2(0x0,I_BYTE,F_LONG), "movbl",
0, MOVIF, mk_op2(0x0,I_WORD,F_LONG), "movwl",
0, MOVIF, mk_op2(0x0,I_DOUBLE,F_LONG), "movdl",
0, MOVFL, mk_op2(0x3,F_FLOAT,F_LONG), "movfl",
0, MOVFL, mk_op2(0x2,F_LONG,F_FLOAT), "movlf",
0, TRUNC, mk_op2(0x7,F_FLOAT,I_BYTE), "floorfb",
0, TRUNC, mk_op2(0x7,F_FLOAT,I_WORD), "floorfw",
0, TRUNC, mk_op2(0x7,F_FLOAT,I_DOUBLE), "floorfd",
0, TRUNC, mk_op2(0x7,F_LONG,I_BYTE), "floorlb",
0, TRUNC, mk_op2(0x7,F_LONG,I_WORD), "floorlw",
0, TRUNC, mk_op2(0x7,F_LONG,I_DOUBLE), "floorld",
0, TRUNC, mk_op2(0x4,F_FLOAT,I_BYTE), "roundfb",
0, TRUNC, mk_op2(0x4,F_FLOAT,I_WORD), "roundfw",
0, TRUNC, mk_op2(0x4,F_FLOAT,I_DOUBLE), "roundfd",
0, TRUNC, mk_op2(0x4,F_LONG,I_BYTE), "roundlb",
0, TRUNC, mk_op2(0x4,F_LONG,I_WORD), "roundlw",
0, TRUNC, mk_op2(0x4,F_LONG,I_DOUBLE), "roundld",
0, TRUNC, mk_op2(0x5,F_FLOAT,I_BYTE), "truncfb",
0, TRUNC, mk_op2(0x5,F_FLOAT,I_WORD), "truncfw",
0, TRUNC, mk_op2(0x5,F_FLOAT,I_DOUBLE), "truncfd",
0, TRUNC, mk_op2(0x5,F_LONG,I_BYTE), "trunclb",
0, TRUNC, mk_op2(0x5,F_LONG,I_WORD), "trunclw",
0, TRUNC, mk_op2(0x5,F_LONG,I_DOUBLE), "truncld",
0, LFSR, mk_op(0x1), "lfsr",
0, LFSR, mk_op(0x6), "sfsr",
/* Slave processor instructions */
0, LCR, mk_op1(0x2,I_DOUBLE), "lcr", /* Sure ? */
0, LCR, mk_op1(0x3,I_DOUBLE), "scr", /* Sure ? */
0, CATST, mk_op1(0x0,I_DOUBLE), "catst0",/* Sure ? */
0, CATST, mk_op1(0x1,I_DOUBLE), "catst1",/* Sure ? */
0, LCSR, mk_op1(0x1,S_DOUBLE), "lcsr", /* Sure ? */
0, LCSR, mk_op1(0x6,S_DOUBLE), "scsr", /* Sure ? */
0, CCVSI, mk_op2(0x7,S_DOUBLE,I_BYTE), "ccv0db",
0, CCVSI, mk_op2(0x7,S_DOUBLE,I_WORD), "ccv0dw",
0, CCVSI, mk_op2(0x7,S_DOUBLE,I_DOUBLE), "ccv0dd",
0, CCVSI, mk_op2(0x7,S_QUAD,I_BYTE), "ccv0qb",
0, CCVSI, mk_op2(0x7,S_QUAD,I_WORD), "ccv0qw",
0, CCVSI, mk_op2(0x7,S_QUAD,I_DOUBLE), "ccv0qd",
0, CCVSI, mk_op2(0x5,S_DOUBLE,I_BYTE), "ccv1db",
0, CCVSI, mk_op2(0x5,S_DOUBLE,I_WORD), "ccv1dw",
0, CCVSI, mk_op2(0x5,S_DOUBLE,I_DOUBLE), "ccv1dd",
0, CCVSI, mk_op2(0x5,S_QUAD,I_BYTE), "ccv1qb",
0, CCVSI, mk_op2(0x5,S_QUAD,I_WORD), "ccv1qw",
0, CCVSI, mk_op2(0x5,S_QUAD,I_DOUBLE), "ccv1qd",
0, CCVSI, mk_op2(0x4,S_DOUBLE,I_BYTE), "ccv2db",
0, CCVSI, mk_op2(0x4,S_DOUBLE,I_WORD), "ccv2dw",
0, CCVSI, mk_op2(0x4,S_DOUBLE,I_DOUBLE), "ccv2dd",
0, CCVSI, mk_op2(0x4,S_QUAD,I_BYTE), "ccv2qb",
0, CCVSI, mk_op2(0x4,S_QUAD,I_WORD), "ccv2qw",
0, CCVSI, mk_op2(0x4,S_QUAD,I_DOUBLE), "ccv2qd",
0, CCVIS, mk_op2(0x0,I_BYTE,S_DOUBLE), "ccv3bd",
0, CCVIS, mk_op2(0x0,I_WORD,S_DOUBLE), "ccv3wd",
0, CCVIS, mk_op2(0x0,I_DOUBLE,S_DOUBLE), "ccv3dd",
0, CCVIS, mk_op2(0x0,I_BYTE,S_QUAD), "ccv3bq",
0, CCVIS, mk_op2(0x0,I_WORD,S_QUAD), "ccv3wq",
0, CCVIS, mk_op2(0x0,I_DOUBLE,S_QUAD), "ccv3dq",
0, CCVSS, mk_op2(0x3,S_DOUBLE,S_QUAD), "ccv4dq",
0, CCVSS, mk_op2(0x2,S_QUAD,S_DOUBLE), "ccv5qd",
0, CMOV, mk_op2(0x0,S_DOUBLE,S_DOUBLE), "ccal0d",
0, CMOV, mk_op2(0x0,S_QUAD,S_QUAD), "ccal0q",
0, CMOV, mk_op2(0x4,S_DOUBLE,S_DOUBLE), "ccal1d",
0, CMOV, mk_op2(0x4,S_QUAD,S_QUAD), "ccal1q",
0, CMOV, mk_op2(0xC,S_DOUBLE,S_DOUBLE), "ccal2d",
0, CMOV, mk_op2(0xC,S_QUAD,S_QUAD), "ccal2q",
0, CMOV, mk_op2(0x8,S_DOUBLE,S_DOUBLE), "ccal3d",
0, CMOV, mk_op2(0x8,S_QUAD,S_QUAD), "ccal3q",
0, CMOV, mk_op2(0x2,S_DOUBLE,S_DOUBLE), "ccmpd",
0, CMOV, mk_op2(0x2,S_QUAD,S_QUAD), "ccmpq",
0, CMOV, mk_op2(0x1,S_DOUBLE,S_DOUBLE), "cmov0d",
0, CMOV, mk_op2(0x1,S_QUAD,S_QUAD), "cmov0q",
0, CMOV, mk_op2(0xD,S_DOUBLE,S_DOUBLE), "cmov1d",
0, CMOV, mk_op2(0xD,S_QUAD,S_QUAD), "cmov1q",
0, CMOV, mk_op2(0x5,S_DOUBLE,S_DOUBLE), "cmov2d",
0, CMOV, mk_op2(0x5,S_QUAD,S_QUAD), "cmov2q",