123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- /*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
- #include <ppc-asm.h>
- .text
- FUNC_START(core_busy_loop)
- stdu %r1, -168(%r1)
- std r14, 160(%r1)
- std r15, 152(%r1)
- std r16, 144(%r1)
- std r17, 136(%r1)
- std r18, 128(%r1)
- std r19, 120(%r1)
- std r20, 112(%r1)
- std r21, 104(%r1)
- std r22, 96(%r1)
- std r23, 88(%r1)
- std r24, 80(%r1)
- std r25, 72(%r1)
- std r26, 64(%r1)
- std r27, 56(%r1)
- std r28, 48(%r1)
- std r29, 40(%r1)
- std r30, 32(%r1)
- std r31, 24(%r1)
- li r3, 0x3030
- std r3, -96(%r1)
- li r4, 0x4040
- std r4, -104(%r1)
- li r5, 0x5050
- std r5, -112(%r1)
- li r6, 0x6060
- std r6, -120(%r1)
- li r7, 0x7070
- std r7, -128(%r1)
- li r8, 0x0808
- std r8, -136(%r1)
- li r9, 0x0909
- std r9, -144(%r1)
- li r10, 0x1010
- std r10, -152(%r1)
- li r11, 0x1111
- std r11, -160(%r1)
- li r14, 0x1414
- std r14, -168(%r1)
- li r15, 0x1515
- std r15, -176(%r1)
- li r16, 0x1616
- std r16, -184(%r1)
- li r17, 0x1717
- std r17, -192(%r1)
- li r18, 0x1818
- std r18, -200(%r1)
- li r19, 0x1919
- std r19, -208(%r1)
- li r20, 0x2020
- std r20, -216(%r1)
- li r21, 0x2121
- std r21, -224(%r1)
- li r22, 0x2222
- std r22, -232(%r1)
- li r23, 0x2323
- std r23, -240(%r1)
- li r24, 0x2424
- std r24, -248(%r1)
- li r25, 0x2525
- std r25, -256(%r1)
- li r26, 0x2626
- std r26, -264(%r1)
- li r27, 0x2727
- std r27, -272(%r1)
- li r28, 0x2828
- std r28, -280(%r1)
- li r29, 0x2929
- std r29, -288(%r1)
- li r30, 0x3030
- li r31, 0x3131
- li r3, 0
- 0: addi r3, r3, 1
- cmpwi r3, 100
- blt 0b
- /* Return 1 (fail) unless we get through all the checks */
- li r3, 1
- /* Check none of our registers have been corrupted */
- cmpwi r4, 0x4040
- bne 1f
- cmpwi r5, 0x5050
- bne 1f
- cmpwi r6, 0x6060
- bne 1f
- cmpwi r7, 0x7070
- bne 1f
- cmpwi r8, 0x0808
- bne 1f
- cmpwi r9, 0x0909
- bne 1f
- cmpwi r10, 0x1010
- bne 1f
- cmpwi r11, 0x1111
- bne 1f
- cmpwi r14, 0x1414
- bne 1f
- cmpwi r15, 0x1515
- bne 1f
- cmpwi r16, 0x1616
- bne 1f
- cmpwi r17, 0x1717
- bne 1f
- cmpwi r18, 0x1818
- bne 1f
- cmpwi r19, 0x1919
- bne 1f
- cmpwi r20, 0x2020
- bne 1f
- cmpwi r21, 0x2121
- bne 1f
- cmpwi r22, 0x2222
- bne 1f
- cmpwi r23, 0x2323
- bne 1f
- cmpwi r24, 0x2424
- bne 1f
- cmpwi r25, 0x2525
- bne 1f
- cmpwi r26, 0x2626
- bne 1f
- cmpwi r27, 0x2727
- bne 1f
- cmpwi r28, 0x2828
- bne 1f
- cmpwi r29, 0x2929
- bne 1f
- cmpwi r30, 0x3030
- bne 1f
- cmpwi r31, 0x3131
- bne 1f
- /* Load junk into all our registers before we reload them from the stack. */
- li r3, 0xde
- li r4, 0xad
- li r5, 0xbe
- li r6, 0xef
- li r7, 0xde
- li r8, 0xad
- li r9, 0xbe
- li r10, 0xef
- li r11, 0xde
- li r14, 0xad
- li r15, 0xbe
- li r16, 0xef
- li r17, 0xde
- li r18, 0xad
- li r19, 0xbe
- li r20, 0xef
- li r21, 0xde
- li r22, 0xad
- li r23, 0xbe
- li r24, 0xef
- li r25, 0xde
- li r26, 0xad
- li r27, 0xbe
- li r28, 0xef
- li r29, 0xdd
- ld r3, -96(%r1)
- cmpwi r3, 0x3030
- bne 1f
- ld r4, -104(%r1)
- cmpwi r4, 0x4040
- bne 1f
- ld r5, -112(%r1)
- cmpwi r5, 0x5050
- bne 1f
- ld r6, -120(%r1)
- cmpwi r6, 0x6060
- bne 1f
- ld r7, -128(%r1)
- cmpwi r7, 0x7070
- bne 1f
- ld r8, -136(%r1)
- cmpwi r8, 0x0808
- bne 1f
- ld r9, -144(%r1)
- cmpwi r9, 0x0909
- bne 1f
- ld r10, -152(%r1)
- cmpwi r10, 0x1010
- bne 1f
- ld r11, -160(%r1)
- cmpwi r11, 0x1111
- bne 1f
- ld r14, -168(%r1)
- cmpwi r14, 0x1414
- bne 1f
- ld r15, -176(%r1)
- cmpwi r15, 0x1515
- bne 1f
- ld r16, -184(%r1)
- cmpwi r16, 0x1616
- bne 1f
- ld r17, -192(%r1)
- cmpwi r17, 0x1717
- bne 1f
- ld r18, -200(%r1)
- cmpwi r18, 0x1818
- bne 1f
- ld r19, -208(%r1)
- cmpwi r19, 0x1919
- bne 1f
- ld r20, -216(%r1)
- cmpwi r20, 0x2020
- bne 1f
- ld r21, -224(%r1)
- cmpwi r21, 0x2121
- bne 1f
- ld r22, -232(%r1)
- cmpwi r22, 0x2222
- bne 1f
- ld r23, -240(%r1)
- cmpwi r23, 0x2323
- bne 1f
- ld r24, -248(%r1)
- cmpwi r24, 0x2424
- bne 1f
- ld r25, -256(%r1)
- cmpwi r25, 0x2525
- bne 1f
- ld r26, -264(%r1)
- cmpwi r26, 0x2626
- bne 1f
- ld r27, -272(%r1)
- cmpwi r27, 0x2727
- bne 1f
- ld r28, -280(%r1)
- cmpwi r28, 0x2828
- bne 1f
- ld r29, -288(%r1)
- cmpwi r29, 0x2929
- bne 1f
- /* Load 0 (success) to return */
- li r3, 0
- 1: ld r14, 160(%r1)
- ld r15, 152(%r1)
- ld r16, 144(%r1)
- ld r17, 136(%r1)
- ld r18, 128(%r1)
- ld r19, 120(%r1)
- ld r20, 112(%r1)
- ld r21, 104(%r1)
- ld r22, 96(%r1)
- ld r23, 88(%r1)
- ld r24, 80(%r1)
- ld r25, 72(%r1)
- ld r26, 64(%r1)
- ld r27, 56(%r1)
- ld r28, 48(%r1)
- ld r29, 40(%r1)
- ld r30, 32(%r1)
- ld r31, 24(%r1)
- addi %r1, %r1, 168
- blr
|