Branch: Tag:

2014-09-01

2014-09-01 10:23:12 by Per Hedbor <ph@opera.com>

Fixed some issues with +/- int and re-enabled F_MOD_INT.

3040:    LABEL_B;    }    return; - /* case F_XOR_INT: */ +  +  case F_MOD_INT:    case F_DIVIDE_INT:    if( b == 0 )    {
3226:    LABELS();    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_load_sp_reg(); -  mov_mem16_reg( sp_reg, -sizeof(struct svalue), P_REG_RAX ); -  cmp_reg32_imm( P_REG_RAX,PIKE_T_INT ); -  jne( &label_A ); -  mov_mem_reg(sp_reg, -  -sizeof(struct svalue)+OFFSETOF(svalue,u.integer), -  P_REG_RAX ); -  test_reg32( P_REG_RAX ); -  jz( &label_C ); -  +  mov_mem8_reg( sp_reg,SVAL(-1).type, P_REG_RAX ); +  test_reg32(P_REG_RAX); +  jnz( &label_A ); +  mov_mem_reg(sp_reg, SVAL(-1).value,P_REG_RAX );    add_reg_imm( P_REG_RAX, b );    jo( &label_A ); /* if overflow, use f_add */ -  mov_reg_mem( P_REG_RAX,sp_reg, -  -sizeof(struct svalue)+OFFSETOF(svalue,u.integer)); +  mov_imm_mem( PIKE_T_INT, sp_reg, SVAL(-1).type ); +  mov_reg_mem( P_REG_RAX, sp_reg, SVAL(-1).value );    jmp(&label_B); /* all done. */       LABEL_A;
3246:    update_arg1(2);    amd64_call_c_opcode( f_add, I_UPDATE_SP );    amd64_load_sp_reg(); -  jmp( &label_B ); -  LABEL_C; -  // int, and 0, we need to set it to b and clear subtype -  mov_imm_mem( PIKE_T_INT, sp_reg, -sizeof(struct svalue ) ); -  mov_imm_mem( b, sp_reg, -  -sizeof(struct svalue )+OFFSETOF(svalue,u.integer) ); +     LABEL_B;    }    return;