Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|---|
2 | /* |
3 | * Copyright 2016, Cyril Bur, IBM Corp. |
4 | */ |
5 | |
6 | #ifndef _SELFTESTS_POWERPC_FPU_ASM_H |
7 | #define _SELFTESTS_POWERPC_FPU_ASM_H |
8 | #include "basic_asm.h" |
9 | |
10 | #define PUSH_FPU(stack_size) \ |
11 | stfd f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \ |
12 | stfd f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \ |
13 | stfd f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \ |
14 | stfd f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \ |
15 | stfd f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \ |
16 | stfd f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \ |
17 | stfd f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \ |
18 | stfd f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \ |
19 | stfd f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \ |
20 | stfd f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \ |
21 | stfd f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \ |
22 | stfd f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \ |
23 | stfd f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \ |
24 | stfd f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \ |
25 | stfd f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \ |
26 | stfd f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \ |
27 | stfd f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \ |
28 | stfd f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1); |
29 | |
30 | #define POP_FPU(stack_size) \ |
31 | lfd f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \ |
32 | lfd f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \ |
33 | lfd f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \ |
34 | lfd f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \ |
35 | lfd f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \ |
36 | lfd f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \ |
37 | lfd f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \ |
38 | lfd f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \ |
39 | lfd f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \ |
40 | lfd f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \ |
41 | lfd f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \ |
42 | lfd f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \ |
43 | lfd f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \ |
44 | lfd f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \ |
45 | lfd f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \ |
46 | lfd f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \ |
47 | lfd f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \ |
48 | lfd f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1); |
49 | |
50 | /* |
51 | * Careful calling this, it will 'clobber' fpu (by design) |
52 | * Don't call this from C |
53 | */ |
54 | FUNC_START(load_fpu) |
55 | lfd f14,0(r3) |
56 | lfd f15,8(r3) |
57 | lfd f16,16(r3) |
58 | lfd f17,24(r3) |
59 | lfd f18,32(r3) |
60 | lfd f19,40(r3) |
61 | lfd f20,48(r3) |
62 | lfd f21,56(r3) |
63 | lfd f22,64(r3) |
64 | lfd f23,72(r3) |
65 | lfd f24,80(r3) |
66 | lfd f25,88(r3) |
67 | lfd f26,96(r3) |
68 | lfd f27,104(r3) |
69 | lfd f28,112(r3) |
70 | lfd f29,120(r3) |
71 | lfd f30,128(r3) |
72 | lfd f31,136(r3) |
73 | blr |
74 | FUNC_END(load_fpu) |
75 | |
76 | #endif /* _SELFTESTS_POWERPC_FPU_ASM_H */ |
77 |
Warning: This file is not a C or C++ file. It does not have highlighting.