diff --git a/sourcepawn/include/smx/smx-v1-opcodes.h b/sourcepawn/include/smx/smx-v1-opcodes.h index 594c7b155..b0879c2a2 100644 --- a/sourcepawn/include/smx/smx-v1-opcodes.h +++ b/sourcepawn/include/smx/smx-v1-opcodes.h @@ -235,24 +235,24 @@ namespace sp { _(STRADJUST_PRI, "stradjust.pri") \ _(UNGEN_STKADJUST,"stackadjust") \ _(ENDPROC, "endproc") \ - _(FABS, "fabs") \ - _(FLOAT, "float") \ - _(FLOATADD, "float.add") \ - _(FLOATSUB, "float.sub") \ - _(FLOATMUL, "float.mul") \ - _(FLOATDIV, "float.div") \ - _(RND_TO_NEAREST, "round") \ - _(RND_TO_FLOOR, "floor") \ - _(RND_TO_CEIL, "ceil") \ - _(RND_TO_ZERO, "rndtozero") \ - _(FLOATCMP, "float.cmp") \ - _(FLOAT_GT, "float.gt") \ - _(FLOAT_GE, "float.ge") \ - _(FLOAT_LT, "float.lt") \ - _(FLOAT_LE, "float.le") \ - _(FLOAT_NE, "float.ne") \ - _(FLOAT_EQ, "float.eq") \ - _(FLOAT_NOT, "float.not") + _(ABS_F32, "abs.f32") \ + _(CVT_I32_TO_F32, "cvt.i32.f32") \ + _(ADD_F32, "add.f32") \ + _(SUB_F32, "sub.f32") \ + _(MUL_F32, "mul.f32") \ + _(DIV_F32, "div.f32") \ + _(RND_F32_TO_NEAREST, "round.f32") \ + _(RND_F32_TO_FLOOR, "floor.f32") \ + _(RND_F32_TO_CEIL, "ceil.f32") \ + _(RND_F32_TO_ZERO, "rndtozero.f32") \ + _(CMP_F32, "cmp.f32") \ + _(GT_F32, "gt.f32") \ + _(GE_F32, "ge.f32") \ + _(LT_F32, "lt.f32") \ + _(LE_F32, "le.f32") \ + _(NE_F32, "ne.f32") \ + _(EQ_F32, "eq.f32") \ + _(NOT_F32, "not.f32") enum OPCODE { #define _(op, text) OP_##op, diff --git a/sourcepawn/jit/BaseRuntime.cpp b/sourcepawn/jit/BaseRuntime.cpp index 2fade850e..d81a25ed1 100644 --- a/sourcepawn/jit/BaseRuntime.cpp +++ b/sourcepawn/jit/BaseRuntime.cpp @@ -82,24 +82,24 @@ struct NativeMapping { }; static const NativeMapping sNativeMap[] = { - { "FloatAbs", OP_FABS }, - { "FloatAdd", OP_FLOATADD }, - { "FloatSub", OP_FLOATSUB }, - { "FloatMul", OP_FLOATMUL }, - { "FloatDiv", OP_FLOATDIV }, - { "float", OP_FLOAT }, - { "FloatCompare", OP_FLOATCMP }, - { "RoundToCeil", OP_RND_TO_CEIL }, - { "RoundToZero", OP_RND_TO_ZERO }, - { "RoundToFloor", OP_RND_TO_FLOOR }, - { "RoundToNearest", OP_RND_TO_NEAREST }, - { "__FLOAT_GT__", OP_FLOAT_GT }, - { "__FLOAT_GE__", OP_FLOAT_GE }, - { "__FLOAT_LT__", OP_FLOAT_LT }, - { "__FLOAT_LE__", OP_FLOAT_LE }, - { "__FLOAT_EQ__", OP_FLOAT_EQ }, - { "__FLOAT_NE__", OP_FLOAT_NE }, - { "__FLOAT_NOT__", OP_FLOAT_NOT }, + { "FloatAbs", OP_ABS_F32 }, + { "FloatAdd", OP_ADD_F32 }, + { "FloatSub", OP_SUB_F32 }, + { "FloatMul", OP_MUL_F32 }, + { "FloatDiv", OP_DIV_F32 }, + { "float", OP_CVT_I32_TO_F32 }, + { "FloatCompare", OP_CMP_F32 }, + { "RoundToCeil", OP_RND_F32_TO_CEIL }, + { "RoundToZero", OP_RND_F32_TO_ZERO }, + { "RoundToFloor", OP_RND_F32_TO_FLOOR }, + { "RoundToNearest", OP_RND_F32_TO_NEAREST }, + { "__FLOAT_GT__", OP_GT_F32 }, + { "__FLOAT_GE__", OP_GE_F32 }, + { "__FLOAT_LT__", OP_LT_F32 }, + { "__FLOAT_LE__", OP_LE_F32 }, + { "__FLOAT_EQ__", OP_EQ_F32 }, + { "__FLOAT_NE__", OP_NE_F32 }, + { "__FLOAT_NOT__", OP_NOT_F32 }, { NULL, 0 }, }; diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 8b25aa4ab..00c52ad64 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -43,10 +43,6 @@ using namespace sp; using namespace Knight; -#if defined USE_UNGEN_OPCODES -#include "ungen_opcodes.h" -#endif - #define __ masm. JITX86 g_Jit; @@ -977,13 +973,13 @@ Compiler::emitOp(OPCODE op) __ sarl(pri, 2); break; - case OP_FABS: + case OP_ABS_F32: __ movl(pri, Operand(stk, 0)); __ andl(pri, 0x7fffffff); __ addl(stk, 4); break; - case OP_FLOAT: + case OP_CVT_I32_TO_F32: if (MacroAssemblerX86::Features().sse2) { __ cvtsi2ss(xmm0, Operand(edi, 0)); __ movd(pri, xmm0); @@ -996,32 +992,32 @@ Compiler::emitOp(OPCODE op) __ addl(stk, 4); break; - case OP_FLOATADD: - case OP_FLOATSUB: - case OP_FLOATMUL: - case OP_FLOATDIV: + case OP_ADD_F32: + case OP_SUB_F32: + case OP_MUL_F32: + case OP_DIV_F32: if (MacroAssemblerX86::Features().sse2) { __ movss(xmm0, Operand(stk, 0)); - if (op == OP_FLOATADD) + if (op == OP_ADD_F32) __ addss(xmm0, Operand(stk, 4)); - else if (op == OP_FLOATSUB) + else if (op == OP_SUB_F32) __ subss(xmm0, Operand(stk, 4)); - else if (op == OP_FLOATMUL) + else if (op == OP_MUL_F32) __ mulss(xmm0, Operand(stk, 4)); - else if (op == OP_FLOATDIV) + else if (op == OP_DIV_F32) __ divss(xmm0, Operand(stk, 4)); __ movd(pri, xmm0); } else { __ subl(esp, 4); __ fld32(Operand(stk, 0)); - if (op == OP_FLOATADD) + if (op == OP_ADD_F32) __ fadd32(Operand(stk, 4)); - else if (op == OP_FLOATSUB) + else if (op == OP_SUB_F32) __ fsub32(Operand(stk, 4)); - else if (op == OP_FLOATMUL) + else if (op == OP_MUL_F32) __ fmul32(Operand(stk, 4)); - else if (op == OP_FLOATDIV) + else if (op == OP_DIV_F32) __ fdiv32(Operand(stk, 4)); __ fstp32(Operand(esp, 0)); @@ -1030,7 +1026,7 @@ Compiler::emitOp(OPCODE op) __ addl(stk, 8); break; - case OP_RND_TO_NEAREST: + case OP_RND_F32_TO_NEAREST: { if (MacroAssemblerX86::Features().sse) { // Assume no one is touching MXCSR. @@ -1050,7 +1046,7 @@ Compiler::emitOp(OPCODE op) break; } - case OP_RND_TO_CEIL: + case OP_RND_F32_TO_CEIL: { static float kRoundToCeil = -0.5f; // From http://wurstcaptures.untergrund.net/assembler_tricks.html#fastfloorf @@ -1066,7 +1062,7 @@ Compiler::emitOp(OPCODE op) break; } - case OP_RND_TO_ZERO: + case OP_RND_F32_TO_ZERO: if (MacroAssemblerX86::Features().sse) { __ cvttss2si(pri, Operand(stk, 0)); } else { @@ -1083,7 +1079,7 @@ Compiler::emitOp(OPCODE op) __ addl(stk, 4); break; - case OP_RND_TO_FLOOR: + case OP_RND_F32_TO_FLOOR: __ fld32(Operand(stk, 0)); __ subl(esp, 8); __ fstcw(Operand(esp, 4)); @@ -1100,7 +1096,7 @@ Compiler::emitOp(OPCODE op) // compiled code it should not be used or generated. // // Note that the checks here are inverted: the test is |rhs OP lhs|. - case OP_FLOATCMP: + case OP_CMP_F32: { Label bl, ab, done; if (MacroAssemblerX86::Features().sse) { @@ -1126,31 +1122,31 @@ Compiler::emitOp(OPCODE op) break; } - case OP_FLOAT_GT: + case OP_GT_F32: emitFloatCmp(above); break; - case OP_FLOAT_GE: + case OP_GE_F32: emitFloatCmp(above_equal); break; - case OP_FLOAT_LE: + case OP_LE_F32: emitFloatCmp(below_equal); break; - case OP_FLOAT_LT: + case OP_LT_F32: emitFloatCmp(below); break; - case OP_FLOAT_EQ: + case OP_EQ_F32: emitFloatCmp(equal); break; - case OP_FLOAT_NE: + case OP_NE_F32: emitFloatCmp(not_equal); break; - case OP_FLOAT_NOT: + case OP_NOT_F32: { if (MacroAssemblerX86::Features().sse) { __ xorps(xmm0, xmm0);