162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2016, Cyril Bur, IBM Corp. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef _SELFTESTS_POWERPC_GPR_ASM_H 762306a36Sopenharmony_ci#define _SELFTESTS_POWERPC_GPR_ASM_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "basic_asm.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define __PUSH_NVREGS(top_pos); \ 1262306a36Sopenharmony_ci std r31,(top_pos)(%r1); \ 1362306a36Sopenharmony_ci std r30,(top_pos - 8)(%r1); \ 1462306a36Sopenharmony_ci std r29,(top_pos - 16)(%r1); \ 1562306a36Sopenharmony_ci std r28,(top_pos - 24)(%r1); \ 1662306a36Sopenharmony_ci std r27,(top_pos - 32)(%r1); \ 1762306a36Sopenharmony_ci std r26,(top_pos - 40)(%r1); \ 1862306a36Sopenharmony_ci std r25,(top_pos - 48)(%r1); \ 1962306a36Sopenharmony_ci std r24,(top_pos - 56)(%r1); \ 2062306a36Sopenharmony_ci std r23,(top_pos - 64)(%r1); \ 2162306a36Sopenharmony_ci std r22,(top_pos - 72)(%r1); \ 2262306a36Sopenharmony_ci std r21,(top_pos - 80)(%r1); \ 2362306a36Sopenharmony_ci std r20,(top_pos - 88)(%r1); \ 2462306a36Sopenharmony_ci std r19,(top_pos - 96)(%r1); \ 2562306a36Sopenharmony_ci std r18,(top_pos - 104)(%r1); \ 2662306a36Sopenharmony_ci std r17,(top_pos - 112)(%r1); \ 2762306a36Sopenharmony_ci std r16,(top_pos - 120)(%r1); \ 2862306a36Sopenharmony_ci std r15,(top_pos - 128)(%r1); \ 2962306a36Sopenharmony_ci std r14,(top_pos - 136)(%r1) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define __POP_NVREGS(top_pos); \ 3262306a36Sopenharmony_ci ld r31,(top_pos)(%r1); \ 3362306a36Sopenharmony_ci ld r30,(top_pos - 8)(%r1); \ 3462306a36Sopenharmony_ci ld r29,(top_pos - 16)(%r1); \ 3562306a36Sopenharmony_ci ld r28,(top_pos - 24)(%r1); \ 3662306a36Sopenharmony_ci ld r27,(top_pos - 32)(%r1); \ 3762306a36Sopenharmony_ci ld r26,(top_pos - 40)(%r1); \ 3862306a36Sopenharmony_ci ld r25,(top_pos - 48)(%r1); \ 3962306a36Sopenharmony_ci ld r24,(top_pos - 56)(%r1); \ 4062306a36Sopenharmony_ci ld r23,(top_pos - 64)(%r1); \ 4162306a36Sopenharmony_ci ld r22,(top_pos - 72)(%r1); \ 4262306a36Sopenharmony_ci ld r21,(top_pos - 80)(%r1); \ 4362306a36Sopenharmony_ci ld r20,(top_pos - 88)(%r1); \ 4462306a36Sopenharmony_ci ld r19,(top_pos - 96)(%r1); \ 4562306a36Sopenharmony_ci ld r18,(top_pos - 104)(%r1); \ 4662306a36Sopenharmony_ci ld r17,(top_pos - 112)(%r1); \ 4762306a36Sopenharmony_ci ld r16,(top_pos - 120)(%r1); \ 4862306a36Sopenharmony_ci ld r15,(top_pos - 128)(%r1); \ 4962306a36Sopenharmony_ci ld r14,(top_pos - 136)(%r1) 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci#define PUSH_NVREGS(stack_size) \ 5262306a36Sopenharmony_ci __PUSH_NVREGS(stack_size + STACK_FRAME_MIN_SIZE) 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* 18 NV FPU REGS */ 5562306a36Sopenharmony_ci#define PUSH_NVREGS_BELOW_FPU(stack_size) \ 5662306a36Sopenharmony_ci __PUSH_NVREGS(stack_size + STACK_FRAME_MIN_SIZE - (18 * 8)) 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define POP_NVREGS(stack_size) \ 5962306a36Sopenharmony_ci __POP_NVREGS(stack_size + STACK_FRAME_MIN_SIZE) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* 18 NV FPU REGS */ 6262306a36Sopenharmony_ci#define POP_NVREGS_BELOW_FPU(stack_size) \ 6362306a36Sopenharmony_ci __POP_NVREGS(stack_size + STACK_FRAME_MIN_SIZE - (18 * 8)) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci/* 6662306a36Sopenharmony_ci * Careful calling this, it will 'clobber' NVGPRs (by design) 6762306a36Sopenharmony_ci * Don't call this from C 6862306a36Sopenharmony_ci */ 6962306a36Sopenharmony_ciFUNC_START(load_gpr) 7062306a36Sopenharmony_ci ld r14,0(r3) 7162306a36Sopenharmony_ci ld r15,8(r3) 7262306a36Sopenharmony_ci ld r16,16(r3) 7362306a36Sopenharmony_ci ld r17,24(r3) 7462306a36Sopenharmony_ci ld r18,32(r3) 7562306a36Sopenharmony_ci ld r19,40(r3) 7662306a36Sopenharmony_ci ld r20,48(r3) 7762306a36Sopenharmony_ci ld r21,56(r3) 7862306a36Sopenharmony_ci ld r22,64(r3) 7962306a36Sopenharmony_ci ld r23,72(r3) 8062306a36Sopenharmony_ci ld r24,80(r3) 8162306a36Sopenharmony_ci ld r25,88(r3) 8262306a36Sopenharmony_ci ld r26,96(r3) 8362306a36Sopenharmony_ci ld r27,104(r3) 8462306a36Sopenharmony_ci ld r28,112(r3) 8562306a36Sopenharmony_ci ld r29,120(r3) 8662306a36Sopenharmony_ci ld r30,128(r3) 8762306a36Sopenharmony_ci ld r31,136(r3) 8862306a36Sopenharmony_ci blr 8962306a36Sopenharmony_ciFUNC_END(load_gpr) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci#endif /* _SELFTESTS_POWERPC_GPR_ASM_H */ 93