/* $Header: pmmu_pseudo,v 1.1 87/08/11 15:28:18 reb Exp $ */

/* generators for MC68030 PMMU instructions */
extern pmmu();
extern pmmu_msk(), pmmu_fcmsk(), pmmu_msk_ea(), pmmu_fcmsk_ea();
extern pmmu_ea1(), pmmu_ea2();
extern pmmu_fc_ea(), pmmu_ea_r(), pmmu_fc_ea_r();

/*	1st operand	2nd operand	3nd operand	opcode	generator */
/*	===========	===========	===========	======	========= */

readonly struct insfmt PFLUSHA_FMT[] = {
	{ 0,		0,		0,		0x2400,	pmmu,	},
};

readonly struct insfmt PFLUSHFC_FMT[] = {
	{ IMB3,		IMB3,		0,		0x3010,	pmmu_fcmsk,},
	{ DREG,		IMB3,		0,		0x3008,	pmmu_fcmsk,},
	{ DFC,		IMB3,		0,		0x3001,	pmmu_msk,},
	{ SFC,		IMB3,		0,		0x3000,	pmmu_msk,},
};

readonly struct insfmt PFLUSH_FMT[] = {
	{ IMB3,		IMB3,		CONT,		0x3810,	pmmu_fcmsk_ea,},
	{ DREG,		IMB3,		CONT,		0x3808,	pmmu_fcmsk_ea,},
	{ SFC,		IMB3,		CONT,		0x3800,	pmmu_msk_ea,},
	{ DFC,		IMB3,		CONT,		0x3801,	pmmu_msk_ea,},
};

readonly struct insfmt PLOADR_FMT[] = {
	{ IMB3, 	CONT,		0,		0x2210,	pmmu_fc_ea,},
	{ DREG,		CONT,		0,		0x2208,	pmmu_fc_ea,},
	{ SFC,		CONT,		0,		0x2200,	pmmu_ea2,},
	{ DFC,		CONT,		0,		0x2201,	pmmu_ea2,},
};

readonly struct insfmt PLOADW_FMT[] = {
	{ IMB3, 	CONT,		0,		0x2010,	pmmu_fc_ea,},
	{ DREG,		CONT,		0,		0x2008,	pmmu_fc_ea,},
	{ SFC,		CONT,		0,		0x2000,	pmmu_ea2,},
	{ DFC,		CONT,		0,		0x2001,	pmmu_ea2,},
};

readonly struct insfmt PMOVE_FMT[] = {
	{ MMUTC,	CONT,		0,		0x4200,	pmmu_ea2,},
	{ MMUSRP,	CONT,		0,		0x4A00,	pmmu_ea2,},
	{ MMUCRP,	CONT,		0,		0x4E00,	pmmu_ea2,},
	{ MMUSR,	CONT,		0,		0x6200,	pmmu_ea2,},
	{ MMUTT0,	CONT,		0,		0x0A00,	pmmu_ea2,},
	{ MMUTT1,	CONT,		0,		0x0E00,	pmmu_ea2,},

	{ CONT,		MMUTC,		0,		0x4000,	pmmu_ea1,},
	{ CONT,		MMUSRP,		0,		0x4800,	pmmu_ea1,},
	{ CONT,		MMUCRP,		0,		0x4C00,	pmmu_ea1,},
	{ CONT,		MMUSR,		0,		0x6000,	pmmu_ea1,},
	{ CONT,		MMUTT0,		0,		0x0800,	pmmu_ea1,},
	{ CONT,		MMUTT1,		0,		0x0C00,	pmmu_ea1,},
};

readonly struct insfmt PTEST0R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8310,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8308,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8300,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8301,	pmmu_ea_r,},
};
readonly struct insfmt PTEST1R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8710,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8708,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8700,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8701,	pmmu_ea_r,},
};
readonly struct insfmt PTEST2R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8B10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8B08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8B00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8B01,	pmmu_ea_r,},
};
readonly struct insfmt PTEST3R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8F10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8F08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8F00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8F01,	pmmu_ea_r,},
};
readonly struct insfmt PTEST4R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9310,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9308,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9300,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9301,	pmmu_ea_r,},
};
readonly struct insfmt PTEST5R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9710,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9708,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9700,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9701,	pmmu_ea_r,},
};
readonly struct insfmt PTEST6R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9B10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9B08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9B00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9B01,	pmmu_ea_r,},
};
readonly struct insfmt PTEST7R_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9F10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9F08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9F00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9F01,	pmmu_ea_r,},
};

readonly struct insfmt PTEST0W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8110,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8108,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8100,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8101,	pmmu_ea_r,},
};
readonly struct insfmt PTEST1W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8510,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8508,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8500,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8501,	pmmu_ea_r,},
};
readonly struct insfmt PTEST2W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8910,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8908,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8900,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8901,	pmmu_ea_r,},
};
readonly struct insfmt PTEST3W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x8D10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x8D08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x8D00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x8D01,	pmmu_ea_r,},
};
readonly struct insfmt PTEST4W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9110,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9108,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9100,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9101,	pmmu_ea_r,},
};
readonly struct insfmt PTEST5W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9510,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9508,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9500,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9501,	pmmu_ea_r,},
};
readonly struct insfmt PTEST6W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9910,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9908,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9900,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9901,	pmmu_ea_r,},
};
readonly struct insfmt PTEST7W_FMT[] = {
	{ IMB3, 	CONT,		AREG,		0x9D10,	pmmu_fc_ea_r,},
	{ DREG,		CONT,		AREG,		0x9D08,	pmmu_fc_ea_r,},
	{ SFC,		CONT,		AREG,		0x9D00,	pmmu_ea_r,},
	{ DFC,		CONT,		AREG,		0x9D01,	pmmu_ea_r,},
};
