Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright 2016, Cyril Bur, IBM Corp.
0004  */
0005 
0006 #ifndef _SELFTESTS_POWERPC_FPU_ASM_H
0007 #define _SELFTESTS_POWERPC_FPU_ASM_H
0008 #include "basic_asm.h"
0009 
0010 #define PUSH_FPU(stack_size) \
0011     stfd    f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \
0012     stfd    f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \
0013     stfd    f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \
0014     stfd    f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \
0015     stfd    f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \
0016     stfd    f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \
0017     stfd    f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \
0018     stfd    f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \
0019     stfd    f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \
0020     stfd    f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \
0021     stfd    f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \
0022     stfd    f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \
0023     stfd    f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \
0024     stfd    f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \
0025     stfd    f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \
0026     stfd    f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \
0027     stfd    f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \
0028     stfd    f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1);
0029 
0030 #define POP_FPU(stack_size) \
0031     lfd f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \
0032     lfd f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \
0033     lfd f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \
0034     lfd f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \
0035     lfd f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \
0036     lfd f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \
0037     lfd f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \
0038     lfd f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \
0039     lfd f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \
0040     lfd f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \
0041     lfd f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \
0042     lfd f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \
0043     lfd f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \
0044     lfd f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \
0045     lfd f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \
0046     lfd f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \
0047     lfd f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \
0048     lfd f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1);
0049 
0050 /*
0051  * Careful calling this, it will 'clobber' fpu (by design)
0052  * Don't call this from C
0053  */
0054 FUNC_START(load_fpu)
0055     lfd f14,0(r3)
0056     lfd f15,8(r3)
0057     lfd f16,16(r3)
0058     lfd f17,24(r3)
0059     lfd f18,32(r3)
0060     lfd f19,40(r3)
0061     lfd f20,48(r3)
0062     lfd f21,56(r3)
0063     lfd f22,64(r3)
0064     lfd f23,72(r3)
0065     lfd f24,80(r3)
0066     lfd f25,88(r3)
0067     lfd f26,96(r3)
0068     lfd f27,104(r3)
0069     lfd f28,112(r3)
0070     lfd f29,120(r3)
0071     lfd f30,128(r3)
0072     lfd f31,136(r3)
0073     blr
0074 FUNC_END(load_fpu)
0075 
0076 #endif /* _SELFTESTS_POWERPC_FPU_ASM_H */