1180 lines
21 KiB
C
1180 lines
21 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
getsetrg.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module implement the code necessary to get and set register values.
|
|||
|
These routines are used during the emulation of unaligned data references
|
|||
|
and floating point exceptions.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
David N. Cutler (davec) 17-Jun-1991
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Kernel mode only.
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "ki.h"
|
|||
|
|
|||
|
ULONG
|
|||
|
KiGetRegisterValue (
|
|||
|
IN ULONG Register,
|
|||
|
IN PKEXCEPTION_FRAME ExceptionFrame,
|
|||
|
IN PKTRAP_FRAME TrapFrame
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function is called to get the 32-bit value of a register from the
|
|||
|
specified exception or trap frame.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Register - Supplies the number of the register whose value is to be
|
|||
|
returned. Integer registers are specified as 0 - 31 and floating
|
|||
|
registers are specified as 32 - 63.
|
|||
|
|
|||
|
ExceptionFrame - Supplies a pointer to an exception frame.
|
|||
|
|
|||
|
TrapFrame - Supplies a pointer to a trap frame.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
The value of the specified register is returned as the function value.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
//
|
|||
|
// Dispatch on the register number.
|
|||
|
//
|
|||
|
|
|||
|
if (Register == 0) {
|
|||
|
return 0;
|
|||
|
|
|||
|
} else if (Register < 32) {
|
|||
|
return (ULONG)(&TrapFrame->XIntZero)[Register];
|
|||
|
|
|||
|
} else {
|
|||
|
switch (Register) {
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F0.
|
|||
|
//
|
|||
|
|
|||
|
case 32:
|
|||
|
return TrapFrame->FltF0;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F1.
|
|||
|
//
|
|||
|
|
|||
|
case 33:
|
|||
|
return TrapFrame->FltF1;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F2.
|
|||
|
//
|
|||
|
|
|||
|
case 34:
|
|||
|
return TrapFrame->FltF2;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F3.
|
|||
|
//
|
|||
|
|
|||
|
case 35:
|
|||
|
return TrapFrame->FltF3;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F4.
|
|||
|
//
|
|||
|
|
|||
|
case 36:
|
|||
|
return TrapFrame->FltF4;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F5.
|
|||
|
//
|
|||
|
|
|||
|
case 37:
|
|||
|
return TrapFrame->FltF5;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F6.
|
|||
|
//
|
|||
|
|
|||
|
case 38:
|
|||
|
return TrapFrame->FltF6;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F7.
|
|||
|
//
|
|||
|
|
|||
|
case 39:
|
|||
|
return TrapFrame->FltF7;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F8.
|
|||
|
//
|
|||
|
|
|||
|
case 40:
|
|||
|
return TrapFrame->FltF8;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F9.
|
|||
|
//
|
|||
|
|
|||
|
case 41:
|
|||
|
return TrapFrame->FltF9;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F10.
|
|||
|
//
|
|||
|
|
|||
|
case 42:
|
|||
|
return TrapFrame->FltF10;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F11.
|
|||
|
//
|
|||
|
|
|||
|
case 43:
|
|||
|
return TrapFrame->FltF11;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F12.
|
|||
|
//
|
|||
|
|
|||
|
case 44:
|
|||
|
return TrapFrame->FltF12;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F13.
|
|||
|
//
|
|||
|
|
|||
|
case 45:
|
|||
|
return TrapFrame->FltF13;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F14.
|
|||
|
//
|
|||
|
|
|||
|
case 46:
|
|||
|
return TrapFrame->FltF14;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F15.
|
|||
|
//
|
|||
|
|
|||
|
case 47:
|
|||
|
return TrapFrame->FltF15;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F16.
|
|||
|
//
|
|||
|
|
|||
|
case 48:
|
|||
|
return TrapFrame->FltF16;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F17.
|
|||
|
//
|
|||
|
|
|||
|
case 49:
|
|||
|
return TrapFrame->FltF17;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F18.
|
|||
|
//
|
|||
|
|
|||
|
case 50:
|
|||
|
return TrapFrame->FltF18;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F19.
|
|||
|
//
|
|||
|
|
|||
|
case 51:
|
|||
|
return TrapFrame->FltF19;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F20.
|
|||
|
//
|
|||
|
|
|||
|
case 52:
|
|||
|
return ExceptionFrame->FltF20;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F21.
|
|||
|
//
|
|||
|
|
|||
|
case 53:
|
|||
|
return ExceptionFrame->FltF21;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F22.
|
|||
|
//
|
|||
|
|
|||
|
case 54:
|
|||
|
return ExceptionFrame->FltF22;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F23.
|
|||
|
//
|
|||
|
|
|||
|
case 55:
|
|||
|
return ExceptionFrame->FltF23;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F24.
|
|||
|
//
|
|||
|
|
|||
|
case 56:
|
|||
|
return ExceptionFrame->FltF24;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F25.
|
|||
|
//
|
|||
|
|
|||
|
case 57:
|
|||
|
return ExceptionFrame->FltF25;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F26.
|
|||
|
//
|
|||
|
|
|||
|
case 58:
|
|||
|
return ExceptionFrame->FltF26;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F27.
|
|||
|
//
|
|||
|
|
|||
|
case 59:
|
|||
|
return ExceptionFrame->FltF27;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F28.
|
|||
|
//
|
|||
|
|
|||
|
case 60:
|
|||
|
return ExceptionFrame->FltF28;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F29.
|
|||
|
//
|
|||
|
|
|||
|
case 61:
|
|||
|
return ExceptionFrame->FltF29;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F30.
|
|||
|
//
|
|||
|
|
|||
|
case 62:
|
|||
|
return ExceptionFrame->FltF30;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F31.
|
|||
|
//
|
|||
|
|
|||
|
case 63:
|
|||
|
return ExceptionFrame->FltF31;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ULONGLONG
|
|||
|
KiGetRegisterValue64 (
|
|||
|
IN ULONG Register,
|
|||
|
IN PKEXCEPTION_FRAME ExceptionFrame,
|
|||
|
IN PKTRAP_FRAME TrapFrame
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function is called to get the 64-bit value of a register from the
|
|||
|
specified exception or trap frame.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Register - Supplies the number of the register whose value is to be
|
|||
|
returned. Integer registers are specified as 0 - 31 and floating
|
|||
|
registers are specified as 32 - 63.
|
|||
|
|
|||
|
ExceptionFrame - Supplies a pointer to an exception frame.
|
|||
|
|
|||
|
TrapFrame - Supplies a pointer to a trap frame.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
The value of the specified register is returned as the function value.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
//
|
|||
|
// Dispatch on the register number.
|
|||
|
//
|
|||
|
|
|||
|
if (Register == 0) {
|
|||
|
return 0;
|
|||
|
|
|||
|
} else if (Register < 32) {
|
|||
|
return (&TrapFrame->XIntZero)[Register];
|
|||
|
|
|||
|
} else {
|
|||
|
switch (Register) {
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F0.
|
|||
|
//
|
|||
|
|
|||
|
case 32:
|
|||
|
return TrapFrame->XFltF0;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F1.
|
|||
|
//
|
|||
|
|
|||
|
case 33:
|
|||
|
return TrapFrame->XFltF1;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F2.
|
|||
|
//
|
|||
|
|
|||
|
case 34:
|
|||
|
return TrapFrame->XFltF2;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F3.
|
|||
|
//
|
|||
|
|
|||
|
case 35:
|
|||
|
return TrapFrame->XFltF3;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F4.
|
|||
|
//
|
|||
|
|
|||
|
case 36:
|
|||
|
return TrapFrame->XFltF4;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F5.
|
|||
|
//
|
|||
|
|
|||
|
case 37:
|
|||
|
return TrapFrame->XFltF5;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F6.
|
|||
|
//
|
|||
|
|
|||
|
case 38:
|
|||
|
return TrapFrame->XFltF6;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F7.
|
|||
|
//
|
|||
|
|
|||
|
case 39:
|
|||
|
return TrapFrame->XFltF7;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F8.
|
|||
|
//
|
|||
|
|
|||
|
case 40:
|
|||
|
return TrapFrame->XFltF8;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F9.
|
|||
|
//
|
|||
|
|
|||
|
case 41:
|
|||
|
return TrapFrame->XFltF9;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F10.
|
|||
|
//
|
|||
|
|
|||
|
case 42:
|
|||
|
return TrapFrame->XFltF10;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F11.
|
|||
|
//
|
|||
|
|
|||
|
case 43:
|
|||
|
return TrapFrame->XFltF11;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F12.
|
|||
|
//
|
|||
|
|
|||
|
case 44:
|
|||
|
return TrapFrame->XFltF12;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F13.
|
|||
|
//
|
|||
|
|
|||
|
case 45:
|
|||
|
return TrapFrame->XFltF13;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F14.
|
|||
|
//
|
|||
|
|
|||
|
case 46:
|
|||
|
return TrapFrame->XFltF14;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F15.
|
|||
|
//
|
|||
|
|
|||
|
case 47:
|
|||
|
return TrapFrame->XFltF15;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F16.
|
|||
|
//
|
|||
|
|
|||
|
case 48:
|
|||
|
return TrapFrame->XFltF16;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F17.
|
|||
|
//
|
|||
|
|
|||
|
case 49:
|
|||
|
return TrapFrame->XFltF17;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F18.
|
|||
|
//
|
|||
|
|
|||
|
case 50:
|
|||
|
return TrapFrame->XFltF18;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F19.
|
|||
|
//
|
|||
|
|
|||
|
case 51:
|
|||
|
return TrapFrame->XFltF19;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F20.
|
|||
|
//
|
|||
|
|
|||
|
case 52:
|
|||
|
return ExceptionFrame->XFltF20;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F21.
|
|||
|
//
|
|||
|
|
|||
|
case 53:
|
|||
|
return TrapFrame->XFltF21;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F22.
|
|||
|
//
|
|||
|
|
|||
|
case 54:
|
|||
|
return ExceptionFrame->XFltF22;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F23.
|
|||
|
//
|
|||
|
|
|||
|
case 55:
|
|||
|
return TrapFrame->XFltF23;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F24.
|
|||
|
//
|
|||
|
|
|||
|
case 56:
|
|||
|
return ExceptionFrame->XFltF24;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F25.
|
|||
|
//
|
|||
|
|
|||
|
case 57:
|
|||
|
return TrapFrame->XFltF25;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F26.
|
|||
|
//
|
|||
|
|
|||
|
case 58:
|
|||
|
return ExceptionFrame->XFltF26;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F27.
|
|||
|
//
|
|||
|
|
|||
|
case 59:
|
|||
|
return TrapFrame->XFltF27;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F28.
|
|||
|
//
|
|||
|
|
|||
|
case 60:
|
|||
|
return ExceptionFrame->XFltF28;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F29.
|
|||
|
//
|
|||
|
|
|||
|
case 61:
|
|||
|
return TrapFrame->XFltF29;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F30.
|
|||
|
//
|
|||
|
|
|||
|
case 62:
|
|||
|
return ExceptionFrame->XFltF30;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F31.
|
|||
|
//
|
|||
|
|
|||
|
case 63:
|
|||
|
return TrapFrame->XFltF31;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
VOID
|
|||
|
KiSetRegisterValue (
|
|||
|
IN ULONG Register,
|
|||
|
IN ULONG Value,
|
|||
|
OUT PKEXCEPTION_FRAME ExceptionFrame,
|
|||
|
OUT PKTRAP_FRAME TrapFrame
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function is called to set the 32-bit value of a register in the
|
|||
|
specified exception or trap frame.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Register - Supplies the number of the register whose value is to be
|
|||
|
stored. Integer registers are specified as 0 - 31 and floating
|
|||
|
registers are specified as 32 - 63.
|
|||
|
|
|||
|
Value - Supplies the value to be stored in the specified register.
|
|||
|
|
|||
|
ExceptionFrame - Supplies a pointer to an exception frame.
|
|||
|
|
|||
|
TrapFrame - Supplies a pointer to a trap frame.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
//
|
|||
|
// Dispatch on the register number.
|
|||
|
//
|
|||
|
|
|||
|
if (Register < 32) {
|
|||
|
(&TrapFrame->XIntZero)[Register] = (LONG)Value;
|
|||
|
|
|||
|
} else {
|
|||
|
switch (Register) {
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F0.
|
|||
|
//
|
|||
|
|
|||
|
case 32:
|
|||
|
TrapFrame->FltF0 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F1.
|
|||
|
//
|
|||
|
|
|||
|
case 33:
|
|||
|
TrapFrame->FltF1 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F2.
|
|||
|
//
|
|||
|
|
|||
|
case 34:
|
|||
|
TrapFrame->FltF2 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F3.
|
|||
|
//
|
|||
|
|
|||
|
case 35:
|
|||
|
TrapFrame->FltF3 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F4.
|
|||
|
//
|
|||
|
|
|||
|
case 36:
|
|||
|
TrapFrame->FltF4 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F5.
|
|||
|
//
|
|||
|
|
|||
|
case 37:
|
|||
|
TrapFrame->FltF5 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F6.
|
|||
|
//
|
|||
|
|
|||
|
case 38:
|
|||
|
TrapFrame->FltF6 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F7.
|
|||
|
//
|
|||
|
|
|||
|
case 39:
|
|||
|
TrapFrame->FltF7 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F8.
|
|||
|
//
|
|||
|
|
|||
|
case 40:
|
|||
|
TrapFrame->FltF8 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F9.
|
|||
|
//
|
|||
|
|
|||
|
case 41:
|
|||
|
TrapFrame->FltF9 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F10.
|
|||
|
//
|
|||
|
|
|||
|
case 42:
|
|||
|
TrapFrame->FltF10 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F11.
|
|||
|
//
|
|||
|
|
|||
|
case 43:
|
|||
|
TrapFrame->FltF11 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F12.
|
|||
|
//
|
|||
|
|
|||
|
case 44:
|
|||
|
TrapFrame->FltF12 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F13.
|
|||
|
//
|
|||
|
|
|||
|
case 45:
|
|||
|
TrapFrame->FltF13 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F14.
|
|||
|
//
|
|||
|
|
|||
|
case 46:
|
|||
|
TrapFrame->FltF14 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F15.
|
|||
|
//
|
|||
|
|
|||
|
case 47:
|
|||
|
TrapFrame->FltF15 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F16.
|
|||
|
//
|
|||
|
|
|||
|
case 48:
|
|||
|
TrapFrame->FltF16 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F17.
|
|||
|
//
|
|||
|
|
|||
|
case 49:
|
|||
|
TrapFrame->FltF17 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F18.
|
|||
|
//
|
|||
|
|
|||
|
case 50:
|
|||
|
TrapFrame->FltF18 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F19.
|
|||
|
//
|
|||
|
|
|||
|
case 51:
|
|||
|
TrapFrame->FltF19 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F20.
|
|||
|
//
|
|||
|
|
|||
|
case 52:
|
|||
|
ExceptionFrame->FltF20 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F21.
|
|||
|
//
|
|||
|
|
|||
|
case 53:
|
|||
|
ExceptionFrame->FltF21 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F22.
|
|||
|
//
|
|||
|
|
|||
|
case 54:
|
|||
|
ExceptionFrame->FltF22 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F23.
|
|||
|
//
|
|||
|
|
|||
|
case 55:
|
|||
|
ExceptionFrame->FltF23 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F24.
|
|||
|
//
|
|||
|
|
|||
|
case 56:
|
|||
|
ExceptionFrame->FltF24 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F25.
|
|||
|
//
|
|||
|
|
|||
|
case 57:
|
|||
|
ExceptionFrame->FltF25 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F26.
|
|||
|
//
|
|||
|
|
|||
|
case 58:
|
|||
|
ExceptionFrame->FltF26 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F27.
|
|||
|
//
|
|||
|
|
|||
|
case 59:
|
|||
|
ExceptionFrame->FltF27 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F28.
|
|||
|
//
|
|||
|
|
|||
|
case 60:
|
|||
|
ExceptionFrame->FltF28 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F29.
|
|||
|
//
|
|||
|
|
|||
|
case 61:
|
|||
|
ExceptionFrame->FltF29 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F30.
|
|||
|
//
|
|||
|
|
|||
|
case 62:
|
|||
|
ExceptionFrame->FltF30 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F31.
|
|||
|
//
|
|||
|
|
|||
|
case 63:
|
|||
|
ExceptionFrame->FltF31 = Value;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
VOID
|
|||
|
KiSetRegisterValue64 (
|
|||
|
IN ULONG Register,
|
|||
|
IN ULONGLONG Value,
|
|||
|
OUT PKEXCEPTION_FRAME ExceptionFrame,
|
|||
|
OUT PKTRAP_FRAME TrapFrame
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This function is called to set the 64-bit value of a register in the
|
|||
|
specified exception or trap frame.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Register - Supplies the number of the register whose value is to be
|
|||
|
stored. Integer registers are specified as 0 - 31 and floating
|
|||
|
registers are specified as 32 - 63.
|
|||
|
|
|||
|
Value - Supplies the value to be stored in the specified register.
|
|||
|
|
|||
|
ExceptionFrame - Supplies a pointer to an exception frame.
|
|||
|
|
|||
|
TrapFrame - Supplies a pointer to a trap frame.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
//
|
|||
|
// Dispatch on the register number.
|
|||
|
//
|
|||
|
|
|||
|
if (Register < 32) {
|
|||
|
(&TrapFrame->XIntZero)[Register] = Value;
|
|||
|
|
|||
|
} else {
|
|||
|
switch (Register) {
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F0.
|
|||
|
//
|
|||
|
|
|||
|
case 32:
|
|||
|
TrapFrame->XFltF0 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F1.
|
|||
|
//
|
|||
|
|
|||
|
case 33:
|
|||
|
TrapFrame->XFltF1 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F2.
|
|||
|
//
|
|||
|
|
|||
|
case 34:
|
|||
|
TrapFrame->XFltF2 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F3.
|
|||
|
//
|
|||
|
|
|||
|
case 35:
|
|||
|
TrapFrame->XFltF3 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F4.
|
|||
|
//
|
|||
|
|
|||
|
case 36:
|
|||
|
TrapFrame->XFltF4 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F5.
|
|||
|
//
|
|||
|
|
|||
|
case 37:
|
|||
|
TrapFrame->XFltF5 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F6.
|
|||
|
//
|
|||
|
|
|||
|
case 38:
|
|||
|
TrapFrame->XFltF6 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F7.
|
|||
|
//
|
|||
|
|
|||
|
case 39:
|
|||
|
TrapFrame->XFltF7 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F8.
|
|||
|
//
|
|||
|
|
|||
|
case 40:
|
|||
|
TrapFrame->XFltF8 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F9.
|
|||
|
//
|
|||
|
|
|||
|
case 41:
|
|||
|
TrapFrame->XFltF9 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F10.
|
|||
|
//
|
|||
|
|
|||
|
case 42:
|
|||
|
TrapFrame->XFltF10 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F11.
|
|||
|
//
|
|||
|
|
|||
|
case 43:
|
|||
|
TrapFrame->XFltF11 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F12.
|
|||
|
//
|
|||
|
|
|||
|
case 44:
|
|||
|
TrapFrame->XFltF12 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F13.
|
|||
|
//
|
|||
|
|
|||
|
case 45:
|
|||
|
TrapFrame->XFltF13 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F14.
|
|||
|
//
|
|||
|
|
|||
|
case 46:
|
|||
|
TrapFrame->XFltF14 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F15.
|
|||
|
//
|
|||
|
|
|||
|
case 47:
|
|||
|
TrapFrame->XFltF15 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F16.
|
|||
|
//
|
|||
|
|
|||
|
case 48:
|
|||
|
TrapFrame->XFltF16 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F17.
|
|||
|
//
|
|||
|
|
|||
|
case 49:
|
|||
|
TrapFrame->XFltF17 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F18.
|
|||
|
//
|
|||
|
|
|||
|
case 50:
|
|||
|
TrapFrame->XFltF18 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F19.
|
|||
|
//
|
|||
|
|
|||
|
case 51:
|
|||
|
TrapFrame->XFltF19 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F20.
|
|||
|
//
|
|||
|
|
|||
|
case 52:
|
|||
|
ExceptionFrame->XFltF20 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F21.
|
|||
|
//
|
|||
|
|
|||
|
case 53:
|
|||
|
TrapFrame->XFltF21 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F22.
|
|||
|
//
|
|||
|
|
|||
|
case 54:
|
|||
|
ExceptionFrame->XFltF22 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F23.
|
|||
|
//
|
|||
|
|
|||
|
case 55:
|
|||
|
TrapFrame->XFltF23 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F24.
|
|||
|
//
|
|||
|
|
|||
|
case 56:
|
|||
|
ExceptionFrame->XFltF24 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F25.
|
|||
|
//
|
|||
|
|
|||
|
case 57:
|
|||
|
TrapFrame->XFltF25 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F26.
|
|||
|
//
|
|||
|
|
|||
|
case 58:
|
|||
|
ExceptionFrame->XFltF26 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F27.
|
|||
|
//
|
|||
|
|
|||
|
case 59:
|
|||
|
TrapFrame->XFltF27 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F28.
|
|||
|
//
|
|||
|
|
|||
|
case 60:
|
|||
|
ExceptionFrame->XFltF28 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F29.
|
|||
|
//
|
|||
|
|
|||
|
case 61:
|
|||
|
TrapFrame->XFltF29 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F30.
|
|||
|
//
|
|||
|
|
|||
|
case 62:
|
|||
|
ExceptionFrame->XFltF30 = Value;
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Floating register F31.
|
|||
|
//
|
|||
|
|
|||
|
case 63:
|
|||
|
TrapFrame->XFltF31 = Value;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|