From d3d92291f613adb0fbdac4c271fbb43fc4c69031 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 18 Jan 2014 17:44:20 +0100 Subject: [PATCH] Reorder switch cases to match opcode order. --- jscompile.h | 30 ++++++++++---------- jsrun.c | 80 ++++++++++++++++++++++++++++++----------------------- 2 files changed, 60 insertions(+), 50 deletions(-) diff --git a/jscompile.h b/jscompile.h index 6c42e3a..d76ef06 100644 --- a/jscompile.h +++ b/jscompile.h @@ -50,25 +50,25 @@ enum OP_BITNOT, OP_LOGNOT, - OP_BITOR, - OP_BITXOR, - OP_BITAND, - OP_EQ, - OP_NE, - OP_STRICTEQ, - OP_STRICTNE, + OP_MUL, + OP_DIV, + OP_MOD, + OP_ADD, + OP_SUB, + OP_SHL, + OP_SHR, + OP_USHR, OP_LT, OP_GT, OP_LE, OP_GE, - OP_SHL, - OP_SHR, - OP_USHR, - OP_ADD, - OP_SUB, - OP_MUL, - OP_DIV, - OP_MOD, + OP_EQ, + OP_NE, + OP_STRICTEQ, + OP_STRICTNE, + OP_BITAND, + OP_BITXOR, + OP_BITOR, OP_INSTANCEOF, diff --git a/jsrun.c b/jsrun.c index 7a27eb5..85181f5 100644 --- a/jsrun.c +++ b/jsrun.c @@ -590,6 +590,8 @@ static void jsR_run(js_State *J, js_Function *F) } break; + /* Function calls */ + case OP_CALL: js_call(J, *pc++); break; @@ -598,7 +600,7 @@ static void jsR_run(js_State *J, js_Function *F) js_construct(J, *pc++); break; - /* Unary expressions */ + /* Unary operators */ case OP_TYPEOF: str = js_typeof(J, -1); @@ -630,18 +632,7 @@ static void jsR_run(js_State *J, js_Function *F) js_pushboolean(J, !b); break; - /* Binary expressions */ - - case OP_ADD: - jsR_concat(J); - break; - - case OP_SUB: - x = js_tonumber(J, -2); - y = js_tonumber(J, -1); - js_pop(J, 2); - js_pushnumber(J, x - y); - break; + /* Multiplicative operators */ case OP_MUL: x = js_tonumber(J, -2); @@ -664,6 +655,21 @@ static void jsR_run(js_State *J, js_Function *F) js_pushnumber(J, fmod(x, y)); break; + /* Additive operators */ + + case OP_ADD: + jsR_concat(J); + break; + + case OP_SUB: + x = js_tonumber(J, -2); + y = js_tonumber(J, -1); + js_pop(J, 2); + js_pushnumber(J, x - y); + break; + + /* Shift operators */ + case OP_SHL: x = js_tonumber(J, -2); y = js_tonumber(J, -1); @@ -685,28 +691,7 @@ static void jsR_run(js_State *J, js_Function *F) js_pushnumber(J, touint32(x) >> (touint32(y) & 0x1F)); break; break; - case OP_BITAND: - x = js_tonumber(J, -2); - y = js_tonumber(J, -1); - js_pop(J, 2); - js_pushnumber(J, toint32(x) & toint32(y)); - break; - - case OP_BITXOR: - x = js_tonumber(J, -2); - y = js_tonumber(J, -1); - js_pop(J, 2); - js_pushnumber(J, toint32(x) ^ toint32(y)); - break; - - case OP_BITOR: - x = js_tonumber(J, -2); - y = js_tonumber(J, -1); - js_pop(J, 2); - js_pushnumber(J, toint32(x) | toint32(y)); - break; - - /* Relational expressions */ + /* Relational operators */ /* TODO: string comparisons */ case OP_LT: @@ -734,6 +719,8 @@ static void jsR_run(js_State *J, js_Function *F) js_pushboolean(J, x >= y); break; + /* Equality */ + case OP_EQ: case OP_STRICTEQ: x = js_tonumber(J, -2); @@ -749,6 +736,29 @@ static void jsR_run(js_State *J, js_Function *F) js_pushboolean(J, x != y); break; + /* Binary bitwise operators */ + + case OP_BITAND: + x = js_tonumber(J, -2); + y = js_tonumber(J, -1); + js_pop(J, 2); + js_pushnumber(J, toint32(x) & toint32(y)); + break; + + case OP_BITXOR: + x = js_tonumber(J, -2); + y = js_tonumber(J, -1); + js_pop(J, 2); + js_pushnumber(J, toint32(x) ^ toint32(y)); + break; + + case OP_BITOR: + x = js_tonumber(J, -2); + y = js_tonumber(J, -1); + js_pop(J, 2); + js_pushnumber(J, toint32(x) | toint32(y)); + break; + /* Branching */ case OP_DEBUGGER: