From 5e721623a0dc02b83a8c98daae1e34584081c759 Mon Sep 17 00:00:00 2001 From: Borja Ferrer <faluco@alliedmods.net> Date: Sun, 27 Apr 2008 19:41:51 +0000 Subject: [PATCH] fixed a math mistake --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402104 --- sourcepawn/jit/x86/jit_x86.cpp | 84 +++++++++++++-------------- sourcepawn/jit/x86/opcode_helpers.cpp | 6 +- sourcepawn/jit/x86/ungen_opcodes.h | 4 +- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/sourcepawn/jit/x86/jit_x86.cpp b/sourcepawn/jit/x86/jit_x86.cpp index 9b2f24cb..931dbde4 100644 --- a/sourcepawn/jit/x86/jit_x86.cpp +++ b/sourcepawn/jit/x86/jit_x86.cpp @@ -52,7 +52,7 @@ inline void WriteOp_Push(JitWriter *jit) cell_t val = jit->read_cell(); IA32_Sub_Rm_Imm8(jit, AMX_REG_STK, 4, MOD_REG); //optimize encoding a bit... - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -75,7 +75,7 @@ inline void WriteOp_Zero(JitWriter *jit) { //mov [ebp+<val>], 0 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Imm32_Disp8(jit, AMX_REG_DAT, 0, (jit_int8_t)val); } else { @@ -87,7 +87,7 @@ inline void WriteOp_Zero_S(JitWriter *jit) { //mov [ebx+<val>], 0 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Imm32_Disp8(jit, AMX_REG_FRM, 0, (jit_int8_t)val); } else { @@ -104,7 +104,7 @@ inline void WriteOp_Push_S(JitWriter *jit) cell_t val = jit->read_cell(); IA32_Sub_Rm_Imm8(jit, AMX_REG_STK, 4, MOD_REG); //optimize encoding a bit... - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -442,7 +442,7 @@ inline void WriteOp_Add_C(JitWriter *jit) { //add eax, <val> cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Add_Rm_Imm8(jit, AMX_REG_PRI, (jit_int8_t)val, MOD_REG); else IA32_Add_Eax_Imm32(jit, val); @@ -452,7 +452,7 @@ inline void WriteOp_SMul_C(JitWriter *jit) { //imul eax, <val> cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_IMul_Reg_Imm8(jit, AMX_REG_PRI, MOD_REG, (jit_int8_t)val); else IA32_IMul_Reg_Imm32(jit, AMX_REG_PRI, MOD_REG, val); @@ -540,7 +540,7 @@ inline void WriteOp_Eq_C_Pri(JitWriter *jit) //mov eax, 0 //sete al cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Cmp_Rm_Imm8(jit, MOD_REG, AMX_REG_PRI, (jit_int8_t)val); else IA32_Cmp_Eax_Imm32(jit, val); @@ -555,7 +555,7 @@ inline void WriteOp_Eq_C_Alt(JitWriter *jit) //sete al cell_t val = jit->read_cell(); IA32_Xor_Reg_Rm(jit, AMX_REG_PRI, AMX_REG_PRI, MOD_REG); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Cmp_Rm_Imm8(jit, MOD_REG, AMX_REG_ALT, (jit_int8_t)val); else IA32_Cmp_Rm_Imm32(jit, MOD_REG, AMX_REG_ALT, val); @@ -578,7 +578,7 @@ inline void WriteOp_Inc(JitWriter *jit) { //add [ebp+<val>], 1 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Add_Rm_Imm8_Disp8(jit, AMX_REG_DAT, 1, (jit_int8_t)val); else IA32_Add_Rm_Imm8_Disp32(jit, AMX_REG_DAT, 1, val); @@ -588,7 +588,7 @@ inline void WriteOp_Inc_S(JitWriter *jit) { //add [ebx+<val>], 1 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Add_Rm_Imm8_Disp8(jit, AMX_REG_FRM, 1, (jit_int8_t)val); else IA32_Add_Rm_Imm8_Disp32(jit, AMX_REG_FRM, 1, val); @@ -616,7 +616,7 @@ inline void WriteOp_Dec(JitWriter *jit) { //sub [ebp+<val>], 1 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Sub_Rm_Imm8_Disp8(jit, AMX_REG_DAT, 1, (jit_int8_t)val); } else { @@ -628,7 +628,7 @@ inline void WriteOp_Dec_S(JitWriter *jit) { //sub [ebx+<val>], 1 cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Sub_Rm_Imm8_Disp8(jit, AMX_REG_FRM, 1, (jit_int8_t)val); } else { @@ -646,7 +646,7 @@ inline void WriteOp_Load_Pri(JitWriter *jit) { //mov eax, [ebp+<val>] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_PRI, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -658,7 +658,7 @@ inline void WriteOp_Load_Alt(JitWriter *jit) { //mov edx, [ebp+<val>] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_ALT, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -670,7 +670,7 @@ inline void WriteOp_Load_S_Pri(JitWriter *jit) { //mov eax, [ebx+<val>] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_PRI, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -682,7 +682,7 @@ inline void WriteOp_Load_S_Alt(JitWriter *jit) { //mov edx, [ebx+<val>] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_ALT, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -695,7 +695,7 @@ inline void WriteOp_Lref_Pri(JitWriter *jit) //mov eax, [ebp+<val>] //mov eax, [ebp+eax] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_PRI, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -709,7 +709,7 @@ inline void WriteOp_Lref_Alt(JitWriter *jit) //mov edx, [ebp+<val>] //mov edx, [ebp+edx] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_ALT, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -723,7 +723,7 @@ inline void WriteOp_Lref_S_Pri(JitWriter *jit) //mov eax, [ebx+<val>] //mov eax, [ebp+eax] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_PRI, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -737,7 +737,7 @@ inline void WriteOp_Lref_S_Alt(JitWriter *jit) //mov edx, [ebx+<val>] //mov edx, [ebp+edx] cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_ALT, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -766,7 +766,7 @@ inline void WriteOp_Addr_Pri(JitWriter *jit) //add eax, <val> cell_t val = jit->read_cell(); IA32_Mov_Reg_Rm(jit, AMX_REG_PRI, AMX_REG_INFO, MOD_MEM_REG); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Add_Rm_Imm8(jit, AMX_REG_PRI, (jit_int8_t)val, MOD_REG); } else { @@ -780,7 +780,7 @@ inline void WriteOp_Addr_Alt(JitWriter *jit) //add edx, <val> cell_t val = jit->read_cell(); IA32_Mov_Reg_Rm(jit, AMX_REG_ALT, AMX_REG_INFO, MOD_MEM_REG); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Add_Rm_Imm8(jit, AMX_REG_ALT, (jit_int8_t)val, MOD_REG); } else { @@ -792,7 +792,7 @@ inline void WriteOp_Stor_Pri(JitWriter *jit) { //mov [ebp+<val>], eax cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_DAT, AMX_REG_PRI, (jit_int8_t)val); } else { @@ -804,7 +804,7 @@ inline void WriteOp_Stor_Alt(JitWriter *jit) { //mov [ebp+<val>], edx cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_DAT, AMX_REG_ALT, (jit_int8_t)val); } else { @@ -816,7 +816,7 @@ inline void WriteOp_Stor_S_Pri(JitWriter *jit) { //mov [ebx+<val>], eax cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_FRM, AMX_REG_PRI, (jit_int8_t)val); } else { @@ -828,7 +828,7 @@ inline void WriteOp_Stor_S_Alt(JitWriter *jit) { //mov [ebx+<val>], edx cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Rm_Reg_Disp8(jit, AMX_REG_FRM, AMX_REG_ALT, (jit_int8_t)val); } else { @@ -847,7 +847,7 @@ inline void WriteOp_Sref_Pri(JitWriter *jit) //mov ecx, [ebp+<val>] //mov [ebp+ecx], eax cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -861,7 +861,7 @@ inline void WriteOp_Sref_Alt(JitWriter *jit) //mov ecx, [ebp+<val>] //mov [ebp+ecx], edx cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_DAT, (jit_int8_t)val); } else { @@ -875,7 +875,7 @@ inline void WriteOp_Sref_S_Pri(JitWriter *jit) //mov ecx, [ebx+<val>] //mov [ebp+ecx], eax cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -889,7 +889,7 @@ inline void WriteOp_Sref_S_Alt(JitWriter *jit) //mov ecx, [ebx+<val>] //mov [ebp+ecx], edx cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_FRM, (jit_int8_t)val); } else { @@ -947,7 +947,7 @@ inline void WriteOp_PushAddr(JitWriter *jit) cell_t val = jit->read_cell(); IA32_Mov_Reg_Rm(jit, AMX_REG_TMP, AMX_REG_INFO, MOD_MEM_REG); IA32_Sub_Rm_Imm8(jit, AMX_REG_STK, 4, MOD_REG); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Add_Rm_Imm8(jit, AMX_REG_TMP, (jit_int8_t)val, MOD_REG); } else { @@ -1097,7 +1097,7 @@ inline void WriteOp_Const(JitWriter *jit) //mov [ebp+<addr>], <val> cell_t addr = jit->read_cell(); cell_t val = jit->read_cell(); - if (addr < SCHAR_MAX && addr > SCHAR_MIN) + if (addr <= SCHAR_MAX && addr >= SCHAR_MIN) { IA32_Mov_Rm_Imm32_Disp8(jit, AMX_REG_DAT, val, (jit_int8_t)addr); } else { @@ -1110,7 +1110,7 @@ inline void WriteOp_Const_S(JitWriter *jit) //mov [ebx+<offs>], <val> cell_t offs = jit->read_cell(); cell_t val = jit->read_cell(); - if (offs < SCHAR_MAX && offs > SCHAR_MIN) + if (offs <= SCHAR_MAX && offs >= SCHAR_MIN) { IA32_Mov_Rm_Imm32_Disp8(jit, AMX_REG_FRM, val, (jit_int8_t)offs); } else { @@ -1194,7 +1194,7 @@ inline void WriteOp_Stack(JitWriter *jit) { //add edi, <val> cell_t val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Add_Rm_Imm8(jit, AMX_REG_STK, (jit_int8_t)val, MOD_REG); } else { @@ -1217,7 +1217,7 @@ inline void WriteOp_StackAdjust(JitWriter *jit) //lea edi, [ebx-val] - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Lea_DispRegImm8(jit, AMX_REG_STK, AMX_REG_FRM, val); } @@ -1237,7 +1237,7 @@ inline void WriteOp_Heap(JitWriter *jit) //add [esi+hea], <val> cell_t val = jit->read_cell(); IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_ALT, AMX_REG_INFO, AMX_INFO_HEAP); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Add_Rm_Imm8_Disp8(jit, AMX_REG_INFO, (jit_int8_t)val, AMX_INFO_HEAP); } else { @@ -1401,7 +1401,7 @@ inline void WriteOp_Bounds(JitWriter *jit) //cmp eax, <val> //ja :error - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Cmp_Rm_Imm8(jit, MOD_REG, AMX_REG_PRI, (jit_int8_t)val); } else { @@ -1568,7 +1568,7 @@ inline void WriteOp_Switch(JitWriter *jit) /* negate it so we'll get a lower bound of 0 */ //lea ecx, [eax-<LOWER_BOUND>] low_bound = -low_bound; - if (low_bound > SCHAR_MIN && low_bound < SCHAR_MAX) + if (low_bound >= SCHAR_MIN && low_bound <= SCHAR_MAX) { IA32_Lea_DispRegImm8(jit, AMX_REG_TMP, AMX_REG_PRI, low_bound); } else { @@ -1580,7 +1580,7 @@ inline void WriteOp_Switch(JitWriter *jit) } cell_t high_bound = abs(cases[0].val - cases[num_cases-1].val); //cmp ecx, <UPPER BOUND BOUND> - if (high_bound > SCHAR_MIN && high_bound < SCHAR_MAX) + if (high_bound >= SCHAR_MIN && high_bound <= SCHAR_MAX) { IA32_Cmp_Rm_Imm8(jit, MOD_REG, AMX_REG_TMP, high_bound); } else { @@ -1628,7 +1628,7 @@ inline void WriteOp_Switch(JitWriter *jit) { val = cases[i].val; //cmp eax, <val> OR cmp al, <val> - if (val > SCHAR_MIN && val < SCHAR_MAX) + if (val >= SCHAR_MIN && val <= SCHAR_MAX) { IA32_Cmp_Al_Imm8(jit, val); } else { @@ -1732,7 +1732,7 @@ inline void WriteOp_Sysreq_N(JitWriter *jit) //push edi ; stack //push <native> ; native index IA32_Push_Reg(jit, AMX_REG_STK); - if (native_index < SCHAR_MAX && native_index > SCHAR_MIN) + if (native_index <= SCHAR_MAX && native_index >= SCHAR_MIN) { IA32_Push_Imm8(jit, (jit_int8_t)native_index); } else { @@ -1808,7 +1808,7 @@ inline void WriteOp_Sysreq_N(JitWriter *jit) num_params++; num_params *= 4; //add edi, <val*4+4> - if (num_params < SCHAR_MAX && num_params > SCHAR_MIN) + if (num_params <= SCHAR_MAX && num_params >= SCHAR_MIN) { IA32_Add_Rm_Imm8(jit, AMX_REG_STK, (jit_int8_t)num_params, MOD_REG); } else { diff --git a/sourcepawn/jit/x86/opcode_helpers.cpp b/sourcepawn/jit/x86/opcode_helpers.cpp index 079e23aa..decb81bd 100644 --- a/sourcepawn/jit/x86/opcode_helpers.cpp +++ b/sourcepawn/jit/x86/opcode_helpers.cpp @@ -339,7 +339,7 @@ void Macro_PushN_Addr(JitWriter *jit, int i) do { val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Lea_DispRegImm8(jit, AMX_REG_TMP, AMX_REG_PRI, (jit_int8_t)val); else IA32_Lea_DispRegImm32(jit, AMX_REG_TMP, AMX_REG_PRI, val); @@ -361,7 +361,7 @@ void Macro_PushN_S(JitWriter *jit, int i) do { val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_FRM, (jit_int8_t)val); else IA32_Mov_Reg_Rm_Disp32(jit, AMX_REG_TMP, AMX_REG_FRM, val); @@ -396,7 +396,7 @@ void Macro_PushN(JitWriter *jit, int i) do { val = jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) IA32_Mov_Reg_Rm_Disp8(jit, AMX_REG_TMP, AMX_REG_DAT, (jit_int8_t)val); else IA32_Mov_Reg_Rm_Disp32(jit, AMX_REG_TMP, AMX_REG_DAT, val); diff --git a/sourcepawn/jit/x86/ungen_opcodes.h b/sourcepawn/jit/x86/ungen_opcodes.h index 20810474..b7f95b8a 100644 --- a/sourcepawn/jit/x86/ungen_opcodes.h +++ b/sourcepawn/jit/x86/ungen_opcodes.h @@ -70,7 +70,7 @@ inline void WriteOp_Align_Pri(JitWriter *jit) { //xor eax, <cellsize - val> cell_t val = sizeof(cell_t) - jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Xor_Rm_Imm8(jit, AMX_REG_PRI, MOD_REG, (jit_int8_t)val); } else { @@ -82,7 +82,7 @@ inline void WriteOp_Align_Alt(JitWriter *jit) { //xor edx, <cellsize - val> cell_t val = sizeof(cell_t) - jit->read_cell(); - if (val < SCHAR_MAX && val > SCHAR_MIN) + if (val <= SCHAR_MAX && val >= SCHAR_MIN) { IA32_Xor_Rm_Imm8(jit, AMX_REG_ALT, MOD_REG, (jit_int8_t)val); } else {