busy_loop.S 4.2 KB

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