45#define LT(cr) ((cr)*4+0)
46#define GT(cr) ((cr)*4+1)
47#define EQ(cr) ((cr)*4+2)
50#define STW_R1_R13(off) ((((36<<10)|(r1<<5)|(r13))<<16) | ((off)&0xffff))
52#define FRAME_REGISTER r14
53#define VECTOR_REGISTER r4
54#define SCRATCH_REGISTER_0 r5
55#define SCRATCH_REGISTER_1 r6
56#define SCRATCH_REGISTER_2 r7
58#define FRAME_OFFSET( r) GPR14_OFFSET( r)
59#define VECTOR_OFFSET( r) GPR4_OFFSET( r)
60#define SCRATCH_REGISTER_0_OFFSET( r) GPR5_OFFSET( r)
61#define SCRATCH_REGISTER_1_OFFSET( r) GPR6_OFFSET( r)
62#define SCRATCH_REGISTER_2_OFFSET( r) GPR7_OFFSET( r)
103 .macro PPC_EXC_MIN_PROLOG_ASYNC _NAME _VEC _PRI _FLVR
105 .global ppc_exc_min_prolog_async_\_NAME
106ppc_exc_min_prolog_async_\_NAME:
127 stw r1, ppc_exc_lock_\_PRI@sdarel(r13)
132 stw VECTOR_REGISTER, ppc_exc_vector_register_\_PRI@sdarel(r13)
135 li VECTOR_REGISTER, ( \_VEC | 0xffff8000 )
141 .
int ppc_exc_wrap_\_FLVR
155 .macro PPC_EXC_MIN_PROLOG_SYNC _NAME _VEC _PRI _FLVR
157 .global ppc_exc_min_prolog_sync_\_NAME
158ppc_exc_min_prolog_sync_\_NAME:
159 stwu r1, -EXCEPTION_FRAME_END(r1)
160 stw VECTOR_REGISTER, VECTOR_OFFSET(r1)
161 li VECTOR_REGISTER, \_VEC
167 .int ppc_exc_wrap_nopush_\_FLVR
185 .macro TEST_1ST_OPCODE_crit _REG
187 lwz \_REG, SRR0_FRAME_OFFSET(FRAME_REGISTER)
192 subis \_REG, \_REG, STW_R1_R13(0)@h
197 cmplwi cr0, \_REG, ppc_exc_lock_std@sdarel
210 .macro TEST_LOCK_std _FLVR
212 creqv EQ(CR_LOCK), EQ(CR_LOCK), EQ(CR_LOCK)
231 .macro TEST_LOCK_crit _FLVR
235 GET_INTERRUPT_MASK mask=SCRATCH_REGISTER_1
237 andis. SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, MSR_CE@h
238 beq TEST_LOCK_crit_done_\_FLVR
244 TEST_1ST_OPCODE_crit _REG=SCRATCH_REGISTER_0
253 lwz SCRATCH_REGISTER_1, ppc_exc_lock_std@sdarel(r13)
254 cmplwi CR_LOCK, SCRATCH_REGISTER_1, 0
257TEST_LOCK_crit_done_\_FLVR:
268 crandc EQ(CR_LOCK), EQ(CR_LOCK), EQ(0 )
288 .macro TEST_LOCK_mchk _SRR0 _FLVR
290 crxor EQ(CR_LOCK), EQ(CR_LOCK), EQ(CR_LOCK)
307 .macro RECOVER_CHECK_std _FLVR
309#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
312 lwz SCRATCH_REGISTER_0, SRR1_FRAME_OFFSET(FRAME_REGISTER)
314 xor SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
315 andi. SCRATCH_REGISTER_0, SCRATCH_REGISTER_1, MSR_RI
317recover_check_twiddle_std_\_FLVR:
320 bne recover_check_twiddle_std_\_FLVR
327 .macro RECOVER_CHECK_crit _FLVR
334 .macro RECOVER_CHECK_mchk _FLVR
336#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
339 lwz SCRATCH_REGISTER_0, SRR1_FRAME_OFFSET(FRAME_REGISTER)
341 xor SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
342 andi. SCRATCH_REGISTER_0, SCRATCH_REGISTER_1, MSR_RI
344recover_check_twiddle_mchk_\_FLVR:
347 bne recover_check_twiddle_mchk_\_FLVR
418 .macro WRAP _FLVR _PRI _SRR0 _SRR1 _RFI
420 .global ppc_exc_wrap_\_FLVR
424 stwu r1, -EXCEPTION_FRAME_END(r1)
426 .global ppc_exc_wrap_nopush_\_FLVR
427ppc_exc_wrap_nopush_\_FLVR:
430 stw FRAME_REGISTER, FRAME_OFFSET(r1)
432wrap_no_save_frame_register_\_FLVR:
441 mr FRAME_REGISTER, r1
444 stw SCRATCH_REGISTER_0, SCRATCH_REGISTER_0_OFFSET(FRAME_REGISTER)
445 stw SCRATCH_REGISTER_1, SCRATCH_REGISTER_1_OFFSET(FRAME_REGISTER)
446 stw SCRATCH_REGISTER_2, SCRATCH_REGISTER_2_OFFSET(FRAME_REGISTER)
449 mfcr SCRATCH_REGISTER_0
450 stw SCRATCH_REGISTER_0, EXC_CR_OFFSET(FRAME_REGISTER)
453 cmpwi CR_TYPE, VECTOR_REGISTER, 0
455#if defined(PPC_MULTILIB_FPU) || defined(PPC_MULTILIB_ALTIVEC)
457 mfmsr SCRATCH_REGISTER_0
458#ifdef PPC_MULTILIB_FPU
459 ori SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, MSR_FP
461#ifdef PPC_MULTILIB_ALTIVEC
462 oris SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, MSR_VE >> 16
464 mtmsr SCRATCH_REGISTER_0
474 bge CR_TYPE, wrap_save_non_volatile_regs_\_FLVR
484 GET_SELF_CPU_CONTROL SCRATCH_REGISTER_2
485 lwz SCRATCH_REGISTER_0, PER_CPU_ISR_NEST_LEVEL@l(SCRATCH_REGISTER_2)
486 lwz SCRATCH_REGISTER_1, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(SCRATCH_REGISTER_2)
487 addi SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, 1
488 addi SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, 1
489 stw SCRATCH_REGISTER_0, PER_CPU_ISR_NEST_LEVEL@l(SCRATCH_REGISTER_2)
490 stw SCRATCH_REGISTER_1, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(SCRATCH_REGISTER_2)
498 li SCRATCH_REGISTER_0, 0
499 stw SCRATCH_REGISTER_0, ppc_exc_lock_\_PRI@sdarel(r13)
502 mfspr SCRATCH_REGISTER_0, SPRG1
503 cmpw SCRATCH_REGISTER_0, r1
504 blt wrap_stack_switch_\_FLVR
505 mfspr SCRATCH_REGISTER_1, SPRG2
506 cmpw SCRATCH_REGISTER_1, r1
507 blt wrap_stack_switch_done_\_FLVR
509wrap_stack_switch_\_FLVR:
511 mr r1, SCRATCH_REGISTER_0
513wrap_stack_switch_done_\_FLVR:
520 lwz SCRATCH_REGISTER_2, ppc_exc_vector_register_\_PRI@sdarel(r13)
523 stw SCRATCH_REGISTER_2, VECTOR_OFFSET(FRAME_REGISTER)
525wrap_disable_thread_dispatching_done_\_FLVR:
537 mfspr SCRATCH_REGISTER_0, \_SRR0
538 stw SCRATCH_REGISTER_0, SRR0_FRAME_OFFSET(FRAME_REGISTER)
541 mfspr SCRATCH_REGISTER_0, \_SRR1
542 stw SCRATCH_REGISTER_0, SRR1_FRAME_OFFSET(FRAME_REGISTER)
545 mfctr SCRATCH_REGISTER_0
546 stw SCRATCH_REGISTER_0, EXC_CTR_OFFSET(FRAME_REGISTER)
549 mfxer SCRATCH_REGISTER_0
550 stw SCRATCH_REGISTER_0, EXC_XER_OFFSET(FRAME_REGISTER)
553 mflr SCRATCH_REGISTER_0
554 stw SCRATCH_REGISTER_0, EXC_LR_OFFSET(FRAME_REGISTER)
557 stw r0, GPR0_OFFSET(FRAME_REGISTER)
558 stw r3, GPR3_OFFSET(FRAME_REGISTER)
559 stw r8, GPR8_OFFSET(FRAME_REGISTER)
560 stw r9, GPR9_OFFSET(FRAME_REGISTER)
561 stw r10, GPR10_OFFSET(FRAME_REGISTER)
562 stw r11, GPR11_OFFSET(FRAME_REGISTER)
563 stw r12, GPR12_OFFSET(FRAME_REGISTER)
566 stw r2, GPR2_OFFSET(FRAME_REGISTER)
569 stw VECTOR_REGISTER, EXCEPTION_NUMBER_OFFSET(FRAME_REGISTER)
571#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
580 cmpwi CR_MSR, SCRATCH_REGISTER_0, 0
581 bne CR_MSR, wrap_change_msr_\_FLVR
583wrap_change_msr_done_\_FLVR:
587#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
588 LA SCRATCH_REGISTER_0, _CPU_save_altivec_volatile
589 mtctr SCRATCH_REGISTER_0
590 addi r3, FRAME_REGISTER, EXC_VEC_OFFSET
595 li SCRATCH_REGISTER_0, 0
596 mtvrsave SCRATCH_REGISTER_0
605 lwz VECTOR_REGISTER, EXCEPTION_NUMBER_OFFSET(FRAME_REGISTER)
608#ifdef PPC_MULTILIB_ALTIVEC
609 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(0)
610 stvx v0, FRAME_REGISTER, SCRATCH_REGISTER_0
612 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(1)
613 stvx v1, FRAME_REGISTER, SCRATCH_REGISTER_0
614 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(2)
615 stvx v2, FRAME_REGISTER, SCRATCH_REGISTER_0
616 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(3)
617 stvx v3, FRAME_REGISTER, SCRATCH_REGISTER_0
618 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(4)
619 stvx v4, FRAME_REGISTER, SCRATCH_REGISTER_0
620 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(5)
621 stvx v5, FRAME_REGISTER, SCRATCH_REGISTER_0
622 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(6)
623 stvx v6, FRAME_REGISTER, SCRATCH_REGISTER_0
624 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(7)
625 stvx v7, FRAME_REGISTER, SCRATCH_REGISTER_0
626 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(8)
627 stvx v8, FRAME_REGISTER, SCRATCH_REGISTER_0
628 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(9)
629 stvx v9, FRAME_REGISTER, SCRATCH_REGISTER_0
630 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(0)
631 stvx v10, FRAME_REGISTER, SCRATCH_REGISTER_0
632 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(11)
633 stvx v11, FRAME_REGISTER, SCRATCH_REGISTER_0
634 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(12)
635 stvx v12, FRAME_REGISTER, SCRATCH_REGISTER_0
636 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(13)
637 stvx v13, FRAME_REGISTER, SCRATCH_REGISTER_0
638 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(14)
639 stvx v14, FRAME_REGISTER, SCRATCH_REGISTER_0
640 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(15)
641 stvx v15, FRAME_REGISTER, SCRATCH_REGISTER_0
642 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(16)
643 stvx v16, FRAME_REGISTER, SCRATCH_REGISTER_0
644 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(17)
645 stvx v17, FRAME_REGISTER, SCRATCH_REGISTER_0
646 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(18)
647 stvx v18, FRAME_REGISTER, SCRATCH_REGISTER_0
648 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(19)
649 stvx v19, FRAME_REGISTER, SCRATCH_REGISTER_0
650 li SCRATCH_REGISTER_0, PPC_EXC_VSCR_OFFSET
651 stvewx v0, r1, SCRATCH_REGISTER_0
654#ifdef PPC_MULTILIB_FPU
655 stfd f0, PPC_EXC_FR_OFFSET(0)(FRAME_REGISTER)
657 stfd f1, PPC_EXC_FR_OFFSET(1)(FRAME_REGISTER)
658 stfd f2, PPC_EXC_FR_OFFSET(2)(FRAME_REGISTER)
659 stfd f3, PPC_EXC_FR_OFFSET(3)(FRAME_REGISTER)
660 stfd f4, PPC_EXC_FR_OFFSET(4)(FRAME_REGISTER)
661 stfd f5, PPC_EXC_FR_OFFSET(5)(FRAME_REGISTER)
662 stfd f6, PPC_EXC_FR_OFFSET(6)(FRAME_REGISTER)
663 stfd f7, PPC_EXC_FR_OFFSET(7)(FRAME_REGISTER)
664 stfd f8, PPC_EXC_FR_OFFSET(8)(FRAME_REGISTER)
665 stfd f9, PPC_EXC_FR_OFFSET(9)(FRAME_REGISTER)
666 stfd f10, PPC_EXC_FR_OFFSET(10)(FRAME_REGISTER)
667 stfd f11, PPC_EXC_FR_OFFSET(11)(FRAME_REGISTER)
668 stfd f12, PPC_EXC_FR_OFFSET(12)(FRAME_REGISTER)
669 stfd f13, PPC_EXC_FR_OFFSET(13)(FRAME_REGISTER)
670 stfd f0, PPC_EXC_FPSCR_OFFSET(FRAME_REGISTER)
683 rlwinm SCRATCH_REGISTER_1, VECTOR_REGISTER, 2, 25, 29
689 lwzx SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, SCRATCH_REGISTER_1
697 addi r3, FRAME_REGISTER, FRAME_LINK_SPACE
706 rlwinm VECTOR_REGISTER, VECTOR_REGISTER, 0, 27, 31
709 mtctr SCRATCH_REGISTER_0
714 bne wrap_call_global_handler_\_FLVR
716wrap_handler_done_\_FLVR:
719 RECOVER_CHECK_\_PRI _FLVR=\_FLVR
728 bge CR_TYPE, wrap_restore_non_volatile_regs_\_FLVR
734 mr r1, FRAME_REGISTER
744 GET_SELF_CPU_CONTROL SCRATCH_REGISTER_2
745 lwz SCRATCH_REGISTER_0, PER_CPU_ISR_NEST_LEVEL@l(SCRATCH_REGISTER_2)
746 lwz SCRATCH_REGISTER_1, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(SCRATCH_REGISTER_2)
747 subi SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, 1
748 subic. SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, 1
749 stw SCRATCH_REGISTER_0, PER_CPU_ISR_NEST_LEVEL@l(SCRATCH_REGISTER_2)
750 stw SCRATCH_REGISTER_1, PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(SCRATCH_REGISTER_2)
753 bne wrap_thread_dispatching_done_\_FLVR
756 TEST_LOCK_\_PRI _FLVR=\_FLVR
759 bne CR_LOCK, wrap_thread_dispatching_done_\_FLVR
762 LA SCRATCH_REGISTER_0, ppc_exc_wrapup
765 addi r3, FRAME_REGISTER, FRAME_LINK_SPACE
768 mtctr SCRATCH_REGISTER_0
771wrap_thread_dispatching_done_\_FLVR:
773#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
774 LA SCRATCH_REGISTER_0, _CPU_load_altivec_volatile
775 mtctr SCRATCH_REGISTER_0
776 addi r3, FRAME_REGISTER, EXC_VEC_OFFSET
780#ifdef PPC_MULTILIB_ALTIVEC
781 li SCRATCH_REGISTER_0, PPC_EXC_MIN_VSCR_OFFSET
782 lvewx v0, r1, SCRATCH_REGISTER_0
784 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(0)
785 lvx v0, FRAME_REGISTER, SCRATCH_REGISTER_0
786 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(1)
787 lvx v1, FRAME_REGISTER, SCRATCH_REGISTER_0
788 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(2)
789 lvx v2, FRAME_REGISTER, SCRATCH_REGISTER_0
790 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(3)
791 lvx v3, FRAME_REGISTER, SCRATCH_REGISTER_0
792 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(4)
793 lvx v4, FRAME_REGISTER, SCRATCH_REGISTER_0
794 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(5)
795 lvx v5, FRAME_REGISTER, SCRATCH_REGISTER_0
796 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(6)
797 lvx v6, FRAME_REGISTER, SCRATCH_REGISTER_0
798 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(7)
799 lvx v7, FRAME_REGISTER, SCRATCH_REGISTER_0
800 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(8)
801 lvx v8, FRAME_REGISTER, SCRATCH_REGISTER_0
802 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(9)
803 lvx v9, FRAME_REGISTER, SCRATCH_REGISTER_0
804 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(0)
805 lvx v10, FRAME_REGISTER, SCRATCH_REGISTER_0
806 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(11)
807 lvx v11, FRAME_REGISTER, SCRATCH_REGISTER_0
808 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(12)
809 lvx v12, FRAME_REGISTER, SCRATCH_REGISTER_0
810 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(13)
811 lvx v13, FRAME_REGISTER, SCRATCH_REGISTER_0
812 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(14)
813 lvx v14, FRAME_REGISTER, SCRATCH_REGISTER_0
814 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(15)
815 lvx v15, FRAME_REGISTER, SCRATCH_REGISTER_0
816 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(16)
817 lvx v16, FRAME_REGISTER, SCRATCH_REGISTER_0
818 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(17)
819 lvx v17, FRAME_REGISTER, SCRATCH_REGISTER_0
820 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(18)
821 lvx v18, FRAME_REGISTER, SCRATCH_REGISTER_0
822 li SCRATCH_REGISTER_0, PPC_EXC_VR_OFFSET(19)
823 lvx v19, FRAME_REGISTER, SCRATCH_REGISTER_0
826#ifdef PPC_MULTILIB_FPU
827 lfd f0, PPC_EXC_FPSCR_OFFSET(FRAME_REGISTER)
829 lfd f0, PPC_EXC_FR_OFFSET(0)(FRAME_REGISTER)
830 lfd f1, PPC_EXC_FR_OFFSET(1)(FRAME_REGISTER)
831 lfd f2, PPC_EXC_FR_OFFSET(2)(FRAME_REGISTER)
832 lfd f3, PPC_EXC_FR_OFFSET(3)(FRAME_REGISTER)
833 lfd f4, PPC_EXC_FR_OFFSET(4)(FRAME_REGISTER)
834 lfd f5, PPC_EXC_FR_OFFSET(5)(FRAME_REGISTER)
835 lfd f6, PPC_EXC_FR_OFFSET(6)(FRAME_REGISTER)
836 lfd f7, PPC_EXC_FR_OFFSET(7)(FRAME_REGISTER)
837 lfd f8, PPC_EXC_FR_OFFSET(8)(FRAME_REGISTER)
838 lfd f9, PPC_EXC_FR_OFFSET(9)(FRAME_REGISTER)
839 lfd f10, PPC_EXC_FR_OFFSET(10)(FRAME_REGISTER)
840 lfd f11, PPC_EXC_FR_OFFSET(11)(FRAME_REGISTER)
841 lfd f12, PPC_EXC_FR_OFFSET(12)(FRAME_REGISTER)
842 lfd f13, PPC_EXC_FR_OFFSET(13)(FRAME_REGISTER)
845#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
848 bne CR_MSR, wrap_restore_msr_\_FLVR
850wrap_restore_msr_done_\_FLVR:
860 lwz FRAME_REGISTER, FRAME_OFFSET(r1)
863 lwz SCRATCH_REGISTER_0, EXC_XER_OFFSET(r1)
864 lwz SCRATCH_REGISTER_1, EXC_CTR_OFFSET(r1)
865 mtxer SCRATCH_REGISTER_0
866 mtctr SCRATCH_REGISTER_1
869 lwz SCRATCH_REGISTER_0, EXC_CR_OFFSET(r1)
870 lwz SCRATCH_REGISTER_1, EXC_LR_OFFSET(r1)
871 mtcr SCRATCH_REGISTER_0
872 mtlr SCRATCH_REGISTER_1
875 lwz r0, GPR0_OFFSET(r1)
876 lwz r3, GPR3_OFFSET(r1)
877 lwz r8, GPR8_OFFSET(r1)
878 lwz r9, GPR9_OFFSET(r1)
879 lwz r10, GPR10_OFFSET(r1)
880 lwz r11, GPR11_OFFSET(r1)
881 lwz r12, GPR12_OFFSET(r1)
884 lwz r2, GPR2_OFFSET(r1)
887 lwz VECTOR_REGISTER, VECTOR_OFFSET(r1)
893 INTERRUPT_DISABLE SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
896 lwz SCRATCH_REGISTER_0, SRR0_FRAME_OFFSET(r1)
897 lwz SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
898 lwz SCRATCH_REGISTER_2, SCRATCH_REGISTER_2_OFFSET(r1)
899 mtspr \_SRR0, SCRATCH_REGISTER_0
900 lwz SCRATCH_REGISTER_0, SCRATCH_REGISTER_0_OFFSET(r1)
901 mtspr \_SRR1, SCRATCH_REGISTER_1
902 lwz SCRATCH_REGISTER_1, SCRATCH_REGISTER_1_OFFSET(r1)
914#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
916wrap_change_msr_\_FLVR:
918 mfmsr SCRATCH_REGISTER_1
919 or SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
920 mtmsr SCRATCH_REGISTER_1
923 b wrap_change_msr_done_\_FLVR
925wrap_restore_msr_\_FLVR:
928 mfmsr SCRATCH_REGISTER_1
929 andc SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
930 mtmsr SCRATCH_REGISTER_1
933 b wrap_restore_msr_done_\_FLVR
937wrap_save_non_volatile_regs_\_FLVR:
940 lwz SCRATCH_REGISTER_1, 0(FRAME_REGISTER)
943 stw r13, GPR13_OFFSET(FRAME_REGISTER)
946 stw SCRATCH_REGISTER_1, GPR1_OFFSET(FRAME_REGISTER)
952 stmw r15, GPR15_OFFSET(FRAME_REGISTER)
954 stw r15, GPR15_OFFSET(FRAME_REGISTER)
955 stw r16, GPR16_OFFSET(FRAME_REGISTER)
956 stw r17, GPR17_OFFSET(FRAME_REGISTER)
957 stw r18, GPR18_OFFSET(FRAME_REGISTER)
958 stw r19, GPR19_OFFSET(FRAME_REGISTER)
959 stw r20, GPR20_OFFSET(FRAME_REGISTER)
960 stw r21, GPR21_OFFSET(FRAME_REGISTER)
961 stw r22, GPR22_OFFSET(FRAME_REGISTER)
962 stw r23, GPR23_OFFSET(FRAME_REGISTER)
963 stw r24, GPR24_OFFSET(FRAME_REGISTER)
964 stw r25, GPR25_OFFSET(FRAME_REGISTER)
965 stw r26, GPR26_OFFSET(FRAME_REGISTER)
966 stw r27, GPR27_OFFSET(FRAME_REGISTER)
967 stw r28, GPR28_OFFSET(FRAME_REGISTER)
968 stw r29, GPR29_OFFSET(FRAME_REGISTER)
969 stw r30, GPR30_OFFSET(FRAME_REGISTER)
970 stw r31, GPR31_OFFSET(FRAME_REGISTER)
973#ifdef PPC_MULTILIB_ALTIVEC
974 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(20)
975 stvx v20, FRAME_REGISTER, SCRATCH_REGISTER_1
976 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(21)
977 stvx v21, FRAME_REGISTER, SCRATCH_REGISTER_1
978 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(22)
979 stvx v22, FRAME_REGISTER, SCRATCH_REGISTER_1
980 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(23)
981 stvx v23, FRAME_REGISTER, SCRATCH_REGISTER_1
982 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(24)
983 stvx v24, FRAME_REGISTER, SCRATCH_REGISTER_1
984 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(25)
985 stvx v25, FRAME_REGISTER, SCRATCH_REGISTER_1
986 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(26)
987 stvx v26, FRAME_REGISTER, SCRATCH_REGISTER_1
988 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(27)
989 stvx v27, FRAME_REGISTER, SCRATCH_REGISTER_1
990 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(28)
991 stvx v28, FRAME_REGISTER, SCRATCH_REGISTER_1
992 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(29)
993 stvx v29, FRAME_REGISTER, SCRATCH_REGISTER_1
994 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(30)
995 stvx v30, FRAME_REGISTER, SCRATCH_REGISTER_1
996 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(31)
997 stvx v31, FRAME_REGISTER, SCRATCH_REGISTER_1
998 mfvrsave SCRATCH_REGISTER_1
999 stw SCRATCH_REGISTER_1, PPC_EXC_VRSAVE_OFFSET(FRAME_REGISTER)
1002#ifdef PPC_MULTILIB_FPU
1003 stfd f14, PPC_EXC_FR_OFFSET(14)(FRAME_REGISTER)
1004 stfd f15, PPC_EXC_FR_OFFSET(15)(FRAME_REGISTER)
1005 stfd f16, PPC_EXC_FR_OFFSET(16)(FRAME_REGISTER)
1006 stfd f17, PPC_EXC_FR_OFFSET(17)(FRAME_REGISTER)
1007 stfd f18, PPC_EXC_FR_OFFSET(18)(FRAME_REGISTER)
1008 stfd f19, PPC_EXC_FR_OFFSET(19)(FRAME_REGISTER)
1009 stfd f20, PPC_EXC_FR_OFFSET(20)(FRAME_REGISTER)
1010 stfd f21, PPC_EXC_FR_OFFSET(21)(FRAME_REGISTER)
1011 stfd f22, PPC_EXC_FR_OFFSET(22)(FRAME_REGISTER)
1012 stfd f23, PPC_EXC_FR_OFFSET(23)(FRAME_REGISTER)
1013 stfd f24, PPC_EXC_FR_OFFSET(24)(FRAME_REGISTER)
1014 stfd f25, PPC_EXC_FR_OFFSET(25)(FRAME_REGISTER)
1015 stfd f26, PPC_EXC_FR_OFFSET(26)(FRAME_REGISTER)
1016 stfd f27, PPC_EXC_FR_OFFSET(27)(FRAME_REGISTER)
1017 stfd f28, PPC_EXC_FR_OFFSET(28)(FRAME_REGISTER)
1018 stfd f29, PPC_EXC_FR_OFFSET(29)(FRAME_REGISTER)
1019 stfd f30, PPC_EXC_FR_OFFSET(30)(FRAME_REGISTER)
1020 stfd f31, PPC_EXC_FR_OFFSET(31)(FRAME_REGISTER)
1023 b wrap_disable_thread_dispatching_done_\_FLVR
1025wrap_restore_non_volatile_regs_\_FLVR:
1028 lwz SCRATCH_REGISTER_0, GPR1_OFFSET(r1)
1031 lwz r13, GPR13_OFFSET(r1)
1037 lmw r15, GPR15_OFFSET(r1)
1039 lwz r15, GPR15_OFFSET(FRAME_REGISTER)
1040 lwz r16, GPR16_OFFSET(FRAME_REGISTER)
1041 lwz r17, GPR17_OFFSET(FRAME_REGISTER)
1042 lwz r18, GPR18_OFFSET(FRAME_REGISTER)
1043 lwz r19, GPR19_OFFSET(FRAME_REGISTER)
1044 lwz r20, GPR20_OFFSET(FRAME_REGISTER)
1045 lwz r21, GPR21_OFFSET(FRAME_REGISTER)
1046 lwz r22, GPR22_OFFSET(FRAME_REGISTER)
1047 lwz r23, GPR23_OFFSET(FRAME_REGISTER)
1048 lwz r24, GPR24_OFFSET(FRAME_REGISTER)
1049 lwz r25, GPR25_OFFSET(FRAME_REGISTER)
1050 lwz r26, GPR26_OFFSET(FRAME_REGISTER)
1051 lwz r27, GPR27_OFFSET(FRAME_REGISTER)
1052 lwz r28, GPR28_OFFSET(FRAME_REGISTER)
1053 lwz r29, GPR29_OFFSET(FRAME_REGISTER)
1054 lwz r30, GPR30_OFFSET(FRAME_REGISTER)
1055 lwz r31, GPR31_OFFSET(FRAME_REGISTER)
1059 stw SCRATCH_REGISTER_0, 0(r1)
1061#ifdef PPC_MULTILIB_ALTIVEC
1062 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(20)
1063 lvx v20, FRAME_REGISTER, SCRATCH_REGISTER_1
1064 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(21)
1065 lvx v21, FRAME_REGISTER, SCRATCH_REGISTER_1
1066 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(22)
1067 lvx v22, FRAME_REGISTER, SCRATCH_REGISTER_1
1068 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(23)
1069 lvx v23, FRAME_REGISTER, SCRATCH_REGISTER_1
1070 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(24)
1071 lvx v24, FRAME_REGISTER, SCRATCH_REGISTER_1
1072 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(25)
1073 lvx v25, FRAME_REGISTER, SCRATCH_REGISTER_1
1074 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(26)
1075 lvx v26, FRAME_REGISTER, SCRATCH_REGISTER_1
1076 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(27)
1077 lvx v27, FRAME_REGISTER, SCRATCH_REGISTER_1
1078 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(28)
1079 lvx v28, FRAME_REGISTER, SCRATCH_REGISTER_1
1080 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(29)
1081 lvx v29, FRAME_REGISTER, SCRATCH_REGISTER_1
1082 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(30)
1083 lvx v30, FRAME_REGISTER, SCRATCH_REGISTER_1
1084 li SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(31)
1085 lvx v31, FRAME_REGISTER, SCRATCH_REGISTER_1
1086 lwz SCRATCH_REGISTER_1, PPC_EXC_VRSAVE_OFFSET(FRAME_REGISTER)
1087 mtvrsave SCRATCH_REGISTER_1
1090#ifdef PPC_MULTILIB_FPU
1091 lfd f14, PPC_EXC_FR_OFFSET(14)(FRAME_REGISTER)
1092 lfd f15, PPC_EXC_FR_OFFSET(15)(FRAME_REGISTER)
1093 lfd f16, PPC_EXC_FR_OFFSET(16)(FRAME_REGISTER)
1094 lfd f17, PPC_EXC_FR_OFFSET(17)(FRAME_REGISTER)
1095 lfd f18, PPC_EXC_FR_OFFSET(18)(FRAME_REGISTER)
1096 lfd f19, PPC_EXC_FR_OFFSET(19)(FRAME_REGISTER)
1097 lfd f20, PPC_EXC_FR_OFFSET(20)(FRAME_REGISTER)
1098 lfd f21, PPC_EXC_FR_OFFSET(21)(FRAME_REGISTER)
1099 lfd f22, PPC_EXC_FR_OFFSET(22)(FRAME_REGISTER)
1100 lfd f23, PPC_EXC_FR_OFFSET(23)(FRAME_REGISTER)
1101 lfd f24, PPC_EXC_FR_OFFSET(24)(FRAME_REGISTER)
1102 lfd f25, PPC_EXC_FR_OFFSET(25)(FRAME_REGISTER)
1103 lfd f26, PPC_EXC_FR_OFFSET(26)(FRAME_REGISTER)
1104 lfd f27, PPC_EXC_FR_OFFSET(27)(FRAME_REGISTER)
1105 lfd f28, PPC_EXC_FR_OFFSET(28)(FRAME_REGISTER)
1106 lfd f29, PPC_EXC_FR_OFFSET(29)(FRAME_REGISTER)
1107 lfd f30, PPC_EXC_FR_OFFSET(30)(FRAME_REGISTER)
1108 lfd f31, PPC_EXC_FR_OFFSET(31)(FRAME_REGISTER)
1111 b wrap_thread_dispatching_done_\_FLVR
1113wrap_call_global_handler_\_FLVR:
1116 addi r3, FRAME_REGISTER, FRAME_LINK_SPACE
1118#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
1124 cmpwi SCRATCH_REGISTER_0, 0
1125 beq wrap_handler_done_\_FLVR
1128 mtctr SCRATCH_REGISTER_0
1138 b wrap_handler_done_\_FLVR
ppc_exc_handler_t ppc_exc_handler_table[LAST_VALID_EXC+1]
High-level exception handler table.
Definition: ppc_exc_hdl.c:60
void C_exception_handler(BSP_Exception_frame *excPtr)
Default global exception handler.
Definition: ppc_exc_global_handler.c:24
exception_handler_t globalExceptHdl
Global exception handler.
Definition: ppc_exc_hdl.c:57
uint32_t ppc_exc_msr_bits
Bits for MSR update.
Definition: ppc_exc_hdl.c:43
General purpose assembler macros, linker command file support and some inline functions for direct re...