272 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
						|
/*
 | 
						|
 * Copyright 2014, Michael Ellerman, IBM Corp.
 | 
						|
 */
 | 
						|
 | 
						|
#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
 |