Fix build with non-gcc compilers
authorSimon Hausmann <simon.hausmann@digia.com>
Thu, 7 Feb 2013 15:28:17 +0000 (16:28 +0100)
committerLars Knoll <lars.knoll@digia.com>
Sat, 9 Feb 2013 09:40:40 +0000 (10:40 +0100)
Properly protect the inline assembler integer math with preprocessor
macros. Enable only with gcc and on x86 and amd64.

Change-Id: I4a422addc1f3aba0f10d5541357d940bb4c29060
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/v4/qmljs_math.h
src/v4/qmljs_runtime.h

index b14152d..cc37878 100644 (file)
 #endif // QMLJS_LLVM_RUNTIME
 #include <cmath>
 
-#if !defined(QMLJS_LLVM_RUNTIME) && 1 //CPU(X86_64)
+#if !defined(QMLJS_LLVM_RUNTIME) && COMPILER(GCC) && (CPU(X86_64) || CPU(X86))
+#define QMLJS_INLINE_MATH
+#endif
+
+#if defined(QMLJS_INLINE_MATH)
 
 QT_BEGIN_NAMESPACE
 
@@ -106,5 +110,5 @@ static inline Value mul_int32(int a, int b)
 
 QT_END_NAMESPACE
 
-#endif // !defined(QMLJS_LLVM_RUNTIME) && 1 //CPU(X86_64)
+#endif // defined(QMLJS_INLINE_MATH)
 #endif // QMLJS_MATH_H
index b93aa0c..7b0a44a 100644 (file)
@@ -551,10 +551,10 @@ inline Value __qmljs_add(Value left, Value right, ExecutionContext *ctx)
 {
     TRACE2(left, right);
 
-#ifndef QMLJS_LLVM_RUNTIME
+#ifdef QMLJS_INLINE_MATH
     if (Value::integerCompatible(left, right))
         return add_int32(left.integerValue(), right.integerValue());
-#endif // QMLJS_LLVM_RUNTIME
+#endif
 
     if (Value::bothDouble(left, right))
         return Value::fromDouble(left.doubleValue() + right.doubleValue());
@@ -566,10 +566,10 @@ inline Value __qmljs_sub(Value left, Value right, ExecutionContext *ctx)
 {
     TRACE2(left, right);
 
-#ifndef QMLJS_LLVM_RUNTIME
+#ifdef QMLJS_INLINE_MATH
     if (Value::integerCompatible(left, right))
         return sub_int32(left.integerValue(), right.integerValue());
-#endif // QMLJS_LLVM_RUNTIME
+#endif
 
     double lval = __qmljs_to_number(left, ctx);
     double rval = __qmljs_to_number(right, ctx);
@@ -580,10 +580,10 @@ inline Value __qmljs_mul(Value left, Value right, ExecutionContext *ctx)
 {
     TRACE2(left, right);
 
-#ifndef QMLJS_LLVM_RUNTIME
+#ifdef QMLJS_INLINE_MATH
     if (Value::integerCompatible(left, right))
         return mul_int32(left.integerValue(), right.integerValue());
-#endif // QMLJS_LLVM_RUNTIME
+#endif
 
     double lval = __qmljs_to_number(left, ctx);
     double rval = __qmljs_to_number(right, ctx);