xref: /linux/tools/testing/selftests/powerpc/include/fpu_asm.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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