Changeset bc78c75 in mainline
- Timestamp:
- 2006-02-08T17:15:56Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 89298e3
- Parents:
- 4c8715d2
- Location:
- arch/ia64
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/include/mm/page.h
r4c8715d2 rbc78c75 71 71 #define AR_EXECUTE 0x1 72 72 #define AR_WRITE 0x2 73 74 75 #define VA_REGION_INDEX 61 76 77 #define VA_REGION(va) (va>>VA_REGION_INDEX) 78 79 73 80 74 81 struct vhpt_tag_info { … … 221 228 { 222 229 ASSERT(i < REGION_REGISTERS); 223 __asm__ volatile ("mov rr[%0] = %1\n" : : "r" (i), "r" (v)); 230 __asm__ volatile ( 231 "mov rr[%0] = %1;;\n" 232 "srlz.d;;\n" 233 : 234 : "r" (i), "r" (v)); 224 235 } 225 236 -
arch/ia64/include/mm/tlb.h
r4c8715d2 rbc78c75 33 33 #define tlb_print() 34 34 35 36 #include <arch/mm/page.h> 37 #include <arch/mm/asid.h> 38 #include <arch/register.h> 39 40 41 void tlb_fill_data(__address va,asid_t asid,vhpt_entry_t entry); 42 void tlb_fill_code(__address va,asid_t asid,vhpt_entry_t entry); 43 44 35 45 #endif 46 47 -
arch/ia64/src/mm/tlb.c
r4c8715d2 rbc78c75 32 32 33 33 #include <mm/tlb.h> 34 #include <arch/mm/asid.h> 34 #include <arch/mm/tlb.h> 35 35 36 36 37 /** Invalidate all TLB entries. */ … … 48 49 /* TODO */ 49 50 } 51 52 53 54 void tlb_fill_data(__address va,asid_t asid,vhpt_entry_t entry) 55 { 56 region_register rr; 57 58 59 if(!(entry.not_present.p)) return; 60 61 rr.word=rr_read(VA_REGION(va)); 62 63 if(rr.map.rid==ASID2RID(asid,VA_REGION(va))) 64 { 65 asm 66 ( 67 "srlz.i;;\n" 68 "srlz.d;;\n" 69 "mov r8=psr;;\n" 70 "and r9=r8,%0;;\n" /*(~PSR_IC_MASK)*/ 71 "mov psr.l=r9;;\n" 72 "srlz.d;;\n" 73 "srlz.i;;\n" 74 "mov cr20=%1\n" /*va*/ /*cr20 == IFA*/ 75 "mov cr21=%2;;\n" /*entry.word[1]*/ /*cr21=ITIR*/ 76 "itc.d %3;;\n" /*entry.word[0]*/ 77 "mov psr.l=r8;;\n" 78 "srlz.d;;\n" 79 : 80 :"r"(~PSR_IC_MASK),"r"(va),"r"(entry.word[1]),"r"(entry.word[0]) 81 :"r8","r9" 82 ); 83 } 84 else 85 { 86 region_register rr0; 87 rr0=rr; 88 rr0.map.rid=ASID2RID(asid,VA_REGION(va)); 89 rr_write(VA_REGION(va),rr0.word); 90 asm 91 ( 92 "mov r8=psr;;\n" 93 "and r9=r8,%0;;\n" /*(~PSR_IC_MASK)*/ 94 "mov psr.l=r9;;\n" 95 "srlz.d;;\n" 96 "mov cr20=%1\n" /*va*/ /*cr20 == IFA*/ 97 "mov cr21=%2;;\n" /*entry.word[1]*/ /*cr21=ITIR*/ 98 "itc.d %3;;\n" /*entry.word[0]*/ 99 "mov psr.l=r8;;\n" 100 "srlz.d;;\n" 101 : 102 :"r"(~PSR_IC_MASK),"r"(va),"r"(entry.word[1]),"r"(entry.word[0]) 103 :"r8","r9" 104 ); 105 rr_write(VA_REGION(va),rr.word); 106 } 107 108 109 } 110 111 void tlb_fill_code(__address va,asid_t asid,vhpt_entry_t entry) 112 { 113 region_register rr; 114 115 116 if(!(entry.not_present.p)) return; 117 118 rr.word=rr_read(VA_REGION(va)); 119 120 if(rr.map.rid==ASID2RID(asid,VA_REGION(va))) 121 { 122 asm 123 ( 124 "srlz.i;;\n" 125 "srlz.d;;\n" 126 "mov r8=psr;;\n" 127 "and r9=r8,%0;;\n" /*(~PSR_IC_MASK)*/ 128 "mov psr.l=r9;;\n" 129 "srlz.d;;\n" 130 "srlz.i;;\n" 131 "mov cr20=%1\n" /*va*/ /*cr20 == IFA*/ 132 "mov cr21=%2;;\n" /*entry.word[1]*/ /*cr21=ITIR*/ 133 "itc.i %3;;\n" /*entry.word[0]*/ 134 "mov psr.l=r8;;\n" 135 "srlz.d;;\n" 136 : 137 :"r"(~PSR_IC_MASK),"r"(va),"r"(entry.word[1]),"r"(entry.word[0]) 138 :"r8","r9" 139 ); 140 } 141 else 142 { 143 region_register rr0; 144 rr0=rr; 145 rr0.map.rid=ASID2RID(asid,VA_REGION(va)); 146 rr_write(VA_REGION(va),rr0.word); 147 asm 148 ( 149 "mov r8=psr;;\n" 150 "and r9=r8,%0;;\n" /*(~PSR_IC_MASK)*/ 151 "mov psr.l=r9;;\n" 152 "srlz.d;;\n" 153 "mov cr20=%1\n" /*va*/ /*cr20 == IFA*/ 154 "mov cr21=%2;;\n" /*entry.word[1]*/ /*cr21=ITIR*/ 155 "itc.i %3;;\n" /*entry.word[0]*/ 156 "mov psr.l=r8;;\n" 157 "srlz.d;;\n" 158 : 159 :"r"(~PSR_IC_MASK),"r"(va),"r"(entry.word[1]),"r"(entry.word[0]) 160 :"r8","r9" 161 ); 162 rr_write(VA_REGION(va),rr.word); 163 } 164 165 166 } 167 168
Note:
See TracChangeset
for help on using the changeset viewer.