hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/arch/arm/vfp/vfphw.S
....@@ -1,12 +1,9 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * linux/arch/arm/vfp/vfphw.S
34 *
45 * Copyright (C) 2004 ARM Limited.
56 * Written by Deep Blue Solutions Limited.
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License version 2 as
9
- * published by the Free Software Foundation.
107 *
118 * This code is called from the kernel's undefined instruction trap.
129 * r9 holds the return address for successful handling.
....@@ -81,11 +78,7 @@
8178 ENTRY(vfp_support_entry)
8279 DBGSTR3 "instr %08x pc %08x state %p", r0, r2, r10
8380
84
- ldr r3, [sp, #S_PSR] @ Neither lazy restore nor FP exceptions
85
- and r3, r3, #MODE_MASK @ are supported in kernel mode
86
- teq r3, #USR_MODE
87
- bne vfp_kmode_exception @ Returns through lr
88
-
81
+ .fpu vfpv2
8982 VFPFMRX r1, FPEXC @ Is the VFP enabled?
9083 DBGSTR1 "fpexc %08x", r1
9184 tst r1, #FPEXC_EN
....@@ -261,11 +254,14 @@
261254
262255 ENTRY(vfp_get_float)
263256 tbl_branch r0, r3, #3
257
+ .fpu vfpv2
264258 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
265
-1: mrc p10, 0, r0, c\dr, c0, 0 @ fmrs r0, s0
259
+1: vmov r0, s\dr
266260 ret lr
267261 .org 1b + 8
268
-1: mrc p10, 0, r0, c\dr, c0, 4 @ fmrs r0, s1
262
+ .endr
263
+ .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
264
+1: vmov r0, s\dr
269265 ret lr
270266 .org 1b + 8
271267 .endr
....@@ -273,11 +269,14 @@
273269
274270 ENTRY(vfp_put_float)
275271 tbl_branch r1, r3, #3
272
+ .fpu vfpv2
276273 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
277
-1: mcr p10, 0, r0, c\dr, c0, 0 @ fmsr r0, s0
274
+1: vmov s\dr, r0
278275 ret lr
279276 .org 1b + 8
280
-1: mcr p10, 0, r0, c\dr, c0, 4 @ fmsr r0, s1
277
+ .endr
278
+ .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
279
+1: vmov s\dr, r0
281280 ret lr
282281 .org 1b + 8
283282 .endr
....@@ -285,15 +284,17 @@
285284
286285 ENTRY(vfp_get_double)
287286 tbl_branch r0, r3, #3
287
+ .fpu vfpv2
288288 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
289
-1: fmrrd r0, r1, d\dr
289
+1: vmov r0, r1, d\dr
290290 ret lr
291291 .org 1b + 8
292292 .endr
293293 #ifdef CONFIG_VFPv3
294294 @ d16 - d31 registers
295
- .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
296
-1: mrrc p11, 3, r0, r1, c\dr @ fmrrd r0, r1, d\dr
295
+ .fpu vfpv3
296
+ .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
297
+1: vmov r0, r1, d\dr
297298 ret lr
298299 .org 1b + 8
299300 .endr
....@@ -307,15 +308,17 @@
307308
308309 ENTRY(vfp_put_double)
309310 tbl_branch r2, r3, #3
311
+ .fpu vfpv2
310312 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
311
-1: fmdrr d\dr, r0, r1
313
+1: vmov d\dr, r0, r1
312314 ret lr
313315 .org 1b + 8
314316 .endr
315317 #ifdef CONFIG_VFPv3
318
+ .fpu vfpv3
316319 @ d16 - d31 registers
317
- .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
318
-1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
320
+ .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
321
+1: vmov d\dr, r0, r1
319322 ret lr
320323 .org 1b + 8
321324 .endr