Changes in kernel/arch/ia64/src/context.S [9d58539:27f67f5] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/context.S
r9d58539 r27f67f5 27 27 # 28 28 29 #include <abi/asmtool.h> 30 #include <arch/context_struct.h> 31 29 32 .text 30 33 31 .global context_save_arch 32 .global context_restore_arch 33 34 context_save_arch: 35 alloc loc0 = ar.pfs, 1, 8, 0, 0 36 mov loc1 = ar.unat ;; 37 /* loc2 */ 34 FUNCTION_BEGIN(context_save_arch) 35 alloc loc0 = ar.pfs, 1, 49, 0, 0 36 mov loc1 = ar.unat ;; 38 37 mov loc3 = ar.rsc 39 38 … … 58 57 59 58 mov loc6 = ar.lc 59 60 add loc8 = CONTEXT_OFFSET_AR_PFS, in0 61 add loc9 = CONTEXT_OFFSET_AR_UNAT_CALLER, in0 62 add loc10 = CONTEXT_OFFSET_AR_UNAT_CALLEE, in0 63 add loc11 = CONTEXT_OFFSET_AR_RSC, in0 64 add loc12 = CONTEXT_OFFSET_BSP, in0 65 add loc13 = CONTEXT_OFFSET_AR_RNAT, in0 66 add loc14 = CONTEXT_OFFSET_AR_LC, in0 67 68 add loc15 = CONTEXT_OFFSET_R1, in0 69 add loc16 = CONTEXT_OFFSET_R4, in0 70 add loc17 = CONTEXT_OFFSET_R5, in0 71 add loc18 = CONTEXT_OFFSET_R6, in0 72 add loc19 = CONTEXT_OFFSET_R7, in0 73 add loc20 = CONTEXT_OFFSET_SP, in0 74 add loc21 = CONTEXT_OFFSET_R13, in0 75 76 add loc22 = CONTEXT_OFFSET_PC, in0 77 add loc23 = CONTEXT_OFFSET_B1, in0 78 add loc24 = CONTEXT_OFFSET_B2, in0 79 add loc25 = CONTEXT_OFFSET_B3, in0 80 add loc26 = CONTEXT_OFFSET_B4, in0 81 add loc27 = CONTEXT_OFFSET_B5, in0 82 83 add loc28 = CONTEXT_OFFSET_PR, in0 84 85 add loc29 = CONTEXT_OFFSET_F2, in0 86 add loc30 = CONTEXT_OFFSET_F3, in0 87 add loc31 = CONTEXT_OFFSET_F4, in0 88 add loc32 = CONTEXT_OFFSET_F5, in0 89 90 add loc33 = CONTEXT_OFFSET_F16, in0 91 add loc34 = CONTEXT_OFFSET_F17, in0 92 add loc35 = CONTEXT_OFFSET_F18, in0 93 add loc36 = CONTEXT_OFFSET_F19, in0 94 add loc37 = CONTEXT_OFFSET_F20, in0 95 add loc38 = CONTEXT_OFFSET_F21, in0 96 add loc39 = CONTEXT_OFFSET_F22, in0 97 add loc40 = CONTEXT_OFFSET_F23, in0 98 add loc41 = CONTEXT_OFFSET_F24, in0 99 add loc42 = CONTEXT_OFFSET_F25, in0 100 add loc43 = CONTEXT_OFFSET_F26, in0 101 add loc44 = CONTEXT_OFFSET_F27, in0 102 add loc45 = CONTEXT_OFFSET_F28, in0 103 add loc46 = CONTEXT_OFFSET_F29, in0 104 add loc47 = CONTEXT_OFFSET_F30, in0 105 add loc48 = CONTEXT_OFFSET_F31, in0 ;; 106 107 /* 108 * Save general registers including NaT bits 109 */ 110 st8.spill [loc15] = r1 ;; 111 st8.spill [loc16] = r4 ;; 112 st8.spill [loc17] = r5 ;; 113 st8.spill [loc18] = r6 ;; 114 st8.spill [loc19] = r7 ;; 115 st8.spill [loc20] = r12 ;; /* save sp */ 116 st8.spill [loc21] = r13 ;; 117 118 mov loc2 = ar.unat 60 119 61 120 /* 62 121 * Save application registers 63 122 */ 64 st8 [in0] = loc0, 8 ;; /* save ar.pfs */ 65 st8 [in0] = loc1, 8 ;; /* save ar.unat (caller) */ 66 mov loc2 = in0 ;; 67 add in0 = 8, in0 ;; /* skip ar.unat (callee) */ 68 st8 [in0] = loc3, 8 ;; /* save ar.rsc */ 69 st8 [in0] = loc4, 8 ;; /* save ar.bsp */ 70 st8 [in0] = loc5, 8 ;; /* save ar.rnat */ 71 st8 [in0] = loc6, 8 ;; /* save ar.lc */ 72 73 /* 74 * Save general registers including NaT bits 75 */ 76 st8.spill [in0] = r1, 8 ;; 77 st8.spill [in0] = r4, 8 ;; 78 st8.spill [in0] = r5, 8 ;; 79 st8.spill [in0] = r6, 8 ;; 80 st8.spill [in0] = r7, 8 ;; 81 st8.spill [in0] = r12, 8 ;; /* save sp */ 82 st8.spill [in0] = r13, 8 ;; 83 84 mov loc3 = ar.unat ;; 85 st8 [loc2] = loc3 /* save ar.unat (callee) */ 123 st8 [loc8] = loc0 /* save ar.pfs */ 124 st8 [loc9] = loc1 ;; /* save ar.unat (caller) */ 125 st8 [loc10] = loc2 /* save ar.unat (callee) */ 126 st8 [loc11] = loc3 /* save ar.rsc */ 127 st8 [loc12] = loc4 /* save ar.bsp */ 128 st8 [loc13] = loc5 /* save ar.rnat */ 129 st8 [loc14] = loc6 ;; /* save ar.lc */ 86 130 87 131 /* 88 132 * Save branch registers 89 133 */ 90 mov loc2 = b0 ;;91 st8 [in0] = loc2, 8 /* save pc */92 mov loc 3 = b1 ;;93 st8 [in0] = loc3, 894 mov loc 4 = b2 ;;95 st8 [in0] = loc4, 896 mov loc5 = b3 ;;97 st8 [ in0] = loc5, 898 mov loc6 = b4 ;;99 st8 [ in0] = loc6, 8100 mov loc7 = b5 ;;101 st8 [ in0] = loc7, 8134 mov loc2 = b0 135 mov loc3 = b1 136 mov loc4 = b2 137 mov loc5 = b3 138 mov loc6 = b4 139 mov loc7 = b5 ;; 140 st8 [loc22] = loc2 /* save pc */ 141 st8 [loc23] = loc3 142 st8 [loc24] = loc4 143 st8 [loc25] = loc5 144 st8 [loc26] = loc6 145 st8 [loc27] = loc7 ;; 102 146 103 147 /* 104 148 * Save predicate registers 105 149 */ 106 mov loc2 = pr 107 st8 [ in0] = loc2, 16;; /* Next fpu registers should be spilled to 16B aligned address */150 mov loc2 = pr ;; 151 st8 [loc28] = loc2 108 152 109 153 /* 110 154 * Save floating-point registers. 111 155 */ 112 stf.spill [ in0] = f2, 16 ;;113 stf.spill [ in0] = f3, 16 ;;114 stf.spill [ in0] = f4, 16 ;;115 stf.spill [ in0] = f5, 16 ;;116 117 stf.spill [ in0] = f16, 16 ;;118 stf.spill [ in0] = f17, 16 ;;119 stf.spill [ in0] = f18, 16 ;;120 stf.spill [ in0] = f19, 16 ;;121 stf.spill [ in0] = f20, 16 ;;122 stf.spill [ in0] = f21, 16 ;;123 stf.spill [ in0] = f22, 16 ;;124 stf.spill [ in0] = f23, 16 ;;125 stf.spill [ in0] = f24, 16 ;;126 stf.spill [ in0] = f25, 16 ;;127 stf.spill [ in0] = f26, 16 ;;128 stf.spill [ in0] = f27, 16 ;;129 stf.spill [ in0] = f28, 16 ;;130 stf.spill [ in0] = f29, 16 ;;131 stf.spill [ in0] = f30, 16 ;;132 stf.spill [ in0] = f31, 16 ;;156 stf.spill [loc29] = f2 157 stf.spill [loc30] = f3 158 stf.spill [loc31] = f4 159 stf.spill [loc32] = f5 160 161 stf.spill [loc33] = f16 162 stf.spill [loc34] = f17 163 stf.spill [loc35] = f18 164 stf.spill [loc36] = f19 165 stf.spill [loc37] = f20 166 stf.spill [loc38] = f21 167 stf.spill [loc39] = f22 168 stf.spill [loc40] = f23 169 stf.spill [loc41] = f24 170 stf.spill [loc42] = f25 171 stf.spill [loc43] = f26 172 stf.spill [loc44] = f27 173 stf.spill [loc45] = f28 174 stf.spill [loc46] = f29 175 stf.spill [loc47] = f30 176 stf.spill [loc48] = f31 133 177 134 178 mov ar.unat = loc1 135 179 136 add r8 = r0, r0, 1 180 add r8 = r0, r0, 1 /* context_save returns 1 */ 137 181 br.ret.sptk.many b0 138 139 context_restore_arch: 140 alloc loc0 = ar.pfs, 1, 9, 0, 0 ;; 141 142 ld8 loc0 = [in0], 8 ;; /* load ar.pfs */ 143 ld8 loc1 = [in0], 8 ;; /* load ar.unat (caller) */ 144 ld8 loc2 = [in0], 8 ;; /* load ar.unat (callee) */ 145 ld8 loc3 = [in0], 8 ;; /* load ar.rsc */ 146 ld8 loc4 = [in0], 8 ;; /* load ar.bsp */ 147 ld8 loc5 = [in0], 8 ;; /* load ar.rnat */ 148 ld8 loc6 = [in0], 8 ;; /* load ar.lc */ 182 FUNCTION_END(context_save_arch) 183 184 FUNCTION_BEGIN(context_restore_arch) 185 alloc loc0 = ar.pfs, 1, 50, 0, 0 ;; 186 187 add loc9 = CONTEXT_OFFSET_AR_PFS, in0 188 add loc10 = CONTEXT_OFFSET_AR_UNAT_CALLER, in0 189 add loc11 = CONTEXT_OFFSET_AR_UNAT_CALLEE, in0 190 add loc12 = CONTEXT_OFFSET_AR_RSC, in0 191 add loc13 = CONTEXT_OFFSET_BSP, in0 192 add loc14 = CONTEXT_OFFSET_AR_RNAT, in0 193 add loc15 = CONTEXT_OFFSET_AR_LC, in0 194 195 add loc16 = CONTEXT_OFFSET_R1, in0 196 add loc17 = CONTEXT_OFFSET_R4, in0 197 add loc18 = CONTEXT_OFFSET_R5, in0 198 add loc19 = CONTEXT_OFFSET_R6, in0 199 add loc20 = CONTEXT_OFFSET_R7, in0 200 add loc21 = CONTEXT_OFFSET_SP, in0 201 add loc22 = CONTEXT_OFFSET_R13, in0 202 203 add loc23 = CONTEXT_OFFSET_PC, in0 204 add loc24 = CONTEXT_OFFSET_B1, in0 205 add loc25 = CONTEXT_OFFSET_B2, in0 206 add loc26 = CONTEXT_OFFSET_B3, in0 207 add loc27 = CONTEXT_OFFSET_B4, in0 208 add loc28 = CONTEXT_OFFSET_B5, in0 209 210 add loc29 = CONTEXT_OFFSET_PR, in0 211 212 add loc30 = CONTEXT_OFFSET_F2, in0 213 add loc31 = CONTEXT_OFFSET_F3, in0 214 add loc32 = CONTEXT_OFFSET_F4, in0 215 add loc33 = CONTEXT_OFFSET_F5, in0 216 217 add loc34 = CONTEXT_OFFSET_F16, in0 218 add loc35 = CONTEXT_OFFSET_F17, in0 219 add loc36 = CONTEXT_OFFSET_F18, in0 220 add loc37 = CONTEXT_OFFSET_F19, in0 221 add loc38 = CONTEXT_OFFSET_F20, in0 222 add loc39 = CONTEXT_OFFSET_F21, in0 223 add loc40 = CONTEXT_OFFSET_F22, in0 224 add loc41 = CONTEXT_OFFSET_F23, in0 225 add loc42 = CONTEXT_OFFSET_F24, in0 226 add loc43 = CONTEXT_OFFSET_F25, in0 227 add loc44 = CONTEXT_OFFSET_F26, in0 228 add loc45 = CONTEXT_OFFSET_F27, in0 229 add loc46 = CONTEXT_OFFSET_F28, in0 230 add loc47 = CONTEXT_OFFSET_F29, in0 231 add loc48 = CONTEXT_OFFSET_F30, in0 232 add loc49 = CONTEXT_OFFSET_F31, in0 ;; 233 234 ld8 loc0 = [loc9] /* load ar.pfs */ 235 ld8 loc1 = [loc10] /* load ar.unat (caller) */ 236 ld8 loc2 = [loc11] /* load ar.unat (callee) */ 237 ld8 loc3 = [loc12] /* load ar.rsc */ 238 ld8 loc4 = [loc13] /* load ar.bsp */ 239 ld8 loc5 = [loc14] /* load ar.rnat */ 240 ld8 loc6 = [loc15] /* load ar.lc */ 149 241 150 242 .auto … … 180 272 .explicit 181 273 182 mov ar.unat = loc2 274 mov ar.unat = loc2 ;; 183 275 mov ar.lc = loc6 184 276 … … 186 278 * Restore general registers including NaT bits 187 279 */ 188 ld8.fill r1 = [ in0], 8;;189 ld8.fill r4 = [ in0], 8;;190 ld8.fill r5 = [ in0], 8;;191 ld8.fill r6 = [ in0], 8;;192 ld8.fill r7 = [ in0], 8;;193 ld8.fill r12 = [ in0], 8;; /* restore sp */194 ld8.fill r13 = [ in0], 8;;280 ld8.fill r1 = [loc16] ;; 281 ld8.fill r4 = [loc17] ;; 282 ld8.fill r5 = [loc18] ;; 283 ld8.fill r6 = [loc19] ;; 284 ld8.fill r7 = [loc20] ;; 285 ld8.fill r12 = [loc21] ;; /* restore sp */ 286 ld8.fill r13 = [loc22] ;; 195 287 196 288 /* 197 289 * Restore branch registers 198 290 */ 199 ld8 loc2 = [in0], 8 ;; /* restore pc */ 291 ld8 loc2 = [loc23] /* restore pc */ 292 ld8 loc3 = [loc24] 293 ld8 loc4 = [loc25] 294 ld8 loc5 = [loc26] 295 ld8 loc6 = [loc27] 296 ld8 loc7 = [loc28] ;; 200 297 mov b0 = loc2 201 ld8 loc3 = [in0], 8 ;;202 298 mov b1 = loc3 203 ld8 loc4 = [in0], 8 ;;204 299 mov b2 = loc4 205 ld8 loc5 = [in0], 8 ;;206 300 mov b3 = loc5 207 ld8 loc6 = [in0], 8 ;;208 301 mov b4 = loc6 209 ld8 loc7 = [in0], 8 ;; 210 mov b5 = loc7 302 mov b5 = loc7 ;; 211 303 212 304 /* 213 305 * Restore predicate registers 214 306 */ 215 ld8 loc2 = [ in0], 16;;307 ld8 loc2 = [loc29] ;; 216 308 mov pr = loc2, ~0 217 309 218 310 /* 219 311 * Restore floating-point registers. 220 312 */ 221 ldf.fill f2 = [ in0], 16 ;;222 ldf.fill f3 = [ in0], 16 ;;223 ldf.fill f4 = [ in0], 16 ;;224 ldf.fill f5 = [ in0], 16 ;;225 226 ldf.fill f16 = [ in0], 16 ;;227 ldf.fill f17 = [ in0], 16 ;;228 ldf.fill f18 = [ in0], 16 ;;229 ldf.fill f19 = [ in0], 16 ;;230 ldf.fill f20 = [ in0], 16 ;;231 ldf.fill f21 = [ in0], 16 ;;232 ldf.fill f22 = [ in0], 16 ;;233 ldf.fill f23 = [ in0], 16 ;;234 ldf.fill f24 = [ in0], 16 ;;235 ldf.fill f25 = [ in0], 16 ;;236 ldf.fill f26 = [ in0], 16 ;;237 ldf.fill f27 = [ in0], 16 ;;238 ldf.fill f28 = [ in0], 16 ;;239 ldf.fill f29 = [ in0], 16 ;;240 ldf.fill f30 = [ in0], 16 ;;241 ldf.fill f31 = [ in0], 16 ;;313 ldf.fill f2 = [loc30] 314 ldf.fill f3 = [loc31] 315 ldf.fill f4 = [loc32] 316 ldf.fill f5 = [loc33] 317 318 ldf.fill f16 = [loc34] 319 ldf.fill f17 = [loc35] 320 ldf.fill f18 = [loc36] 321 ldf.fill f19 = [loc37] 322 ldf.fill f20 = [loc38] 323 ldf.fill f21 = [loc39] 324 ldf.fill f22 = [loc40] 325 ldf.fill f23 = [loc41] 326 ldf.fill f24 = [loc42] 327 ldf.fill f25 = [loc43] 328 ldf.fill f26 = [loc44] 329 ldf.fill f27 = [loc45] 330 ldf.fill f28 = [loc46] 331 ldf.fill f29 = [loc47] 332 ldf.fill f30 = [loc48] 333 ldf.fill f31 = [loc49] 242 334 243 335 mov ar.unat = loc1 … … 245 337 mov r8 = r0 /* context_restore returns 0 */ 246 338 br.ret.sptk.many b0 339 FUNCTION_END(context_restore_arch) 340
Note:
See TracChangeset
for help on using the changeset viewer.