Changeset d70ebffe in mainline for kernel/arch/sparc64/src/trap/sun4u/trap_table.S
- Timestamp:
- 2014-10-27T15:10:14Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- aef669b
- Parents:
- ec443d5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/trap/sun4u/trap_table.S
rec443d5 rd70ebffe 64 64 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 65 65 mov TT_INSTRUCTION_ACCESS_EXCEPTION, %g2 66 clr %g5 66 67 PREEMPTIBLE_HANDLER exc_dispatch 67 68 … … 71 72 instruction_access_error_tl0: 72 73 mov TT_INSTRUCTION_ACCESS_ERROR, %g2 74 clr %g5 73 75 PREEMPTIBLE_HANDLER exc_dispatch 74 76 … … 78 80 illegal_instruction_tl0: 79 81 mov TT_ILLEGAL_INSTRUCTION, %g2 82 clr %g5 80 83 PREEMPTIBLE_HANDLER exc_dispatch 81 84 … … 85 88 privileged_opcode_tl0: 86 89 mov TT_PRIVILEGED_OPCODE, %g2 90 clr %g5 87 91 PREEMPTIBLE_HANDLER exc_dispatch 88 92 … … 92 96 unimplemented_LDD_tl0: 93 97 mov TT_UNIMPLEMENTED_LDD, %g2 98 clr %g5 94 99 PREEMPTIBLE_HANDLER exc_dispatch 95 100 … … 99 104 unimplemented_STD_tl0: 100 105 mov TT_UNIMPLEMENTED_STD, %g2 106 clr %g5 101 107 PREEMPTIBLE_HANDLER exc_dispatch 102 108 … … 106 112 fp_disabled_tl0: 107 113 mov TT_FP_DISABLED, %g2 114 clr %g5 108 115 PREEMPTIBLE_HANDLER exc_dispatch 109 116 … … 113 120 fp_exception_ieee_754_tl0: 114 121 mov TT_FP_EXCEPTION_IEEE_754, %g2 122 clr %g5 115 123 PREEMPTIBLE_HANDLER exc_dispatch 116 124 … … 120 128 fp_exception_other_tl0: 121 129 mov TT_FP_EXCEPTION_OTHER, %g2 130 clr %g5 122 131 PREEMPTIBLE_HANDLER exc_dispatch 123 132 … … 127 136 tag_overflow_tl0: 128 137 mov TT_TAG_OVERFLOW, %g2 138 clr %g5 129 139 PREEMPTIBLE_HANDLER exc_dispatch 130 140 … … 140 150 division_by_zero_tl0: 141 151 mov TT_DIVISION_BY_ZERO, %g2 152 clr %g5 142 153 PREEMPTIBLE_HANDLER exc_dispatch 143 154 … … 148 159 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 149 160 mov TT_DATA_ACCESS_EXCEPTION, %g2 161 clr %g5 150 162 PREEMPTIBLE_HANDLER exc_dispatch 151 163 … … 155 167 data_access_error_tl0: 156 168 mov TT_DATA_ACCESS_ERROR, %g2 169 clr %g5 157 170 PREEMPTIBLE_HANDLER exc_dispatch 158 171 … … 162 175 mem_address_not_aligned_tl0: 163 176 mov TT_MEM_ADDRESS_NOT_ALIGNED, %g2 177 clr %g5 164 178 PREEMPTIBLE_HANDLER exc_dispatch 165 179 … … 169 183 LDDF_mem_address_not_aligned_tl0: 170 184 mov TT_LDDF_MEM_ADDRESS_NOT_ALIGNED, %g2 185 clr %g5 171 186 PREEMPTIBLE_HANDLER exc_dispatch 172 187 … … 176 191 STDF_mem_address_not_aligned_tl0: 177 192 mov TT_STDF_MEM_ADDRESS_NOT_ALIGNED, %g2 193 clr %g5 178 194 PREEMPTIBLE_HANDLER exc_dispatch 179 195 … … 183 199 privileged_action_tl0: 184 200 mov TT_PRIVILEGED_ACTION, %g2 201 clr %g5 185 202 PREEMPTIBLE_HANDLER exc_dispatch 186 203 … … 190 207 LDQF_mem_address_not_aligned_tl0: 191 208 mov TT_LDQF_MEM_ADDRESS_NOT_ALIGNED, %g2 209 clr %g5 192 210 PREEMPTIBLE_HANDLER exc_dispatch 193 211 … … 197 215 STQF_mem_address_not_aligned_tl0: 198 216 mov TT_STQF_MEM_ADDRESS_NOT_ALIGNED, %g2 217 clr %g5 199 218 PREEMPTIBLE_HANDLER exc_dispatch 200 219 … … 204 223 interrupt_level_1_handler_tl0: 205 224 mov TT_INTERRUPT_LEVEL_1, %g2 225 clr %g5 206 226 PREEMPTIBLE_HANDLER exc_dispatch 207 227 … … 211 231 interrupt_level_2_handler_tl0: 212 232 mov TT_INTERRUPT_LEVEL_2, %g2 233 clr %g5 213 234 PREEMPTIBLE_HANDLER exc_dispatch 214 235 … … 218 239 interrupt_level_3_handler_tl0: 219 240 mov TT_INTERRUPT_LEVEL_3, %g2 241 clr %g5 220 242 PREEMPTIBLE_HANDLER exc_dispatch 221 243 … … 225 247 interrupt_level_4_handler_tl0: 226 248 mov TT_INTERRUPT_LEVEL_4, %g2 249 clr %g5 227 250 PREEMPTIBLE_HANDLER exc_dispatch 228 251 … … 232 255 interrupt_level_5_handler_tl0: 233 256 mov TT_INTERRUPT_LEVEL_5, %g2 257 clr %g5 234 258 PREEMPTIBLE_HANDLER exc_dispatch 235 259 … … 239 263 interrupt_level_6_handler_tl0: 240 264 mov TT_INTERRUPT_LEVEL_6, %g2 265 clr %g5 241 266 PREEMPTIBLE_HANDLER exc_dispatch 242 267 … … 246 271 interrupt_level_7_handler_tl0: 247 272 mov TT_INTERRUPT_LEVEL_7, %g2 273 clr %g5 248 274 PREEMPTIBLE_HANDLER exc_dispatch 249 275 … … 253 279 interrupt_level_8_handler_tl0: 254 280 mov TT_INTERRUPT_LEVEL_8, %g2 281 clr %g5 255 282 PREEMPTIBLE_HANDLER exc_dispatch 256 283 … … 260 287 interrupt_level_9_handler_tl0: 261 288 mov TT_INTERRUPT_LEVEL_9, %g2 289 clr %g5 262 290 PREEMPTIBLE_HANDLER exc_dispatch 263 291 … … 267 295 interrupt_level_10_handler_tl0: 268 296 mov TT_INTERRUPT_LEVEL_10, %g2 297 clr %g5 269 298 PREEMPTIBLE_HANDLER exc_dispatch 270 299 … … 274 303 interrupt_level_11_handler_tl0: 275 304 mov TT_INTERRUPT_LEVEL_11, %g2 305 clr %g5 276 306 PREEMPTIBLE_HANDLER exc_dispatch 277 307 … … 281 311 interrupt_level_12_handler_tl0: 282 312 mov TT_INTERRUPT_LEVEL_12, %g2 313 clr %g5 283 314 PREEMPTIBLE_HANDLER exc_dispatch 284 315 … … 288 319 interrupt_level_13_handler_tl0: 289 320 mov TT_INTERRUPT_LEVEL_13, %g2 321 clr %g5 290 322 PREEMPTIBLE_HANDLER exc_dispatch 291 323 … … 295 327 interrupt_level_14_handler_tl0: 296 328 mov TT_INTERRUPT_LEVEL_14, %g2 329 clr %g5 297 330 PREEMPTIBLE_HANDLER exc_dispatch 298 331 … … 302 335 interrupt_level_15_handler_tl0: 303 336 mov TT_INTERRUPT_LEVEL_15, %g2 337 clr %g5 304 338 PREEMPTIBLE_HANDLER exc_dispatch 305 339 … … 309 343 interrupt_vector_trap_handler_tl0: 310 344 mov TT_INTERRUPT_VECTOR_TRAP, %g2 345 clr %g5 311 346 PREEMPTIBLE_HANDLER exc_dispatch 312 347 … … 377 412 .global trap_instruction_\cur\()_tl0 378 413 trap_instruction_\cur\()_tl0: 414 mov \cur, %g2 379 415 ba %xcc, trap_instruction_handler 380 mov \cur, %g2416 clr %g5 381 417 .endr 382 418 … … 392 428 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 393 429 mov TT_INSTRUCTION_ACCESS_EXCEPTION, %g2 430 clr %g5 394 431 PREEMPTIBLE_HANDLER exc_dispatch 395 432 … … 400 437 wrpr %g0, 1, %tl 401 438 mov TT_INSTRUCTION_ACCESS_ERROR, %g2 439 clr %g5 402 440 PREEMPTIBLE_HANDLER exc_dispatch 403 441 … … 408 446 wrpr %g0, 1, %tl 409 447 mov TT_ILLEGAL_INSTRUCTION, %g2 448 clr %g5 410 449 PREEMPTIBLE_HANDLER exc_dispatch 411 450 … … 422 461 wrpr %g0, 1, %tl 423 462 mov TT_DIVISION_BY_ZERO, %g2 463 clr %g5 424 464 PREEMPTIBLE_HANDLER exc_dispatch 425 465 … … 431 471 wrpr %g0, PSTATE_AG_BIT | PSTATE_PRIV_BIT, %pstate 432 472 mov TT_DATA_ACCESS_EXCEPTION, %g2 473 clr %g5 433 474 PREEMPTIBLE_HANDLER exc_dispatch 434 475 … … 439 480 wrpr %g0, 1, %tl 440 481 mov TT_DATA_ACCESS_ERROR, %g2 482 clr %g5 441 483 PREEMPTIBLE_HANDLER exc_dispatch 442 484 … … 447 489 wrpr %g0, 1, %tl 448 490 mov TT_MEM_ADDRESS_NOT_ALIGNED, %g2 491 clr %g5 449 492 PREEMPTIBLE_HANDLER exc_dispatch 450 493 … … 512 555 * %g1 Address of function to call if this is not a syscall. 513 556 * %g2 First argument for the function. 557 * %g5 I/DTLB_TAG_ACCESS register if applicable. 514 558 * %g6 Pre-set as kernel stack base if trap from userspace. 515 559 * %g7 Pre-set as address of the userspace window buffer. 516 560 */ 517 561 .macro PREEMPTIBLE_HANDLER_TEMPLATE is_syscall 518 /*519 * ASSERT(%tl == 1)520 */521 rdpr %tl, %g3522 cmp %g3, 1523 be %xcc, 1f524 nop525 ! this is for debugging, if we ever get here it will be easy to find526 0: ba,a %xcc, 0b527 528 1:529 562 .if NOT(\is_syscall) 530 563 rdpr %tstate, %g3 … … 544 577 bnz %xcc, 0f ! ...skip setting of kernel stack and primary context 545 578 nop 546 547 579 .endif 580 548 581 /* 549 582 * Normal window spills will go to the userspace window buffer. … … 558 591 * and the new window's %fp. 559 592 */ 560 save %g6, - PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE, %sp593 save %g6, -ISTATE_SIZE, %sp 561 594 562 595 .if \is_syscall … … 590 623 ba,a %xcc, 1f 591 624 0: 592 save %sp, - PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE, %sp625 save %sp, -ISTATE_SIZE, %sp 593 626 594 627 /* … … 612 645 .else 613 646 ! store the syscall number on the stack as 7th argument 614 stx %g2, [%sp + STACK_ WINDOW_SAVE_AREA_SIZE + STACK_BIAS + STACK_ARG6]647 stx %g2, [%sp + STACK_BIAS + ISTATE_OFFSET_ARG6] 615 648 .endif 616 649 617 650 /* 618 * Save TSTATE, TPC and TNPCaside.651 * Save TSTATE, TPC, TNPC and I/DTLB_TAG_ACCESS aside. 619 652 */ 620 653 rdpr %tstate, %g1 … … 623 656 rd %y, %g4 624 657 625 stx %g1, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TSTATE] 626 stx %g2, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TPC] 627 stx %g3, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC] 658 stx %g1, [%sp + STACK_BIAS + ISTATE_OFFSET_TSTATE] 659 stx %g2, [%sp + STACK_BIAS + ISTATE_OFFSET_TPC] 660 stx %g3, [%sp + STACK_BIAS + ISTATE_OFFSET_TNPC] 661 stx %g5, [%sp + STACK_BIAS + ISTATE_OFFSET_TLB_TAG_ACCESS] 628 662 629 663 /* 630 664 * Save the Y register. 631 * This register is deprecated according to SPARC V9 specification 632 * and is only present for backward compatibility with previous 633 * versions of the SPARC architecture. 634 * Surprisingly, gcc makes use of this register without a notice. 635 */ 636 stx %g4, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_Y] 665 */ 666 stx %g4, [%sp + STACK_BIAS + ISTATE_OFFSET_Y] 637 667 638 668 wrpr %g0, 0, %tl … … 645 675 */ 646 676 call %l0 647 add %sp, PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC, %o1677 add %sp, STACK_BIAS, %o1 648 678 .else 649 679 /* … … 663 693 * Read TSTATE, TPC and TNPC from saved copy. 664 694 */ 665 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TSTATE], %g1666 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TPC], %g2667 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC], %g3695 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_TSTATE], %g1 696 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_TPC], %g2 697 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_TNPC], %g3 668 698 669 699 /* … … 686 716 * Restore Y. 687 717 */ 688 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_Y], %g4718 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_Y], %g4 689 719 wr %g4, %y 690 720 … … 726 756 */ 727 757 mov %sp, %g2 728 stx %i0, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I0]729 stx %i1, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I1]730 stx %i2, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I2]731 stx %i3, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I3]732 stx %i4, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I4]733 stx %i5, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I5]734 stx %i6, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I6]735 stx %i7, [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I7]758 stx %i0, [%sp + STACK_BIAS + ISTATE_OFFSET_O0] 759 stx %i1, [%sp + STACK_BIAS + ISTATE_OFFSET_O1] 760 stx %i2, [%sp + STACK_BIAS + ISTATE_OFFSET_O2] 761 stx %i3, [%sp + STACK_BIAS + ISTATE_OFFSET_O3] 762 stx %i4, [%sp + STACK_BIAS + ISTATE_OFFSET_O4] 763 stx %i5, [%sp + STACK_BIAS + ISTATE_OFFSET_O5] 764 stx %i6, [%sp + STACK_BIAS + ISTATE_OFFSET_O6] 765 stx %i7, [%sp + STACK_BIAS + ISTATE_OFFSET_O7] 736 766 wrpr %l0, 0, %cwp 737 767 mov %g2, %sp 738 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I0], %i0739 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I1], %i1740 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I2], %i2741 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I3], %i3742 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I4], %i4743 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I5], %i5744 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I6], %i6745 ldx [%sp + PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_I7], %i7768 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O0], %i0 769 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O1], %i1 770 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O2], %i2 771 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O3], %i3 772 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O4], %i4 773 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O5], %i5 774 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O6], %i6 775 ldx [%sp + STACK_BIAS + ISTATE_OFFSET_O7], %i7 746 776 747 777 /*
Note:
See TracChangeset
for help on using the changeset viewer.