1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 215ec3997SSimon Guo /* 315ec3997SSimon Guo * Copyright 2016, Cyril Bur, IBM Corp. 415ec3997SSimon Guo */ 515ec3997SSimon Guo 615ec3997SSimon Guo #ifndef _SELFTESTS_POWERPC_FPU_ASM_H 715ec3997SSimon Guo #define _SELFTESTS_POWERPC_FPU_ASM_H 815ec3997SSimon Guo #include "basic_asm.h" 915ec3997SSimon Guo 1015ec3997SSimon Guo #define PUSH_FPU(stack_size) \ 1115ec3997SSimon Guo stfd f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \ 1215ec3997SSimon Guo stfd f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \ 1315ec3997SSimon Guo stfd f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \ 1415ec3997SSimon Guo stfd f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \ 1515ec3997SSimon Guo stfd f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \ 1615ec3997SSimon Guo stfd f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \ 1715ec3997SSimon Guo stfd f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \ 1815ec3997SSimon Guo stfd f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \ 1915ec3997SSimon Guo stfd f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \ 2015ec3997SSimon Guo stfd f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \ 2115ec3997SSimon Guo stfd f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \ 2215ec3997SSimon Guo stfd f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \ 2315ec3997SSimon Guo stfd f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \ 2415ec3997SSimon Guo stfd f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \ 2515ec3997SSimon Guo stfd f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \ 2615ec3997SSimon Guo stfd f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \ 2715ec3997SSimon Guo stfd f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \ 2815ec3997SSimon Guo stfd f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1); 2915ec3997SSimon Guo 3015ec3997SSimon Guo #define POP_FPU(stack_size) \ 3115ec3997SSimon Guo lfd f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \ 3215ec3997SSimon Guo lfd f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \ 3315ec3997SSimon Guo lfd f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \ 3415ec3997SSimon Guo lfd f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \ 3515ec3997SSimon Guo lfd f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \ 3615ec3997SSimon Guo lfd f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \ 3715ec3997SSimon Guo lfd f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \ 3815ec3997SSimon Guo lfd f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \ 3915ec3997SSimon Guo lfd f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \ 4015ec3997SSimon Guo lfd f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \ 4115ec3997SSimon Guo lfd f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \ 4215ec3997SSimon Guo lfd f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \ 4315ec3997SSimon Guo lfd f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \ 4415ec3997SSimon Guo lfd f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \ 4515ec3997SSimon Guo lfd f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \ 4615ec3997SSimon Guo lfd f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \ 4715ec3997SSimon Guo lfd f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \ 4815ec3997SSimon Guo lfd f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1); 4915ec3997SSimon Guo 5015ec3997SSimon Guo /* 5115ec3997SSimon Guo * Careful calling this, it will 'clobber' fpu (by design) 5215ec3997SSimon Guo * Don't call this from C 5315ec3997SSimon Guo */ 5415ec3997SSimon Guo FUNC_START(load_fpu) 5515ec3997SSimon Guo lfd f14,0(r3) 5615ec3997SSimon Guo lfd f15,8(r3) 5715ec3997SSimon Guo lfd f16,16(r3) 5815ec3997SSimon Guo lfd f17,24(r3) 5915ec3997SSimon Guo lfd f18,32(r3) 6015ec3997SSimon Guo lfd f19,40(r3) 6115ec3997SSimon Guo lfd f20,48(r3) 6215ec3997SSimon Guo lfd f21,56(r3) 6315ec3997SSimon Guo lfd f22,64(r3) 6415ec3997SSimon Guo lfd f23,72(r3) 6515ec3997SSimon Guo lfd f24,80(r3) 6615ec3997SSimon Guo lfd f25,88(r3) 6715ec3997SSimon Guo lfd f26,96(r3) 6815ec3997SSimon Guo lfd f27,104(r3) 6915ec3997SSimon Guo lfd f28,112(r3) 7015ec3997SSimon Guo lfd f29,120(r3) 7115ec3997SSimon Guo lfd f30,128(r3) 7215ec3997SSimon Guo lfd f31,136(r3) 7315ec3997SSimon Guo blr 7415ec3997SSimon Guo FUNC_END(load_fpu) 7515ec3997SSimon Guo 7615ec3997SSimon Guo #endif /* _SELFTESTS_POWERPC_FPU_ASM_H */ 77