// DSP parallel load/store/move instructions #include "pch.h" using namespace Debug; namespace DSP { // ldd d1,rn,mn d2,r3,m3 void DspInterpreter::p_ldd(AnalyzeInfo& info) { int r = (int)info.paramsEx[1]; core->MoveToReg((int)info.paramsEx[0], core->dsp->ReadDMem(core->regs.r[r])); AdvanceAddress(r, info.paramsEx[2]); r = (int)info.paramsEx[4]; core->MoveToReg((int)info.paramsEx[3], core->dsp->ReadDMem(core->regs.r[r])); AdvanceAddress(r, info.paramsEx[5]); } // ls d,r,m r,m,s void DspInterpreter::p_ls(AnalyzeInfo& info) { int r = (int)info.paramsEx[1]; core->MoveToReg((int)info.paramsEx[0], core->dsp->ReadDMem(core->regs.r[r])); AdvanceAddress(r, info.paramsEx[2]); r = (int)info.paramsEx[3]; core->dsp->WriteDMem(core->regs.r[r], core->MoveFromReg((int)info.paramsEx[5])); AdvanceAddress(r, info.paramsEx[4]); } // ld d,rn,mn void DspInterpreter::p_ld(AnalyzeInfo& info) { int r = (int)info.paramsEx[1]; core->MoveToReg((int)info.paramsEx[0], core->dsp->ReadDMem(core->regs.r[r])); AdvanceAddress(r, info.paramsEx[2]); } // st rn,mn,s void DspInterpreter::p_st(AnalyzeInfo& info) { int r = (int)info.paramsEx[0]; core->dsp->WriteDMem(core->regs.r[r], core->MoveFromReg((int)info.paramsEx[2])); AdvanceAddress(r, info.paramsEx[1]); } // mv d,s void DspInterpreter::p_mv(AnalyzeInfo& info) { core->MoveToReg((int)info.paramsEx[0], core->MoveFromReg((int)info.paramsEx[1])); } // mr rn,mn void DspInterpreter::p_mr(AnalyzeInfo& info) { int r = (int)info.paramsEx[0]; AdvanceAddress(r, info.paramsEx[1]); } }