272 lines · plain
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2014, Michael Ellerman, IBM Corp.4 */5 6#include <ppc-asm.h>7 8 .text9 10FUNC_START(core_busy_loop)11 stdu %r1, -168(%r1)12 std r14, 160(%r1)13 std r15, 152(%r1)14 std r16, 144(%r1)15 std r17, 136(%r1)16 std r18, 128(%r1)17 std r19, 120(%r1)18 std r20, 112(%r1)19 std r21, 104(%r1)20 std r22, 96(%r1)21 std r23, 88(%r1)22 std r24, 80(%r1)23 std r25, 72(%r1)24 std r26, 64(%r1)25 std r27, 56(%r1)26 std r28, 48(%r1)27 std r29, 40(%r1)28 std r30, 32(%r1)29 std r31, 24(%r1)30 31 li r3, 0x303032 std r3, -96(%r1)33 li r4, 0x404034 std r4, -104(%r1)35 li r5, 0x505036 std r5, -112(%r1)37 li r6, 0x606038 std r6, -120(%r1)39 li r7, 0x707040 std r7, -128(%r1)41 li r8, 0x080842 std r8, -136(%r1)43 li r9, 0x090944 std r9, -144(%r1)45 li r10, 0x101046 std r10, -152(%r1)47 li r11, 0x111148 std r11, -160(%r1)49 li r14, 0x141450 std r14, -168(%r1)51 li r15, 0x151552 std r15, -176(%r1)53 li r16, 0x161654 std r16, -184(%r1)55 li r17, 0x171756 std r17, -192(%r1)57 li r18, 0x181858 std r18, -200(%r1)59 li r19, 0x191960 std r19, -208(%r1)61 li r20, 0x202062 std r20, -216(%r1)63 li r21, 0x212164 std r21, -224(%r1)65 li r22, 0x222266 std r22, -232(%r1)67 li r23, 0x232368 std r23, -240(%r1)69 li r24, 0x242470 std r24, -248(%r1)71 li r25, 0x252572 std r25, -256(%r1)73 li r26, 0x262674 std r26, -264(%r1)75 li r27, 0x272776 std r27, -272(%r1)77 li r28, 0x282878 std r28, -280(%r1)79 li r29, 0x292980 std r29, -288(%r1)81 li r30, 0x303082 li r31, 0x313183 84 li r3, 0850: addi r3, r3, 186 cmpwi r3, 10087 blt 0b88 89 /* Return 1 (fail) unless we get through all the checks */90 li r3, 191 92 /* Check none of our registers have been corrupted */93 cmpwi r4, 0x404094 bne 1f95 cmpwi r5, 0x505096 bne 1f97 cmpwi r6, 0x606098 bne 1f99 cmpwi r7, 0x7070100 bne 1f101 cmpwi r8, 0x0808102 bne 1f103 cmpwi r9, 0x0909104 bne 1f105 cmpwi r10, 0x1010106 bne 1f107 cmpwi r11, 0x1111108 bne 1f109 cmpwi r14, 0x1414110 bne 1f111 cmpwi r15, 0x1515112 bne 1f113 cmpwi r16, 0x1616114 bne 1f115 cmpwi r17, 0x1717116 bne 1f117 cmpwi r18, 0x1818118 bne 1f119 cmpwi r19, 0x1919120 bne 1f121 cmpwi r20, 0x2020122 bne 1f123 cmpwi r21, 0x2121124 bne 1f125 cmpwi r22, 0x2222126 bne 1f127 cmpwi r23, 0x2323128 bne 1f129 cmpwi r24, 0x2424130 bne 1f131 cmpwi r25, 0x2525132 bne 1f133 cmpwi r26, 0x2626134 bne 1f135 cmpwi r27, 0x2727136 bne 1f137 cmpwi r28, 0x2828138 bne 1f139 cmpwi r29, 0x2929140 bne 1f141 cmpwi r30, 0x3030142 bne 1f143 cmpwi r31, 0x3131144 bne 1f145 146 /* Load junk into all our registers before we reload them from the stack. */147 li r3, 0xde148 li r4, 0xad149 li r5, 0xbe150 li r6, 0xef151 li r7, 0xde152 li r8, 0xad153 li r9, 0xbe154 li r10, 0xef155 li r11, 0xde156 li r14, 0xad157 li r15, 0xbe158 li r16, 0xef159 li r17, 0xde160 li r18, 0xad161 li r19, 0xbe162 li r20, 0xef163 li r21, 0xde164 li r22, 0xad165 li r23, 0xbe166 li r24, 0xef167 li r25, 0xde168 li r26, 0xad169 li r27, 0xbe170 li r28, 0xef171 li r29, 0xdd172 173 ld r3, -96(%r1)174 cmpwi r3, 0x3030175 bne 1f176 ld r4, -104(%r1)177 cmpwi r4, 0x4040178 bne 1f179 ld r5, -112(%r1)180 cmpwi r5, 0x5050181 bne 1f182 ld r6, -120(%r1)183 cmpwi r6, 0x6060184 bne 1f185 ld r7, -128(%r1)186 cmpwi r7, 0x7070187 bne 1f188 ld r8, -136(%r1)189 cmpwi r8, 0x0808190 bne 1f191 ld r9, -144(%r1)192 cmpwi r9, 0x0909193 bne 1f194 ld r10, -152(%r1)195 cmpwi r10, 0x1010196 bne 1f197 ld r11, -160(%r1)198 cmpwi r11, 0x1111199 bne 1f200 ld r14, -168(%r1)201 cmpwi r14, 0x1414202 bne 1f203 ld r15, -176(%r1)204 cmpwi r15, 0x1515205 bne 1f206 ld r16, -184(%r1)207 cmpwi r16, 0x1616208 bne 1f209 ld r17, -192(%r1)210 cmpwi r17, 0x1717211 bne 1f212 ld r18, -200(%r1)213 cmpwi r18, 0x1818214 bne 1f215 ld r19, -208(%r1)216 cmpwi r19, 0x1919217 bne 1f218 ld r20, -216(%r1)219 cmpwi r20, 0x2020220 bne 1f221 ld r21, -224(%r1)222 cmpwi r21, 0x2121223 bne 1f224 ld r22, -232(%r1)225 cmpwi r22, 0x2222226 bne 1f227 ld r23, -240(%r1)228 cmpwi r23, 0x2323229 bne 1f230 ld r24, -248(%r1)231 cmpwi r24, 0x2424232 bne 1f233 ld r25, -256(%r1)234 cmpwi r25, 0x2525235 bne 1f236 ld r26, -264(%r1)237 cmpwi r26, 0x2626238 bne 1f239 ld r27, -272(%r1)240 cmpwi r27, 0x2727241 bne 1f242 ld r28, -280(%r1)243 cmpwi r28, 0x2828244 bne 1f245 ld r29, -288(%r1)246 cmpwi r29, 0x2929247 bne 1f248 249 /* Load 0 (success) to return */250 li r3, 0251 2521: ld r14, 160(%r1)253 ld r15, 152(%r1)254 ld r16, 144(%r1)255 ld r17, 136(%r1)256 ld r18, 128(%r1)257 ld r19, 120(%r1)258 ld r20, 112(%r1)259 ld r21, 104(%r1)260 ld r22, 96(%r1)261 ld r23, 88(%r1)262 ld r24, 80(%r1)263 ld r25, 72(%r1)264 ld r26, 64(%r1)265 ld r27, 56(%r1)266 ld r28, 48(%r1)267 ld r29, 40(%r1)268 ld r30, 32(%r1)269 ld r31, 24(%r1)270 addi %r1, %r1, 168271 blr272