浏览代码

Merge pull request #1 from Ragora/tsneo

BugFix: Linux compilation for TSNeo
Jeff Hutchinson 4 年之前
父节点
当前提交
60e05df624
共有 3 个文件被更改,包括 64 次插入61 次删除
  1. 60 60
      Engine/source/console/compiledEval.cpp
  2. 1 1
      Engine/source/console/engineAPI.h
  3. 3 0
      Engine/source/platform/types.gcc.h

+ 60 - 60
Engine/source/console/compiledEval.cpp

@@ -459,6 +459,39 @@ enum class FloatOperation
    NE
 };
 
+template<FloatOperation Op>
+TORQUE_NOINLINE void doSlowMathOp()
+{
+   ConsoleValue& a = stack[_STK];
+   ConsoleValue& b = stack[_STK - 1];
+
+   // Arithmetic
+   if constexpr (Op == FloatOperation::Add)
+      stack[_STK - 1].setFloat(a.getFloat() + b.getFloat());
+   else if constexpr (Op == FloatOperation::Sub)
+      stack[_STK - 1].setFloat(a.getFloat() - b.getFloat());
+   else if constexpr (Op == FloatOperation::Mul)
+      stack[_STK - 1].setFloat(a.getFloat() * b.getFloat());
+   else if constexpr (Op == FloatOperation::Div)
+      stack[_STK - 1].setFloat(a.getFloat() / b.getFloat());
+
+   // Logical
+   if constexpr (Op == FloatOperation::LT)
+      stack[_STK - 1].setInt(a.getFloat() < b.getFloat());
+   if constexpr (Op == FloatOperation::LE)
+      stack[_STK - 1].setInt(a.getFloat() <= b.getFloat());
+   if constexpr (Op == FloatOperation::GR)
+      stack[_STK - 1].setInt(a.getFloat() > b.getFloat());
+   if constexpr (Op == FloatOperation::GE)
+      stack[_STK - 1].setInt(a.getFloat() >= b.getFloat());
+   if constexpr (Op == FloatOperation::EQ)
+      stack[_STK - 1].setInt(a.getFloat() == b.getFloat());
+   if constexpr (Op == FloatOperation::NE)
+      stack[_STK - 1].setInt(a.getFloat() != b.getFloat());
+
+   _STK--;
+}
+
 template<FloatOperation Op>
 TORQUE_FORCEINLINE void doFloatMathOperation()
 {
@@ -500,39 +533,6 @@ TORQUE_FORCEINLINE void doFloatMathOperation()
    }
 }
 
-template<FloatOperation Op>
-TORQUE_NOINLINE void doSlowMathOp()
-{
-   ConsoleValue& a = stack[_STK];
-   ConsoleValue& b = stack[_STK - 1];
-
-   // Arithmetic
-   if constexpr (Op == FloatOperation::Add)
-      stack[_STK - 1].setFloat(a.getFloat() + b.getFloat());
-   else if constexpr (Op == FloatOperation::Sub)
-      stack[_STK - 1].setFloat(a.getFloat() - b.getFloat());
-   else if constexpr (Op == FloatOperation::Mul)
-      stack[_STK - 1].setFloat(a.getFloat() * b.getFloat());
-   else if constexpr (Op == FloatOperation::Div)
-      stack[_STK - 1].setFloat(a.getFloat() / b.getFloat());
-
-   // Logical
-   if constexpr (Op == FloatOperation::LT)
-      stack[_STK - 1].setInt(a.getFloat() < b.getFloat());
-   if constexpr (Op == FloatOperation::LE)
-      stack[_STK - 1].setInt(a.getFloat() <= b.getFloat());
-   if constexpr (Op == FloatOperation::GR)
-      stack[_STK - 1].setInt(a.getFloat() > b.getFloat());
-   if constexpr (Op == FloatOperation::GE)
-      stack[_STK - 1].setInt(a.getFloat() >= b.getFloat());
-   if constexpr (Op == FloatOperation::EQ)
-      stack[_STK - 1].setInt(a.getFloat() == b.getFloat());
-   if constexpr (Op == FloatOperation::NE)
-      stack[_STK - 1].setInt(a.getFloat() != b.getFloat());
-
-   _STK--;
-}
-
 //-----------------------------------------------------------------------------
 
 enum class IntegerOperation
