[compiler-rt] r214046 - builtins: make ARM compilation with GAS work again

Saleem Abdulrasool compnerd at compnerd.org
Sat Jul 26 19:01:24 PDT 2014


Author: compnerd
Date: Sat Jul 26 21:01:24 2014
New Revision: 214046

URL: http://llvm.org/viewvc/llvm-project?rev=214046&view=rev
Log:
builtins: make ARM compilation with GAS work again

The LLVM IAS seems to accept wide instructions for add and sub in ARM mode even
though it is not permitted.  This uses a macro to ensure that the wide modifier
is only applied when building in THUMB mode.

This repairs building with GCC/GAS in ARM mode.

Modified:
    compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
    compiler-rt/trunk/lib/builtins/arm/udivsi3.S
    compiler-rt/trunk/lib/builtins/arm/umodsi3.S
    compiler-rt/trunk/lib/builtins/assembly.h

Modified: compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S?rev=214046&r1=214045&r2=214046&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S Sat Jul 26 21:01:24 2014
@@ -112,8 +112,8 @@ DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
 #define block(shift)                                                           \
 	cmp	r0, r1, lsl IMM shift;                                         \
 	ITT(hs);                                                               \
-	addhs.w	r3, r3, IMM (1 << shift);                                      \
-	subhs.w	r0, r0, r1, lsl IMM shift
+	WIDE(addhs)	r3, r3, IMM (1 << shift);                              \
+	WIDE(subhs)	r0, r0, r1, lsl IMM shift
 
 	block(31)
 	block(30)

Modified: compiler-rt/trunk/lib/builtins/arm/udivsi3.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=214046&r1=214045&r2=214046&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/udivsi3.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/udivsi3.S Sat Jul 26 21:01:24 2014
@@ -112,8 +112,8 @@ DEFINE_COMPILERRT_FUNCTION(__udivsi3)
 #define block(shift)                                                           \
 	cmp	r0, r1, lsl IMM shift;                                         \
 	ITT(hs);                                                               \
-	addhs.w	r3, r3, IMM (1 << shift);                                      \
-	subhs.w	r0, r0, r1, lsl IMM shift
+	WIDE(addhs)	r3, r3, IMM (1 << shift);                              \
+	WIDE(subhs)	r0, r0, r1, lsl IMM shift
 
 	block(31)
 	block(30)

Modified: compiler-rt/trunk/lib/builtins/arm/umodsi3.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/umodsi3.S?rev=214046&r1=214045&r2=214046&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/umodsi3.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/umodsi3.S Sat Jul 26 21:01:24 2014
@@ -107,7 +107,7 @@ DEFINE_COMPILERRT_FUNCTION(__umodsi3)
 #define block(shift)                                                           \
 	cmp	r0, r1, lsl IMM shift;                                         \
 	IT(hs);                                                                \
-	subhs.w	r0, r0, r1, lsl IMM shift
+	WIDE(subhs)	r0, r0, r1, lsl IMM shift
 
 	block(31)
 	block(30)

Modified: compiler-rt/trunk/lib/builtins/assembly.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/assembly.h?rev=214046&r1=214045&r2=214046&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/assembly.h (original)
+++ compiler-rt/trunk/lib/builtins/assembly.h Sat Jul 26 21:01:24 2014
@@ -99,6 +99,12 @@
 #define IT(cond)
 #define ITT(cond)
 #endif
+
+#if __ARM_ARCH_ISA_THUMB == 2
+#define WIDE(op) op.w
+#else
+#define WIDE(op) op
+#endif
 #endif
 
 #define GLUE2(a, b) a##b





More information about the llvm-commits mailing list