blob: 3ffcb3e128ee3ffdcfe6192bc2cda5cf187566d4 [file] [log] [blame]
Patrick Williams7784c422022-11-17 07:29:11 -06001From 000f1500b693a84880d2da49b77b1113f98dde35 Mon Sep 17 00:00:00 2001
Andrew Geissler09209ee2020-12-13 08:44:15 -06002From: 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,
Andrew Geissler5f350902021-07-23 13:09:54 -04007seperate instructions were used when compiling under clang,
Andrew Geissler09209ee2020-12-13 08:44:15 -06008as clang didn't allow the directives at the time. This mitigation
Andrew Geissler5f350902021-07-23 13:09:54 -04009now causes compilation to fail under clang 10, as described by
Andrew Geissler09209ee2020-12-13 08:44:15 -060010https://github.com/libffi/libffi/issues/607. Now that
11clang supports the LDC and SDC instructions, this mitigation
12has been reverted.
13
Patrick Williams2390b1b2022-11-03 13:47:49 -050014Upstream-Status: Submitted [https://github.com/libffi/libffi/pull/747]
Andrew Geissler09209ee2020-12-13 08:44:15 -060015Signed-off-by: Brett Warren <brett.warren@arm.com>
Patrick Williams7784c422022-11-17 07:29:11 -060016
Andrew Geissler09209ee2020-12-13 08:44:15 -060017---
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
Andrew Geissler5f350902021-07-23 13:09:54 -040022index fb36213..e4272a1 100644
Andrew Geissler09209ee2020-12-13 08:44:15 -060023--- a/src/arm/sysv.S
24+++ b/src/arm/sysv.S
Andrew Geissler5f350902021-07-23 13:09:54 -040025@@ -142,13 +142,8 @@ ARM_FUNC_START(ffi_call_VFP)
Andrew Geissler09209ee2020-12-13 08:44:15 -060026
27 cmp r3, #3 @ load only d0 if possible
Andrew Geissler5f350902021-07-23 13:09:54 -040028 ite le
Andrew Geissler09209ee2020-12-13 08:44:15 -060029-#ifdef __clang__
Andrew Geissler5f350902021-07-23 13:09:54 -040030- vldrle d0, [r0]
31- vldmgt r0, {d0-d7}
Andrew Geissler09209ee2020-12-13 08:44:15 -060032-#else
Andrew Geissler5f350902021-07-23 13:09:54 -040033 ldcle p11, cr0, [r0] @ vldrle d0, [r0]
34 ldcgt p11, cr0, [r0], {16} @ vldmgt r0, {d0-d7}
Andrew Geissler09209ee2020-12-13 08:44:15 -060035-#endif
36 add r0, r0, #64 @ discard the vfp register args
37 /* FALLTHRU */
38 ARM_FUNC_END(ffi_call_VFP)
Andrew Geissler5f350902021-07-23 13:09:54 -040039@@ -193,25 +188,13 @@ ARM_FUNC_START(ffi_call_SYSV)
40 #endif
Andrew Geissler09209ee2020-12-13 08:44:15 -060041 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]
Andrew Geissler5f350902021-07-23 13:09:54 -040065@@ -320,11 +303,7 @@ ARM_FUNC_START(ffi_closure_VFP)
Andrew Geissler09209ee2020-12-13 08:44:15 -060066 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. */
Andrew Geissler5f350902021-07-23 13:09:54 -040077@@ -358,25 +337,13 @@ ARM_FUNC_START_LOCAL(ffi_closure_ret)
Andrew Geissler09209ee2020-12-13 08:44:15 -060078 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
Andrew Geissler5f350902021-07-23 13:09:54 -040086 b call_epilogue
Andrew Geissler09209ee2020-12-13 08:44:15 -060087 E(ARM_TYPE_VFP_D)
88-#ifdef __clang__
89- vldr d0, [r2]
90-#else
91 ldc p11, cr0, [r2] @ vldr d0, [r2]
92-#endif
Andrew Geissler5f350902021-07-23 13:09:54 -040093 b call_epilogue
Andrew Geissler09209ee2020-12-13 08:44:15 -060094 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
Andrew Geissler5f350902021-07-23 13:09:54 -0400100 b call_epilogue
Andrew Geissler09209ee2020-12-13 08:44:15 -0600101 E(ARM_TYPE_INT64)
102 ldr r1, [r2, #4]