File indexing completed on 2025-05-11 08:23:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #include "ppc_exc_asm_macros.h"
0037
0038 .global ppc_exc_min_prolog_tmpl_naked
0039
0040 ppc_exc_min_prolog_tmpl_naked:
0041
0042 stwu r1, -EXCEPTION_FRAME_END(r1)
0043 stw VECTOR_REGISTER, VECTOR_OFFSET(r1)
0044 li VECTOR_REGISTER, 0
0045
0046
0047
0048
0049
0050 .int ppc_exc_wrap_naked
0051
0052 .global ppc_exc_wrap_naked
0053 ppc_exc_wrap_naked:
0054
0055
0056 stw SCRATCH_REGISTER_0, SCRATCH_REGISTER_0_OFFSET(r1)
0057 stw SCRATCH_REGISTER_1, SCRATCH_REGISTER_1_OFFSET(r1)
0058 stw SCRATCH_REGISTER_2, SCRATCH_REGISTER_2_OFFSET(r1)
0059
0060
0061 stw r0, GPR0_OFFSET(r1)
0062 stw r3, GPR3_OFFSET(r1)
0063 stw r8, GPR8_OFFSET(r1)
0064 stw r9, GPR9_OFFSET(r1)
0065 stw r10, GPR10_OFFSET(r1)
0066 stw r11, GPR11_OFFSET(r1)
0067 stw r12, GPR12_OFFSET(r1)
0068
0069
0070 mfcr SCRATCH_REGISTER_0
0071 stw SCRATCH_REGISTER_0, EXC_CR_OFFSET(r1)
0072
0073
0074 mfspr SCRATCH_REGISTER_0, srr0
0075 stw SCRATCH_REGISTER_0, SRR0_FRAME_OFFSET(r1)
0076
0077
0078 mfspr SCRATCH_REGISTER_0, srr1
0079 stw SCRATCH_REGISTER_0, SRR1_FRAME_OFFSET(r1)
0080
0081
0082 mfctr SCRATCH_REGISTER_0
0083 stw SCRATCH_REGISTER_0, EXC_CTR_OFFSET(r1)
0084
0085
0086 mfxer SCRATCH_REGISTER_0
0087 stw SCRATCH_REGISTER_0, EXC_XER_OFFSET(r1)
0088
0089
0090 mflr SCRATCH_REGISTER_0
0091 stw SCRATCH_REGISTER_0, EXC_LR_OFFSET(r1)
0092
0093 #ifndef PPC_EXC_CONFIG_BOOKE_ONLY
0094
0095
0096 lwz SCRATCH_REGISTER_0, ppc_exc_msr_bits@sdarel(r13)
0097
0098
0099
0100
0101
0102 cmpwi CR_MSR, SCRATCH_REGISTER_0, 0
0103 bne CR_MSR, wrap_change_msr_naked
0104
0105 wrap_change_msr_done_naked:
0106
0107 #endif
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119 rlwinm SCRATCH_REGISTER_1, VECTOR_REGISTER, 2, 25, 29
0120
0121
0122 LA SCRATCH_REGISTER_0, ppc_exc_handler_table
0123
0124
0125 lwzx SCRATCH_REGISTER_0, SCRATCH_REGISTER_0, SCRATCH_REGISTER_1
0126
0127
0128
0129
0130
0131
0132
0133 addi r3, r1, FRAME_LINK_SPACE
0134
0135
0136
0137
0138
0139
0140
0141
0142 rlwinm VECTOR_REGISTER, VECTOR_REGISTER, 0, 27, 31
0143
0144
0145 mtctr SCRATCH_REGISTER_0
0146 bctrl
0147
0148 #ifndef PPC_EXC_CONFIG_BOOKE_ONLY
0149
0150
0151 bne CR_MSR, wrap_restore_msr_naked
0152
0153 wrap_restore_msr_done_naked:
0154
0155 #endif
0156
0157
0158 lwz SCRATCH_REGISTER_0, EXC_XER_OFFSET(r1)
0159 lwz SCRATCH_REGISTER_1, EXC_CTR_OFFSET(r1)
0160 mtxer SCRATCH_REGISTER_0
0161 mtctr SCRATCH_REGISTER_1
0162
0163
0164 lwz SCRATCH_REGISTER_0, EXC_CR_OFFSET(r1)
0165 lwz SCRATCH_REGISTER_1, EXC_LR_OFFSET(r1)
0166 mtcr SCRATCH_REGISTER_0
0167 mtlr SCRATCH_REGISTER_1
0168
0169
0170 lwz r0, GPR0_OFFSET(r1)
0171 lwz r3, GPR3_OFFSET(r1)
0172 lwz r8, GPR8_OFFSET(r1)
0173 lwz r9, GPR9_OFFSET(r1)
0174 lwz r10, GPR10_OFFSET(r1)
0175 lwz r11, GPR11_OFFSET(r1)
0176 lwz r12, GPR12_OFFSET(r1)
0177
0178
0179 lwz VECTOR_REGISTER, VECTOR_OFFSET(r1)
0180
0181
0182 lwz SCRATCH_REGISTER_0, SRR0_FRAME_OFFSET(r1)
0183 lwz SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
0184 lwz SCRATCH_REGISTER_2, SCRATCH_REGISTER_2_OFFSET(r1)
0185 mtspr srr0, SCRATCH_REGISTER_0
0186 lwz SCRATCH_REGISTER_0, SCRATCH_REGISTER_0_OFFSET(r1)
0187 mtspr srr1, SCRATCH_REGISTER_1
0188 lwz SCRATCH_REGISTER_1, SCRATCH_REGISTER_1_OFFSET(r1)
0189
0190
0191
0192
0193
0194
0195 lwz r1, 0(r1)
0196
0197
0198 rfi
0199
0200 #ifndef PPC_EXC_CONFIG_BOOKE_ONLY
0201
0202 wrap_change_msr_naked:
0203
0204 mfmsr SCRATCH_REGISTER_1
0205 or SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
0206 mtmsr SCRATCH_REGISTER_1
0207 sync
0208 isync
0209 b wrap_change_msr_done_naked
0210
0211 wrap_restore_msr_naked:
0212
0213 lwz SCRATCH_REGISTER_0, ppc_exc_msr_bits@sdarel(r13)
0214 mfmsr SCRATCH_REGISTER_1
0215 andc SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, SCRATCH_REGISTER_0
0216 mtmsr SCRATCH_REGISTER_1
0217 sync
0218 isync
0219 b wrap_restore_msr_done_naked
0220
0221 #endif