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