Changeset 2ba1f39 in mainline for arch/ia64/src/ivt.S
- Timestamp:
- 2006-03-16T17:57:46Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b1fd4f0
- Parents:
- 79aeb43b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/src/ivt.S
r79aeb43b r2ba1f39 63 63 * 64 64 * Some steps are skipped (enabling and disabling interrupts). 65 * Some steps are not fully supported yet (e.g. dealing with floating-point66 * context).67 65 * 68 66 * @param offs Offset from the beginning of IVT. … … 84 82 */ 85 83 86 /*Set up FPU as in interrupred*/87 mov r24 =psr88 mov r25 =cr.ipsr89 mov r26 =(PSR_DFH_MASK)90 mov r27 =(~(PSR_DFH_MASK));;91 and r26 =r25,r2692 and r24 =r24,r27;;93 or r24 =r24,r26;;94 mov psr.l =r24;;84 /* Set up FPU as in interrupted context. */ 85 mov r24 = psr 86 mov r25 = cr.ipsr 87 mov r26 = PSR_DFH_MASK 88 mov r27 = ~PSR_DFH_MASK ;; 89 and r26 = r25, r26 90 and r24 = r24, r27;; 91 or r24 = r24, r26;; 92 mov psr.l = r24;; 95 93 srlz.i 96 94 srlz.d;; … … 252 250 mov cr.isr = r27 253 251 mov cr.ifa = r28 254 /*Set up FPU as in exception*/ 255 mov r24=psr 256 mov r26=(PSR_DFH_MASK) 257 mov r27=(~(PSR_DFH_MASK));; 258 and r25=r25,r27 259 and r24=r24,r26;; 260 or r25=r25,r24;; 252 253 /* Set up FPU as in exception. */ 254 mov r24 = psr 255 mov r26 = PSR_DFH_MASK 256 mov r27 = ~PSR_DFH_MASK ;; 257 and r25 = r25, r27 258 and r24 = r24, r26 ;; 259 or r25 = r25, r24;; 261 260 mov cr.ipsr = r25 262 263 261 264 262 /* 18. restore predicate registers from memory stack */ … … 308 306 309 307 /* 8. preserve general and floating-point registers */ 310 /* TODO: save floating-point context */311 308 mov loc17 = r1 312 309 mov loc18 = r2 … … 341 338 mov loc46 = r31 342 339 343 mov r24=96 + STACK_SCRATCH_AREA_SIZE 344 mov r25=112 + STACK_SCRATCH_AREA_SIZE 345 mov r26=0 + STACK_SCRATCH_AREA_SIZE 346 mov r27=16 + STACK_SCRATCH_AREA_SIZE 347 mov r28=32 + STACK_SCRATCH_AREA_SIZE 348 mov r29=48 + STACK_SCRATCH_AREA_SIZE 349 mov r30=64 + STACK_SCRATCH_AREA_SIZE 350 mov r31=80 + STACK_SCRATCH_AREA_SIZE;; 351 add r24=r12,r24 352 add r25=r12,r25 353 add r26=r12,r26 354 add r27=r12,r27 355 add r28=r12,r28 356 add r29=r12,r29 357 add r30=r12,r30 358 add r31=r12,r31;; 359 360 stf.spill [r26]=f2,0x80 361 stf.spill [r27]=f3,0x80 362 stf.spill [r28]=f4,0x80 363 stf.spill [r29]=f5,0x80 364 stf.spill [r30]=f6,0x80 365 stf.spill [r31]=f7,0x80;; 366 367 stf.spill [r24]=f8,0x80 368 stf.spill [r25]=f9,0x80 369 stf.spill [r26]=f10,0x80 370 stf.spill [r27]=f11,0x80 371 stf.spill [r28]=f12,0x80 372 stf.spill [r29]=f13,0x80 373 stf.spill [r30]=f14,0x80 374 stf.spill [r31]=f15,0x80;; 375 376 stf.spill [r24]=f16,0x80 377 stf.spill [r25]=f17,0x80 378 stf.spill [r26]=f18,0x80 379 stf.spill [r27]=f19,0x80 380 stf.spill [r28]=f20,0x80 381 stf.spill [r29]=f21,0x80 382 stf.spill [r30]=f22,0x80 383 stf.spill [r31]=f23,0x80;; 384 385 stf.spill [r24]=f24,0x80 386 stf.spill [r25]=f25,0x80 387 stf.spill [r26]=f26,0x80 388 stf.spill [r27]=f27,0x80 389 stf.spill [r28]=f28,0x80 390 stf.spill [r29]=f29,0x80 391 stf.spill [r30]=f30,0x80 392 stf.spill [r31]=f31,0x80;; 393 394 /* preserve Floating point status register */ 395 mov loc47 = ar.fpsr 340 add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12 341 add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12 342 add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12 343 add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12 344 add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12 345 add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12 346 add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12 347 add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;; 348 349 stf.spill [r26] = f2, 0x80 350 stf.spill [r27] = f3, 0x80 351 stf.spill [r28] = f4, 0x80 352 stf.spill [r29] = f5, 0x80 353 stf.spill [r30] = f6, 0x80 354 stf.spill [r31] = f7, 0x80 ;; 355 356 stf.spill [r24] = f8, 0x80 357 stf.spill [r25] = f9, 0x80 358 stf.spill [r26] = f10, 0x80 359 stf.spill [r27] = f11, 0x80 360 stf.spill [r28] = f12, 0x80 361 stf.spill [r29] = f13, 0x80 362 stf.spill [r30] = f14, 0x80 363 stf.spill [r31] = f15, 0x80 ;; 364 365 stf.spill [r24] = f16, 0x80 366 stf.spill [r25] = f17, 0x80 367 stf.spill [r26] = f18, 0x80 368 stf.spill [r27] = f19, 0x80 369 stf.spill [r28] = f20, 0x80 370 stf.spill [r29] = f21, 0x80 371 stf.spill [r30] = f22, 0x80 372 stf.spill [r31] = f23, 0x80 ;; 373 374 stf.spill [r24] = f24, 0x80 375 stf.spill [r25] = f25, 0x80 376 stf.spill [r26] = f26, 0x80 377 stf.spill [r27] = f27, 0x80 378 stf.spill [r28] = f28, 0x80 379 stf.spill [r29] = f29, 0x80 380 stf.spill [r30] = f30, 0x80 381 stf.spill [r31] = f31, 0x80 ;; 382 383 mov loc47 = ar.fpsr /* preserve floating point status register */ 396 384 397 385 /* 9. skipped (will not enable interrupts) */ … … 419 407 420 408 /* 13. restore general and floating-point registers */ 421 /* TODO: restore floating-point context */ 422 mov r24=96 + STACK_SCRATCH_AREA_SIZE 423 mov r25=112 + STACK_SCRATCH_AREA_SIZE 424 mov r26=0 + STACK_SCRATCH_AREA_SIZE 425 mov r27=16 + STACK_SCRATCH_AREA_SIZE 426 mov r28=32 + STACK_SCRATCH_AREA_SIZE 427 mov r29=48 + STACK_SCRATCH_AREA_SIZE 428 mov r30=64 + STACK_SCRATCH_AREA_SIZE 429 mov r31=80 + STACK_SCRATCH_AREA_SIZE;; 430 add r24=r12,r24 431 add r25=r12,r25 432 add r26=r12,r26 433 add r27=r12,r27 434 add r28=r12,r28 435 add r29=r12,r29 436 add r30=r12,r30 437 add r31=r12,r31;; 438 439 440 ldf.fill f2=[r26],0x80 441 ldf.fill f3=[r27],0x80 442 ldf.fill f4=[r28],0x80 443 ldf.fill f5=[r29],0x80 444 ldf.fill f6=[r30],0x80 445 ldf.fill f7=[r31],0x80;; 446 447 ldf.fill f8=[r24],0x80 448 ldf.fill f9=[r25],0x80 449 ldf.fill f10=[r26],0x80 450 ldf.fill f11=[r27],0x80 451 ldf.fill f12=[r28],0x80 452 ldf.fill f13=[r29],0x80 453 ldf.fill f14=[r30],0x80 454 ldf.fill f15=[r31],0x80;; 455 456 ldf.fill f16=[r24],0x80 457 ldf.fill f17=[r25],0x80 458 ldf.fill f18=[r26],0x80 459 ldf.fill f19=[r27],0x80 460 ldf.fill f20=[r28],0x80 461 ldf.fill f21=[r29],0x80 462 ldf.fill f22=[r30],0x80 463 ldf.fill f23=[r31],0x80;; 464 465 ldf.fill f24=[r24],0x80 466 ldf.fill f25=[r25],0x80 467 ldf.fill f26=[r26],0x80 468 ldf.fill f27=[r27],0x80 469 ldf.fill f28=[r28],0x80 470 ldf.fill f29=[r29],0x80 471 ldf.fill f30=[r30],0x80 472 ldf.fill f31=[r31],0x80;; 473 409 add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12 410 add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12 411 add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12 412 add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12 413 add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12 414 add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12 415 add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12 416 add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;; 417 418 ldf.fill f2 = [r26], 0x80 419 ldf.fill f3 = [r27], 0x80 420 ldf.fill f4 = [r28], 0x80 421 ldf.fill f5 = [r29], 0x80 422 ldf.fill f6 = [r30], 0x80 423 ldf.fill f7 = [r31], 0x80 ;; 424 425 ldf.fill f8 = [r24], 0x80 426 ldf.fill f9 = [r25], 0x80 427 ldf.fill f10 = [r26], 0x80 428 ldf.fill f11 = [r27], 0x80 429 ldf.fill f12 = [r28], 0x80 430 ldf.fill f13 = [r29], 0x80 431 ldf.fill f14 = [r30], 0x80 432 ldf.fill f15 = [r31], 0x80 ;; 433 434 ldf.fill f16 = [r24], 0x80 435 ldf.fill f17 = [r25], 0x80 436 ldf.fill f18 = [r26], 0x80 437 ldf.fill f19 = [r27], 0x80 438 ldf.fill f20 = [r28], 0x80 439 ldf.fill f21 = [r29], 0x80 440 ldf.fill f22 = [r30], 0x80 441 ldf.fill f23 = [r31], 0x80 ;; 442 443 ldf.fill f24 = [r24], 0x80 444 ldf.fill f25 = [r25], 0x80 445 ldf.fill f26 = [r26], 0x80 446 ldf.fill f27 = [r27], 0x80 447 ldf.fill f28 = [r28], 0x80 448 ldf.fill f29 = [r29], 0x80 449 ldf.fill f30 = [r30], 0x80 450 ldf.fill f31 = [r31], 0x80 ;; 474 451 475 452 mov r1 = loc17 … … 504 481 mov r30 = loc45 505 482 mov r31 = loc46 506 507 /* restore Floating point status register */ 508 mov ar.fpsr = loc47 483 484 mov ar.fpsr = loc47 /* restore floating point status register */ 509 485 510 486 /* 14. restore branch and application registers */ … … 608 584 HEAVYWEIGHT_HANDLER 0x7e00 609 585 HEAVYWEIGHT_HANDLER 0x7f00 610 611 612 613
Note:
See TracChangeset
for help on using the changeset viewer.