453 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			453 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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",
 |