ret
 ENDPROC(__switch_to)
 
-ENTRY(__fstate_save)
-       li  a2,  TASK_THREAD_F0
-       add a0, a0, a2
-       li t1, SR_FS
-       csrs sstatus, t1
-       frcsr t0
-       fsd f0,  TASK_THREAD_F0_F0(a0)
-       fsd f1,  TASK_THREAD_F1_F0(a0)
-       fsd f2,  TASK_THREAD_F2_F0(a0)
-       fsd f3,  TASK_THREAD_F3_F0(a0)
-       fsd f4,  TASK_THREAD_F4_F0(a0)
-       fsd f5,  TASK_THREAD_F5_F0(a0)
-       fsd f6,  TASK_THREAD_F6_F0(a0)
-       fsd f7,  TASK_THREAD_F7_F0(a0)
-       fsd f8,  TASK_THREAD_F8_F0(a0)
-       fsd f9,  TASK_THREAD_F9_F0(a0)
-       fsd f10, TASK_THREAD_F10_F0(a0)
-       fsd f11, TASK_THREAD_F11_F0(a0)
-       fsd f12, TASK_THREAD_F12_F0(a0)
-       fsd f13, TASK_THREAD_F13_F0(a0)
-       fsd f14, TASK_THREAD_F14_F0(a0)
-       fsd f15, TASK_THREAD_F15_F0(a0)
-       fsd f16, TASK_THREAD_F16_F0(a0)
-       fsd f17, TASK_THREAD_F17_F0(a0)
-       fsd f18, TASK_THREAD_F18_F0(a0)
-       fsd f19, TASK_THREAD_F19_F0(a0)
-       fsd f20, TASK_THREAD_F20_F0(a0)
-       fsd f21, TASK_THREAD_F21_F0(a0)
-       fsd f22, TASK_THREAD_F22_F0(a0)
-       fsd f23, TASK_THREAD_F23_F0(a0)
-       fsd f24, TASK_THREAD_F24_F0(a0)
-       fsd f25, TASK_THREAD_F25_F0(a0)
-       fsd f26, TASK_THREAD_F26_F0(a0)
-       fsd f27, TASK_THREAD_F27_F0(a0)
-       fsd f28, TASK_THREAD_F28_F0(a0)
-       fsd f29, TASK_THREAD_F29_F0(a0)
-       fsd f30, TASK_THREAD_F30_F0(a0)
-       fsd f31, TASK_THREAD_F31_F0(a0)
-       sw t0, TASK_THREAD_FCSR_F0(a0)
-       csrc sstatus, t1
-       ret
-ENDPROC(__fstate_save)
-
-ENTRY(__fstate_restore)
-       li  a2,  TASK_THREAD_F0
-       add a0, a0, a2
-       li t1, SR_FS
-       lw t0, TASK_THREAD_FCSR_F0(a0)
-       csrs sstatus, t1
-       fld f0,  TASK_THREAD_F0_F0(a0)
-       fld f1,  TASK_THREAD_F1_F0(a0)
-       fld f2,  TASK_THREAD_F2_F0(a0)
-       fld f3,  TASK_THREAD_F3_F0(a0)
-       fld f4,  TASK_THREAD_F4_F0(a0)
-       fld f5,  TASK_THREAD_F5_F0(a0)
-       fld f6,  TASK_THREAD_F6_F0(a0)
-       fld f7,  TASK_THREAD_F7_F0(a0)
-       fld f8,  TASK_THREAD_F8_F0(a0)
-       fld f9,  TASK_THREAD_F9_F0(a0)
-       fld f10, TASK_THREAD_F10_F0(a0)
-       fld f11, TASK_THREAD_F11_F0(a0)
-       fld f12, TASK_THREAD_F12_F0(a0)
-       fld f13, TASK_THREAD_F13_F0(a0)
-       fld f14, TASK_THREAD_F14_F0(a0)
-       fld f15, TASK_THREAD_F15_F0(a0)
-       fld f16, TASK_THREAD_F16_F0(a0)
-       fld f17, TASK_THREAD_F17_F0(a0)
-       fld f18, TASK_THREAD_F18_F0(a0)
-       fld f19, TASK_THREAD_F19_F0(a0)
-       fld f20, TASK_THREAD_F20_F0(a0)
-       fld f21, TASK_THREAD_F21_F0(a0)
-       fld f22, TASK_THREAD_F22_F0(a0)
-       fld f23, TASK_THREAD_F23_F0(a0)
-       fld f24, TASK_THREAD_F24_F0(a0)
-       fld f25, TASK_THREAD_F25_F0(a0)
-       fld f26, TASK_THREAD_F26_F0(a0)
-       fld f27, TASK_THREAD_F27_F0(a0)
-       fld f28, TASK_THREAD_F28_F0(a0)
-       fld f29, TASK_THREAD_F29_F0(a0)
-       fld f30, TASK_THREAD_F30_F0(a0)
-       fld f31, TASK_THREAD_F31_F0(a0)
-       fscsr t0
-       csrc sstatus, t1
-       ret
-ENDPROC(__fstate_restore)
-
-
        .section ".rodata"
        /* Exception vector table */
 ENTRY(excp_vect_table)
 
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2012 Regents of the University of California
+ * Copyright (C) 2017 SiFive
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation, version 2.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ */
+
+#include <linux/linkage.h>
+
+#include <asm/asm.h>
+#include <asm/csr.h>
+#include <asm/asm-offsets.h>
+
+ENTRY(__fstate_save)
+       li  a2,  TASK_THREAD_F0
+       add a0, a0, a2
+       li t1, SR_FS
+       csrs sstatus, t1
+       frcsr t0
+       fsd f0,  TASK_THREAD_F0_F0(a0)
+       fsd f1,  TASK_THREAD_F1_F0(a0)
+       fsd f2,  TASK_THREAD_F2_F0(a0)
+       fsd f3,  TASK_THREAD_F3_F0(a0)
+       fsd f4,  TASK_THREAD_F4_F0(a0)
+       fsd f5,  TASK_THREAD_F5_F0(a0)
+       fsd f6,  TASK_THREAD_F6_F0(a0)
+       fsd f7,  TASK_THREAD_F7_F0(a0)
+       fsd f8,  TASK_THREAD_F8_F0(a0)
+       fsd f9,  TASK_THREAD_F9_F0(a0)
+       fsd f10, TASK_THREAD_F10_F0(a0)
+       fsd f11, TASK_THREAD_F11_F0(a0)
+       fsd f12, TASK_THREAD_F12_F0(a0)
+       fsd f13, TASK_THREAD_F13_F0(a0)
+       fsd f14, TASK_THREAD_F14_F0(a0)
+       fsd f15, TASK_THREAD_F15_F0(a0)
+       fsd f16, TASK_THREAD_F16_F0(a0)
+       fsd f17, TASK_THREAD_F17_F0(a0)
+       fsd f18, TASK_THREAD_F18_F0(a0)
+       fsd f19, TASK_THREAD_F19_F0(a0)
+       fsd f20, TASK_THREAD_F20_F0(a0)
+       fsd f21, TASK_THREAD_F21_F0(a0)
+       fsd f22, TASK_THREAD_F22_F0(a0)
+       fsd f23, TASK_THREAD_F23_F0(a0)
+       fsd f24, TASK_THREAD_F24_F0(a0)
+       fsd f25, TASK_THREAD_F25_F0(a0)
+       fsd f26, TASK_THREAD_F26_F0(a0)
+       fsd f27, TASK_THREAD_F27_F0(a0)
+       fsd f28, TASK_THREAD_F28_F0(a0)
+       fsd f29, TASK_THREAD_F29_F0(a0)
+       fsd f30, TASK_THREAD_F30_F0(a0)
+       fsd f31, TASK_THREAD_F31_F0(a0)
+       sw t0, TASK_THREAD_FCSR_F0(a0)
+       csrc sstatus, t1
+       ret
+ENDPROC(__fstate_save)
+
+ENTRY(__fstate_restore)
+       li  a2,  TASK_THREAD_F0
+       add a0, a0, a2
+       li t1, SR_FS
+       lw t0, TASK_THREAD_FCSR_F0(a0)
+       csrs sstatus, t1
+       fld f0,  TASK_THREAD_F0_F0(a0)
+       fld f1,  TASK_THREAD_F1_F0(a0)
+       fld f2,  TASK_THREAD_F2_F0(a0)
+       fld f3,  TASK_THREAD_F3_F0(a0)
+       fld f4,  TASK_THREAD_F4_F0(a0)
+       fld f5,  TASK_THREAD_F5_F0(a0)
+       fld f6,  TASK_THREAD_F6_F0(a0)
+       fld f7,  TASK_THREAD_F7_F0(a0)
+       fld f8,  TASK_THREAD_F8_F0(a0)
+       fld f9,  TASK_THREAD_F9_F0(a0)
+       fld f10, TASK_THREAD_F10_F0(a0)
+       fld f11, TASK_THREAD_F11_F0(a0)
+       fld f12, TASK_THREAD_F12_F0(a0)
+       fld f13, TASK_THREAD_F13_F0(a0)
+       fld f14, TASK_THREAD_F14_F0(a0)
+       fld f15, TASK_THREAD_F15_F0(a0)
+       fld f16, TASK_THREAD_F16_F0(a0)
+       fld f17, TASK_THREAD_F17_F0(a0)
+       fld f18, TASK_THREAD_F18_F0(a0)
+       fld f19, TASK_THREAD_F19_F0(a0)
+       fld f20, TASK_THREAD_F20_F0(a0)
+       fld f21, TASK_THREAD_F21_F0(a0)
+       fld f22, TASK_THREAD_F22_F0(a0)
+       fld f23, TASK_THREAD_F23_F0(a0)
+       fld f24, TASK_THREAD_F24_F0(a0)
+       fld f25, TASK_THREAD_F25_F0(a0)
+       fld f26, TASK_THREAD_F26_F0(a0)
+       fld f27, TASK_THREAD_F27_F0(a0)
+       fld f28, TASK_THREAD_F28_F0(a0)
+       fld f29, TASK_THREAD_F29_F0(a0)
+       fld f30, TASK_THREAD_F30_F0(a0)
+       fld f31, TASK_THREAD_F31_F0(a0)
+       fscsr t0
+       csrc sstatus, t1
+       ret
+ENDPROC(__fstate_restore)