2016-05-28 12:18:59 +00:00
|
|
|
/*
|
|
|
|
M68KITAB.h
|
|
|
|
|
|
|
|
Copyright (C) 2007, Paul C. Pratt
|
|
|
|
|
|
|
|
You can redistribute this file and/or modify it under the terms
|
|
|
|
of version 2 of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation. You should have received a copy
|
|
|
|
of the license along with this file; see the file COPYING.
|
|
|
|
|
|
|
|
This file 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
|
|
|
|
license for more details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef M68KITAB_H
|
|
|
|
#error "header already included"
|
|
|
|
#else
|
|
|
|
#define M68KITAB_H
|
|
|
|
#endif
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kIKindTst,
|
|
|
|
kIKindCmpB,
|
|
|
|
kIKindCmpW,
|
|
|
|
kIKindCmpL,
|
|
|
|
kIKindBccB,
|
|
|
|
kIKindBccW,
|
|
|
|
kIKindBraB,
|
|
|
|
kIKindBraW,
|
|
|
|
kIKindDBcc,
|
|
|
|
kIKindDBF,
|
|
|
|
kIKindSwap,
|
|
|
|
kIKindMoveL,
|
|
|
|
kIKindMoveW,
|
|
|
|
kIKindMoveB,
|
|
|
|
kIKindMoveAL,
|
|
|
|
kIKindMoveAW,
|
|
|
|
kIKindMoveQ,
|
|
|
|
kIKindAddB,
|
|
|
|
kIKindAddW,
|
|
|
|
kIKindAddL,
|
|
|
|
kIKindSubB,
|
|
|
|
kIKindSubW,
|
|
|
|
kIKindSubL,
|
|
|
|
kIKindLea,
|
|
|
|
kIKindPEA,
|
|
|
|
kIKindA,
|
|
|
|
kIKindBsrB,
|
|
|
|
kIKindBsrW,
|
|
|
|
kIKindJsr,
|
|
|
|
kIKindLinkA6,
|
|
|
|
kIKindMOVEMRmML,
|
|
|
|
kIKindMOVEMApRL,
|
|
|
|
kIKindUnlkA6,
|
|
|
|
kIKindRts,
|
|
|
|
kIKindJmp,
|
|
|
|
kIKindClr,
|
|
|
|
kIKindAddA,
|
|
|
|
kIKindAddQA,
|
|
|
|
kIKindSubA,
|
|
|
|
kIKindSubQA,
|
|
|
|
kIKindCmpA,
|
|
|
|
kIKindAddXB,
|
|
|
|
kIKindAddXW,
|
|
|
|
kIKindAddXL,
|
|
|
|
kIKindSubXB,
|
|
|
|
kIKindSubXW,
|
|
|
|
kIKindSubXL,
|
|
|
|
kIKindRolopNM,
|
|
|
|
kIKindRolopND,
|
|
|
|
kIKindRolopDD,
|
|
|
|
kIKindBitOpDD,
|
|
|
|
kIKindBitOpDM,
|
|
|
|
kIKindBitOpND,
|
|
|
|
kIKindBitOpNM,
|
|
|
|
kIKindAndI,
|
|
|
|
kIKindAndEaD,
|
|
|
|
kIKindAndDEa,
|
|
|
|
kIKindOrI,
|
|
|
|
kIKindOrDEa,
|
|
|
|
kIKindOrEaD,
|
|
|
|
kIKindEor,
|
|
|
|
kIKindEorI,
|
|
|
|
kIKindNot,
|
|
|
|
kIKindScc,
|
|
|
|
kIKindNegXB,
|
|
|
|
kIKindNegXW,
|
|
|
|
kIKindNegXL,
|
|
|
|
kIKindNegB,
|
|
|
|
kIKindNegW,
|
|
|
|
kIKindNegL,
|
|
|
|
kIKindEXTW,
|
|
|
|
kIKindEXTL,
|
|
|
|
kIKindMulU,
|
|
|
|
kIKindMulS,
|
|
|
|
kIKindDivU,
|
|
|
|
kIKindDivS,
|
|
|
|
kIKindExgdd,
|
|
|
|
kIKindExgaa,
|
|
|
|
kIKindExgda,
|
|
|
|
kIKindMoveCCREa,
|
|
|
|
kIKindMoveEaCCR,
|
|
|
|
kIKindMoveSREa,
|
|
|
|
kIKindMoveEaSR,
|
|
|
|
kIKindBinOpStatusCCR,
|
|
|
|
kIKindMOVEMApRW,
|
|
|
|
kIKindMOVEMRmMW,
|
|
|
|
kIKindMOVEMrm,
|
|
|
|
kIKindMOVEMmr,
|
|
|
|
kIKindAbcdr,
|
|
|
|
kIKindAbcdm,
|
|
|
|
kIKindSbcdr,
|
|
|
|
kIKindSbcdm,
|
|
|
|
kIKindNbcd,
|
|
|
|
kIKindRte,
|
|
|
|
kIKindNop,
|
|
|
|
kIKindMoveP,
|
|
|
|
kIKindIllegal,
|
|
|
|
kIKindChkW,
|
|
|
|
kIKindTrap,
|
|
|
|
kIKindTrapV,
|
|
|
|
kIKindRtr,
|
|
|
|
kIKindLink,
|
|
|
|
kIKindUnlk,
|
|
|
|
kIKindMoveRUSP,
|
|
|
|
kIKindMoveUSPR,
|
|
|
|
kIKindTas,
|
|
|
|
kIKindF,
|
|
|
|
kIKindCallMorRtm,
|
|
|
|
kIKindStop,
|
|
|
|
kIKindReset,
|
|
|
|
|
|
|
|
#if Use68020
|
|
|
|
kIKindBraL,
|
|
|
|
kIKindBccL,
|
|
|
|
kIKindBsrL,
|
|
|
|
kIKindEXTBL,
|
|
|
|
kIKindTRAPcc,
|
|
|
|
kIKindChkL,
|
|
|
|
kIKindBkpt,
|
|
|
|
kIKindDivL,
|
|
|
|
kIKindMulL,
|
|
|
|
kIKindRtd,
|
|
|
|
kIKindMoveC,
|
|
|
|
kIKindLinkL,
|
|
|
|
kIKindPack,
|
|
|
|
kIKindUnpk,
|
|
|
|
kIKindCHK2orCMP2,
|
|
|
|
kIKindCAS2,
|
|
|
|
kIKindCAS,
|
|
|
|
kIKindMoveS,
|
|
|
|
kIKindBitField,
|
|
|
|
#endif
|
|
|
|
|
|
|
|
kNumIKinds
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kAMdReg,
|
|
|
|
kAMdIndirect,
|
|
|
|
kAMdAPosIncB,
|
|
|
|
kAMdAPosIncW,
|
|
|
|
kAMdAPosIncL,
|
|
|
|
kAMdAPreDecB,
|
|
|
|
kAMdAPreDecW,
|
|
|
|
kAMdAPreDecL,
|
|
|
|
kAMdADisp,
|
|
|
|
kAMdAIndex,
|
|
|
|
kAMdAbsW,
|
|
|
|
kAMdAbsL,
|
|
|
|
kAMdPCDisp,
|
|
|
|
kAMdPCIndex,
|
|
|
|
kAMdImmedB,
|
|
|
|
kAMdImmedW,
|
|
|
|
kAMdImmedL,
|
|
|
|
kAMdDat4,
|
|
|
|
|
|
|
|
kNumAMds
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
kArgkRegB,
|
|
|
|
kArgkRegW,
|
|
|
|
kArgkRegL,
|
|
|
|
kArgkMemB,
|
|
|
|
kArgkMemW,
|
|
|
|
kArgkMemL,
|
|
|
|
kArgkCnst,
|
|
|
|
|
|
|
|
kNumArgks
|
|
|
|
};
|
|
|
|
|
|
|
|
struct DecOpR {
|
|
|
|
/* expected size : 8 bytes */
|
|
|
|
ui5b A;
|
|
|
|
ui5b B;
|
|
|
|
};
|
|
|
|
typedef struct DecOpR DecOpR;
|
|
|
|
|
|
|
|
#define GetUi5rField(v, shift, sz) \
|
|
|
|
(((v) >> (shift)) & ((1UL << (sz)) - 1))
|
|
|
|
#define SetUi5rField(v, shift, sz, x) \
|
|
|
|
(v) = (((v) & ~ (((1UL << (sz)) - 1) << (shift))) \
|
|
|
|
| (((x) & ((1UL << (sz)) - 1)) << (shift)))
|
|
|
|
|
|
|
|
#define GetDcoFldAMd(f) (GetUi5rField((f), 16, 8))
|
|
|
|
#define GetDcoFldArgk(f) (GetUi5rField((f), 24, 4))
|
|
|
|
#define GetDcoFldArgDat(f) (GetUi5rField((f), 28, 4))
|
|
|
|
|
|
|
|
#define SetDcoFldAMd(f, x) SetUi5rField((f), 16, 8, x)
|
|
|
|
#define SetDcoFldArgk(f, x) SetUi5rField((f), 24, 4, x)
|
|
|
|
#define SetDcoFldArgDat(f, x) SetUi5rField((f), 28, 4, x)
|
|
|
|
|
|
|
|
#define GetDcoMainClas(p) (GetUi5rField((p)->A, 0, 16))
|
|
|
|
#define GetDcoDstAMd(p) (GetDcoFldAMd((p)->A))
|
|
|
|
#define GetDcoDstArgk(p) (GetDcoFldArgk((p)->A))
|
|
|
|
#define GetDcoDstArgDat(p) (GetDcoFldArgDat((p)->A))
|
|
|
|
#define GetDcoSrcAMd(p) (GetDcoFldAMd((p)->B))
|
|
|
|
#define GetDcoSrcArgk(p) (GetDcoFldArgk((p)->B))
|
|
|
|
#define GetDcoSrcArgDat(p) (GetDcoFldArgDat((p)->B))
|
|
|
|
#define GetDcoCycles(p) (GetUi5rField((p)->B, 0, 16))
|
|
|
|
|
|
|
|
#define SetDcoMainClas(p, x) SetUi5rField((p)->A, 0, 16, x)
|
|
|
|
#define SetDcoDstAMd(p, x) SetDcoFldAMd((p)->A, x)
|
|
|
|
#define SetDcoDstArgk(p, x) SetDcoFldArgk((p)->A, x)
|
|
|
|
#define SetDcoDstArgDat(p, x) SetDcoFldArgDat((p)->A, x)
|
|
|
|
#define SetDcoSrcAMd(p, x) SetDcoFldAMd((p)->B, x)
|
|
|
|
#define SetDcoSrcArgk(p, x) SetDcoFldArgk((p)->B, x)
|
|
|
|
#define SetDcoSrcArgDat(p, x) SetDcoFldArgDat((p)->B, x)
|
|
|
|
#define SetDcoCycles(p, x) SetUi5rField((p)->B, 0, 16, x)
|
|
|
|
|
|
|
|
EXPORTPROC M68KITAB_setup(DecOpR *p);
|