Merge tag 'drm-misc-next-2021-07-16' of git://anongit.freedesktop.org/drm/drm-misc...
[linux-2.6-microblaze.git] / arch / riscv / kernel / fpu.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2012 Regents of the University of California
4  * Copyright (C) 2017 SiFive
5  *
6  *   This program is free software; you can redistribute it and/or
7  *   modify it under the terms of the GNU General Public License
8  *   as published by the Free Software Foundation, version 2.
9  *
10  *   This program is distributed in the hope that it will be useful,
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *   GNU General Public License for more details.
14  */
15
16 #include <linux/linkage.h>
17
18 #include <asm/asm.h>
19 #include <asm/csr.h>
20 #include <asm/asm-offsets.h>
21
22 ENTRY(__fstate_save)
23         li  a2,  TASK_THREAD_F0
24         add a0, a0, a2
25         li t1, SR_FS
26         csrs CSR_STATUS, t1
27         frcsr t0
28         fsd f0,  TASK_THREAD_F0_F0(a0)
29         fsd f1,  TASK_THREAD_F1_F0(a0)
30         fsd f2,  TASK_THREAD_F2_F0(a0)
31         fsd f3,  TASK_THREAD_F3_F0(a0)
32         fsd f4,  TASK_THREAD_F4_F0(a0)
33         fsd f5,  TASK_THREAD_F5_F0(a0)
34         fsd f6,  TASK_THREAD_F6_F0(a0)
35         fsd f7,  TASK_THREAD_F7_F0(a0)
36         fsd f8,  TASK_THREAD_F8_F0(a0)
37         fsd f9,  TASK_THREAD_F9_F0(a0)
38         fsd f10, TASK_THREAD_F10_F0(a0)
39         fsd f11, TASK_THREAD_F11_F0(a0)
40         fsd f12, TASK_THREAD_F12_F0(a0)
41         fsd f13, TASK_THREAD_F13_F0(a0)
42         fsd f14, TASK_THREAD_F14_F0(a0)
43         fsd f15, TASK_THREAD_F15_F0(a0)
44         fsd f16, TASK_THREAD_F16_F0(a0)
45         fsd f17, TASK_THREAD_F17_F0(a0)
46         fsd f18, TASK_THREAD_F18_F0(a0)
47         fsd f19, TASK_THREAD_F19_F0(a0)
48         fsd f20, TASK_THREAD_F20_F0(a0)
49         fsd f21, TASK_THREAD_F21_F0(a0)
50         fsd f22, TASK_THREAD_F22_F0(a0)
51         fsd f23, TASK_THREAD_F23_F0(a0)
52         fsd f24, TASK_THREAD_F24_F0(a0)
53         fsd f25, TASK_THREAD_F25_F0(a0)
54         fsd f26, TASK_THREAD_F26_F0(a0)
55         fsd f27, TASK_THREAD_F27_F0(a0)
56         fsd f28, TASK_THREAD_F28_F0(a0)
57         fsd f29, TASK_THREAD_F29_F0(a0)
58         fsd f30, TASK_THREAD_F30_F0(a0)
59         fsd f31, TASK_THREAD_F31_F0(a0)
60         sw t0, TASK_THREAD_FCSR_F0(a0)
61         csrc CSR_STATUS, t1
62         ret
63 ENDPROC(__fstate_save)
64
65 ENTRY(__fstate_restore)
66         li  a2,  TASK_THREAD_F0
67         add a0, a0, a2
68         li t1, SR_FS
69         lw t0, TASK_THREAD_FCSR_F0(a0)
70         csrs CSR_STATUS, t1
71         fld f0,  TASK_THREAD_F0_F0(a0)
72         fld f1,  TASK_THREAD_F1_F0(a0)
73         fld f2,  TASK_THREAD_F2_F0(a0)
74         fld f3,  TASK_THREAD_F3_F0(a0)
75         fld f4,  TASK_THREAD_F4_F0(a0)
76         fld f5,  TASK_THREAD_F5_F0(a0)
77         fld f6,  TASK_THREAD_F6_F0(a0)
78         fld f7,  TASK_THREAD_F7_F0(a0)
79         fld f8,  TASK_THREAD_F8_F0(a0)
80         fld f9,  TASK_THREAD_F9_F0(a0)
81         fld f10, TASK_THREAD_F10_F0(a0)
82         fld f11, TASK_THREAD_F11_F0(a0)
83         fld f12, TASK_THREAD_F12_F0(a0)
84         fld f13, TASK_THREAD_F13_F0(a0)
85         fld f14, TASK_THREAD_F14_F0(a0)
86         fld f15, TASK_THREAD_F15_F0(a0)
87         fld f16, TASK_THREAD_F16_F0(a0)
88         fld f17, TASK_THREAD_F17_F0(a0)
89         fld f18, TASK_THREAD_F18_F0(a0)
90         fld f19, TASK_THREAD_F19_F0(a0)
91         fld f20, TASK_THREAD_F20_F0(a0)
92         fld f21, TASK_THREAD_F21_F0(a0)
93         fld f22, TASK_THREAD_F22_F0(a0)
94         fld f23, TASK_THREAD_F23_F0(a0)
95         fld f24, TASK_THREAD_F24_F0(a0)
96         fld f25, TASK_THREAD_F25_F0(a0)
97         fld f26, TASK_THREAD_F26_F0(a0)
98         fld f27, TASK_THREAD_F27_F0(a0)
99         fld f28, TASK_THREAD_F28_F0(a0)
100         fld f29, TASK_THREAD_F29_F0(a0)
101         fld f30, TASK_THREAD_F30_F0(a0)
102         fld f31, TASK_THREAD_F31_F0(a0)
103         fscsr t0
104         csrc CSR_STATUS, t1
105         ret
106 ENDPROC(__fstate_restore)