mirror of
https://github.com/alliedmodders/sourcemod.git
synced 2025-12-07 10:28:34 +00:00
Rename float opcodes.
This commit is contained in:
parent
ce55dc6961
commit
7eae305da6
@ -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,
|
||||
|
||||
@ -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 },
|
||||
};
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user