| Xiantao Zhang | a793537 | 2008-04-01 14:54:42 +0800 | [diff] [blame] | 1 | /* Save all processor states | 
 | 2 |  * | 
 | 3 |  * Copyright (c) 2007 Fleming Feng <fleming.feng@intel.com> | 
 | 4 |  * Copyright (c) 2007 Anthony Xu   <anthony.xu@intel.com> | 
 | 5 |  */ | 
 | 6 |  | 
 | 7 | #include <asm/asmmacro.h> | 
 | 8 | #include "asm-offsets.h" | 
 | 9 |  | 
 | 10 |  | 
 | 11 | #define CTX(name)    VMM_CTX_##name##_OFFSET | 
 | 12 |  | 
 | 13 | 	/* | 
 | 14 | 	 *	r32:		context_t base address | 
 | 15 | 	 */ | 
 | 16 | #define	SAVE_BRANCH_REGS			\ | 
 | 17 | 	add	r2 = CTX(B0),r32;		\ | 
 | 18 | 	add	r3 = CTX(B1),r32;		\ | 
 | 19 | 	mov	r16 = b0;			\ | 
 | 20 | 	mov	r17 = b1;			\ | 
 | 21 | 	;;					\ | 
 | 22 | 	st8	[r2]=r16,16;			\ | 
 | 23 | 	st8	[r3]=r17,16;			\ | 
 | 24 | 	;;					\ | 
 | 25 | 	mov	r16 = b2;			\ | 
 | 26 | 	mov	r17 = b3;			\ | 
 | 27 | 	;;					\ | 
 | 28 | 	st8	[r2]=r16,16;			\ | 
 | 29 | 	st8	[r3]=r17,16;			\ | 
 | 30 | 	;;					\ | 
 | 31 | 	mov	r16 = b4;			\ | 
 | 32 | 	mov	r17 = b5;			\ | 
 | 33 | 	;;					\ | 
 | 34 | 	st8	[r2]=r16;   			\ | 
 | 35 | 	st8	[r3]=r17;   			\ | 
 | 36 | 	;; | 
 | 37 |  | 
 | 38 | 	/* | 
 | 39 | 	 *	r33:		context_t base address | 
 | 40 | 	 */ | 
 | 41 | #define	RESTORE_BRANCH_REGS			\ | 
 | 42 | 	add	r2 = CTX(B0),r33;		\ | 
 | 43 | 	add	r3 = CTX(B1),r33;		\ | 
 | 44 | 	;;					\ | 
 | 45 | 	ld8	r16=[r2],16;			\ | 
 | 46 | 	ld8	r17=[r3],16;			\ | 
 | 47 | 	;;					\ | 
 | 48 | 	mov	b0 = r16;			\ | 
 | 49 | 	mov	b1 = r17;			\ | 
 | 50 | 	;;					\ | 
 | 51 | 	ld8	r16=[r2],16;			\ | 
 | 52 | 	ld8	r17=[r3],16;			\ | 
 | 53 | 	;;					\ | 
 | 54 | 	mov	b2 = r16;			\ | 
 | 55 | 	mov	b3 = r17;			\ | 
 | 56 | 	;;					\ | 
 | 57 | 	ld8	r16=[r2];   			\ | 
 | 58 | 	ld8	r17=[r3];   			\ | 
 | 59 | 	;;					\ | 
 | 60 | 	mov	b4=r16;				\ | 
 | 61 | 	mov	b5=r17;				\ | 
 | 62 | 	;; | 
 | 63 |  | 
 | 64 |  | 
 | 65 | 	/* | 
 | 66 | 	 *	r32: context_t base address | 
 | 67 | 	 *	bsw == 1 | 
 | 68 | 	 *	Save all bank1 general registers, r4 ~ r7 | 
 | 69 | 	 */ | 
 | 70 | #define	SAVE_GENERAL_REGS			\ | 
 | 71 | 	add	r2=CTX(R4),r32;			\ | 
 | 72 | 	add	r3=CTX(R5),r32;			\ | 
 | 73 | 	;;					\ | 
 | 74 | .mem.offset 0,0;        			\ | 
 | 75 | 	st8.spill	[r2]=r4,16;		\ | 
 | 76 | .mem.offset 8,0;        			\ | 
 | 77 | 	st8.spill	[r3]=r5,16;		\ | 
 | 78 | 	;;					\ | 
 | 79 | .mem.offset 0,0;        			\ | 
 | 80 | 	st8.spill	[r2]=r6,48;		\ | 
 | 81 | .mem.offset 8,0;        			\ | 
 | 82 | 	st8.spill	[r3]=r7,48;		\ | 
 | 83 | 	;;                          		\ | 
 | 84 | .mem.offset 0,0;        			\ | 
 | 85 |     st8.spill    [r2]=r12;			\ | 
 | 86 | .mem.offset 8,0;				\ | 
 | 87 |     st8.spill    [r3]=r13;			\ | 
 | 88 |     ;; | 
 | 89 |  | 
 | 90 | 	/* | 
 | 91 | 	 *	r33: context_t base address | 
 | 92 | 	 *	bsw == 1 | 
 | 93 | 	 */ | 
 | 94 | #define	RESTORE_GENERAL_REGS			\ | 
 | 95 | 	add	r2=CTX(R4),r33;			\ | 
 | 96 | 	add	r3=CTX(R5),r33;			\ | 
 | 97 | 	;;					\ | 
 | 98 | 	ld8.fill	r4=[r2],16;		\ | 
 | 99 | 	ld8.fill	r5=[r3],16;		\ | 
 | 100 | 	;;					\ | 
 | 101 | 	ld8.fill	r6=[r2],48;		\ | 
 | 102 | 	ld8.fill	r7=[r3],48;		\ | 
 | 103 | 	;;					\ | 
 | 104 | 	ld8.fill    r12=[r2];			\ | 
 | 105 | 	ld8.fill    r13 =[r3];			\ | 
 | 106 | 	;; | 
 | 107 |  | 
 | 108 |  | 
 | 109 |  | 
 | 110 |  | 
 | 111 | 	/* | 
 | 112 | 	 *	r32:		context_t base address | 
 | 113 | 	 */ | 
 | 114 | #define	SAVE_KERNEL_REGS			\ | 
 | 115 | 	add	r2 = CTX(KR0),r32;		\ | 
 | 116 | 	add	r3 = CTX(KR1),r32;		\ | 
 | 117 | 	mov	r16 = ar.k0;			\ | 
 | 118 | 	mov	r17 = ar.k1;			\ | 
 | 119 | 	;;		        		\ | 
 | 120 | 	st8	[r2] = r16,16;			\ | 
 | 121 | 	st8	[r3] = r17,16;			\ | 
 | 122 | 	;;		        		\ | 
 | 123 | 	mov	r16 = ar.k2;			\ | 
 | 124 | 	mov	r17 = ar.k3;			\ | 
 | 125 | 	;;		        		\ | 
 | 126 | 	st8	[r2] = r16,16;			\ | 
 | 127 | 	st8	[r3] = r17,16;			\ | 
 | 128 | 	;;					\ | 
 | 129 | 	mov	r16 = ar.k4;			\ | 
 | 130 | 	mov	r17 = ar.k5;			\ | 
 | 131 | 	;;				    	\ | 
 | 132 | 	st8	[r2] = r16,16;			\ | 
 | 133 | 	st8	[r3] = r17,16;			\ | 
 | 134 | 	;;					\ | 
 | 135 | 	mov	r16 = ar.k6;			\ | 
 | 136 | 	mov	r17 = ar.k7;			\ | 
 | 137 | 	;;		    			\ | 
 | 138 | 	st8	[r2] = r16;     		\ | 
 | 139 | 	st8	[r3] = r17;			\ | 
 | 140 | 	;; | 
 | 141 |  | 
 | 142 |  | 
 | 143 |  | 
 | 144 | 	/* | 
 | 145 | 	 *	r33:		context_t base address | 
 | 146 | 	 */ | 
 | 147 | #define	RESTORE_KERNEL_REGS			\ | 
 | 148 | 	add	r2 = CTX(KR0),r33;		\ | 
 | 149 | 	add	r3 = CTX(KR1),r33;		\ | 
 | 150 | 	;;		    			\ | 
 | 151 | 	ld8	r16=[r2],16;     		\ | 
 | 152 | 	ld8	r17=[r3],16;			\ | 
 | 153 | 	;;					\ | 
 | 154 | 	mov	ar.k0=r16;  			\ | 
 | 155 | 	mov	ar.k1=r17;	    		\ | 
 | 156 | 	;;		        		\ | 
 | 157 | 	ld8	r16=[r2],16;			\ | 
 | 158 | 	ld8	r17=[r3],16;			\ | 
 | 159 | 	;;		        		\ | 
 | 160 | 	mov	ar.k2=r16;   			\ | 
 | 161 | 	mov	ar.k3=r17;	    		\ | 
 | 162 | 	;;		        		\ | 
 | 163 | 	ld8	r16=[r2],16;			\ | 
 | 164 | 	ld8	r17=[r3],16;			\ | 
 | 165 | 	;;					\ | 
 | 166 | 	mov	ar.k4=r16;			\ | 
 | 167 | 	mov	ar.k5=r17;	    		\ | 
 | 168 | 	;;				    	\ | 
 | 169 | 	ld8	r16=[r2],16;			\ | 
 | 170 | 	ld8	r17=[r3],16;			\ | 
 | 171 | 	;;					\ | 
 | 172 | 	mov	ar.k6=r16;  			\ | 
 | 173 | 	mov	ar.k7=r17;	    		\ | 
 | 174 | 	;; | 
 | 175 |  | 
 | 176 |  | 
 | 177 |  | 
 | 178 | 	/* | 
 | 179 | 	 *	r32:		context_t base address | 
 | 180 | 	 */ | 
 | 181 | #define	SAVE_APP_REGS				\ | 
 | 182 | 	add  r2 = CTX(BSPSTORE),r32;		\ | 
 | 183 | 	mov  r16 = ar.bspstore;			\ | 
 | 184 | 	;;					\ | 
 | 185 | 	st8  [r2] = r16,CTX(RNAT)-CTX(BSPSTORE);\ | 
 | 186 | 	mov  r16 = ar.rnat;			\ | 
 | 187 | 	;;					\ | 
 | 188 | 	st8  [r2] = r16,CTX(FCR)-CTX(RNAT);	\ | 
 | 189 | 	mov  r16 = ar.fcr;			\ | 
 | 190 | 	;;					\ | 
 | 191 | 	st8  [r2] = r16,CTX(EFLAG)-CTX(FCR);	\ | 
 | 192 | 	mov  r16 = ar.eflag;			\ | 
 | 193 | 	;;					\ | 
 | 194 | 	st8  [r2] = r16,CTX(CFLG)-CTX(EFLAG);	\ | 
 | 195 | 	mov  r16 = ar.cflg;			\ | 
 | 196 | 	;;					\ | 
 | 197 | 	st8  [r2] = r16,CTX(FSR)-CTX(CFLG);	\ | 
 | 198 | 	mov  r16 = ar.fsr;			\ | 
 | 199 | 	;;					\ | 
 | 200 | 	st8  [r2] = r16,CTX(FIR)-CTX(FSR);	\ | 
 | 201 | 	mov  r16 = ar.fir;			\ | 
 | 202 | 	;;					\ | 
 | 203 | 	st8  [r2] = r16,CTX(FDR)-CTX(FIR);	\ | 
 | 204 | 	mov  r16 = ar.fdr;			\ | 
 | 205 | 	;;					\ | 
 | 206 | 	st8  [r2] = r16,CTX(UNAT)-CTX(FDR);	\ | 
 | 207 | 	mov  r16 = ar.unat;			\ | 
 | 208 | 	;;					\ | 
 | 209 | 	st8  [r2] = r16,CTX(FPSR)-CTX(UNAT);	\ | 
 | 210 | 	mov  r16 = ar.fpsr;			\ | 
 | 211 | 	;;					\ | 
 | 212 | 	st8  [r2] = r16,CTX(PFS)-CTX(FPSR);	\ | 
 | 213 | 	mov  r16 = ar.pfs;			\ | 
 | 214 | 	;;					\ | 
 | 215 | 	st8  [r2] = r16,CTX(LC)-CTX(PFS);	\ | 
 | 216 | 	mov  r16 = ar.lc;			\ | 
 | 217 | 	;;					\ | 
 | 218 | 	st8  [r2] = r16;			\ | 
 | 219 | 	;; | 
 | 220 |  | 
 | 221 | 	/* | 
 | 222 | 	 *	r33:		context_t base address | 
 | 223 | 	 */ | 
 | 224 | #define	RESTORE_APP_REGS			\ | 
 | 225 | 	add  r2=CTX(BSPSTORE),r33;		\ | 
 | 226 | 	;;					\ | 
 | 227 | 	ld8  r16=[r2],CTX(RNAT)-CTX(BSPSTORE);	\ | 
 | 228 | 	;;					\ | 
 | 229 | 	mov  ar.bspstore=r16;			\ | 
 | 230 | 	ld8  r16=[r2],CTX(FCR)-CTX(RNAT);	\ | 
 | 231 | 	;;					\ | 
 | 232 | 	mov  ar.rnat=r16;			\ | 
 | 233 | 	ld8  r16=[r2],CTX(EFLAG)-CTX(FCR);	\ | 
 | 234 | 	;;					\ | 
 | 235 | 	mov  ar.fcr=r16;			\ | 
 | 236 | 	ld8  r16=[r2],CTX(CFLG)-CTX(EFLAG);	\ | 
 | 237 | 	;;					\ | 
 | 238 | 	mov  ar.eflag=r16;			\ | 
 | 239 | 	ld8  r16=[r2],CTX(FSR)-CTX(CFLG);	\ | 
 | 240 | 	;;					\ | 
 | 241 | 	mov  ar.cflg=r16;			\ | 
 | 242 | 	ld8  r16=[r2],CTX(FIR)-CTX(FSR);	\ | 
 | 243 | 	;;					\ | 
 | 244 | 	mov  ar.fsr=r16;			\ | 
 | 245 | 	ld8  r16=[r2],CTX(FDR)-CTX(FIR);	\ | 
 | 246 | 	;;					\ | 
 | 247 | 	mov  ar.fir=r16;			\ | 
 | 248 | 	ld8  r16=[r2],CTX(UNAT)-CTX(FDR);	\ | 
 | 249 | 	;;					\ | 
 | 250 | 	mov  ar.fdr=r16;			\ | 
 | 251 | 	ld8  r16=[r2],CTX(FPSR)-CTX(UNAT);	\ | 
 | 252 | 	;;					\ | 
 | 253 | 	mov  ar.unat=r16;			\ | 
 | 254 | 	ld8  r16=[r2],CTX(PFS)-CTX(FPSR);	\ | 
 | 255 | 	;;					\ | 
 | 256 | 	mov  ar.fpsr=r16;			\ | 
 | 257 | 	ld8  r16=[r2],CTX(LC)-CTX(PFS);		\ | 
 | 258 | 	;;					\ | 
 | 259 | 	mov  ar.pfs=r16;			\ | 
 | 260 | 	ld8  r16=[r2];				\ | 
 | 261 | 	;;					\ | 
 | 262 | 	mov  ar.lc=r16;				\ | 
 | 263 | 	;; | 
 | 264 |  | 
 | 265 | 	/* | 
 | 266 | 	 *	r32:		context_t base address | 
 | 267 | 	 */ | 
 | 268 | #define	SAVE_CTL_REGS				\ | 
 | 269 | 	add	r2 = CTX(DCR),r32;		\ | 
 | 270 | 	mov	r16 = cr.dcr;			\ | 
 | 271 | 	;;					\ | 
 | 272 | 	st8	[r2] = r16,CTX(IVA)-CTX(DCR);	\ | 
 | 273 | 	;;                          		\ | 
 | 274 | 	mov	r16 = cr.iva;			\ | 
 | 275 | 	;;					\ | 
 | 276 | 	st8	[r2] = r16,CTX(PTA)-CTX(IVA);	\ | 
 | 277 | 	;;					\ | 
 | 278 | 	mov r16 = cr.pta;			\ | 
 | 279 | 	;;					\ | 
 | 280 | 	st8 [r2] = r16 ;			\ | 
 | 281 | 	;; | 
 | 282 |  | 
 | 283 | 	/* | 
 | 284 | 	 *	r33:		context_t base address | 
 | 285 | 	 */ | 
 | 286 | #define	RESTORE_CTL_REGS				\ | 
 | 287 | 	add	r2 = CTX(DCR),r33;	        	\ | 
 | 288 | 	;;						\ | 
 | 289 | 	ld8	r16 = [r2],CTX(IVA)-CTX(DCR);		\ | 
 | 290 | 	;;                      			\ | 
 | 291 | 	mov	cr.dcr = r16;				\ | 
 | 292 | 	dv_serialize_data;				\ | 
 | 293 | 	;;						\ | 
 | 294 | 	ld8	r16 = [r2],CTX(PTA)-CTX(IVA);		\ | 
 | 295 | 	;;						\ | 
 | 296 | 	mov	cr.iva = r16;				\ | 
 | 297 | 	dv_serialize_data;				\ | 
 | 298 | 	;;						\ | 
 | 299 | 	ld8 r16 = [r2];					\ | 
 | 300 | 	;;						\ | 
 | 301 | 	mov cr.pta = r16;				\ | 
 | 302 | 	dv_serialize_data;				\ | 
 | 303 | 	;; | 
 | 304 |  | 
 | 305 |  | 
 | 306 | 	/* | 
 | 307 | 	 *	r32:		context_t base address | 
 | 308 | 	 */ | 
 | 309 | #define	SAVE_REGION_REGS			\ | 
 | 310 | 	add	r2=CTX(RR0),r32;		\ | 
 | 311 | 	mov	r16=rr[r0];			\ | 
 | 312 | 	dep.z	r18=1,61,3;			\ | 
 | 313 | 	;;					\ | 
 | 314 | 	st8	[r2]=r16,8;			\ | 
 | 315 | 	mov	r17=rr[r18];			\ | 
 | 316 | 	dep.z	r18=2,61,3;			\ | 
 | 317 | 	;;					\ | 
 | 318 | 	st8	[r2]=r17,8;			\ | 
 | 319 | 	mov	r16=rr[r18];			\ | 
 | 320 | 	dep.z	r18=3,61,3;			\ | 
 | 321 | 	;;					\ | 
 | 322 | 	st8	[r2]=r16,8;			\ | 
 | 323 | 	mov	r17=rr[r18];			\ | 
 | 324 | 	dep.z	r18=4,61,3;			\ | 
 | 325 | 	;;					\ | 
 | 326 | 	st8	[r2]=r17,8;			\ | 
 | 327 | 	mov	r16=rr[r18];			\ | 
 | 328 | 	dep.z	r18=5,61,3;			\ | 
 | 329 | 	;;					\ | 
 | 330 | 	st8	[r2]=r16,8;			\ | 
 | 331 | 	mov	r17=rr[r18];			\ | 
 | 332 | 	dep.z	r18=7,61,3;			\ | 
 | 333 | 	;;					\ | 
 | 334 | 	st8	[r2]=r17,16;			\ | 
 | 335 | 	mov	r16=rr[r18];			\ | 
 | 336 | 	;;					\ | 
 | 337 | 	st8	[r2]=r16,8;			\ | 
 | 338 | 	;; | 
 | 339 |  | 
 | 340 | 	/* | 
 | 341 | 	 *	r33:context_t base address | 
 | 342 | 	 */ | 
 | 343 | #define	RESTORE_REGION_REGS	\ | 
 | 344 | 	add	r2=CTX(RR0),r33;\ | 
 | 345 | 	mov r18=r0;		\ | 
 | 346 | 	;;			\ | 
 | 347 | 	ld8	r20=[r2],8;	\ | 
 | 348 | 	;;	/* rr0 */	\ | 
 | 349 | 	ld8	r21=[r2],8;	\ | 
 | 350 | 	;;	/* rr1 */	\ | 
 | 351 | 	ld8	r22=[r2],8;	\ | 
 | 352 | 	;;	/* rr2 */	\ | 
 | 353 | 	ld8	r23=[r2],8;	\ | 
 | 354 | 	;;	/* rr3 */	\ | 
 | 355 | 	ld8	r24=[r2],8;	\ | 
 | 356 | 	;;	/* rr4 */	\ | 
 | 357 | 	ld8	r25=[r2],16;	\ | 
 | 358 | 	;;	/* rr5 */	\ | 
 | 359 | 	ld8	r27=[r2];	\ | 
 | 360 | 	;;	/* rr7 */	\ | 
 | 361 | 	mov rr[r18]=r20;	\ | 
 | 362 | 	dep.z	r18=1,61,3;	\ | 
 | 363 | 	;;  /* rr1 */		\ | 
 | 364 | 	mov rr[r18]=r21;	\ | 
 | 365 | 	dep.z	r18=2,61,3;	\ | 
 | 366 | 	;;  /* rr2 */		\ | 
 | 367 | 	mov rr[r18]=r22;	\ | 
 | 368 | 	dep.z	r18=3,61,3;	\ | 
 | 369 | 	;;  /* rr3 */		\ | 
 | 370 | 	mov rr[r18]=r23;	\ | 
 | 371 | 	dep.z	r18=4,61,3;	\ | 
 | 372 | 	;;  /* rr4 */		\ | 
 | 373 | 	mov rr[r18]=r24;	\ | 
 | 374 | 	dep.z	r18=5,61,3;	\ | 
 | 375 | 	;;  /* rr5 */		\ | 
 | 376 | 	mov rr[r18]=r25;	\ | 
 | 377 | 	dep.z	r18=7,61,3;	\ | 
 | 378 | 	;;  /* rr7 */		\ | 
 | 379 | 	mov rr[r18]=r27;	\ | 
 | 380 | 	;;			\ | 
 | 381 | 	srlz.i;			\ | 
 | 382 | 	;; | 
 | 383 |  | 
 | 384 |  | 
 | 385 |  | 
 | 386 | 	/* | 
 | 387 | 	 *	r32:	context_t base address | 
 | 388 | 	 *	r36~r39:scratch registers | 
 | 389 | 	 */ | 
 | 390 | #define	SAVE_DEBUG_REGS				\ | 
 | 391 | 	add	r2=CTX(IBR0),r32;		\ | 
 | 392 | 	add	r3=CTX(DBR0),r32;		\ | 
 | 393 | 	mov	r16=ibr[r0];			\ | 
 | 394 | 	mov	r17=dbr[r0];			\ | 
 | 395 | 	;;					\ | 
 | 396 | 	st8	[r2]=r16,8; 			\ | 
 | 397 | 	st8	[r3]=r17,8;	    		\ | 
 | 398 | 	add	r18=1,r0;		    	\ | 
 | 399 | 	;;					\ | 
 | 400 | 	mov	r16=ibr[r18];			\ | 
 | 401 | 	mov	r17=dbr[r18];			\ | 
 | 402 | 	;;					\ | 
 | 403 | 	st8	[r2]=r16,8;		    	\ | 
 | 404 | 	st8	[r3]=r17,8;			\ | 
 | 405 | 	add	r18=2,r0;			\ | 
 | 406 | 	;;					\ | 
 | 407 | 	mov	r16=ibr[r18];			\ | 
 | 408 | 	mov	r17=dbr[r18];			\ | 
 | 409 | 	;;					\ | 
 | 410 | 	st8	[r2]=r16,8;		    	\ | 
 | 411 | 	st8	[r3]=r17,8;			\ | 
 | 412 | 	add	r18=2,r0;			\ | 
 | 413 | 	;;					\ | 
 | 414 | 	mov	r16=ibr[r18];			\ | 
 | 415 | 	mov	r17=dbr[r18];			\ | 
 | 416 | 	;;					\ | 
 | 417 | 	st8	[r2]=r16,8;		    	\ | 
 | 418 | 	st8	[r3]=r17,8;			\ | 
 | 419 | 	add	r18=3,r0;			\ | 
 | 420 | 	;;					\ | 
 | 421 | 	mov	r16=ibr[r18];			\ | 
 | 422 | 	mov	r17=dbr[r18];			\ | 
 | 423 | 	;;					\ | 
 | 424 | 	st8	[r2]=r16,8;		    	\ | 
 | 425 | 	st8	[r3]=r17,8;			\ | 
 | 426 | 	add	r18=4,r0;			\ | 
 | 427 | 	;;					\ | 
 | 428 | 	mov	r16=ibr[r18];			\ | 
 | 429 | 	mov	r17=dbr[r18];			\ | 
 | 430 | 	;;					\ | 
 | 431 | 	st8	[r2]=r16,8;		    	\ | 
 | 432 | 	st8	[r3]=r17,8;			\ | 
 | 433 | 	add	r18=5,r0;			\ | 
 | 434 | 	;;					\ | 
 | 435 | 	mov	r16=ibr[r18];			\ | 
 | 436 | 	mov	r17=dbr[r18];			\ | 
 | 437 | 	;;					\ | 
 | 438 | 	st8	[r2]=r16,8;		    	\ | 
 | 439 | 	st8	[r3]=r17,8;			\ | 
 | 440 | 	add	r18=6,r0;			\ | 
 | 441 | 	;;					\ | 
 | 442 | 	mov	r16=ibr[r18];			\ | 
 | 443 | 	mov	r17=dbr[r18];			\ | 
 | 444 | 	;;					\ | 
 | 445 | 	st8	[r2]=r16,8;		    	\ | 
 | 446 | 	st8	[r3]=r17,8;			\ | 
 | 447 | 	add	r18=7,r0;			\ | 
 | 448 | 	;;					\ | 
 | 449 | 	mov	r16=ibr[r18];			\ | 
 | 450 | 	mov	r17=dbr[r18];			\ | 
 | 451 | 	;;					\ | 
 | 452 | 	st8	[r2]=r16,8;		    	\ | 
 | 453 | 	st8	[r3]=r17,8;			\ | 
 | 454 | 	;; | 
 | 455 |  | 
 | 456 |  | 
 | 457 | /* | 
 | 458 |  *      r33:    point to context_t structure | 
 | 459 |  *      ar.lc are corrupted. | 
 | 460 |  */ | 
 | 461 | #define RESTORE_DEBUG_REGS			\ | 
 | 462 | 	add	r2=CTX(IBR0),r33;		\ | 
 | 463 | 	add	r3=CTX(DBR0),r33;		\ | 
 | 464 | 	mov r16=7;    				\ | 
 | 465 | 	mov r17=r0;				\ | 
 | 466 | 	;;                    			\ | 
 | 467 | 	mov ar.lc = r16;			\ | 
 | 468 | 	;; 					\ | 
 | 469 | 1:						\ | 
 | 470 | 	ld8 r18=[r2],8;		    		\ | 
 | 471 | 	ld8 r19=[r3],8;				\ | 
 | 472 | 	;;					\ | 
 | 473 | 	mov ibr[r17]=r18;			\ | 
 | 474 | 	mov dbr[r17]=r19;			\ | 
 | 475 | 	;;   					\ | 
 | 476 | 	srlz.i;					\ | 
 | 477 | 	;; 					\ | 
 | 478 | 	add r17=1,r17;				\ | 
 | 479 | 	br.cloop.sptk 1b;			\ | 
 | 480 | 	;; | 
 | 481 |  | 
 | 482 |  | 
 | 483 | 	/* | 
 | 484 | 	 *	r32:		context_t base address | 
 | 485 | 	 */ | 
 | 486 | #define	SAVE_FPU_LOW				\ | 
 | 487 | 	add	r2=CTX(F2),r32;			\ | 
 | 488 | 	add	r3=CTX(F3),r32;			\ | 
 | 489 | 	;;					\ | 
 | 490 | 	stf.spill.nta	[r2]=f2,32;		\ | 
 | 491 | 	stf.spill.nta	[r3]=f3,32;		\ | 
 | 492 | 	;;					\ | 
 | 493 | 	stf.spill.nta	[r2]=f4,32;		\ | 
 | 494 | 	stf.spill.nta	[r3]=f5,32;		\ | 
 | 495 | 	;;					\ | 
 | 496 | 	stf.spill.nta	[r2]=f6,32;		\ | 
 | 497 | 	stf.spill.nta	[r3]=f7,32;		\ | 
 | 498 | 	;;					\ | 
 | 499 | 	stf.spill.nta	[r2]=f8,32;		\ | 
 | 500 | 	stf.spill.nta	[r3]=f9,32;		\ | 
 | 501 | 	;;					\ | 
 | 502 | 	stf.spill.nta	[r2]=f10,32;		\ | 
 | 503 | 	stf.spill.nta	[r3]=f11,32;		\ | 
 | 504 | 	;;					\ | 
 | 505 | 	stf.spill.nta	[r2]=f12,32;		\ | 
 | 506 | 	stf.spill.nta	[r3]=f13,32;		\ | 
 | 507 | 	;;					\ | 
 | 508 | 	stf.spill.nta	[r2]=f14,32;		\ | 
 | 509 | 	stf.spill.nta	[r3]=f15,32;		\ | 
 | 510 | 	;;					\ | 
 | 511 | 	stf.spill.nta	[r2]=f16,32;		\ | 
 | 512 | 	stf.spill.nta	[r3]=f17,32;		\ | 
 | 513 | 	;;					\ | 
 | 514 | 	stf.spill.nta	[r2]=f18,32;		\ | 
 | 515 | 	stf.spill.nta	[r3]=f19,32;		\ | 
 | 516 | 	;;					\ | 
 | 517 | 	stf.spill.nta	[r2]=f20,32;		\ | 
 | 518 | 	stf.spill.nta	[r3]=f21,32;		\ | 
 | 519 | 	;;					\ | 
 | 520 | 	stf.spill.nta	[r2]=f22,32;		\ | 
 | 521 | 	stf.spill.nta	[r3]=f23,32;		\ | 
 | 522 | 	;;					\ | 
 | 523 | 	stf.spill.nta	[r2]=f24,32;		\ | 
 | 524 | 	stf.spill.nta	[r3]=f25,32;		\ | 
 | 525 | 	;;					\ | 
 | 526 | 	stf.spill.nta	[r2]=f26,32;		\ | 
 | 527 | 	stf.spill.nta	[r3]=f27,32;		\ | 
 | 528 | 	;;					\ | 
 | 529 | 	stf.spill.nta	[r2]=f28,32;		\ | 
 | 530 | 	stf.spill.nta	[r3]=f29,32;		\ | 
 | 531 | 	;;					\ | 
 | 532 | 	stf.spill.nta	[r2]=f30;		\ | 
 | 533 | 	stf.spill.nta	[r3]=f31;		\ | 
 | 534 | 	;; | 
 | 535 |  | 
 | 536 | 	/* | 
 | 537 | 	 *	r32:		context_t base address | 
 | 538 | 	 */ | 
 | 539 | #define	SAVE_FPU_HIGH				\ | 
 | 540 | 	add	r2=CTX(F32),r32;		\ | 
 | 541 | 	add	r3=CTX(F33),r32;		\ | 
 | 542 | 	;;					\ | 
 | 543 | 	stf.spill.nta	[r2]=f32,32;		\ | 
 | 544 | 	stf.spill.nta	[r3]=f33,32;		\ | 
 | 545 | 	;;					\ | 
 | 546 | 	stf.spill.nta	[r2]=f34,32;		\ | 
 | 547 | 	stf.spill.nta	[r3]=f35,32;		\ | 
 | 548 | 	;;					\ | 
 | 549 | 	stf.spill.nta	[r2]=f36,32;		\ | 
 | 550 | 	stf.spill.nta	[r3]=f37,32;		\ | 
 | 551 | 	;;					\ | 
 | 552 | 	stf.spill.nta	[r2]=f38,32;		\ | 
 | 553 | 	stf.spill.nta	[r3]=f39,32;		\ | 
 | 554 | 	;;					\ | 
 | 555 | 	stf.spill.nta	[r2]=f40,32;		\ | 
 | 556 | 	stf.spill.nta	[r3]=f41,32;		\ | 
 | 557 | 	;;					\ | 
 | 558 | 	stf.spill.nta	[r2]=f42,32;		\ | 
 | 559 | 	stf.spill.nta	[r3]=f43,32;		\ | 
 | 560 | 	;;					\ | 
 | 561 | 	stf.spill.nta	[r2]=f44,32;		\ | 
 | 562 | 	stf.spill.nta	[r3]=f45,32;		\ | 
 | 563 | 	;;					\ | 
 | 564 | 	stf.spill.nta	[r2]=f46,32;		\ | 
 | 565 | 	stf.spill.nta	[r3]=f47,32;		\ | 
 | 566 | 	;;					\ | 
 | 567 | 	stf.spill.nta	[r2]=f48,32;		\ | 
 | 568 | 	stf.spill.nta	[r3]=f49,32;		\ | 
 | 569 | 	;;					\ | 
 | 570 | 	stf.spill.nta	[r2]=f50,32;		\ | 
 | 571 | 	stf.spill.nta	[r3]=f51,32;		\ | 
 | 572 | 	;;					\ | 
 | 573 | 	stf.spill.nta	[r2]=f52,32;		\ | 
 | 574 | 	stf.spill.nta	[r3]=f53,32;		\ | 
 | 575 | 	;;					\ | 
 | 576 | 	stf.spill.nta	[r2]=f54,32;		\ | 
 | 577 | 	stf.spill.nta	[r3]=f55,32;		\ | 
 | 578 | 	;;					\ | 
 | 579 | 	stf.spill.nta	[r2]=f56,32;		\ | 
 | 580 | 	stf.spill.nta	[r3]=f57,32;		\ | 
 | 581 | 	;;					\ | 
 | 582 | 	stf.spill.nta	[r2]=f58,32;		\ | 
 | 583 | 	stf.spill.nta	[r3]=f59,32;		\ | 
 | 584 | 	;;					\ | 
 | 585 | 	stf.spill.nta	[r2]=f60,32;		\ | 
 | 586 | 	stf.spill.nta	[r3]=f61,32;		\ | 
 | 587 | 	;;					\ | 
 | 588 | 	stf.spill.nta	[r2]=f62,32;		\ | 
 | 589 | 	stf.spill.nta	[r3]=f63,32;		\ | 
 | 590 | 	;;					\ | 
 | 591 | 	stf.spill.nta	[r2]=f64,32;		\ | 
 | 592 | 	stf.spill.nta	[r3]=f65,32;		\ | 
 | 593 | 	;;					\ | 
 | 594 | 	stf.spill.nta	[r2]=f66,32;		\ | 
 | 595 | 	stf.spill.nta	[r3]=f67,32;		\ | 
 | 596 | 	;;					\ | 
 | 597 | 	stf.spill.nta	[r2]=f68,32;		\ | 
 | 598 | 	stf.spill.nta	[r3]=f69,32;		\ | 
 | 599 | 	;;					\ | 
 | 600 | 	stf.spill.nta	[r2]=f70,32;		\ | 
 | 601 | 	stf.spill.nta	[r3]=f71,32;		\ | 
 | 602 | 	;;					\ | 
 | 603 | 	stf.spill.nta	[r2]=f72,32;		\ | 
 | 604 | 	stf.spill.nta	[r3]=f73,32;		\ | 
 | 605 | 	;;					\ | 
 | 606 | 	stf.spill.nta	[r2]=f74,32;		\ | 
 | 607 | 	stf.spill.nta	[r3]=f75,32;		\ | 
 | 608 | 	;;					\ | 
 | 609 | 	stf.spill.nta	[r2]=f76,32;		\ | 
 | 610 | 	stf.spill.nta	[r3]=f77,32;		\ | 
 | 611 | 	;;					\ | 
 | 612 | 	stf.spill.nta	[r2]=f78,32;		\ | 
 | 613 | 	stf.spill.nta	[r3]=f79,32;		\ | 
 | 614 | 	;;					\ | 
 | 615 | 	stf.spill.nta	[r2]=f80,32;		\ | 
 | 616 | 	stf.spill.nta	[r3]=f81,32;		\ | 
 | 617 | 	;;					\ | 
 | 618 | 	stf.spill.nta	[r2]=f82,32;		\ | 
 | 619 | 	stf.spill.nta	[r3]=f83,32;		\ | 
 | 620 | 	;;					\ | 
 | 621 | 	stf.spill.nta	[r2]=f84,32;		\ | 
 | 622 | 	stf.spill.nta	[r3]=f85,32;		\ | 
 | 623 | 	;;					\ | 
 | 624 | 	stf.spill.nta	[r2]=f86,32;		\ | 
 | 625 | 	stf.spill.nta	[r3]=f87,32;		\ | 
 | 626 | 	;;					\ | 
 | 627 | 	stf.spill.nta	[r2]=f88,32;		\ | 
 | 628 | 	stf.spill.nta	[r3]=f89,32;		\ | 
 | 629 | 	;;					\ | 
 | 630 | 	stf.spill.nta	[r2]=f90,32;		\ | 
 | 631 | 	stf.spill.nta	[r3]=f91,32;		\ | 
 | 632 | 	;;					\ | 
 | 633 | 	stf.spill.nta	[r2]=f92,32;		\ | 
 | 634 | 	stf.spill.nta	[r3]=f93,32;		\ | 
 | 635 | 	;;					\ | 
 | 636 | 	stf.spill.nta	[r2]=f94,32;		\ | 
 | 637 | 	stf.spill.nta	[r3]=f95,32;		\ | 
 | 638 | 	;;					\ | 
 | 639 | 	stf.spill.nta	[r2]=f96,32;		\ | 
 | 640 | 	stf.spill.nta	[r3]=f97,32;		\ | 
 | 641 | 	;;					\ | 
 | 642 | 	stf.spill.nta	[r2]=f98,32;		\ | 
 | 643 | 	stf.spill.nta	[r3]=f99,32;		\ | 
 | 644 | 	;;					\ | 
 | 645 | 	stf.spill.nta	[r2]=f100,32;		\ | 
 | 646 | 	stf.spill.nta	[r3]=f101,32;		\ | 
 | 647 | 	;;					\ | 
 | 648 | 	stf.spill.nta	[r2]=f102,32;		\ | 
 | 649 | 	stf.spill.nta	[r3]=f103,32;		\ | 
 | 650 | 	;;					\ | 
 | 651 | 	stf.spill.nta	[r2]=f104,32;		\ | 
 | 652 | 	stf.spill.nta	[r3]=f105,32;		\ | 
 | 653 | 	;;					\ | 
 | 654 | 	stf.spill.nta	[r2]=f106,32;		\ | 
 | 655 | 	stf.spill.nta	[r3]=f107,32;		\ | 
 | 656 | 	;;					\ | 
 | 657 | 	stf.spill.nta	[r2]=f108,32;		\ | 
 | 658 | 	stf.spill.nta	[r3]=f109,32;		\ | 
 | 659 | 	;;					\ | 
 | 660 | 	stf.spill.nta	[r2]=f110,32;		\ | 
 | 661 | 	stf.spill.nta	[r3]=f111,32;		\ | 
 | 662 | 	;;					\ | 
 | 663 | 	stf.spill.nta	[r2]=f112,32;		\ | 
 | 664 | 	stf.spill.nta	[r3]=f113,32;		\ | 
 | 665 | 	;;					\ | 
 | 666 | 	stf.spill.nta	[r2]=f114,32;		\ | 
 | 667 | 	stf.spill.nta	[r3]=f115,32;		\ | 
 | 668 | 	;;					\ | 
 | 669 | 	stf.spill.nta	[r2]=f116,32;		\ | 
 | 670 | 	stf.spill.nta	[r3]=f117,32;		\ | 
 | 671 | 	;;					\ | 
 | 672 | 	stf.spill.nta	[r2]=f118,32;		\ | 
 | 673 | 	stf.spill.nta	[r3]=f119,32;		\ | 
 | 674 | 	;;					\ | 
 | 675 | 	stf.spill.nta	[r2]=f120,32;		\ | 
 | 676 | 	stf.spill.nta	[r3]=f121,32;		\ | 
 | 677 | 	;;					\ | 
 | 678 | 	stf.spill.nta	[r2]=f122,32;		\ | 
 | 679 | 	stf.spill.nta	[r3]=f123,32;		\ | 
 | 680 | 	;;					\ | 
 | 681 | 	stf.spill.nta	[r2]=f124,32;		\ | 
 | 682 | 	stf.spill.nta	[r3]=f125,32;		\ | 
 | 683 | 	;;					\ | 
 | 684 | 	stf.spill.nta	[r2]=f126;		\ | 
 | 685 | 	stf.spill.nta	[r3]=f127;		\ | 
 | 686 | 	;; | 
 | 687 |  | 
 | 688 |      /* | 
 | 689 |       *      r33:    point to context_t structure | 
 | 690 |       */ | 
 | 691 | #define	RESTORE_FPU_LOW				\ | 
 | 692 |     add     r2 = CTX(F2), r33;			\ | 
 | 693 |     add     r3 = CTX(F3), r33;			\ | 
 | 694 |     ;;						\ | 
 | 695 |     ldf.fill.nta f2 = [r2], 32;			\ | 
 | 696 |     ldf.fill.nta f3 = [r3], 32;			\ | 
 | 697 |     ;;						\ | 
 | 698 |     ldf.fill.nta f4 = [r2], 32;			\ | 
 | 699 |     ldf.fill.nta f5 = [r3], 32;			\ | 
 | 700 |     ;;						\ | 
 | 701 |     ldf.fill.nta f6 = [r2], 32;			\ | 
 | 702 |     ldf.fill.nta f7 = [r3], 32;			\ | 
 | 703 |     ;;						\ | 
 | 704 |     ldf.fill.nta f8 = [r2], 32;			\ | 
 | 705 |     ldf.fill.nta f9 = [r3], 32;			\ | 
 | 706 |     ;;						\ | 
 | 707 |     ldf.fill.nta f10 = [r2], 32;		\ | 
 | 708 |     ldf.fill.nta f11 = [r3], 32;		\ | 
 | 709 |     ;;						\ | 
 | 710 |     ldf.fill.nta f12 = [r2], 32;		\ | 
 | 711 |     ldf.fill.nta f13 = [r3], 32;		\ | 
 | 712 |     ;;						\ | 
 | 713 |     ldf.fill.nta f14 = [r2], 32;		\ | 
 | 714 |     ldf.fill.nta f15 = [r3], 32;		\ | 
 | 715 |     ;;						\ | 
 | 716 |     ldf.fill.nta f16 = [r2], 32;		\ | 
 | 717 |     ldf.fill.nta f17 = [r3], 32;		\ | 
 | 718 |     ;;						\ | 
 | 719 |     ldf.fill.nta f18 = [r2], 32;		\ | 
 | 720 |     ldf.fill.nta f19 = [r3], 32;		\ | 
 | 721 |     ;;						\ | 
 | 722 |     ldf.fill.nta f20 = [r2], 32;		\ | 
 | 723 |     ldf.fill.nta f21 = [r3], 32;		\ | 
 | 724 |     ;;						\ | 
 | 725 |     ldf.fill.nta f22 = [r2], 32;		\ | 
 | 726 |     ldf.fill.nta f23 = [r3], 32;		\ | 
 | 727 |     ;;						\ | 
 | 728 |     ldf.fill.nta f24 = [r2], 32;		\ | 
 | 729 |     ldf.fill.nta f25 = [r3], 32;		\ | 
 | 730 |     ;;						\ | 
 | 731 |     ldf.fill.nta f26 = [r2], 32;		\ | 
 | 732 |     ldf.fill.nta f27 = [r3], 32;		\ | 
 | 733 | 	;;					\ | 
 | 734 |     ldf.fill.nta f28 = [r2], 32;		\ | 
 | 735 |     ldf.fill.nta f29 = [r3], 32;		\ | 
 | 736 |     ;;						\ | 
 | 737 |     ldf.fill.nta f30 = [r2], 32;		\ | 
 | 738 |     ldf.fill.nta f31 = [r3], 32;		\ | 
 | 739 |     ;; | 
 | 740 |  | 
 | 741 |  | 
 | 742 |  | 
 | 743 |     /* | 
 | 744 |      *      r33:    point to context_t structure | 
 | 745 |      */ | 
 | 746 | #define	RESTORE_FPU_HIGH			\ | 
 | 747 |     add     r2 = CTX(F32), r33;			\ | 
 | 748 |     add     r3 = CTX(F33), r33;			\ | 
 | 749 |     ;;						\ | 
 | 750 |     ldf.fill.nta f32 = [r2], 32;		\ | 
 | 751 |     ldf.fill.nta f33 = [r3], 32;		\ | 
 | 752 |     ;;						\ | 
 | 753 |     ldf.fill.nta f34 = [r2], 32;		\ | 
 | 754 |     ldf.fill.nta f35 = [r3], 32;		\ | 
 | 755 |     ;;						\ | 
 | 756 |     ldf.fill.nta f36 = [r2], 32;		\ | 
 | 757 |     ldf.fill.nta f37 = [r3], 32;		\ | 
 | 758 |     ;;						\ | 
 | 759 |     ldf.fill.nta f38 = [r2], 32;		\ | 
 | 760 |     ldf.fill.nta f39 = [r3], 32;		\ | 
 | 761 |     ;;						\ | 
 | 762 |     ldf.fill.nta f40 = [r2], 32;		\ | 
 | 763 |     ldf.fill.nta f41 = [r3], 32;		\ | 
 | 764 |     ;;						\ | 
 | 765 |     ldf.fill.nta f42 = [r2], 32;		\ | 
 | 766 |     ldf.fill.nta f43 = [r3], 32;		\ | 
 | 767 |     ;;						\ | 
 | 768 |     ldf.fill.nta f44 = [r2], 32;		\ | 
 | 769 |     ldf.fill.nta f45 = [r3], 32;		\ | 
 | 770 |     ;;						\ | 
 | 771 |     ldf.fill.nta f46 = [r2], 32;		\ | 
 | 772 |     ldf.fill.nta f47 = [r3], 32;		\ | 
 | 773 |     ;;						\ | 
 | 774 |     ldf.fill.nta f48 = [r2], 32;		\ | 
 | 775 |     ldf.fill.nta f49 = [r3], 32;		\ | 
 | 776 |     ;;						\ | 
 | 777 |     ldf.fill.nta f50 = [r2], 32;		\ | 
 | 778 |     ldf.fill.nta f51 = [r3], 32;		\ | 
 | 779 |     ;;						\ | 
 | 780 |     ldf.fill.nta f52 = [r2], 32;		\ | 
 | 781 |     ldf.fill.nta f53 = [r3], 32;		\ | 
 | 782 |     ;;						\ | 
 | 783 |     ldf.fill.nta f54 = [r2], 32;		\ | 
 | 784 |     ldf.fill.nta f55 = [r3], 32;		\ | 
 | 785 |     ;;						\ | 
 | 786 |     ldf.fill.nta f56 = [r2], 32;		\ | 
 | 787 |     ldf.fill.nta f57 = [r3], 32;   		\ | 
 | 788 |     ;;						\ | 
 | 789 |     ldf.fill.nta f58 = [r2], 32;		\ | 
 | 790 |     ldf.fill.nta f59 = [r3], 32;		\ | 
 | 791 |     ;;						\ | 
 | 792 |     ldf.fill.nta f60 = [r2], 32;		\ | 
 | 793 |     ldf.fill.nta f61 = [r3], 32;		\ | 
 | 794 |     ;;						\ | 
 | 795 |     ldf.fill.nta f62 = [r2], 32;		\ | 
 | 796 |     ldf.fill.nta f63 = [r3], 32;		\ | 
 | 797 |     ;;						\ | 
 | 798 |     ldf.fill.nta f64 = [r2], 32;		\ | 
 | 799 |     ldf.fill.nta f65 = [r3], 32;		\ | 
 | 800 |     ;;						\ | 
 | 801 |     ldf.fill.nta f66 = [r2], 32;		\ | 
 | 802 |     ldf.fill.nta f67 = [r3], 32;		\ | 
 | 803 |     ;;						\ | 
 | 804 |     ldf.fill.nta f68 = [r2], 32;		\ | 
 | 805 |     ldf.fill.nta f69 = [r3], 32;		\ | 
 | 806 |     ;;						\ | 
 | 807 |     ldf.fill.nta f70 = [r2], 32;		\ | 
 | 808 |     ldf.fill.nta f71 = [r3], 32;		\ | 
 | 809 |     ;;						\ | 
 | 810 |     ldf.fill.nta f72 = [r2], 32;		\ | 
 | 811 |     ldf.fill.nta f73 = [r3], 32;		\ | 
 | 812 |     ;;						\ | 
 | 813 |     ldf.fill.nta f74 = [r2], 32;		\ | 
 | 814 |     ldf.fill.nta f75 = [r3], 32;		\ | 
 | 815 |     ;;						\ | 
 | 816 |     ldf.fill.nta f76 = [r2], 32;		\ | 
 | 817 |     ldf.fill.nta f77 = [r3], 32;		\ | 
 | 818 |     ;;						\ | 
 | 819 |     ldf.fill.nta f78 = [r2], 32;		\ | 
 | 820 |     ldf.fill.nta f79 = [r3], 32;		\ | 
 | 821 |     ;;						\ | 
 | 822 |     ldf.fill.nta f80 = [r2], 32;		\ | 
 | 823 |     ldf.fill.nta f81 = [r3], 32;		\ | 
 | 824 |     ;;						\ | 
 | 825 |     ldf.fill.nta f82 = [r2], 32;		\ | 
 | 826 |     ldf.fill.nta f83 = [r3], 32;		\ | 
 | 827 |     ;;						\ | 
 | 828 |     ldf.fill.nta f84 = [r2], 32;		\ | 
 | 829 |     ldf.fill.nta f85 = [r3], 32;		\ | 
 | 830 |     ;;						\ | 
 | 831 |     ldf.fill.nta f86 = [r2], 32;		\ | 
 | 832 |     ldf.fill.nta f87 = [r3], 32;		\ | 
 | 833 |     ;;						\ | 
 | 834 |     ldf.fill.nta f88 = [r2], 32;		\ | 
 | 835 |     ldf.fill.nta f89 = [r3], 32;		\ | 
 | 836 |     ;;						\ | 
 | 837 |     ldf.fill.nta f90 = [r2], 32;		\ | 
 | 838 |     ldf.fill.nta f91 = [r3], 32;		\ | 
 | 839 |     ;;						\ | 
 | 840 |     ldf.fill.nta f92 = [r2], 32;		\ | 
 | 841 |     ldf.fill.nta f93 = [r3], 32;		\ | 
 | 842 |     ;;						\ | 
 | 843 |     ldf.fill.nta f94 = [r2], 32;		\ | 
 | 844 |     ldf.fill.nta f95 = [r3], 32;		\ | 
 | 845 |     ;;						\ | 
 | 846 |     ldf.fill.nta f96 = [r2], 32;		\ | 
 | 847 |     ldf.fill.nta f97 = [r3], 32;		\ | 
 | 848 |     ;;						\ | 
 | 849 |     ldf.fill.nta f98 = [r2], 32;		\ | 
 | 850 |     ldf.fill.nta f99 = [r3], 32;		\ | 
 | 851 |     ;;						\ | 
 | 852 |     ldf.fill.nta f100 = [r2], 32;		\ | 
 | 853 |     ldf.fill.nta f101 = [r3], 32;		\ | 
 | 854 |     ;;						\ | 
 | 855 |     ldf.fill.nta f102 = [r2], 32;		\ | 
 | 856 |     ldf.fill.nta f103 = [r3], 32;		\ | 
 | 857 |     ;;						\ | 
 | 858 |     ldf.fill.nta f104 = [r2], 32;		\ | 
 | 859 |     ldf.fill.nta f105 = [r3], 32;		\ | 
 | 860 |     ;;						\ | 
 | 861 |     ldf.fill.nta f106 = [r2], 32;		\ | 
 | 862 |     ldf.fill.nta f107 = [r3], 32;		\ | 
 | 863 |     ;;						\ | 
 | 864 |     ldf.fill.nta f108 = [r2], 32;		\ | 
 | 865 |     ldf.fill.nta f109 = [r3], 32;   		\ | 
 | 866 |     ;;						\ | 
 | 867 |     ldf.fill.nta f110 = [r2], 32;		\ | 
 | 868 |     ldf.fill.nta f111 = [r3], 32;		\ | 
 | 869 |     ;;						\ | 
 | 870 |     ldf.fill.nta f112 = [r2], 32;		\ | 
 | 871 |     ldf.fill.nta f113 = [r3], 32;		\ | 
 | 872 |     ;;						\ | 
 | 873 |     ldf.fill.nta f114 = [r2], 32;		\ | 
 | 874 |     ldf.fill.nta f115 = [r3], 32;		\ | 
 | 875 |     ;;						\ | 
 | 876 |     ldf.fill.nta f116 = [r2], 32;		\ | 
 | 877 |     ldf.fill.nta f117 = [r3], 32;		\ | 
 | 878 |     ;;						\ | 
 | 879 |     ldf.fill.nta f118 = [r2], 32;		\ | 
 | 880 |     ldf.fill.nta f119 = [r3], 32;		\ | 
 | 881 |     ;;						\ | 
 | 882 |     ldf.fill.nta f120 = [r2], 32;		\ | 
 | 883 |     ldf.fill.nta f121 = [r3], 32;		\ | 
 | 884 |     ;;						\ | 
 | 885 |     ldf.fill.nta f122 = [r2], 32;		\ | 
 | 886 |     ldf.fill.nta f123 = [r3], 32;		\ | 
 | 887 |     ;;						\ | 
 | 888 |     ldf.fill.nta f124 = [r2], 32;		\ | 
 | 889 |     ldf.fill.nta f125 = [r3], 32;		\ | 
 | 890 |     ;;						\ | 
 | 891 |     ldf.fill.nta f126 = [r2], 32;		\ | 
 | 892 |     ldf.fill.nta f127 = [r3], 32;		\ | 
 | 893 |     ;; | 
 | 894 |  | 
 | 895 | 	/* | 
 | 896 | 	 *	r32:		context_t base address | 
 | 897 | 	 */ | 
 | 898 | #define	SAVE_PTK_REGS				\ | 
 | 899 |     add r2=CTX(PKR0), r32;			\ | 
 | 900 |     mov r16=7;    				\ | 
 | 901 |     ;;                         			\ | 
 | 902 |     mov ar.lc=r16;  				\ | 
 | 903 |     mov r17=r0;					\ | 
 | 904 |     ;;						\ | 
 | 905 | 1:						\ | 
 | 906 |     mov r18=pkr[r17];				\ | 
 | 907 |     ;;                     			\ | 
 | 908 |     srlz.i;					\ | 
 | 909 |     ;; 						\ | 
 | 910 |     st8 [r2]=r18, 8;				\ | 
 | 911 |     ;;    					\ | 
 | 912 |     add r17 =1,r17;				\ | 
 | 913 |     ;;                     			\ | 
 | 914 |     br.cloop.sptk 1b;				\ | 
 | 915 |     ;; | 
 | 916 |  | 
 | 917 | /* | 
 | 918 |  *      r33:    point to context_t structure | 
 | 919 |  *      ar.lc are corrupted. | 
 | 920 |  */ | 
 | 921 | #define RESTORE_PTK_REGS	    		\ | 
 | 922 |     add r2=CTX(PKR0), r33;			\ | 
 | 923 |     mov r16=7;    				\ | 
 | 924 |     ;;                         			\ | 
 | 925 |     mov ar.lc=r16;  				\ | 
 | 926 |     mov r17=r0;					\ | 
 | 927 |     ;;						\ | 
 | 928 | 1: 						\ | 
 | 929 |     ld8 r18=[r2], 8;				\ | 
 | 930 |     ;;						\ | 
 | 931 |     mov pkr[r17]=r18;				\ | 
 | 932 |     ;;    					\ | 
 | 933 |     srlz.i;					\ | 
 | 934 |     ;; 						\ | 
 | 935 |     add r17 =1,r17;				\ | 
 | 936 |     ;;                     			\ | 
 | 937 |     br.cloop.sptk 1b;				\ | 
 | 938 |     ;; | 
 | 939 |  | 
 | 940 |  | 
 | 941 | /* | 
 | 942 |  * void vmm_trampoline( context_t * from, | 
 | 943 |  *			context_t * to) | 
 | 944 |  * | 
 | 945 |  * 	from:	r32 | 
 | 946 |  *	to:	r33 | 
 | 947 |  *  note: interrupt disabled before call this function. | 
 | 948 |  */ | 
 | 949 | GLOBAL_ENTRY(vmm_trampoline) | 
 | 950 |     mov r16 = psr | 
 | 951 |     adds r2 = CTX(PSR), r32 | 
 | 952 |     ;; | 
 | 953 |     st8 [r2] = r16, 8       // psr | 
 | 954 |     mov r17 = pr | 
 | 955 |     ;; | 
 | 956 |     st8 [r2] = r17, 8       // pr | 
 | 957 |     mov r18 = ar.unat | 
 | 958 |     ;; | 
 | 959 |     st8 [r2] = r18 | 
 | 960 |     mov r17 = ar.rsc | 
 | 961 |     ;; | 
 | 962 |     adds r2 = CTX(RSC),r32 | 
 | 963 |     ;; | 
 | 964 |     st8 [r2]= r17 | 
 | 965 |     mov ar.rsc =0 | 
 | 966 |     flushrs | 
 | 967 |     ;; | 
 | 968 |     SAVE_GENERAL_REGS | 
 | 969 |     ;; | 
 | 970 |     SAVE_KERNEL_REGS | 
 | 971 |     ;; | 
 | 972 |     SAVE_APP_REGS | 
 | 973 |     ;; | 
 | 974 |     SAVE_BRANCH_REGS | 
 | 975 |     ;; | 
 | 976 |     SAVE_CTL_REGS | 
 | 977 |     ;; | 
 | 978 |     SAVE_REGION_REGS | 
 | 979 |     ;; | 
 | 980 |     //SAVE_DEBUG_REGS | 
 | 981 |     ;; | 
 | 982 |     rsm  psr.dfl | 
 | 983 |     ;; | 
 | 984 |     srlz.d | 
 | 985 |     ;; | 
 | 986 |     SAVE_FPU_LOW | 
 | 987 |     ;; | 
 | 988 |     rsm  psr.dfh | 
 | 989 |     ;; | 
 | 990 |     srlz.d | 
 | 991 |     ;; | 
 | 992 |     SAVE_FPU_HIGH | 
 | 993 |     ;; | 
 | 994 |     SAVE_PTK_REGS | 
 | 995 |     ;; | 
 | 996 |     RESTORE_PTK_REGS | 
 | 997 |     ;; | 
 | 998 |     RESTORE_FPU_HIGH | 
 | 999 |     ;; | 
 | 1000 |     RESTORE_FPU_LOW | 
 | 1001 |     ;; | 
 | 1002 |     //RESTORE_DEBUG_REGS | 
 | 1003 |     ;; | 
 | 1004 |     RESTORE_REGION_REGS | 
 | 1005 |     ;; | 
 | 1006 |     RESTORE_CTL_REGS | 
 | 1007 |     ;; | 
 | 1008 |     RESTORE_BRANCH_REGS | 
 | 1009 |     ;; | 
 | 1010 |     RESTORE_APP_REGS | 
 | 1011 |     ;; | 
 | 1012 |     RESTORE_KERNEL_REGS | 
 | 1013 |     ;; | 
 | 1014 |     RESTORE_GENERAL_REGS | 
 | 1015 |     ;; | 
 | 1016 |     adds r2=CTX(PSR), r33 | 
 | 1017 |     ;; | 
 | 1018 |     ld8 r16=[r2], 8       // psr | 
 | 1019 |     ;; | 
 | 1020 |     mov psr.l=r16 | 
 | 1021 |     ;; | 
 | 1022 |     srlz.d | 
 | 1023 |     ;; | 
 | 1024 |     ld8 r16=[r2], 8       // pr | 
 | 1025 |     ;; | 
 | 1026 |     mov pr =r16,-1 | 
 | 1027 |     ld8 r16=[r2]       // unat | 
 | 1028 |     ;; | 
 | 1029 |     mov ar.unat=r16 | 
 | 1030 |     ;; | 
 | 1031 |     adds r2=CTX(RSC),r33 | 
 | 1032 |     ;; | 
 | 1033 |     ld8 r16 =[r2] | 
 | 1034 |     ;; | 
 | 1035 |     mov ar.rsc = r16 | 
 | 1036 |     ;; | 
 | 1037 |     br.ret.sptk.few b0 | 
 | 1038 | END(vmm_trampoline) |