internal void ClearCalleeSaves() { EBX.ClearCalleeReg(); ESI.ClearCalleeReg(); EDI.ClearCalleeReg(); EBP.ClearCalleeReg(); }
void SetCalleeSaves(CalleeSaveRegistersX86 *calleeSaveRegisters) { EBX.SetCalleeReg(&calleeSaveRegisters->EBX); EDI.SetCalleeReg(&calleeSaveRegisters->EDI); ESI.SetCalleeReg(&calleeSaveRegisters->ESI); EBP.SetCalleeReg(&calleeSaveRegisters->EBP); }
internal void SetCalleeSaves(SpillContext *context) { EBX.SetCalleeReg(&context->ebx); EDI.SetCalleeReg(&context->edi); ESI.SetCalleeReg(&context->esi); EBP.SetCalleeReg(&context->ebp); }
internal void ClearFrame(UIntPtr calleeSaveMask, bool framePointerOmitted) { if (!framePointerOmitted) { VTable.Assert((calleeSaveMask & 0x10) == 0, "EBP should not be callee saved"); EBP.ClearFrameReg(); } if ((calleeSaveMask & 0x1) != 0) { EBX.ClearFrameReg(); } if ((calleeSaveMask & 0x8) != 0) { EBP.ClearFrameReg(); } if ((calleeSaveMask & 0x4) != 0) { ESI.ClearFrameReg(); } if ((calleeSaveMask & 0x2) != 0) { EDI.ClearFrameReg(); } }
internal void ScanLiveRegs(UIntPtr mask, NonNullReferenceVisitor referenceVisitor) { EDI.ScanLiveReg((mask >> 2) & 0x3, referenceVisitor); ESI.ScanLiveReg((mask >> 4) & 0x3, referenceVisitor); EBX.ScanLiveReg((mask >> 0) & 0x3, referenceVisitor); EBP.ScanLiveReg((mask >> 6) & 0x3, referenceVisitor); }
internal void PopFrame(UIntPtr *framePointer, UIntPtr calleeSaveMask, bool framePointerOmitted, bool hasTransitionRecord) { UIntPtr *calleeSaveStart; if (framePointerOmitted) { calleeSaveStart = framePointer - 1; } else { VTable.Assert((calleeSaveMask & 0x100) == 0, "EBP should not be callee saved"); calleeSaveStart = framePointer; EBP.PopFrameReg(ref calleeSaveStart); } if (hasTransitionRecord) { calleeSaveStart -= sizeof(CallStack.TransitionRecord) / sizeof(UIntPtr); } // Note: the order in which these appear is important! if ((calleeSaveMask & 0x1) != 0) { EBX.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x80) != 0) { EBP.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x4) != 0) { ESI.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x2) != 0) { EDI.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x8) != 0) { R12.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x10) != 0) { R13.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x20) != 0) { R14.PopFrameReg(ref calleeSaveStart); } if ((calleeSaveMask & 0x40) != 0) { R15.PopFrameReg(ref calleeSaveStart); } }
internal void ClearCalleeSaves() { EBX.ClearCalleeReg(); ESI.ClearCalleeReg(); EDI.ClearCalleeReg(); EBP.ClearCalleeReg(); R12.ClearCalleeReg(); R13.ClearCalleeReg(); R14.ClearCalleeReg(); R15.ClearCalleeReg(); }
void SetCalleeSaves(CalleeSaveRegistersX64 *calleeSaveRegisters) { EBX.SetCalleeReg(&calleeSaveRegisters->EBX); EDI.SetCalleeReg(&calleeSaveRegisters->EDI); ESI.SetCalleeReg(&calleeSaveRegisters->ESI); EBP.SetCalleeReg(&calleeSaveRegisters->EBP); R12.SetCalleeReg(&calleeSaveRegisters->R12); R13.SetCalleeReg(&calleeSaveRegisters->R13); R14.SetCalleeReg(&calleeSaveRegisters->R14); R15.SetCalleeReg(&calleeSaveRegisters->R15); }
internal void SetCalleeSaves(SpillContext *context) { EBX.SetCalleeReg(&context->bx); EDI.SetCalleeReg(&context->di); ESI.SetCalleeReg(&context->si); EBP.SetCalleeReg(&context->bp); R12.SetCalleeReg(&context->r12); R13.SetCalleeReg(&context->r13); R14.SetCalleeReg(&context->r14); R15.SetCalleeReg(&context->r15); }