|
@@ -0,0 +1,64 @@
|
|
|
+/*
|
|
|
+ * FP/SIMD state saving and restoring macros
|
|
|
+ *
|
|
|
+ * Copyright (C) 2012 ARM Ltd.
|
|
|
+ * Author: Catalin Marinas <catalin.marinas@arm.com>
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
+ * published by the Free Software Foundation.
|
|
|
+ *
|
|
|
+ * 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.
|
|
|
+ *
|
|
|
+ * You should have received a copy of the GNU General Public License
|
|
|
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
+ */
|
|
|
+
|
|
|
+.macro fpsimd_save state, tmpnr
|
|
|
+ stp q0, q1, [\state, #16 * 0]
|
|
|
+ stp q2, q3, [\state, #16 * 2]
|
|
|
+ stp q4, q5, [\state, #16 * 4]
|
|
|
+ stp q6, q7, [\state, #16 * 6]
|
|
|
+ stp q8, q9, [\state, #16 * 8]
|
|
|
+ stp q10, q11, [\state, #16 * 10]
|
|
|
+ stp q12, q13, [\state, #16 * 12]
|
|
|
+ stp q14, q15, [\state, #16 * 14]
|
|
|
+ stp q16, q17, [\state, #16 * 16]
|
|
|
+ stp q18, q19, [\state, #16 * 18]
|
|
|
+ stp q20, q21, [\state, #16 * 20]
|
|
|
+ stp q22, q23, [\state, #16 * 22]
|
|
|
+ stp q24, q25, [\state, #16 * 24]
|
|
|
+ stp q26, q27, [\state, #16 * 26]
|
|
|
+ stp q28, q29, [\state, #16 * 28]
|
|
|
+ stp q30, q31, [\state, #16 * 30]!
|
|
|
+ mrs x\tmpnr, fpsr
|
|
|
+ str w\tmpnr, [\state, #16 * 2]
|
|
|
+ mrs x\tmpnr, fpcr
|
|
|
+ str w\tmpnr, [\state, #16 * 2 + 4]
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro fpsimd_restore state, tmpnr
|
|
|
+ ldp q0, q1, [\state, #16 * 0]
|
|
|
+ ldp q2, q3, [\state, #16 * 2]
|
|
|
+ ldp q4, q5, [\state, #16 * 4]
|
|
|
+ ldp q6, q7, [\state, #16 * 6]
|
|
|
+ ldp q8, q9, [\state, #16 * 8]
|
|
|
+ ldp q10, q11, [\state, #16 * 10]
|
|
|
+ ldp q12, q13, [\state, #16 * 12]
|
|
|
+ ldp q14, q15, [\state, #16 * 14]
|
|
|
+ ldp q16, q17, [\state, #16 * 16]
|
|
|
+ ldp q18, q19, [\state, #16 * 18]
|
|
|
+ ldp q20, q21, [\state, #16 * 20]
|
|
|
+ ldp q22, q23, [\state, #16 * 22]
|
|
|
+ ldp q24, q25, [\state, #16 * 24]
|
|
|
+ ldp q26, q27, [\state, #16 * 26]
|
|
|
+ ldp q28, q29, [\state, #16 * 28]
|
|
|
+ ldp q30, q31, [\state, #16 * 30]!
|
|
|
+ ldr w\tmpnr, [\state, #16 * 2]
|
|
|
+ msr fpsr, x\tmpnr
|
|
|
+ ldr w\tmpnr, [\state, #16 * 2 + 4]
|
|
|
+ msr fpcr, x\tmpnr
|
|
|
+.endm
|