// // This callback should create code to push 64-bit function parameter 'paramNum' // static Uns32 push8ByteArg(vmiProcessorP processor, Uns32 paramNum) { VMI_ABORT("Unsupported Function push8ByteArg"); // // align parameter number to an even word // if((paramNum)&1) { // paramNum += 1; // } // // if(paramNum<=5) { // // // argument in a register // vmimtArgReg(32, V850_REG(4+paramNum)); // LSW // vmimtArgReg(32, V850_REG(3+paramNum)); // MSW // // } else { // // // argument on the stack - fetch into a temporary // vmimtLoadRRO( // 64, // destBits // 64, // memBits // (paramNum-6)*4, // offset // V850_TEMPL_REG, // destination (rd) // V850_REG(1), // stack address (ra) // MEM_ENDIAN_BIG, // endian // False, // signExtend // False // checkAlign // ); // // // push temporary argument // vmimtArgReg(64, V850_TEMPL_REG); // } return paramNum+2; }
// // Return processor mode // microblazeVMMode microblazeGetVMMode(microblazeP microblaze) { // MMU // 0 = None // 1 = User Mode // 2 = Protection // 3 = Virtual switch (microblaze->SPR_PVR11.bits.MMU) { case 0: case 1: return VM_MODE_REAL; break; case 2: case 3: if (microblaze->SPR_MSR.bits.VM) { if (microblaze->SPR_MSR.bits.UM) { return VM_MODE_VIRTUAL_USER; } else { return VM_MODE_VIRTUAL_PRIV; } } else { return VM_MODE_REAL; } break; default: VMI_ABORT("Unexpected value for PVR11[MMU]"); break; } }
// // This callback should create code to push address function parameter 'paramNum' // static Uns32 pushAddressArg(vmiProcessorP processor, Uns32 paramNum) { VMI_ABORT("Unsupported Function pushAddressArg"); // // if(paramNum<=5) { // // // argument in a register // vmimtArgRegSimAddress(32, V850_REG(3+paramNum)); // // } else { // // // argument on the stack - fetch into a temporary // vmimtLoadRRO( // 32, // destBits // 32, // memBits // (paramNum-6)*4, // offset // V850_TEMPL_REG, // destination (rd) // V850_REG(1), // stack address (ra) // MEM_ENDIAN_BIG, // endian // False, // signExtend // False // checkAlign // ); // // // push temporary argument // vmimtArgRegSimAddress(32, V850_TEMPL_REG); // } return paramNum+1; }