1/* 2 * Copyright 2014, Michael Ellerman, IBM Corp. 3 * Licensed under GPLv2. 4 */ 5 6#include <ppc-asm.h> 7 8 .text 9 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, 0x3030 32 std r3, -96(%r1) 33 li r4, 0x4040 34 std r4, -104(%r1) 35 li r5, 0x5050 36 std r5, -112(%r1) 37 li r6, 0x6060 38 std r6, -120(%r1) 39 li r7, 0x7070 40 std r7, -128(%r1) 41 li r8, 0x0808 42 std r8, -136(%r1) 43 li r9, 0x0909 44 std r9, -144(%r1) 45 li r10, 0x1010 46 std r10, -152(%r1) 47 li r11, 0x1111 48 std r11, -160(%r1) 49 li r14, 0x1414 50 std r14, -168(%r1) 51 li r15, 0x1515 52 std r15, -176(%r1) 53 li r16, 0x1616 54 std r16, -184(%r1) 55 li r17, 0x1717 56 std r17, -192(%r1) 57 li r18, 0x1818 58 std r18, -200(%r1) 59 li r19, 0x1919 60 std r19, -208(%r1) 61 li r20, 0x2020 62 std r20, -216(%r1) 63 li r21, 0x2121 64 std r21, -224(%r1) 65 li r22, 0x2222 66 std r22, -232(%r1) 67 li r23, 0x2323 68 std r23, -240(%r1) 69 li r24, 0x2424 70 std r24, -248(%r1) 71 li r25, 0x2525 72 std r25, -256(%r1) 73 li r26, 0x2626 74 std r26, -264(%r1) 75 li r27, 0x2727 76 std r27, -272(%r1) 77 li r28, 0x2828 78 std r28, -280(%r1) 79 li r29, 0x2929 80 std r29, -288(%r1) 81 li r30, 0x3030 82 li r31, 0x3131 83 84 li r3, 0 850: addi r3, r3, 1 86 cmpwi r3, 100 87 blt 0b 88 89 /* Return 1 (fail) unless we get through all the checks */ 90 li r3, 1 91 92 /* Check none of our registers have been corrupted */ 93 cmpwi r4, 0x4040 94 bne 1f 95 cmpwi r5, 0x5050 96 bne 1f 97 cmpwi r6, 0x6060 98 bne 1f 99 cmpwi r7, 0x7070 100 bne 1f 101 cmpwi r8, 0x0808 102 bne 1f 103 cmpwi r9, 0x0909 104 bne 1f 105 cmpwi r10, 0x1010 106 bne 1f 107 cmpwi r11, 0x1111 108 bne 1f 109 cmpwi r14, 0x1414 110 bne 1f 111 cmpwi r15, 0x1515 112 bne 1f 113 cmpwi r16, 0x1616 114 bne 1f 115 cmpwi r17, 0x1717 116 bne 1f 117 cmpwi r18, 0x1818 118 bne 1f 119 cmpwi r19, 0x1919 120 bne 1f 121 cmpwi r20, 0x2020 122 bne 1f 123 cmpwi r21, 0x2121 124 bne 1f 125 cmpwi r22, 0x2222 126 bne 1f 127 cmpwi r23, 0x2323 128 bne 1f 129 cmpwi r24, 0x2424 130 bne 1f 131 cmpwi r25, 0x2525 132 bne 1f 133 cmpwi r26, 0x2626 134 bne 1f 135 cmpwi r27, 0x2727 136 bne 1f 137 cmpwi r28, 0x2828 138 bne 1f 139 cmpwi r29, 0x2929 140 bne 1f 141 cmpwi r30, 0x3030 142 bne 1f 143 cmpwi r31, 0x3131 144 bne 1f 145 146 /* Load junk into all our registers before we reload them from the stack. */ 147 li r3, 0xde 148 li r4, 0xad 149 li r5, 0xbe 150 li r6, 0xef 151 li r7, 0xde 152 li r8, 0xad 153 li r9, 0xbe 154 li r10, 0xef 155 li r11, 0xde 156 li r14, 0xad 157 li r15, 0xbe 158 li r16, 0xef 159 li r17, 0xde 160 li r18, 0xad 161 li r19, 0xbe 162 li r20, 0xef 163 li r21, 0xde 164 li r22, 0xad 165 li r23, 0xbe 166 li r24, 0xef 167 li r25, 0xde 168 li r26, 0xad 169 li r27, 0xbe 170 li r28, 0xef 171 li r29, 0xdd 172 173 ld r3, -96(%r1) 174 cmpwi r3, 0x3030 175 bne 1f 176 ld r4, -104(%r1) 177 cmpwi r4, 0x4040 178 bne 1f 179 ld r5, -112(%r1) 180 cmpwi r5, 0x5050 181 bne 1f 182 ld r6, -120(%r1) 183 cmpwi r6, 0x6060 184 bne 1f 185 ld r7, -128(%r1) 186 cmpwi r7, 0x7070 187 bne 1f 188 ld r8, -136(%r1) 189 cmpwi r8, 0x0808 190 bne 1f 191 ld r9, -144(%r1) 192 cmpwi r9, 0x0909 193 bne 1f 194 ld r10, -152(%r1) 195 cmpwi r10, 0x1010 196 bne 1f 197 ld r11, -160(%r1) 198 cmpwi r11, 0x1111 199 bne 1f 200 ld r14, -168(%r1) 201 cmpwi r14, 0x1414 202 bne 1f 203 ld r15, -176(%r1) 204 cmpwi r15, 0x1515 205 bne 1f 206 ld r16, -184(%r1) 207 cmpwi r16, 0x1616 208 bne 1f 209 ld r17, -192(%r1) 210 cmpwi r17, 0x1717 211 bne 1f 212 ld r18, -200(%r1) 213 cmpwi r18, 0x1818 214 bne 1f 215 ld r19, -208(%r1) 216 cmpwi r19, 0x1919 217 bne 1f 218 ld r20, -216(%r1) 219 cmpwi r20, 0x2020 220 bne 1f 221 ld r21, -224(%r1) 222 cmpwi r21, 0x2121 223 bne 1f 224 ld r22, -232(%r1) 225 cmpwi r22, 0x2222 226 bne 1f 227 ld r23, -240(%r1) 228 cmpwi r23, 0x2323 229 bne 1f 230 ld r24, -248(%r1) 231 cmpwi r24, 0x2424 232 bne 1f 233 ld r25, -256(%r1) 234 cmpwi r25, 0x2525 235 bne 1f 236 ld r26, -264(%r1) 237 cmpwi r26, 0x2626 238 bne 1f 239 ld r27, -272(%r1) 240 cmpwi r27, 0x2727 241 bne 1f 242 ld r28, -280(%r1) 243 cmpwi r28, 0x2828 244 bne 1f 245 ld r29, -288(%r1) 246 cmpwi r29, 0x2929 247 bne 1f 248 249 /* Load 0 (success) to return */ 250 li r3, 0 251 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, 168 271 blr 272