[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