1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * test helper assembly functions 4 * 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 14 12 #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); 17 FUNC_START(gpr_child_loop) 18 // r3 = read_flag 19 // r4 = write_flag 20 // r5 = gpr_buf 21 // r6 = fpr_buf 22 PUSH_BASIC_STACK(STACK_SIZE) 23 24 // Save non-volatile GPRs 25 OP_REGS PPC_STL, GPR_SIZE, FIRST_GPR, 31, %r1, STACK_FRAME_LOCAL(0, 0), FIRST_GPR 26 27 // Load GPRs with expected values 28 OP_REGS PPC_LL, GPR_SIZE, FIRST_GPR, 31, r5, 0, FIRST_GPR 29 30 // Load FPRs with expected values 31 OP_REGS lfd, 8, 0, 31, r6 32 33 // Signal to parent that we're ready 34 li r0, 1 35 stw r0, 0(r4) 36 37 // Wait for parent to finish 38 1: lwz r0, 0(r3) 39 cmpwi r0, 0 40 beq 1b // Loop while flag is zero 41 42 // Save GPRs back to caller buffer 43 OP_REGS PPC_STL, GPR_SIZE, FIRST_GPR, 31, r5, 0, FIRST_GPR 44 45 // Save FPRs 46 OP_REGS stfd, 8, 0, 31, r6 47 48 // Reload non-volatile GPRs 49 OP_REGS PPC_LL, GPR_SIZE, FIRST_GPR, 31, %r1, STACK_FRAME_LOCAL(0, 0), FIRST_GPR 50 51 POP_BASIC_STACK(STACK_SIZE) 52 blr
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.