diff options
Diffstat (limited to 'include/asm-mips/mipsregs.h')
-rw-r--r-- | include/asm-mips/mipsregs.h | 394 |
1 files changed, 390 insertions, 4 deletions
diff --git a/include/asm-mips/mipsregs.h b/include/asm-mips/mipsregs.h index 2197aa4ce456..80370e0a5589 100644 --- a/include/asm-mips/mipsregs.h +++ b/include/asm-mips/mipsregs.h | |||
@@ -8,7 +8,7 @@ | |||
8 | * Modified for further R[236]000 support by Paul M. Antoine, 1996. | 8 | * Modified for further R[236]000 support by Paul M. Antoine, 1996. |
9 | * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com | 9 | * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com |
10 | * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. | 10 | * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. |
11 | * Copyright (C) 2003 Maciej W. Rozycki | 11 | * Copyright (C) 2003, 2004 Maciej W. Rozycki |
12 | */ | 12 | */ |
13 | #ifndef _ASM_MIPSREGS_H | 13 | #ifndef _ASM_MIPSREGS_H |
14 | #define _ASM_MIPSREGS_H | 14 | #define _ASM_MIPSREGS_H |
@@ -96,6 +96,16 @@ | |||
96 | #define CP0_S1_INTCONTROL $20 | 96 | #define CP0_S1_INTCONTROL $20 |
97 | 97 | ||
98 | /* | 98 | /* |
99 | * Coprocessor 0 Set 2 register names | ||
100 | */ | ||
101 | #define CP0_S2_SRSCTL $12 /* MIPSR2 */ | ||
102 | |||
103 | /* | ||
104 | * Coprocessor 0 Set 3 register names | ||
105 | */ | ||
106 | #define CP0_S3_SRSMAP $12 /* MIPSR2 */ | ||
107 | |||
108 | /* | ||
99 | * TX39 Series | 109 | * TX39 Series |
100 | */ | 110 | */ |
101 | #define CP0_TX39_CACHE $7 | 111 | #define CP0_TX39_CACHE $7 |
@@ -281,6 +291,11 @@ | |||
281 | #define ST0_DL (_ULCAST_(1) << 24) | 291 | #define ST0_DL (_ULCAST_(1) << 24) |
282 | 292 | ||
283 | /* | 293 | /* |
294 | * Enable the MIPS DSP ASE | ||
295 | */ | ||
296 | #define ST0_MX 0x01000000 | ||
297 | |||
298 | /* | ||
284 | * Bitfields in the TX39 family CP0 Configuration Register 3 | 299 | * Bitfields in the TX39 family CP0 Configuration Register 3 |
285 | */ | 300 | */ |
286 | #define TX39_CONF_ICS_SHIFT 19 | 301 | #define TX39_CONF_ICS_SHIFT 19 |
@@ -433,6 +448,14 @@ | |||
433 | #define R5K_CONF_SE (_ULCAST_(1) << 12) | 448 | #define R5K_CONF_SE (_ULCAST_(1) << 12) |
434 | #define R5K_CONF_SS (_ULCAST_(3) << 20) | 449 | #define R5K_CONF_SS (_ULCAST_(3) << 20) |
435 | 450 | ||
451 | /* Bits specific to the RM7000. */ | ||
452 | #define RM7K_CONF_SE (_ULCAST_(1) << 3) | ||
453 | #define RM7K_CONF_TE (_ULCAST_(1) << 12) | ||
454 | #define RM7K_CONF_CLK (_ULCAST_(1) << 16) | ||
455 | #define RM7K_CONF_TC (_ULCAST_(1) << 17) | ||
456 | #define RM7K_CONF_SI (_ULCAST_(3) << 20) | ||
457 | #define RM7K_CONF_SC (_ULCAST_(1) << 31) | ||
458 | |||
436 | /* Bits specific to the R10000. */ | 459 | /* Bits specific to the R10000. */ |
437 | #define R10K_CONF_DN (_ULCAST_(3) << 3) | 460 | #define R10K_CONF_DN (_ULCAST_(3) << 3) |
438 | #define R10K_CONF_CT (_ULCAST_(1) << 5) | 461 | #define R10K_CONF_CT (_ULCAST_(1) << 5) |
@@ -475,6 +498,53 @@ | |||
475 | #define MIPS_CONF_M (_ULCAST_(1) << 31) | 498 | #define MIPS_CONF_M (_ULCAST_(1) << 31) |
476 | 499 | ||
477 | /* | 500 | /* |
501 | * Bits in the MIPS32/64 PRA coprocessor 0 config registers 1 and above. | ||
502 | */ | ||
503 | #define MIPS_CONF1_FP (_ULCAST_(1) << 0) | ||
504 | #define MIPS_CONF1_EP (_ULCAST_(1) << 1) | ||
505 | #define MIPS_CONF1_CA (_ULCAST_(1) << 2) | ||
506 | #define MIPS_CONF1_WR (_ULCAST_(1) << 3) | ||
507 | #define MIPS_CONF1_PC (_ULCAST_(1) << 4) | ||
508 | #define MIPS_CONF1_MD (_ULCAST_(1) << 5) | ||
509 | #define MIPS_CONF1_C2 (_ULCAST_(1) << 6) | ||
510 | #define MIPS_CONF1_DA (_ULCAST_(7) << 7) | ||
511 | #define MIPS_CONF1_DL (_ULCAST_(7) << 10) | ||
512 | #define MIPS_CONF1_DS (_ULCAST_(7) << 13) | ||
513 | #define MIPS_CONF1_IA (_ULCAST_(7) << 16) | ||
514 | #define MIPS_CONF1_IL (_ULCAST_(7) << 19) | ||
515 | #define MIPS_CONF1_IS (_ULCAST_(7) << 22) | ||
516 | #define MIPS_CONF1_TLBS (_ULCAST_(63)<< 25) | ||
517 | |||
518 | #define MIPS_CONF2_SA (_ULCAST_(15)<< 0) | ||
519 | #define MIPS_CONF2_SL (_ULCAST_(15)<< 4) | ||
520 | #define MIPS_CONF2_SS (_ULCAST_(15)<< 8) | ||
521 | #define MIPS_CONF2_SU (_ULCAST_(15)<< 12) | ||
522 | #define MIPS_CONF2_TA (_ULCAST_(15)<< 16) | ||
523 | #define MIPS_CONF2_TL (_ULCAST_(15)<< 20) | ||
524 | #define MIPS_CONF2_TS (_ULCAST_(15)<< 24) | ||
525 | #define MIPS_CONF2_TU (_ULCAST_(7) << 28) | ||
526 | |||
527 | #define MIPS_CONF3_TL (_ULCAST_(1) << 0) | ||
528 | #define MIPS_CONF3_SM (_ULCAST_(1) << 1) | ||
529 | #define MIPS_CONF3_MT (_ULCAST_(1) << 2) | ||
530 | #define MIPS_CONF3_SP (_ULCAST_(1) << 4) | ||
531 | #define MIPS_CONF3_VINT (_ULCAST_(1) << 5) | ||
532 | #define MIPS_CONF3_VEIC (_ULCAST_(1) << 6) | ||
533 | #define MIPS_CONF3_LPA (_ULCAST_(1) << 7) | ||
534 | #define MIPS_CONF3_DSP (_ULCAST_(1) << 10) | ||
535 | |||
536 | /* | ||
537 | * Bits in the MIPS32/64 coprocessor 1 (FPU) revision register. | ||
538 | */ | ||
539 | #define MIPS_FPIR_S (_ULCAST_(1) << 16) | ||
540 | #define MIPS_FPIR_D (_ULCAST_(1) << 17) | ||
541 | #define MIPS_FPIR_PS (_ULCAST_(1) << 18) | ||
542 | #define MIPS_FPIR_3D (_ULCAST_(1) << 19) | ||
543 | #define MIPS_FPIR_W (_ULCAST_(1) << 20) | ||
544 | #define MIPS_FPIR_L (_ULCAST_(1) << 21) | ||
545 | #define MIPS_FPIR_F64 (_ULCAST_(1) << 22) | ||
546 | |||
547 | /* | ||
478 | * R10000 performance counter definitions. | 548 | * R10000 performance counter definitions. |
479 | * | 549 | * |
480 | * FIXME: The R10000 performance counter opens a nice way to implement CPU | 550 | * FIXME: The R10000 performance counter opens a nice way to implement CPU |
@@ -621,13 +691,13 @@ do { \ | |||
621 | if (sel == 0) \ | 691 | if (sel == 0) \ |
622 | __asm__ __volatile__( \ | 692 | __asm__ __volatile__( \ |
623 | "mtc0\t%z0, " #register "\n\t" \ | 693 | "mtc0\t%z0, " #register "\n\t" \ |
624 | : : "Jr" ((unsigned int)value)); \ | 694 | : : "Jr" ((unsigned int)(value))); \ |
625 | else \ | 695 | else \ |
626 | __asm__ __volatile__( \ | 696 | __asm__ __volatile__( \ |
627 | ".set\tmips32\n\t" \ | 697 | ".set\tmips32\n\t" \ |
628 | "mtc0\t%z0, " #register ", " #sel "\n\t" \ | 698 | "mtc0\t%z0, " #register ", " #sel "\n\t" \ |
629 | ".set\tmips0" \ | 699 | ".set\tmips0" \ |
630 | : : "Jr" ((unsigned int)value)); \ | 700 | : : "Jr" ((unsigned int)(value))); \ |
631 | } while (0) | 701 | } while (0) |
632 | 702 | ||
633 | #define __write_64bit_c0_register(register, sel, value) \ | 703 | #define __write_64bit_c0_register(register, sel, value) \ |
@@ -676,7 +746,7 @@ do { \ | |||
676 | do { \ | 746 | do { \ |
677 | __asm__ __volatile__( \ | 747 | __asm__ __volatile__( \ |
678 | "ctc0\t%z0, " #register "\n\t" \ | 748 | "ctc0\t%z0, " #register "\n\t" \ |
679 | : : "Jr" ((unsigned int)value)); \ | 749 | : : "Jr" ((unsigned int)(value))); \ |
680 | } while (0) | 750 | } while (0) |
681 | 751 | ||
682 | /* | 752 | /* |
@@ -769,12 +839,24 @@ do { \ | |||
769 | #define read_c0_count() __read_32bit_c0_register($9, 0) | 839 | #define read_c0_count() __read_32bit_c0_register($9, 0) |
770 | #define write_c0_count(val) __write_32bit_c0_register($9, 0, val) | 840 | #define write_c0_count(val) __write_32bit_c0_register($9, 0, val) |
771 | 841 | ||
842 | #define read_c0_count2() __read_32bit_c0_register($9, 6) /* pnx8550 */ | ||
843 | #define write_c0_count2(val) __write_32bit_c0_register($9, 6, val) | ||
844 | |||
845 | #define read_c0_count3() __read_32bit_c0_register($9, 7) /* pnx8550 */ | ||
846 | #define write_c0_count3(val) __write_32bit_c0_register($9, 7, val) | ||
847 | |||
772 | #define read_c0_entryhi() __read_ulong_c0_register($10, 0) | 848 | #define read_c0_entryhi() __read_ulong_c0_register($10, 0) |
773 | #define write_c0_entryhi(val) __write_ulong_c0_register($10, 0, val) | 849 | #define write_c0_entryhi(val) __write_ulong_c0_register($10, 0, val) |
774 | 850 | ||
775 | #define read_c0_compare() __read_32bit_c0_register($11, 0) | 851 | #define read_c0_compare() __read_32bit_c0_register($11, 0) |
776 | #define write_c0_compare(val) __write_32bit_c0_register($11, 0, val) | 852 | #define write_c0_compare(val) __write_32bit_c0_register($11, 0, val) |
777 | 853 | ||
854 | #define read_c0_compare2() __read_32bit_c0_register($11, 6) /* pnx8550 */ | ||
855 | #define write_c0_compare2(val) __write_32bit_c0_register($11, 6, val) | ||
856 | |||
857 | #define read_c0_compare3() __read_32bit_c0_register($11, 7) /* pnx8550 */ | ||
858 | #define write_c0_compare3(val) __write_32bit_c0_register($11, 7, val) | ||
859 | |||
778 | #define read_c0_status() __read_32bit_c0_register($12, 0) | 860 | #define read_c0_status() __read_32bit_c0_register($12, 0) |
779 | #define write_c0_status(val) __write_32bit_c0_register($12, 0, val) | 861 | #define write_c0_status(val) __write_32bit_c0_register($12, 0, val) |
780 | 862 | ||
@@ -790,10 +872,18 @@ do { \ | |||
790 | #define read_c0_config1() __read_32bit_c0_register($16, 1) | 872 | #define read_c0_config1() __read_32bit_c0_register($16, 1) |
791 | #define read_c0_config2() __read_32bit_c0_register($16, 2) | 873 | #define read_c0_config2() __read_32bit_c0_register($16, 2) |
792 | #define read_c0_config3() __read_32bit_c0_register($16, 3) | 874 | #define read_c0_config3() __read_32bit_c0_register($16, 3) |
875 | #define read_c0_config4() __read_32bit_c0_register($16, 4) | ||
876 | #define read_c0_config5() __read_32bit_c0_register($16, 5) | ||
877 | #define read_c0_config6() __read_32bit_c0_register($16, 6) | ||
878 | #define read_c0_config7() __read_32bit_c0_register($16, 7) | ||
793 | #define write_c0_config(val) __write_32bit_c0_register($16, 0, val) | 879 | #define write_c0_config(val) __write_32bit_c0_register($16, 0, val) |
794 | #define write_c0_config1(val) __write_32bit_c0_register($16, 1, val) | 880 | #define write_c0_config1(val) __write_32bit_c0_register($16, 1, val) |
795 | #define write_c0_config2(val) __write_32bit_c0_register($16, 2, val) | 881 | #define write_c0_config2(val) __write_32bit_c0_register($16, 2, val) |
796 | #define write_c0_config3(val) __write_32bit_c0_register($16, 3, val) | 882 | #define write_c0_config3(val) __write_32bit_c0_register($16, 3, val) |
883 | #define write_c0_config4(val) __write_32bit_c0_register($16, 4, val) | ||
884 | #define write_c0_config5(val) __write_32bit_c0_register($16, 5, val) | ||
885 | #define write_c0_config6(val) __write_32bit_c0_register($16, 6, val) | ||
886 | #define write_c0_config7(val) __write_32bit_c0_register($16, 7, val) | ||
797 | 887 | ||
798 | /* | 888 | /* |
799 | * The WatchLo register. There may be upto 8 of them. | 889 | * The WatchLo register. There may be upto 8 of them. |
@@ -917,6 +1007,22 @@ do { \ | |||
917 | #define read_c0_errorepc() __read_ulong_c0_register($30, 0) | 1007 | #define read_c0_errorepc() __read_ulong_c0_register($30, 0) |
918 | #define write_c0_errorepc(val) __write_ulong_c0_register($30, 0, val) | 1008 | #define write_c0_errorepc(val) __write_ulong_c0_register($30, 0, val) |
919 | 1009 | ||
1010 | /* MIPSR2 */ | ||
1011 | #define read_c0_hwrena() __read_32bit_c0_register($7,0) | ||
1012 | #define write_c0_hwrena(val) __write_32bit_c0_register($7, 0, val) | ||
1013 | |||
1014 | #define read_c0_intctl() __read_32bit_c0_register($12, 1) | ||
1015 | #define write_c0_intctl(val) __write_32bit_c0_register($12, 1, val) | ||
1016 | |||
1017 | #define read_c0_srsctl() __read_32bit_c0_register($12, 2) | ||
1018 | #define write_c0_srsctl(val) __write_32bit_c0_register($12, 2, val) | ||
1019 | |||
1020 | #define read_c0_srsmap() __read_32bit_c0_register($12, 3) | ||
1021 | #define write_c0_srsmap(val) __write_32bit_c0_register($12, 3, val) | ||
1022 | |||
1023 | #define read_c0_ebase() __read_32bit_c0_register($15,1) | ||
1024 | #define write_c0_ebase(val) __write_32bit_c0_register($15, 1, val) | ||
1025 | |||
920 | /* | 1026 | /* |
921 | * Macros to access the floating point coprocessor control registers | 1027 | * Macros to access the floating point coprocessor control registers |
922 | */ | 1028 | */ |
@@ -930,6 +1036,284 @@ do { \ | |||
930 | : "=r" (__res)); \ | 1036 | : "=r" (__res)); \ |
931 | __res;}) | 1037 | __res;}) |
932 | 1038 | ||
1039 | #define rddsp(mask) \ | ||
1040 | ({ \ | ||
1041 | unsigned int __res; \ | ||
1042 | \ | ||
1043 | __asm__ __volatile__( \ | ||
1044 | " .set push \n" \ | ||
1045 | " .set noat \n" \ | ||
1046 | " # rddsp $1, %x1 \n" \ | ||
1047 | " .word 0x7c000cb8 | (%x1 << 16) \n" \ | ||
1048 | " move %0, $1 \n" \ | ||
1049 | " .set pop \n" \ | ||
1050 | : "=r" (__res) \ | ||
1051 | : "i" (mask)); \ | ||
1052 | __res; \ | ||
1053 | }) | ||
1054 | |||
1055 | #define wrdsp(val, mask) \ | ||
1056 | do { \ | ||
1057 | __asm__ __volatile__( \ | ||
1058 | " .set push \n" \ | ||
1059 | " .set noat \n" \ | ||
1060 | " move $1, %0 \n" \ | ||
1061 | " # wrdsp $1, %x1 \n" \ | ||
1062 | " .word 0x7c2004f8 | (%x1 << 15) \n" \ | ||
1063 | " .set pop \n" \ | ||
1064 | : \ | ||
1065 | : "r" (val), "i" (mask)); \ | ||
1066 | } while (0) | ||
1067 | |||
1068 | #if 0 /* Need DSP ASE capable assembler ... */ | ||
1069 | #define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;}) | ||
1070 | #define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;}) | ||
1071 | #define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;}) | ||
1072 | #define mflo3() ({ long mflo3; __asm__("mflo %0, $ac3" : "=r" (mflo3)); mflo3;}) | ||
1073 | |||
1074 | #define mfhi0() ({ long mfhi0; __asm__("mfhi %0, $ac0" : "=r" (mfhi0)); mfhi0;}) | ||
1075 | #define mfhi1() ({ long mfhi1; __asm__("mfhi %0, $ac1" : "=r" (mfhi1)); mfhi1;}) | ||
1076 | #define mfhi2() ({ long mfhi2; __asm__("mfhi %0, $ac2" : "=r" (mfhi2)); mfhi2;}) | ||
1077 | #define mfhi3() ({ long mfhi3; __asm__("mfhi %0, $ac3" : "=r" (mfhi3)); mfhi3;}) | ||
1078 | |||
1079 | #define mtlo0(x) __asm__("mtlo %0, $ac0" ::"r" (x)) | ||
1080 | #define mtlo1(x) __asm__("mtlo %0, $ac1" ::"r" (x)) | ||
1081 | #define mtlo2(x) __asm__("mtlo %0, $ac2" ::"r" (x)) | ||
1082 | #define mtlo3(x) __asm__("mtlo %0, $ac3" ::"r" (x)) | ||
1083 | |||
1084 | #define mthi0(x) __asm__("mthi %0, $ac0" ::"r" (x)) | ||
1085 | #define mthi1(x) __asm__("mthi %0, $ac1" ::"r" (x)) | ||
1086 | #define mthi2(x) __asm__("mthi %0, $ac2" ::"r" (x)) | ||
1087 | #define mthi3(x) __asm__("mthi %0, $ac3" ::"r" (x)) | ||
1088 | |||
1089 | #else | ||
1090 | |||
1091 | #define mfhi0() \ | ||
1092 | ({ \ | ||
1093 | unsigned long __treg; \ | ||
1094 | \ | ||
1095 | __asm__ __volatile__( \ | ||
1096 | " .set push \n" \ | ||
1097 | " .set noat \n" \ | ||
1098 | " # mfhi %0, $ac0 \n" \ | ||
1099 | " .word 0x00000810 \n" \ | ||
1100 | " move %0, $1 \n" \ | ||
1101 | " .set pop \n" \ | ||
1102 | : "=r" (__treg)); \ | ||
1103 | __treg; \ | ||
1104 | }) | ||
1105 | |||
1106 | #define mfhi1() \ | ||
1107 | ({ \ | ||
1108 | unsigned long __treg; \ | ||
1109 | \ | ||
1110 | __asm__ __volatile__( \ | ||
1111 | " .set push \n" \ | ||
1112 | " .set noat \n" \ | ||
1113 | " # mfhi %0, $ac1 \n" \ | ||
1114 | " .word 0x00200810 \n" \ | ||
1115 | " move %0, $1 \n" \ | ||
1116 | " .set pop \n" \ | ||
1117 | : "=r" (__treg)); \ | ||
1118 | __treg; \ | ||
1119 | }) | ||
1120 | |||
1121 | #define mfhi2() \ | ||
1122 | ({ \ | ||
1123 | unsigned long __treg; \ | ||
1124 | \ | ||
1125 | __asm__ __volatile__( \ | ||
1126 | " .set push \n" \ | ||
1127 | " .set noat \n" \ | ||
1128 | " # mfhi %0, $ac2 \n" \ | ||
1129 | " .word 0x00400810 \n" \ | ||
1130 | " move %0, $1 \n" \ | ||
1131 | " .set pop \n" \ | ||
1132 | : "=r" (__treg)); \ | ||
1133 | __treg; \ | ||
1134 | }) | ||
1135 | |||
1136 | #define mfhi3() \ | ||
1137 | ({ \ | ||
1138 | unsigned long __treg; \ | ||
1139 | \ | ||
1140 | __asm__ __volatile__( \ | ||
1141 | " .set push \n" \ | ||
1142 | " .set noat \n" \ | ||
1143 | " # mfhi %0, $ac3 \n" \ | ||
1144 | " .word 0x00600810 \n" \ | ||
1145 | " move %0, $1 \n" \ | ||
1146 | " .set pop \n" \ | ||
1147 | : "=r" (__treg)); \ | ||
1148 | __treg; \ | ||
1149 | }) | ||
1150 | |||
1151 | #define mflo0() \ | ||
1152 | ({ \ | ||
1153 | unsigned long __treg; \ | ||
1154 | \ | ||
1155 | __asm__ __volatile__( \ | ||
1156 | " .set push \n" \ | ||
1157 | " .set noat \n" \ | ||
1158 | " # mflo %0, $ac0 \n" \ | ||
1159 | " .word 0x00000812 \n" \ | ||
1160 | " move %0, $1 \n" \ | ||
1161 | " .set pop \n" \ | ||
1162 | : "=r" (__treg)); \ | ||
1163 | __treg; \ | ||
1164 | }) | ||
1165 | |||
1166 | #define mflo1() \ | ||
1167 | ({ \ | ||
1168 | unsigned long __treg; \ | ||
1169 | \ | ||
1170 | __asm__ __volatile__( \ | ||
1171 | " .set push \n" \ | ||
1172 | " .set noat \n" \ | ||
1173 | " # mflo %0, $ac1 \n" \ | ||
1174 | " .word 0x00200812 \n" \ | ||
1175 | " move %0, $1 \n" \ | ||
1176 | " .set pop \n" \ | ||
1177 | : "=r" (__treg)); \ | ||
1178 | __treg; \ | ||
1179 | }) | ||
1180 | |||
1181 | #define mflo2() \ | ||
1182 | ({ \ | ||
1183 | unsigned long __treg; \ | ||
1184 | \ | ||
1185 | __asm__ __volatile__( \ | ||
1186 | " .set push \n" \ | ||
1187 | " .set noat \n" \ | ||
1188 | " # mflo %0, $ac2 \n" \ | ||
1189 | " .word 0x00400812 \n" \ | ||
1190 | " move %0, $1 \n" \ | ||
1191 | " .set pop \n" \ | ||
1192 | : "=r" (__treg)); \ | ||
1193 | __treg; \ | ||
1194 | }) | ||
1195 | |||
1196 | #define mflo3() \ | ||
1197 | ({ \ | ||
1198 | unsigned long __treg; \ | ||
1199 | \ | ||
1200 | __asm__ __volatile__( \ | ||
1201 | " .set push \n" \ | ||
1202 | " .set noat \n" \ | ||
1203 | " # mflo %0, $ac3 \n" \ | ||
1204 | " .word 0x00600812 \n" \ | ||
1205 | " move %0, $1 \n" \ | ||
1206 | " .set pop \n" \ | ||
1207 | : "=r" (__treg)); \ | ||
1208 | __treg; \ | ||
1209 | }) | ||
1210 | |||
1211 | #define mthi0(x) \ | ||
1212 | do { \ | ||
1213 | __asm__ __volatile__( \ | ||
1214 | " .set push \n" \ | ||
1215 | " .set noat \n" \ | ||
1216 | " move $1, %0 \n" \ | ||
1217 | " # mthi $1, $ac0 \n" \ | ||
1218 | " .word 0x00200011 \n" \ | ||
1219 | " .set pop \n" \ | ||
1220 | : \ | ||
1221 | : "r" (x)); \ | ||
1222 | } while (0) | ||
1223 | |||
1224 | #define mthi1(x) \ | ||
1225 | do { \ | ||
1226 | __asm__ __volatile__( \ | ||
1227 | " .set push \n" \ | ||
1228 | " .set noat \n" \ | ||
1229 | " move $1, %0 \n" \ | ||
1230 | " # mthi $1, $ac1 \n" \ | ||
1231 | " .word 0x00200811 \n" \ | ||
1232 | " .set pop \n" \ | ||
1233 | : \ | ||
1234 | : "r" (x)); \ | ||
1235 | } while (0) | ||
1236 | |||
1237 | #define mthi2(x) \ | ||
1238 | do { \ | ||
1239 | __asm__ __volatile__( \ | ||
1240 | " .set push \n" \ | ||
1241 | " .set noat \n" \ | ||
1242 | " move $1, %0 \n" \ | ||
1243 | " # mthi $1, $ac2 \n" \ | ||
1244 | " .word 0x00201011 \n" \ | ||
1245 | " .set pop \n" \ | ||
1246 | : \ | ||
1247 | : "r" (x)); \ | ||
1248 | } while (0) | ||
1249 | |||
1250 | #define mthi3(x) \ | ||
1251 | do { \ | ||
1252 | __asm__ __volatile__( \ | ||
1253 | " .set push \n" \ | ||
1254 | " .set noat \n" \ | ||
1255 | " move $1, %0 \n" \ | ||
1256 | " # mthi $1, $ac3 \n" \ | ||
1257 | " .word 0x00201811 \n" \ | ||
1258 | " .set pop \n" \ | ||
1259 | : \ | ||
1260 | : "r" (x)); \ | ||
1261 | } while (0) | ||
1262 | |||
1263 | #define mtlo0(x) \ | ||
1264 | do { \ | ||
1265 | __asm__ __volatile__( \ | ||
1266 | " .set push \n" \ | ||
1267 | " .set noat \n" \ | ||
1268 | " move $1, %0 \n" \ | ||
1269 | " # mtlo $1, $ac0 \n" \ | ||
1270 | " .word 0x00200013 \n" \ | ||
1271 | " .set pop \n" \ | ||
1272 | : \ | ||
1273 | : "r" (x)); \ | ||
1274 | } while (0) | ||
1275 | |||
1276 | #define mtlo1(x) \ | ||
1277 | do { \ | ||
1278 | __asm__ __volatile__( \ | ||
1279 | " .set push \n" \ | ||
1280 | " .set noat \n" \ | ||
1281 | " move $1, %0 \n" \ | ||
1282 | " # mtlo $1, $ac1 \n" \ | ||
1283 | " .word 0x00200813 \n" \ | ||
1284 | " .set pop \n" \ | ||
1285 | : \ | ||
1286 | : "r" (x)); \ | ||
1287 | } while (0) | ||
1288 | |||
1289 | #define mtlo2(x) \ | ||
1290 | do { \ | ||
1291 | __asm__ __volatile__( \ | ||
1292 | " .set push \n" \ | ||
1293 | " .set noat \n" \ | ||
1294 | " move $1, %0 \n" \ | ||
1295 | " # mtlo $1, $ac2 \n" \ | ||
1296 | " .word 0x00201013 \n" \ | ||
1297 | " .set pop \n" \ | ||
1298 | : \ | ||
1299 | : "r" (x)); \ | ||
1300 | } while (0) | ||
1301 | |||
1302 | #define mtlo3(x) \ | ||
1303 | do { \ | ||
1304 | __asm__ __volatile__( \ | ||
1305 | " .set push \n" \ | ||
1306 | " .set noat \n" \ | ||
1307 | " move $1, %0 \n" \ | ||
1308 | " # mtlo $1, $ac3 \n" \ | ||
1309 | " .word 0x00201813 \n" \ | ||
1310 | " .set pop \n" \ | ||
1311 | : \ | ||
1312 | : "r" (x)); \ | ||
1313 | } while (0) | ||
1314 | |||
1315 | #endif | ||
1316 | |||
933 | /* | 1317 | /* |
934 | * TLB operations. | 1318 | * TLB operations. |
935 | * | 1319 | * |
@@ -1012,6 +1396,8 @@ __BUILD_SET_C0(status) | |||
1012 | __BUILD_SET_C0(cause) | 1396 | __BUILD_SET_C0(cause) |
1013 | __BUILD_SET_C0(config) | 1397 | __BUILD_SET_C0(config) |
1014 | __BUILD_SET_C0(intcontrol) | 1398 | __BUILD_SET_C0(intcontrol) |
1399 | __BUILD_SET_C0(intctl) | ||
1400 | __BUILD_SET_C0(srsmap) | ||
1015 | 1401 | ||
1016 | #endif /* !__ASSEMBLY__ */ | 1402 | #endif /* !__ASSEMBLY__ */ |
1017 | 1403 | ||