Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

getsetrg.c

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1991 Microsoft Corporation 00004 Copyright (c) 1992 Digital Equipment Corporation 00005 00006 Module Name: 00007 00008 getsetrg.c 00009 00010 Abstract: 00011 00012 This module implement the code necessary to get and set register values. 00013 These routines are used during the emulation of unaligned data references 00014 and floating point exceptions. 00015 00016 Author: 00017 00018 David N. Cutler (davec) 17-Jun-1991 00019 00020 Environment: 00021 00022 Kernel mode only. 00023 00024 Revision History: 00025 00026 Thomas Van Baak (tvb) 14-Jul-1992 00027 00028 Adapted for NT/Alpha 00029 00030 --*/ 00031 00032 #include "ki.h" 00033 00034 ULONGLONG 00035 KiGetRegisterValue ( 00036 IN ULONG Register, 00037 IN PKEXCEPTION_FRAME ExceptionFrame, 00038 IN PKTRAP_FRAME TrapFrame 00039 ) 00040 00041 /*++ 00042 00043 Routine Description: 00044 00045 This function is called to get the value of a register from the specified 00046 exception or trap frame. 00047 00048 Arguments: 00049 00050 Register - Supplies the number of the register whose value is to be 00051 returned. Integer registers are specified as 0 - 31 and floating 00052 registers are specified as 32 - 63. 00053 00054 ExceptionFrame - Supplies a pointer to an exception frame. 00055 00056 TrapFrame - Supplies a pointer to a trap frame. 00057 00058 Return Value: 00059 00060 The value of the specified register is returned as the function value. 00061 00062 --*/ 00063 00064 { 00065 00066 // 00067 // Dispatch on the register number. 00068 // 00069 00070 switch (Register) { 00071 00072 // 00073 // Integer register V0. 00074 // 00075 00076 case 0: 00077 return TrapFrame->IntV0; 00078 00079 // 00080 // Integer register T0. 00081 // 00082 00083 case 1: 00084 return TrapFrame->IntT0; 00085 00086 // 00087 // Integer register T1. 00088 // 00089 00090 case 2: 00091 return TrapFrame->IntT1; 00092 00093 // 00094 // Integer register T2. 00095 // 00096 00097 case 3: 00098 return TrapFrame->IntT2; 00099 00100 // 00101 // Integer register T3. 00102 // 00103 00104 case 4: 00105 return TrapFrame->IntT3; 00106 00107 // 00108 // Integer register T4. 00109 // 00110 00111 case 5: 00112 return TrapFrame->IntT4; 00113 00114 // 00115 // Integer register T5. 00116 // 00117 00118 case 6: 00119 return TrapFrame->IntT5; 00120 00121 // 00122 // Integer register T6. 00123 // 00124 00125 case 7: 00126 return TrapFrame->IntT6; 00127 00128 // 00129 // Integer register T7. 00130 // 00131 00132 case 8: 00133 return TrapFrame->IntT7; 00134 00135 // 00136 // Integer register S0. 00137 // 00138 00139 case 9: 00140 return ExceptionFrame->IntS0; 00141 00142 // 00143 // Integer register S1. 00144 // 00145 00146 case 10: 00147 return ExceptionFrame->IntS1; 00148 00149 // 00150 // Integer register S2. 00151 // 00152 00153 case 11: 00154 return ExceptionFrame->IntS2; 00155 00156 // 00157 // Integer register S3. 00158 // 00159 00160 case 12: 00161 return ExceptionFrame->IntS3; 00162 00163 // 00164 // Integer register S4. 00165 // 00166 00167 case 13: 00168 return ExceptionFrame->IntS4; 00169 00170 // 00171 // Integer register S5. 00172 // 00173 00174 case 14: 00175 return ExceptionFrame->IntS5; 00176 00177 // 00178 // Integer register S6/Fp. 00179 // 00180 // N.B. Unlike the other S registers, S6 is obtained from the trap 00181 // frame instead of the exception frame since it is used by the kernel 00182 // as a trap frame pointer. 00183 // 00184 00185 case 15: 00186 return TrapFrame->IntFp; 00187 00188 // 00189 // Integer register A0. 00190 // 00191 00192 case 16: 00193 return TrapFrame->IntA0; 00194 00195 // 00196 // Integer register A1. 00197 // 00198 00199 case 17: 00200 return TrapFrame->IntA1; 00201 00202 // 00203 // Integer register A2 00204 // 00205 00206 case 18: 00207 return TrapFrame->IntA2; 00208 00209 // 00210 // Integer register A3. 00211 // 00212 00213 case 19: 00214 return TrapFrame->IntA3; 00215 00216 // 00217 // Integer register A4. 00218 // 00219 00220 case 20: 00221 return TrapFrame->IntA4; 00222 00223 // 00224 // Integer register A5. 00225 // 00226 00227 case 21: 00228 return TrapFrame->IntA5; 00229 00230 // 00231 // Integer register T8. 00232 // 00233 00234 case 22: 00235 return TrapFrame->IntT8; 00236 00237 // 00238 // Integer register T9. 00239 // 00240 00241 case 23: 00242 return TrapFrame->IntT9; 00243 00244 // 00245 // Integer register T10. 00246 // 00247 00248 case 24: 00249 return TrapFrame->IntT10; 00250 00251 // 00252 // Integer register T11. 00253 // 00254 00255 case 25: 00256 return TrapFrame->IntT11; 00257 00258 // 00259 // Integer register Ra. 00260 // 00261 00262 case 26: 00263 return TrapFrame->IntRa; 00264 00265 // 00266 // Integer register T12. 00267 // 00268 00269 case 27: 00270 return TrapFrame->IntT12; 00271 00272 // 00273 // Integer register At. 00274 // 00275 00276 case 28: 00277 return TrapFrame->IntAt; 00278 00279 // 00280 // Integer register Gp. 00281 // 00282 00283 case 29: 00284 return TrapFrame->IntGp; 00285 00286 // 00287 // Integer register Sp. 00288 // 00289 00290 case 30: 00291 return TrapFrame->IntSp; 00292 00293 // 00294 // Integer register Zero. 00295 // 00296 00297 case 31: 00298 return 0; 00299 00300 // 00301 // Floating register F0. 00302 // 00303 00304 case 32: 00305 return TrapFrame->FltF0; 00306 00307 // 00308 // Floating register F1. 00309 // 00310 00311 case 33: 00312 return TrapFrame->FltF1; 00313 00314 // 00315 // Floating register F2. 00316 // 00317 00318 case 34: 00319 return ExceptionFrame->FltF2; 00320 00321 // 00322 // Floating register F3. 00323 // 00324 00325 case 35: 00326 return ExceptionFrame->FltF3; 00327 00328 // 00329 // Floating register F4. 00330 // 00331 00332 case 36: 00333 return ExceptionFrame->FltF4; 00334 00335 // 00336 // Floating register F5. 00337 // 00338 00339 case 37: 00340 return ExceptionFrame->FltF5; 00341 00342 // 00343 // Floating register F6. 00344 // 00345 00346 case 38: 00347 return ExceptionFrame->FltF6; 00348 00349 // 00350 // Floating register F7. 00351 // 00352 00353 case 39: 00354 return ExceptionFrame->FltF7; 00355 00356 // 00357 // Floating register F8. 00358 // 00359 00360 case 40: 00361 return ExceptionFrame->FltF8; 00362 00363 // 00364 // Floating register F9. 00365 // 00366 00367 case 41: 00368 return ExceptionFrame->FltF9; 00369 00370 // 00371 // Floating register F10. 00372 // 00373 00374 case 42: 00375 return TrapFrame->FltF10; 00376 00377 // 00378 // Floating register F11. 00379 // 00380 00381 case 43: 00382 return TrapFrame->FltF11; 00383 00384 // 00385 // Floating register F12. 00386 // 00387 00388 case 44: 00389 return TrapFrame->FltF12; 00390 00391 // 00392 // Floating register F13. 00393 // 00394 00395 case 45: 00396 return TrapFrame->FltF13; 00397 00398 // 00399 // Floating register F14. 00400 // 00401 00402 case 46: 00403 return TrapFrame->FltF14; 00404 00405 // 00406 // Floating register F15. 00407 // 00408 00409 case 47: 00410 return TrapFrame->FltF15; 00411 00412 // 00413 // Floating register F16. 00414 // 00415 00416 case 48: 00417 return TrapFrame->FltF16; 00418 00419 // 00420 // Floating register F17. 00421 // 00422 00423 case 49: 00424 return TrapFrame->FltF17; 00425 00426 // 00427 // Floating register F18. 00428 // 00429 00430 case 50: 00431 return TrapFrame->FltF18; 00432 00433 // 00434 // Floating register F19. 00435 // 00436 00437 case 51: 00438 return TrapFrame->FltF19; 00439 00440 // 00441 // Floating register F20. 00442 // 00443 00444 case 52: 00445 return TrapFrame->FltF20; 00446 00447 // 00448 // Floating register F21. 00449 // 00450 00451 case 53: 00452 return TrapFrame->FltF21; 00453 00454 // 00455 // Floating register F22. 00456 // 00457 00458 case 54: 00459 return TrapFrame->FltF22; 00460 00461 // 00462 // Floating register F23. 00463 // 00464 00465 case 55: 00466 return TrapFrame->FltF23; 00467 00468 // 00469 // Floating register F24. 00470 // 00471 00472 case 56: 00473 return TrapFrame->FltF24; 00474 00475 // 00476 // Floating register F25. 00477 // 00478 00479 case 57: 00480 return TrapFrame->FltF25; 00481 00482 // 00483 // Floating register F26. 00484 // 00485 00486 case 58: 00487 return TrapFrame->FltF26; 00488 00489 // 00490 // Floating register F27. 00491 // 00492 00493 case 59: 00494 return TrapFrame->FltF27; 00495 00496 // 00497 // Floating register F28. 00498 // 00499 00500 case 60: 00501 return TrapFrame->FltF28; 00502 00503 // 00504 // Floating register F29. 00505 // 00506 00507 case 61: 00508 return TrapFrame->FltF29; 00509 00510 // 00511 // Floating register F30. 00512 // 00513 00514 case 62: 00515 return TrapFrame->FltF30; 00516 00517 // 00518 // Floating register F31 (Zero). 00519 // 00520 00521 case 63: 00522 return 0; 00523 } 00524 } 00525 00526 VOID 00527 KiSetRegisterValue ( 00528 IN ULONG Register, 00529 IN ULONGLONG Value, 00530 OUT PKEXCEPTION_FRAME ExceptionFrame, 00531 OUT PKTRAP_FRAME TrapFrame 00532 ) 00533 00534 /*++ 00535 00536 Routine Description: 00537 00538 This function is called to set the value of a register in the specified 00539 exception or trap frame. 00540 00541 Arguments: 00542 00543 Register - Supplies the number of the register whose value is to be 00544 stored. Integer registers are specified as 0 - 31 and floating 00545 registers are specified as 32 - 63. 00546 00547 Value - Supplies the value to be stored in the specified register. 00548 00549 ExceptionFrame - Supplies a pointer to an exception frame. 00550 00551 TrapFrame - Supplies a pointer to a trap frame. 00552 00553 Return Value: 00554 00555 None. 00556 00557 --*/ 00558 00559 { 00560 00561 // 00562 // Dispatch on the register number. 00563 // 00564 00565 switch (Register) { 00566 00567 // 00568 // Integer register V0. 00569 // 00570 00571 case 0: 00572 TrapFrame->IntV0 = Value; 00573 return; 00574 00575 // 00576 // Integer register T0. 00577 // 00578 00579 case 1: 00580 TrapFrame->IntT0 = Value; 00581 return; 00582 00583 // 00584 // Integer register T1. 00585 // 00586 00587 case 2: 00588 TrapFrame->IntT1 = Value; 00589 return; 00590 00591 // 00592 // Integer register T2. 00593 // 00594 00595 case 3: 00596 TrapFrame->IntT2 = Value; 00597 return; 00598 00599 // 00600 // Integer register T3. 00601 // 00602 00603 case 4: 00604 TrapFrame->IntT3 = Value; 00605 return; 00606 00607 // 00608 // Integer register T4. 00609 // 00610 00611 case 5: 00612 TrapFrame->IntT4 = Value; 00613 return; 00614 00615 // 00616 // Integer register T5. 00617 // 00618 00619 case 6: 00620 TrapFrame->IntT5 = Value; 00621 return; 00622 00623 // 00624 // Integer register T6. 00625 // 00626 00627 case 7: 00628 TrapFrame->IntT6 = Value; 00629 return; 00630 00631 // 00632 // Integer register T7. 00633 // 00634 00635 case 8: 00636 TrapFrame->IntT7 = Value; 00637 return; 00638 00639 // 00640 // Integer register S0. 00641 // 00642 00643 case 9: 00644 ExceptionFrame->IntS0 = Value; 00645 return; 00646 00647 // 00648 // Integer register S1. 00649 // 00650 00651 case 10: 00652 ExceptionFrame->IntS1 = Value; 00653 return; 00654 00655 // 00656 // Integer register S2. 00657 // 00658 00659 case 11: 00660 ExceptionFrame->IntS2 = Value; 00661 return; 00662 00663 // 00664 // Integer register S3. 00665 // 00666 00667 case 12: 00668 ExceptionFrame->IntS3 = Value; 00669 return; 00670 00671 // 00672 // Integer register S4. 00673 // 00674 00675 case 13: 00676 ExceptionFrame->IntS4 = Value; 00677 return; 00678 00679 // 00680 // Integer register S5. 00681 // 00682 00683 case 14: 00684 ExceptionFrame->IntS5 = Value; 00685 return; 00686 00687 // 00688 // Integer register S6/Fp. 00689 // 00690 // N.B. Unlike the other S registers, S6 is stored back in the trap 00691 // frame instead of the exception frame since it is used by the kernel 00692 // as a trap frame pointer. 00693 // 00694 00695 case 15: 00696 TrapFrame->IntFp = Value; 00697 return; 00698 00699 // 00700 // Integer register A0. 00701 // 00702 00703 case 16: 00704 TrapFrame->IntA0 = Value; 00705 return; 00706 00707 // 00708 // Integer register A1. 00709 // 00710 00711 case 17: 00712 TrapFrame->IntA1 = Value; 00713 return; 00714 00715 // 00716 // Integer register A2. 00717 // 00718 00719 case 18: 00720 TrapFrame->IntA2 = Value; 00721 return; 00722 00723 // 00724 // Integer register A3. 00725 // 00726 00727 case 19: 00728 TrapFrame->IntA3 = Value; 00729 return; 00730 00731 // 00732 // Integer register A4. 00733 // 00734 00735 case 20: 00736 TrapFrame->IntA4 = Value; 00737 return; 00738 00739 // 00740 // Integer register A5. 00741 // 00742 00743 case 21: 00744 TrapFrame->IntA5 = Value; 00745 return; 00746 00747 // 00748 // Integer register T8. 00749 // 00750 00751 case 22: 00752 TrapFrame->IntT8 = Value; 00753 return; 00754 00755 // 00756 // Integer register T9. 00757 // 00758 00759 case 23: 00760 TrapFrame->IntT9 = Value; 00761 return; 00762 00763 // 00764 // Integer register T10. 00765 // 00766 00767 case 24: 00768 TrapFrame->IntT10 = Value; 00769 return; 00770 00771 // 00772 // Integer register T11. 00773 // 00774 00775 case 25: 00776 TrapFrame->IntT11 = Value; 00777 return; 00778 00779 // 00780 // Integer register Ra. 00781 // 00782 00783 case 26: 00784 TrapFrame->IntRa = Value; 00785 return; 00786 00787 // 00788 // Integer register T12. 00789 // 00790 00791 case 27: 00792 TrapFrame->IntT12 = Value; 00793 return; 00794 00795 // 00796 // Integer register At. 00797 // 00798 00799 case 28: 00800 TrapFrame->IntAt = Value; 00801 return; 00802 00803 // 00804 // Integer register Gp. 00805 // 00806 00807 case 29: 00808 TrapFrame->IntGp = Value; 00809 return; 00810 00811 // 00812 // Integer register Sp. 00813 // 00814 00815 case 30: 00816 TrapFrame->IntSp = Value; 00817 return; 00818 00819 // 00820 // Integer register Zero. 00821 // 00822 00823 case 31: 00824 return; 00825 00826 // 00827 // Floating register F0. 00828 // 00829 00830 case 32: 00831 TrapFrame->FltF0 = Value; 00832 return; 00833 00834 // 00835 // Floating register F1. 00836 // 00837 00838 case 33: 00839 TrapFrame->FltF1 = Value; 00840 return; 00841 00842 // 00843 // Floating register F2. 00844 // 00845 00846 case 34: 00847 ExceptionFrame->FltF2 = Value; 00848 return; 00849 00850 // 00851 // Floating register F3. 00852 // 00853 00854 case 35: 00855 ExceptionFrame->FltF3 = Value; 00856 return; 00857 00858 // 00859 // Floating register F4. 00860 // 00861 00862 case 36: 00863 ExceptionFrame->FltF4 = Value; 00864 return; 00865 00866 // 00867 // Floating register F5. 00868 // 00869 00870 case 37: 00871 ExceptionFrame->FltF5 = Value; 00872 return; 00873 00874 // 00875 // Floating register F6. 00876 // 00877 00878 case 38: 00879 ExceptionFrame->FltF6 = Value; 00880 return; 00881 00882 // 00883 // Floating register F7. 00884 // 00885 00886 case 39: 00887 ExceptionFrame->FltF7 = Value; 00888 return; 00889 00890 // 00891 // Floating register F8. 00892 // 00893 00894 case 40: 00895 ExceptionFrame->FltF8 = Value; 00896 return; 00897 00898 // 00899 // Floating register F9. 00900 // 00901 00902 case 41: 00903 ExceptionFrame->FltF9 = Value; 00904 return; 00905 00906 // 00907 // Floating register F10. 00908 // 00909 00910 case 42: 00911 TrapFrame->FltF10 = Value; 00912 return; 00913 00914 // 00915 // Floating register F11. 00916 // 00917 00918 case 43: 00919 TrapFrame->FltF11 = Value; 00920 return; 00921 00922 // 00923 // Floating register F12. 00924 // 00925 00926 case 44: 00927 TrapFrame->FltF12 = Value; 00928 return; 00929 00930 // 00931 // Floating register F13. 00932 // 00933 00934 case 45: 00935 TrapFrame->FltF13 = Value; 00936 return; 00937 00938 // 00939 // Floating register F14. 00940 // 00941 00942 case 46: 00943 TrapFrame->FltF14 = Value; 00944 return; 00945 00946 // 00947 // Floating register F15. 00948 // 00949 00950 case 47: 00951 TrapFrame->FltF15 = Value; 00952 return; 00953 00954 // 00955 // Floating register F16. 00956 // 00957 00958 case 48: 00959 TrapFrame->FltF16 = Value; 00960 return; 00961 00962 // 00963 // Floating register F17. 00964 // 00965 00966 case 49: 00967 TrapFrame->FltF17 = Value; 00968 return; 00969 00970 // 00971 // Floating register F18. 00972 // 00973 00974 case 50: 00975 TrapFrame->FltF18 = Value; 00976 return; 00977 00978 // 00979 // Floating register F19. 00980 // 00981 00982 case 51: 00983 TrapFrame->FltF19 = Value; 00984 return; 00985 00986 // 00987 // Floating register F20. 00988 // 00989 00990 case 52: 00991 TrapFrame->FltF20 = Value; 00992 return; 00993 00994 // 00995 // Floating register F21. 00996 // 00997 00998 case 53: 00999 TrapFrame->FltF21 = Value; 01000 return; 01001 01002 // 01003 // Floating register F22. 01004 // 01005 01006 case 54: 01007 TrapFrame->FltF22 = Value; 01008 return; 01009 01010 // 01011 // Floating register F23. 01012 // 01013 01014 case 55: 01015 TrapFrame->FltF23 = Value; 01016 return; 01017 01018 // 01019 // Floating register F24. 01020 // 01021 01022 case 56: 01023 TrapFrame->FltF24 = Value; 01024 return; 01025 01026 // 01027 // Floating register F25. 01028 // 01029 01030 case 57: 01031 TrapFrame->FltF25 = Value; 01032 return; 01033 01034 // 01035 // Floating register F26. 01036 // 01037 01038 case 58: 01039 TrapFrame->FltF26 = Value; 01040 return; 01041 01042 // 01043 // Floating register F27. 01044 // 01045 01046 case 59: 01047 TrapFrame->FltF27 = Value; 01048 return; 01049 01050 // 01051 // Floating register F28. 01052 // 01053 01054 case 60: 01055 TrapFrame->FltF28 = Value; 01056 return; 01057 01058 // 01059 // Floating register F29. 01060 // 01061 01062 case 61: 01063 TrapFrame->FltF29 = Value; 01064 return; 01065 01066 // 01067 // Floating register F30. 01068 // 01069 01070 case 62: 01071 TrapFrame->FltF30 = Value; 01072 return; 01073 01074 // 01075 // Floating register F31 (Zero). 01076 // 01077 01078 case 63: 01079 return; 01080 } 01081 }

Generated on Sat May 15 19:40:13 2004 for test by doxygen 1.3.7