Skip to content

Commit a6c3087

Browse files
agnersRussell King
authored andcommitted
ARM: 8989/1: use .fpu assembler directives instead of assembler arguments
Explicit FPU selection has been introduced in commit 1a6be26 ("[ARM] Enable VFP to be built when non-VFP capable CPUs are selected") to make use of assembler mnemonics for VFP instructions. However, clang currently does not support passing assembler flags like this and errors out with: clang-10: error: the clang compiler does not support '-Wa,-mfpu=softvfp+vfp' Make use of the .fpu assembler directives to select the floating point hardware selectively. Also use the new unified assembler language mnemonics. This allows to build these procedures with Clang. Link: ClangBuiltLinux#762 Signed-off-by: Stefan Agner <[email protected]> Signed-off-by: Russell King <[email protected]>
1 parent 2631781 commit a6c3087

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

arch/arm/vfp/Makefile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,4 @@
88
# ccflags-y := -DDEBUG
99
# asflags-y := -DDEBUG
1010

11-
KBUILD_AFLAGS :=$(KBUILD_AFLAGS:-msoft-float=-Wa,-mfpu=softvfp+vfp -mfloat-abi=soft)
12-
1311
obj-y += vfpmodule.o entry.o vfphw.o vfpsingle.o vfpdouble.o

arch/arm/vfp/vfphw.S

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -258,39 +258,47 @@ vfp_current_hw_state_address:
258258

259259
ENTRY(vfp_get_float)
260260
tbl_branch r0, r3, #3
261+
.fpu vfpv2
261262
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
262-
1: mrc p10, 0, r0, c\dr, c0, 0 @ fmrs r0, s0
263+
1: vmov r0, s\dr
263264
ret lr
264265
.org 1b + 8
265-
1: mrc p10, 0, r0, c\dr, c0, 4 @ fmrs r0, s1
266+
.endr
267+
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
268+
1: vmov r0, s\dr
266269
ret lr
267270
.org 1b + 8
268271
.endr
269272
ENDPROC(vfp_get_float)
270273

271274
ENTRY(vfp_put_float)
272275
tbl_branch r1, r3, #3
276+
.fpu vfpv2
273277
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
274-
1: mcr p10, 0, r0, c\dr, c0, 0 @ fmsr r0, s0
278+
1: vmov s\dr, r0
275279
ret lr
276280
.org 1b + 8
277-
1: mcr p10, 0, r0, c\dr, c0, 4 @ fmsr r0, s1
281+
.endr
282+
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
283+
1: vmov s\dr, r0
278284
ret lr
279285
.org 1b + 8
280286
.endr
281287
ENDPROC(vfp_put_float)
282288

283289
ENTRY(vfp_get_double)
284290
tbl_branch r0, r3, #3
291+
.fpu vfpv2
285292
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
286-
1: fmrrd r0, r1, d\dr
293+
1: vmov r0, r1, d\dr
287294
ret lr
288295
.org 1b + 8
289296
.endr
290297
#ifdef CONFIG_VFPv3
291298
@ d16 - d31 registers
292-
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
293-
1: mrrc p11, 3, r0, r1, c\dr @ fmrrd r0, r1, d\dr
299+
.fpu vfpv3
300+
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
301+
1: vmov r0, r1, d\dr
294302
ret lr
295303
.org 1b + 8
296304
.endr
@@ -304,15 +312,17 @@ ENDPROC(vfp_get_double)
304312

305313
ENTRY(vfp_put_double)
306314
tbl_branch r2, r3, #3
315+
.fpu vfpv2
307316
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
308-
1: fmdrr d\dr, r0, r1
317+
1: vmov d\dr, r0, r1
309318
ret lr
310319
.org 1b + 8
311320
.endr
312321
#ifdef CONFIG_VFPv3
322+
.fpu vfpv3
313323
@ d16 - d31 registers
314-
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
315-
1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
324+
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
325+
1: vmov d\dr, r0, r1
316326
ret lr
317327
.org 1b + 8
318328
.endr

0 commit comments

Comments
 (0)