1From 000f1500b693a84880d2da49b77b1113f98dde35 Mon Sep 17 00:00:00 2001
2From: Brett Warren <brett.warren@arm.com>
3Date: Fri, 27 Nov 2020 15:28:42 +0000
4Subject: [PATCH] arm/sysv: reverted clang VFP mitigation
5
6Since commit e3d2812ce43940aacae5bab2d0e965278cb1e7ea,
7seperate instructions were used when compiling under clang,
8as clang didn't allow the directives at the time. This mitigation
9now causes compilation to fail under clang 10, as described by
10https://github.com/libffi/libffi/issues/607. Now that
11clang supports the LDC and SDC instructions, this mitigation
12has been reverted.
13
14Upstream-Status: Submitted [https://github.com/libffi/libffi/pull/747]
15Signed-off-by: Brett Warren <brett.warren@arm.com>
16
17---
18 src/arm/sysv.S | 33 ---------------------------------
19 1 file changed, 33 deletions(-)
20
21diff --git a/src/arm/sysv.S b/src/arm/sysv.S
22index fb36213..e4272a1 100644
23--- a/src/arm/sysv.S
24+++ b/src/arm/sysv.S
25@@ -142,13 +142,8 @@ ARM_FUNC_START(ffi_call_VFP)
26
27 	cmp	r3, #3			@ load only d0 if possible
28 	ite	le
29-#ifdef __clang__
30-	vldrle d0, [r0]
31-	vldmgt r0, {d0-d7}
32-#else
33 	ldcle	p11, cr0, [r0]		@ vldrle d0, [r0]
34 	ldcgt	p11, cr0, [r0], {16}	@ vldmgt r0, {d0-d7}
35-#endif
36 	add	r0, r0, #64		@ discard the vfp register args
37 	/* FALLTHRU */
38 ARM_FUNC_END(ffi_call_VFP)
39@@ -193,25 +188,13 @@ ARM_FUNC_START(ffi_call_SYSV)
40 #endif
41 0:
42 E(ARM_TYPE_VFP_S)
43-#ifdef __clang__
44-	vstr s0, [r2]
45-#else
46 	stc	p10, cr0, [r2]		@ vstr s0, [r2]
47-#endif
48 	pop	{fp,pc}
49 E(ARM_TYPE_VFP_D)
50-#ifdef __clang__
51-	vstr d0, [r2]
52-#else
53 	stc	p11, cr0, [r2]		@ vstr d0, [r2]
54-#endif
55 	pop	{fp,pc}
56 E(ARM_TYPE_VFP_N)
57-#ifdef __clang__
58-	vstm r2, {d0-d3}
59-#else
60 	stc	p11, cr0, [r2], {8}	@ vstm r2, {d0-d3}
61-#endif
62 	pop	{fp,pc}
63 E(ARM_TYPE_INT64)
64 	str	r1, [r2, #4]
65@@ -320,11 +303,7 @@ ARM_FUNC_START(ffi_closure_VFP)
66 	add	ip, sp, #16
67 	sub	sp, sp, #64+32			@ allocate frame
68 	cfi_adjust_cfa_offset(64+32)
69-#ifdef __clang__
70-	vstm sp, {d0-d7}
71-#else
72 	stc	p11, cr0, [sp], {16}		@ vstm sp, {d0-d7}
73-#endif
74 	stmdb	sp!, {ip,lr}
75
76 	/* See above.  */
77@@ -358,25 +337,13 @@ ARM_FUNC_START_LOCAL(ffi_closure_ret)
78 	cfi_rel_offset(lr, 4)
79 0:
80 E(ARM_TYPE_VFP_S)
81-#ifdef __clang__
82-	vldr s0, [r2]
83-#else
84 	ldc	p10, cr0, [r2]			@ vldr s0, [r2]
85-#endif
86 	b	call_epilogue
87 E(ARM_TYPE_VFP_D)
88-#ifdef __clang__
89-	vldr d0, [r2]
90-#else
91 	ldc	p11, cr0, [r2]			@ vldr d0, [r2]
92-#endif
93 	b	call_epilogue
94 E(ARM_TYPE_VFP_N)
95-#ifdef __clang__
96-	vldm r2, {d0-d3}
97-#else
98 	ldc	p11, cr0, [r2], {8}		@ vldm r2, {d0-d3}
99-#endif
100 	b	call_epilogue
101 E(ARM_TYPE_INT64)
102 	ldr	r1, [r2, #4]
103