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