📄 arm-dp.cpp
字号:
OPC opMVNarr() { addrDPrn; addrDParr; opMVN; return 2; }OPC opMVNrri() { addrDPrn; addrDPrri; opMVN; return 2; }OPC opMVNrrr() { addrDPrn; addrDPrrr; opMVN; return 2; }OPC opMVNimm() { addrDPrn; addrDPimm; opMVN; return 1; }OPC opANDSlli() { addrDPrn; addrDPlli; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSllr() { addrDPrn; addrDPllr; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSlri() { addrDPrn; addrDPlri; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSlrr() { addrDPrn; addrDPlrr; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSari() { addrDPrn; addrDPari; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSarr() { addrDPrn; addrDParr; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSrri() { addrDPrn; addrDPrri; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSrrr() { addrDPrn; addrDPrrr; opAND; flagDPnz; cpsrDP; return 2; }OPC opANDSimm() { addrDPrn; addrDPimm; opAND; flagDPnz; cpsrDP; return 1; }OPC opEORSlli() { addrDPrn; addrDPlli; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSllr() { addrDPrn; addrDPllr; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSlri() { addrDPrn; addrDPlri; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSlrr() { addrDPrn; addrDPlrr; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSari() { addrDPrn; addrDPari; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSarr() { addrDPrn; addrDParr; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSrri() { addrDPrn; addrDPrri; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSrrr() { addrDPrn; addrDPrrr; opEOR; flagDPnz; cpsrDP; return 2; }OPC opEORSimm() { addrDPrn; addrDPimm; opEOR; flagDPnz; cpsrDP; return 1; }OPC opSUBSlli() { addrDPrn; addrDPlli; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSllr() { addrDPrn; addrDPllr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSlri() { addrDPrn; addrDPlri; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSlrr() { addrDPrn; addrDPlrr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSari() { addrDPrn; addrDPari; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSarr() { addrDPrn; addrDParr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSrri() { addrDPrn; addrDPrri; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSrrr() { addrDPrn; addrDPrrr; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSUBSimm() { addrDPrn; addrDPimm; opSUB; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 1; }OPC opRSBSlli() { addrDPrn; addrDPlli; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSllr() { addrDPrn; addrDPllr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSlri() { addrDPrn; addrDPlri; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSlrr() { addrDPrn; addrDPlrr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSari() { addrDPrn; addrDPari; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSarr() { addrDPrn; addrDParr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSrri() { addrDPrn; addrDPrri; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSrrr() { addrDPrn; addrDPrrr; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSBSimm() { addrDPrn; addrDPimm; opRSB; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 1; }OPC opADDSlli() { addrDPrn; addrDPlli; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSllr() { addrDPrn; addrDPllr; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSlri() { addrDPrn; addrDPlri; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSlrr() { addrDPrn; addrDPlrr; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSari() { addrDPrn; addrDPari; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSarr() { addrDPrn; addrDParr; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSrri() { addrDPrn; addrDPrri; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSrrr() { addrDPrn; addrDPrrr; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADDSimm() { addrDPrn; addrDPimm; opADD; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 1; }OPC opADCSlli() { addrDPrn; addrDPlli; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSllr() { addrDPrn; addrDPllr; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSlri() { addrDPrn; addrDPlri; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSlrr() { addrDPrn; addrDPlrr; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSari() { addrDPrn; addrDPari; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSarr() { addrDPrn; addrDParr; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSrri() { addrDPrn; addrDPrri; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSrrr() { addrDPrn; addrDPrrr; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 2; }OPC opADCSimm() { addrDPrn; addrDPimm; opADC; flagDPnz; flagDPcADD; flagDPvADD; cpsrDP; return 1; }OPC opSBCSlli() { addrDPrn; addrDPlli; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSllr() { addrDPrn; addrDPllr; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSlri() { addrDPrn; addrDPlri; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSlrr() { addrDPrn; addrDPlrr; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSari() { addrDPrn; addrDPari; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSarr() { addrDPrn; addrDParr; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSrri() { addrDPrn; addrDPrri; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSrrr() { addrDPrn; addrDPrrr; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 2; }OPC opSBCSimm() { addrDPrn; addrDPimm; opSBC; flagDPnz; flagDPcSUB; flagDPvSUB; cpsrDP; return 1; }OPC opRSCSlli() { addrDPrn; addrDPlli; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSllr() { addrDPrn; addrDPllr; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSlri() { addrDPrn; addrDPlri; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSlrr() { addrDPrn; addrDPlrr; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSari() { addrDPrn; addrDPari; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSarr() { addrDPrn; addrDParr; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSrri() { addrDPrn; addrDPrri; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSrrr() { addrDPrn; addrDPrrr; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 2; }OPC opRSCSimm() { addrDPrn; addrDPimm; opRSC; flagDPnz; flagDPcRSB; flagDPvRSB; cpsrDP; return 1; }OPC opTSTSlli() { addrDPrn; addrDPlli; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSllr() { addrDPrn; addrDPllr; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSlri() { addrDPrn; addrDPlri; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSlrr() { addrDPrn; addrDPlrr; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSari() { addrDPrn; addrDPari; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSarr() { addrDPrn; addrDParr; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSrri() { addrDPrn; addrDPrri; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSrrr() { addrDPrn; addrDPrrr; opTST; flagDPnzTST; cpsrDP; return 2; }OPC opTSTSimm() { addrDPrn; addrDPimm; opTST; flagDPnzTST; cpsrDP; return 1; }OPC opTEQSlli() { addrDPrn; addrDPlli; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSllr() { addrDPrn; addrDPllr; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSlri() { addrDPrn; addrDPlri; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSlrr() { addrDPrn; addrDPlrr; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSari() { addrDPrn; addrDPari; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSarr() { addrDPrn; addrDParr; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSrri() { addrDPrn; addrDPrri; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSrrr() { addrDPrn; addrDPrrr; opTEQ; flagDPnzTST; cpsrDP; return 2; }OPC opTEQSimm() { addrDPrn; addrDPimm; opTEQ; flagDPnzTST; cpsrDP; return 1; }OPC opCMPSlli() { addrDPrn; addrDPlli; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSllr() { addrDPrn; addrDPllr; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSlri() { addrDPrn; addrDPlri; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSlrr() { addrDPrn; addrDPlrr; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSari() { addrDPrn; addrDPari; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSarr() { addrDPrn; addrDParr; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSrri() { addrDPrn; addrDPrri; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSrrr() { addrDPrn; addrDPrrr; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 2; }OPC opCMPSimm() { addrDPrn; addrDPimm; opCMP; flagDPnzTST; flagDPcCMP; flagDPvCMP; cpsrDP; return 1; }OPC opCMNSlli() { addrDPrn; addrDPlli; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSllr() { addrDPrn; addrDPllr; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSlri() { addrDPrn; addrDPlri; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSlrr() { addrDPrn; addrDPlrr; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSari() { addrDPrn; addrDPari; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSarr() { addrDPrn; addrDParr; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSrri() { addrDPrn; addrDPrri; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSrrr() { addrDPrn; addrDPrrr; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 2; }OPC opCMNSimm() { addrDPrn; addrDPimm; opCMN; flagDPnzTST; flagDPcCMN; flagDPvCMN; cpsrDP; return 1; }OPC opORRSlli() { addrDPrn; addrDPlli; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSllr() { addrDPrn; addrDPllr; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSlri() { addrDPrn; addrDPlri; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSlrr() { addrDPrn; addrDPlrr; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSari() { addrDPrn; addrDPari; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSarr() { addrDPrn; addrDParr; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSrri() { addrDPrn; addrDPrri; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSrrr() { addrDPrn; addrDPrrr; opORR; flagDPnz; cpsrDP; return 2; }OPC opORRSimm() { addrDPrn; addrDPimm; opORR; flagDPnz; cpsrDP; return 1; }OPC opMOVSlli() { addrDPrn; addrDPlli; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSllr() { addrDPrn; addrDPllr; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSlri() { addrDPrn; addrDPlri; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSlrr() { addrDPrn; addrDPlrr; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSari() { addrDPrn; addrDPari; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSarr() { addrDPrn; addrDParr; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSrri() { addrDPrn; addrDPrri; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSrrr() { addrDPrn; addrDPrrr; opMOV; flagDPnz; cpsrDP; return 2; }OPC opMOVSimm() { addrDPrn; addrDPimm; opMOV; flagDPnz; cpsrDP; return 1; }OPC opBICSlli() { addrDPrn; addrDPlli; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSllr() { addrDPrn; addrDPllr; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSlri() { addrDPrn; addrDPlri; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSlrr() { addrDPrn; addrDPlrr; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSari() { addrDPrn; addrDPari; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSarr() { addrDPrn; addrDParr; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSrri() { addrDPrn; addrDPrri; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSrrr() { addrDPrn; addrDPrrr; opBIC; flagDPnz; cpsrDP; return 2; }OPC opBICSimm() { addrDPrn; addrDPimm; opBIC; flagDPnz; cpsrDP; return 1; }OPC opMVNSlli() { addrDPrn; addrDPlli; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSllr() { addrDPrn; addrDPllr; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSlri() { addrDPrn; addrDPlri; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSlrr() { addrDPrn; addrDPlrr; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSari() { addrDPrn; addrDPari; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSarr() { addrDPrn; addrDParr; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSrri() { addrDPrn; addrDPrri; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSrrr() { addrDPrn; addrDPrrr; opMVN; flagDPnz; cpsrDP; return 2; }OPC opMVNSimm() { addrDPrn; addrDPimm; opMVN; flagDPnz; cpsrDP; return 1; }// Also in this file are various opcodes dealing with data, which aren't// strictly within the manual's DP remit, but are common among the cores.//---Multiply--------------------------------------------------------------// ACK: Mark Andrews, "Atari Roots" [1984] (Long mul algorithm extended)// ACK: Commodore Hacking, issue 8 (Signed long mul negation policy)// NOTE: The Rd and Rs fields are swapped in the instruction definition;// the destination register for multiplies is Rs!OPC opMUL(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RN==15)) opUNP();*//* if(_OP_RM==_OP_RN) opUNP();*/ _RN=_RM*_RS; return 1;}OPC opMLA(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RD==15)| (_OP_RN==15)) opUNP();*//* if(_OP_RM==_OP_RN) opUNP();*/ _RN=_RM*_RS + _RD; return 1;}OPC opMULS(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RN==15)) opUNP();*//* if(_OP_RM==_OP_RN) opUNP();*/ _RN=_RM*_RS; reg.tmp3=_RN; flagDPnzTST; return 1;}OPC opMLAS(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RD==15)| (_OP_RN==15)) opUNP();*//* if(_OP_RM==_OP_RN) opUNP();*/ _RN=_RM*_RS + _RD; reg.tmp3=_RN; flagDPnzTST; return 1;}OPC opUMULL(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RD==15)| (_OP_RN==15)) opUNP();*/ u32 pl=0, ph=0, dshft=0, r=_RM, d=_RS; for(int i=0; i<32; ++i) { if(r&1) { pl+=d; ph+=dshft; } r>>=1; dshft<<=1; dshft+=(d&0x80000000)?1:0; d<<=1; } _RD = pl; _RN=ph; return 1;}OPC opUMLAL(){/* if((_OP_RM==15)| (_OP_RS==15)| (_OP_RD==15)| (_OP_RN==15)) opUNP();*/ u32 pl=0, ph=0, dshft=0, r=_RM, d=_RS, plorig=_RD; for(int i=0; i<32; ++i) { if(r&1) { pl+=d; ph+=dshft; } r>>=1; dshft<<=1; dshft+=(d&0x80000000)?1:0; d<<=1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -