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