arch.s (3568B)
1 .FILE "arch.s" 2 3 .TEXT 4 .GLOBL interrupt 5 interrupt: 6 CBNZ X0,1f 7 MSR DAIFSET,#15 8 RET 9 1: 10 MSR DAIFCLR,#15 11 RET 12 13 .TEXT 14 .GLOBL barrier 15 barrier: 16 ADR X1,1f 17 LSL X0,X0,#3 18 ADD X1,X1,X0 19 BR X1 20 21 1: 22 ISB 23 RET 24 25 DSB SY 26 RET 27 28 .TEXT 29 .GLOBL invalltlb 30 invalltlb: 31 TLBI VMALLE1IS 32 DSB ISH 33 ISB 34 RET 35 36 .TEXT 37 .GLOBL invtlb 38 invtlb: 39 LSR X9,X0,#12 40 DSB ISHST 41 TLBI VAE1,X9 42 DSB ISH 43 RET 44 45 .TEXT 46 .GLOBL invdcachesetway 47 invdcachesetway: 48 DC ISW,X0 49 RET 50 51 .TEXT 52 .GLOBL inm8 53 inm8: 54 LDRB W0,[X0] 55 RET 56 57 .TEXT 58 .GLOBL inm16 59 inm16: 60 LDRH W0,[X0] 61 RET 62 63 .TEXT 64 .GLOBL inm32 65 inm32: 66 LDR W0,[X0] 67 RET 68 69 .TEXT 70 .GLOBL outm8 71 outm8: 72 STRB W0,[X1] 73 RET 74 75 .TEXT 76 .GLOBL outm16 77 outm16: 78 STRH W0,[X1] 79 RET 80 81 .TEXT 82 .GLOBL outm32 83 outm32: 84 STR W0,[X1] 85 RET 86 87 .TEXT 88 .GLOBL halt 89 halt: 90 MSR DAIFSET,#15 91 WFE 92 B halt 93 94 .TEXT 95 .GLOBL getctx 96 getctx: 97 STP X0,X1,[X0,#16*0] 98 STP X2,X3,[X0,#16*1] 99 STP X4,X5,[X0,#16*2] 100 STP X6,X7,[X0,#16*3] 101 STP X8,X9,[X0,#16*4] 102 STP X10,X11,[X0,#16*5] 103 STP X12,X13,[X0,#16*6] 104 STP X14,X15,[X0,#16*7] 105 STP X16,X17,[X0,#16*8] 106 STP X18,X19,[X0,#16*9] 107 STP X20,X21,[X0,#16*10] 108 STP X22,X23,[X0,#16*11] 109 STP X24,X25,[X0,#16*12] 110 STP X26,X27,[X0,#16*13] 111 STP X28,X29,[X0,#16*14] 112 113 MRS X9,ELR_EL1 114 STP X9,X30,[X0,#16*15] 115 116 MRS X9,SPSR_EL1 117 MRS X10,ESR_EL1 118 STP X9,X10,[X0,#16*16] 119 120 MRS X9,SP_EL0 121 MOV X10,SP 122 STP X9,X10,[x0,#16*17] 123 124 MRS X9,FAR_EL1 125 STP X9,XZR,[x0,#16*18] 126 127 MRS X9,TTBR0_EL1 128 MRS X10,TTBR1_EL1 129 STP X9,X10,[x0,#16*19] 130 131 RET 132 133 .TEXT 134 EXCEPTION: 135 STP X0,X1,[SP,#-16*(20-0)] 136 STP X2,X3,[SP,#-16*(20-1)] 137 STP X4,X5,[SP,#-16*(20-2)] 138 STP X6,X7,[SP,#-16*(20-3)] 139 STP X8,X9,[SP,#-16*(20-4)] 140 STP X10,X11,[SP,#-16*(20-5)] 141 STP X12,X13,[SP,#-16*(20-6)] 142 STP X14,X15,[SP,#-16*(20-7)] 143 STP X16,X17,[SP,#-16*(20-8)] 144 STP X18,X19,[SP,#-16*(20-9)] 145 STP X20,X21,[SP,#-16*(20-10)] 146 STP X22,X23,[SP,#-16*(20-11)] 147 STP X24,X25,[SP,#-16*(20-12)] 148 STP X26,X27,[SP,#-16*(20-13)] 149 STP X28,X29,[SP,#-16*(20-14)] 150 151 MRS X9,ELR_EL1 152 STP X9,X30,[SP,#-16*(20-15)] 153 154 MRS X9,SPSR_EL1 155 MRS X10,ESR_EL1 156 STP X9,X10,[SP,#-16*(20-16)] 157 158 MRS X9,SP_EL0 159 MOV X10,SP 160 STP X9,X10,[SP,#-16*(20-17)] 161 162 MRS X9,FAR_EL1 163 STP X9,XZR,[SP,#-16*(20-18)] 164 165 MRS X9,TTBR0_EL1 166 MRS X10,TTBR1_EL1 167 STP X9,X10,[SP,#-16*(20-19)] 168 169 SUB SP,SP,#16*20 170 MOV X0,SP 171 MOV X29,#0 172 BL trap 173 ADR X0,OUTSYN 174 B panic 175 176 .DATA 177 OUTSYN: 178 .ASCIZ "out of sync" 179 180 .TEXT 181 .GLOBL swtch 182 swtch: 183 LDP X9,X10,[X0,#16*19] 184 MSR TTBR0_EL1,X9 185 MSR TTBR1_EL1,X10 186 187 LDP X9,XZR,[X0,#16*18] 188 MSR FAR_EL1,X10 189 190 LDP X9,X10,[X0,#16*17] 191 MSR SP_EL0,X9 192 MOV SP,X10 193 194 LDP X9,X10,[X0,#16*16] 195 MSR ESR_EL1,X10 196 MSR SPSR_EL1,X9 197 198 LDP X9,X30,[X0,#16*15] 199 MSR ELR_EL1,X9 200 201 LDP X28,X29,[X0,#16*14] 202 LDP X26,X27,[X0,#16*13] 203 LDP X24,X25,[X0,#16*12] 204 LDP X22,X23,[X0,#16*11] 205 LDP X20,X21,[X0,#16*10] 206 LDP X18,X19,[X0,#16*9] 207 LDP X16,X17,[X0,#16*8] 208 LDP X14,X15,[X0,#16*7] 209 LDP X12,X13,[X0,#16*6] 210 LDP X10,X11,[X0,#16*5] 211 LDP X8,X9,[X0,#16*4] 212 LDP X6,X7,[X0,#16*3] 213 LDP X4,X5,[X0,#16*2] 214 LDP X2,X3,[X0,#16*1] 215 LDP X0,X1,[X0,#16*0] 216 217 ERET 218 219 .ALIGN 11 220 .GLOBL vectbl 221 vectbl: 222 // CURRENT EL WITH SP0 223 B EXCEPTION // SYNc 224 .ALIGN 7 225 B EXCEPTION // IRQ 226 .ALIGN 7 227 B EXCEPTION // FIQ 228 .ALIGN 7 229 B EXCEPTION // SERROR 230 231 // CURRENT EL WITH SPX 232 .ALIGN 7 233 B EXCEPTION // SYNC 234 .ALIGN 7 235 B EXCEPTION // IRQ 236 .ALIGN 7 237 B EXCEPTION // FIQ 238 .ALIGN 7 239 B EXCEPTION // SERROR 240 241 // LOWER EL USING AARCH64 242 .ALIGN 7 243 B EXCEPTION // SYNC 244 .ALIGN 7 245 B EXCEPTION // IRQ 246 .ALIGN 7 247 B EXCEPTION // FIQ 248 .ALIGN 7 249 B EXCEPTION // SERROR 250 251 // LOWER EL USING AARCH32 252 .ALIGN 7 253 B EXCEPTION // SYNC 254 .ALIGN 7 255 B EXCEPTION // IRQ 256 .ALIGN 7 257 B EXCEPTION // FIQ 258 .ALIGN 7 259 B EXCEPTION // SERROR