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