@@ -547,6 +547,33 @@ enum class IntegerOperation
    LogicalOr
 };
 
+template<IntegerOperation Op>
+TORQUE_NOINLINE void doSlowIntegerOp()
+{
+   ConsoleValue& a = stack[_STK];
+   ConsoleValue& b = stack[_STK - 1];
+
+   // Bitwise Op
+   if constexpr (Op == IntegerOperation::BitAnd)
+      stack[_STK - 1].setInt(a.getInt() & b.getInt());
+   if constexpr (Op == IntegerOperation::BitOr)
+      stack[_STK - 1].setInt(a.getInt() | b.getInt());
+   if constexpr (Op == IntegerOperation::Xor)
+      stack[_STK - 1].setInt(a.getInt() ^ b.getInt());
+   if constexpr (Op == IntegerOperation::LShift)
+      stack[_STK - 1].setInt(a.getInt() << b.getInt());
+   if constexpr (Op == IntegerOperation::RShift)
+      stack[_STK - 1].setInt(a.getInt() >> b.getInt());
+
+   // Logical Op
+   if constexpr (Op == IntegerOperation::LogicalAnd)
+      stack[_STK - 1].setInt(a.getInt() && b.getInt());
+   if constexpr (Op == IntegerOperation::LogicalOr)
+      stack[_STK - 1].setInt(a.getInt() || b.getInt());
+
+   _STK--;
+}
+
 template<IntegerOperation Op>
 TORQUE_FORCEINLINE void doIntOperation()
 {
@@ -581,33 +608,6 @@ TORQUE_FORCEINLINE void doIntOperation()
    }
 }
 
-template<IntegerOperation Op>
-TORQUE_NOINLINE void doSlowIntegerOp()
-{
-   ConsoleValue& a = stack[_STK];
-   ConsoleValue& b = stack[_STK - 1];
-
-   // Bitwise Op
-   if constexpr (Op == IntegerOperation::BitAnd)
-      stack[_STK - 1].setInt(a.getInt() & b.getInt());
-   if constexpr (Op == IntegerOperation::BitOr)
-      stack[_STK - 1].setInt(a.getInt() | b.getInt());
-   if constexpr (Op == IntegerOperation::Xor)
-      stack[_STK - 1].setInt(a.getInt() ^ b.getInt());
-   if constexpr (Op == IntegerOperation::LShift)
-      stack[_STK - 1].setInt(a.getInt() << b.getInt());
-   if constexpr (Op == IntegerOperation::RShift)
-      stack[_STK - 1].setInt(a.getInt() >> b.getInt());
-
-   // Logical Op
-   if constexpr (Op == IntegerOperation::LogicalAnd)
-      stack[_STK - 1].setInt(a.getInt() && b.getInt());
-   if constexpr (Op == IntegerOperation::LogicalOr)
-      stack[_STK - 1].setInt(a.getInt() || b.getInt());
-
-   _STK--;
-}
-
 //-----------------------------------------------------------------------------
 
 U32 gExecCount = 0;

+ 1 - 1
Engine/source/console/engineAPI.h

@@ -292,7 +292,7 @@ struct EngineUnmarshallData< void >
 template<>
 struct EngineUnmarshallData< ConsoleValue >
 {
-   ConsoleValue operator()( ConsoleValue &ref ) const
+   ConsoleValue operator()( ConsoleValue ref ) const
    {
       return std::move(ref);
    }

+ 3 - 0
Engine/source/platform/types.gcc.h

@@ -43,6 +43,9 @@ typedef unsigned long  U64;
 // Compiler Version
 #define TORQUE_COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
 
+#define TORQUE_FORCEINLINE __attribute__((always_inline))
+#define TORQUE_CASE_FALLTHROUGH __attribute__((fallthrough))
+#define TORQUE_NOINLINE __attribute__ ((noinline))
 
 //--------------------------------------
 // Identify the compiler string