From b796c503fa58797f094c688b038dc426a67ad568 Mon Sep 17 00:00:00 2001 From: mirichi Date: Tue, 15 Apr 2014 19:30:42 +0900 Subject: OP_EQ系が速くなった MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/vm.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/vm.c b/src/vm.c index 5b9a7bf65..320282742 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1888,34 +1888,33 @@ RETRY_TRY_BLOCK: NEXT; } -#define OP_CMP_BODY(op,v1,v2) do {\ - if (regs[a].v1 op regs[a+1].v2) {\ - SET_TRUE_VALUE(regs[a]);\ - }\ - else {\ - SET_FALSE_VALUE(regs[a]);\ - }\ -} while(0) +#define OP_CMP_BODY(op,v1,v2) (regs[a].v1 op regs[a+1].v2) #define OP_CMP(op) do {\ - int a = GETARG_A(i);\ + int result;\ /* need to check if - is overridden */\ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\ case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):\ - OP_CMP_BODY(op,attr_i,attr_i);\ + result = OP_CMP_BODY(op,attr_i,attr_i);\ break;\ case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT):\ - OP_CMP_BODY(op,attr_i,attr_f);\ + result = OP_CMP_BODY(op,attr_i,attr_f);\ break;\ case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM):\ - OP_CMP_BODY(op,attr_f,attr_i);\ + result = OP_CMP_BODY(op,attr_f,attr_i);\ break;\ case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT):\ - OP_CMP_BODY(op,attr_f,attr_f);\ + result = OP_CMP_BODY(op,attr_f,attr_f);\ break;\ default:\ goto L_SEND;\ }\ + if (result) {\ + SET_TRUE_VALUE(regs[a]);\ + }\ + else {\ + SET_FALSE_VALUE(regs[a]);\ + }\ } while(0) CASE(OP_EQ) { @@ -1932,24 +1931,28 @@ RETRY_TRY_BLOCK: CASE(OP_LT) { /* A B C R(A) := R(A)); NEXT; } CASE(OP_GE) { /* A B C R(A) := R(A)<=R(A+1) (Syms[B]=:<=,C=1)*/ + int a = GETARG_A(i); OP_CMP(>=); NEXT; } -- cgit v1.2.3