📄 arm-dp-x86.cpp
字号:
/*************************************************************************** DSemu - The Next Generation ** Portable ARM cores: Common: Data processing opcodes [arm-dp.cpp] ** Copyright Imran Nazar, 2005; released under the BSD public licence. ***************************************************************************/#ifdef ARM7TDMI_X86// __ARMHDR is set by the Makefile to be either arm7tdmi.h or arm9es.h#include __ARMHDR#include "datadefs.h"#include "armmasks.h"#include "armhelp.h"//---Addressing modes------------------------------------------------------// BUGBUG: Doubling of Rm15hack in DP addressing is GBA-specific// ACK: Stephen Stair (DP addressing, _RN would be overwritten if Rn==Rd)#define addrDPrn #define addrDPimm \#define addrDPreg \#define addrDPlli \#define addrDPllr \#define addrDPlri \#define addrDPlrr \#define addrDPari \#define addrDParr \#define addrDPrri \#define addrDPrrr \//---Opcode actions-------------------------------------------------------- #define opAND#define opEOR#define opSUB#define opRSB#define opADD#define opADC#define opSBC#define opRSC#define opTST#define opTEQ#define opCMP#define opCMN#define opORR#define opMOV#define opBIC#define opMVN//---Flag setting----------------------------------------------------------// ACK: Mike Murphy [emu7800.sf.net] (V flag setting inspired by M6502.cs) #define cpsrDP \ #define flagDPnz \#define flagDPnzTST \#define flagDPcBIT \#define flagDPvADD #define flagDPvCMN#define flagDPvSUB#define flagDPvRSB#define flagDPvCMP #define flagDPcADD#define flagDPcCMN#define flagDPcSUB#define flagDPcRSB#define flagDPcCMP // Once the defines are in place, it's a simple matter of tacking// addressing, opcode and flagset together. A few hundred times. OPC xopANDlli() { addrDPrn; addrDPlli; opAND; return 2; }OPC xopANDllr() { addrDPrn; addrDPllr; opAND; return 2; }OPC xopANDlri() { addrDPrn; addrDPlri; opAND; return 2; }OPC xopANDlrr() { addrDPrn; addrDPlrr; opAND; return 2; }OPC xopANDari() { addrDPrn; addrDPari; opAND; return 2; }OPC xopANDarr() { addrDPrn; addrDParr; opAND; return 2; }OPC xopANDrri() { addrDPrn; addrDPrri; opAND; return 2; }OPC xopANDrrr() { addrDPrn; addrDPrrr; opAND; return 2; }OPC xopANDimm() { addrDPrn; addrDPimm; opAND; return 1; }OPC xopEORlli() { addrDPrn; addrDPlli; opEOR; return 2; }OPC xopEORllr() { addrDPrn; addrDPllr; opEOR; return 2; }OPC xopEORlri() { addrDPrn; addrDPlri; opEOR; return 2; }OPC xopEORlrr() { addrDPrn; addrDPlrr; opEOR; return 2; }OPC xopEORari() { addrDPrn; addrDPari; opEOR; return 2; }OPC xopEORarr() { addrDPrn; addrDParr; opEOR; return 2; }OPC xopEORrri() { addrDPrn; addrDPrri; opEOR; return 2; }OPC xopEORrrr() { addrDPrn; addrDPrrr; opEOR; return 2; }OPC xopEORimm() { addrDPrn; addrDPimm; opEOR; return 1; }OPC xopSUBlli() { addrDPrn; addrDPlli; opSUB; return 2; }OPC xopSUBllr() { addrDPrn; addrDPllr; opSUB; return 2; }OPC xopSUBlri() { addrDPrn; addrDPlri; opSUB; return 2; }OPC xopSUBlrr() { addrDPrn; addrDPlrr; opSUB; return 2; }OPC xopSUBari() { addrDPrn; addrDPari; opSUB; return 2; }OPC xopSUBarr() { addrDPrn; addrDParr; opSUB; return 2; }OPC xopSUBrri() { addrDPrn; addrDPrri; opSUB; return 2; }OPC xopSUBrrr() { addrDPrn; addrDPrrr; opSUB; return 2; }OPC xopSUBimm() { addrDPrn; addrDPimm; opSUB; return 1; }OPC xopRSBlli() { addrDPrn; addrDPlli; opRSB; return 2; }OPC xopRSBllr() { addrDPrn; addrDPllr; opRSB; return 2; }OPC xopRSBlri() { addrDPrn; addrDPlri; opRSB; return 2; }OPC xopRSBlrr() { addrDPrn; addrDPlrr; opRSB; return 2; }OPC xopRSBari() { addrDPrn; addrDPari; opRSB; return 2; }OPC xopRSBarr() { addrDPrn; addrDParr; opRSB; return 2; }OPC xopRSBrri() { addrDPrn; addrDPrri; opRSB; return 2; }OPC xopRSBrrr() { addrDPrn; addrDPrrr; opRSB; return 2; }OPC xopRSBimm() { addrDPrn; addrDPimm; opRSB; return 1; }OPC xopADDlli() { addrDPrn; addrDPlli; opADD; return 2; }OPC xopADDllr() { addrDPrn; addrDPllr; opADD; return 2; }OPC xopADDlri() { addrDPrn; addrDPlri; opADD; return 2; }OPC xopADDlrr() { addrDPrn; addrDPlrr; opADD; return 2; }OPC xopADDari() { addrDPrn; addrDPari; opADD; return 2; }OPC xopADDarr() { addrDPrn; addrDParr; opADD; return 2; }OPC xopADDrri() { addrDPrn; addrDPrri; opADD; return 2; }OPC xopADDrrr() { addrDPrn; addrDPrrr; opADD; return 2; }OPC xopADDimm() { addrDPrn; addrDPimm; opADD; return 1; }OPC xopADClli() { addrDPrn; addrDPlli; opADC; return 2; }OPC xopADCllr() { addrDPrn; addrDPllr; opADC; return 2; }OPC xopADClri() { addrDPrn; addrDPlri; opADC; return 2; }OPC xopADClrr() { addrDPrn; addrDPlrr; opADC; return 2; }OPC xopADCari() { addrDPrn; addrDPari; opADC; return 2; }OPC xopADCarr() { addrDPrn; addrDParr; opADC; return 2; }OPC xopADCrri() { addrDPrn; addrDPrri; opADC; return 2; }OPC xopADCrrr() { addrDPrn; addrDPrrr; opADC; return 2; }OPC xopADCimm() { addrDPrn; addrDPimm; opADC; return 1; }OPC xopSBClli() { addrDPrn; addrDPlli; opSBC; return 2; }OPC xopSBCllr() { addrDPrn; addrDPllr; opSBC; return 2; }OPC xopSBClri() { addrDPrn; addrDPlri; opSBC; return 2; }OPC xopSBClrr() { addrDPrn; addrDPlrr; opSBC; return 2; }OPC xopSBCari() { addrDPrn; addrDPari; opSBC; return 2; }OPC xopSBCarr() { addrDPrn; addrDParr; opSBC; return 2; }OPC xopSBCrri() { addrDPrn; addrDPrri; opSBC; return 2; }OPC xopSBCrrr() { addrDPrn; addrDPrrr; opSBC; return 2; }OPC xopSBCimm() { addrDPrn; addrDPimm; opSBC; return 1; }OPC xopRSClli() { addrDPrn; addrDPlli; opRSC; return 2; }OPC xopRSCllr() { addrDPrn; addrDPllr; opRSC; return 2; }OPC xopRSClri() { addrDPrn; addrDPlri; opRSC; return 2; }OPC xopRSClrr() { addrDPrn; addrDPlrr; opRSC; return 2; }OPC xopRSCari() { addrDPrn; addrDPari; opRSC; return 2; }OPC xopRSCarr() { addrDPrn; addrDParr; opRSC; return 2; }OPC xopRSCrri() { addrDPrn; addrDPrri; opRSC; return 2; }OPC xopRSCrrr() { addrDPrn; addrDPrrr; opRSC; return 2; }OPC xopRSCimm() { addrDPrn; addrDPimm; opRSC; return 1; }OPC xopORRlli() { addrDPrn; addrDPlli; opORR; return 2; }OPC xopORRllr() { addrDPrn; addrDPllr; opORR; return 2; }OPC xopORRlri() { addrDPrn; addrDPlri; opORR; return 2; }OPC xopORRlrr() { addrDPrn; addrDPlrr; opORR; return 2; }OPC xopORRari() { addrDPrn; addrDPari; opORR; return 2; }OPC xopORRarr() { addrDPrn; addrDParr; opORR; return 2; }OPC xopORRrri() { addrDPrn; addrDPrri; opORR; return 2; }OPC xopORRrrr() { addrDPrn; addrDPrrr; opORR; return 2; }OPC xopORRimm() { addrDPrn; addrDPimm; opORR; return 1; }OPC xopMOVlli() { addrDPrn; addrDPlli; opMOV; return 2; }OPC xopMOVllr() { addrDPrn; addrDPllr; opMOV; return 2; }OPC xopMOVlri() { addrDPrn; addrDPlri; opMOV; return 2; }OPC xopMOVlrr() { addrDPrn; addrDPlrr; opMOV; return 2; }OPC xopMOVari() { addrDPrn; addrDPari; opMOV; return 2; }OPC xopMOVarr() { addrDPrn; addrDParr; opMOV; return 2; }OPC xopMOVrri() { addrDPrn; addrDPrri; opMOV; return 2; }OPC xopMOVrrr() { addrDPrn; addrDPrrr; opMOV; return 2; }OPC xopMOVimm() { addrDPrn; addrDPimm; opMOV; return 1; }OPC xopBIClli() { addrDPrn; addrDPlli; opBIC; return 2; }OPC xopBICllr() { addrDPrn; addrDPllr; opBIC; return 2; }OPC xopBIClri() { addrDPrn; addrDPlri; opBIC; return 2; }OPC xopBIClrr() { addrDPrn; addrDPlrr; opBIC; return 2; }OPC xopBICari() { addrDPrn; addrDPari; opBIC; return 2; }OPC xopBICarr() { addrDPrn; addrDParr; opBIC; return 2; }OPC xopBICrri() { addrDPrn; addrDPrri; opBIC; return 2; }OPC xopBICrrr() { addrDPrn; addrDPrrr; opBIC; return 2; }OPC xopBICimm() { addrDPrn; addrDPimm; opBIC; return 1; }OPC xopMVNlli() { addrDPrn; addrDPlli; opMVN; return 2; }OPC xopMVNllr() { addrDPrn; addrDPllr; opMVN; return 2; }OPC xopMVNlri() { addrDPrn; addrDPlri; opMVN; return 2; }OPC xopMVNlrr() { addrDPrn; addrDPlrr; opMVN; return 2; }OPC xopMVNari() { addrDPrn; addrDPari; opMVN; return 2; }OPC xopMVNarr() { addrDPrn; addrDParr; opMVN; return 2; }OPC xopMVNrri() { addrDPrn; addrDPrri; opMVN; return 2; }OPC xopMVNrrr() { addrDPrn; addrDPrrr; opMVN; return 2; }OPC xopMVNimm() { addrDPrn; addrDPimm; opMVN; return 1; }OPC xopANDSlli() { addrDPrn; addrDPlli; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSllr() { addrDPrn; addrDPllr; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSlri() { addrDPrn; addrDPlri; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSlrr() { addrDPrn; addrDPlrr; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSari() { addrDPrn; addrDPari; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSarr() { addrDPrn; addrDParr; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSrri() { addrDPrn; addrDPrri; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSrrr() { addrDPrn; addrDPrrr; opAND; flagDPnz; cpsrDP; return 2; }OPC xopANDSimm() { addrDPrn; addrDPimm; opAND; flagDPnz; cpsrDP; return 1; }OPC xopEORSlli() { addrDPrn; addrDPlli; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSllr() { addrDPrn; addrDPllr; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSlri() { addrDPrn; addrDPlri; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSlrr() { addrDPrn; addrDPlrr; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSari() { addrDPrn; addrDPari; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSarr() { addrDPrn; addrDParr; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSrri() { addrDPrn; addrDPrri; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSrrr() { addrDPrn; addrDPrrr; opEOR; flagDPnz; cpsrDP; return 2; }OPC xopEORSimm() { addrDPrn; addrDPimm; opEOR; flagDPnz; cpsrDP; return 1; }OPC xopSUBSlli() { addrDPrn; addrDPlli; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSllr() { addrDPrn; addrDPllr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSlri() { addrDPrn; addrDPlri; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSlrr() { addrDPrn; addrDPlrr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSari() { addrDPrn; addrDPari; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSarr() { addrDPrn; addrDParr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSrri() { addrDPrn; addrDPrri; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSrrr() { addrDPrn; addrDPrrr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC xopSUBSimm() { addrDPrn; addrDPimm; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 1; }OPC xopRSBSlli() { addrDPrn; addrDPlli; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC xopRSBSllr() { addrDPrn; addrDPllr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC xopRSBSlri() { addrDPrn; addrDPlri; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC xopRSBSlrr() { addrDPrn; addrDPlrr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC xopRSBSari() { addrDPrn; addrDPari; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC xopRSBSarr() { addrDPrn; addrDParr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -