brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 070e844 Raw
53 lines · plain
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * test helper assembly functions4 *5 * Copyright (C) 2016 Simon Guo, IBM Corporation.6 * Copyright 2022 Michael Ellerman, IBM Corporation.7 */8#include "basic_asm.h"9 10#define GPR_SIZE	__SIZEOF_LONG__11#define FIRST_GPR	1412#define NUM_GPRS	(32 - FIRST_GPR)13#define STACK_SIZE	(NUM_GPRS * GPR_SIZE)14 15// gpr_child_loop(int *read_flag, int *write_flag,16//		  unsigned long *gpr_buf, double *fpr_buf);17FUNC_START(gpr_child_loop)18	// r3 = read_flag19	// r4 = write_flag20	// r5 = gpr_buf21	// r6 = fpr_buf22	PUSH_BASIC_STACK(STACK_SIZE)23 24	// Save non-volatile GPRs25	OP_REGS PPC_STL, GPR_SIZE, FIRST_GPR, 31, %r1, STACK_FRAME_LOCAL(0, 0), FIRST_GPR26 27	// Load GPRs with expected values28	OP_REGS PPC_LL, GPR_SIZE, FIRST_GPR, 31, r5, 0, FIRST_GPR29 30	// Load FPRs with expected values31	OP_REGS lfd, 8, 0, 31, r632 33	// Signal to parent that we're ready34	li	r0, 135	stw	r0, 0(r4)36 37	// Wait for parent to finish381:	lwz	r0, 0(r3)39	cmpwi	r0, 040	beq	1b	// Loop while flag is zero41 42	// Save GPRs back to caller buffer43	OP_REGS PPC_STL, GPR_SIZE, FIRST_GPR, 31, r5, 0, FIRST_GPR44 45	// Save FPRs46	OP_REGS stfd, 8, 0, 31, r647 48	// Reload non-volatile GPRs49	OP_REGS PPC_LL, GPR_SIZE, FIRST_GPR, 31, %r1, STACK_FRAME_LOCAL(0, 0), FIRST_GPR50 51	POP_BASIC_STACK(STACK_SIZE)52	blr53