Branch: Tag:

1999-10-23

1999-10-23 00:26:56 by Fredrik Noring <noring@nocrew.org>

Trying to fix optimised arithmetics inlined as bytecode in the interpreter.

Rev: src/interpret.c:1.130
Rev: src/interpreter.h:1.14

436:       CASE(F_INC_LOCAL);    instr=GET_ARG(); + #ifdef AUTO_BIGNUM +  if(fp->locals[instr].type == T_INT && +  !INT_TYPE_ADD_OVERFLOW(fp->locals[instr].u.integer, 1)) + #else    if(fp->locals[instr].type == T_INT) -  + #endif /* AUTO_BIGNUM */    {    fp->locals[instr].u.integer++;    assign_svalue_no_free(sp++,fp->locals+instr); -  }else{ +  } +  else +  {    assign_svalue_no_free(sp++,fp->locals+instr);    push_int(1);    f_add(2);
456:    CASE(F_INC_LOCAL_AND_POP);    instr=GET_ARG();    inc_local_and_pop: + #ifdef AUTO_BIGNUM +  if(fp->locals[instr].type == T_INT && +  !INT_TYPE_ADD_OVERFLOW(fp->locals[instr].u.integer, 1)) + #else    if(fp->locals[instr].type == T_INT) -  + #endif /* AUTO_BIGNUM */    {    fp->locals[instr].u.integer++;    }else{
470:       CASE(F_DEC_LOCAL);    instr=GET_ARG(); + #ifdef AUTO_BIGNUM +  if(fp->locals[instr].type == T_INT && +  !INT_TYPE_SUB_OVERFLOW(fp->locals[instr].u.integer, 1)) + #else    if(fp->locals[instr].type == T_INT) -  + #endif /* AUTO_BIGNUM */    {    fp->locals[instr].u.integer--;    assign_svalue_no_free(sp++,fp->locals+instr);
492:    CASE(F_DEC_LOCAL_AND_POP);    instr=GET_ARG();    dec_local_and_pop: + #ifdef AUTO_BIGNUM +  if(fp->locals[instr].type == T_INT && +  !INT_TYPE_SUB_OVERFLOW(fp->locals[instr].u.integer, 1)) + #else    if(fp->locals[instr].type == T_INT) -  + #endif /* AUTO_BIGNUM */    {    fp->locals[instr].u.integer--;    }else{
589:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=++ u->integer;    pop_n_elems(2);    push_int(u->integer);
608:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=-- u->integer;    pop_n_elems(2);    push_int(u->integer);
627:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=-- u->integer;    pop_n_elems(2);    }else{
644:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=++ u->integer;    pop_n_elems(2);    }else{
661:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=u->integer ++;    pop_n_elems(2);    push_int(instr);
681:    union anything *u=get_pointer_if_this_type(sp-2, T_INT);    if(u)    { +  /* FIXME: Bignum. */    instr=u->integer --;    pop_n_elems(2);    push_int(instr);
1042:    CASE(F_NEGATE);    if(sp[-1].type == T_INT)    { + #ifdef AUTO_BIGNUM +  if(INT_TYPE_NEG_OVERFLOW(sp[-1].u.integer)) +  { +  convert_stack_top_to_bignum(); +  o_negate(); +  } +  else + #endif /* AUTO_BIGNUM */    sp[-1].u.integer =- sp[-1].u.integer; -  }else if(sp[-1].type == T_FLOAT) +  } +  else if(sp[-1].type == T_FLOAT)    {    sp[-1].u.float_number =- sp[-1].u.float_number;    }else{