pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:2608:    return;       case F_ASSIGN_LOCAL_AND_POP:    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_assign_local(b);    amd64_add_sp(-1);    return;       case F_ASSIGN_PRIVATE_GLOBAL_AND_POP:    case F_ASSIGN_PRIVATE_GLOBAL: +  { +  LABELS();    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_get_storage( P_REG_RBX, b ); -  +  /* do not assign if this object is destructed. */ +  mov_mem_reg( fp_reg, OFFSETOF(pike_frame,current_object), ARG1_REG ); +  mov_mem_reg( ARG1_REG, OFFSETOF(object,prog), P_REG_RAX ); +  test_reg(P_REG_RAX); +  jnz(&label_A); +  /* Note: will throw error ('cannot index destructed object' or similar). +  * Note: Only arg1 is corret here (to the destructed object) +  */ +  amd64_call_c_function(object_low_set_index); +  LABEL_A; +     amd64_free_svalue( P_REG_RBX, 0 );    amd64_load_sp_reg();       if( a == F_ASSIGN_PRIVATE_GLOBAL_AND_POP )    {    amd64_add_sp(-1);    amd64_assign_svalue_no_free( P_REG_RBX, sp_reg, 0);    }    else    {    amd64_assign_svalue_no_free( P_REG_RBX, sp_reg, -sizeof(struct svalue)); -  amd64_ref_svalue(P_REG_RBX,0); /* already have type in RAX (from assign_svalue) */ +  amd64_ref_svalue(P_REG_RBX,0);    } -  +  }    return;       case F_ASSIGN_GLOBAL:    case F_ASSIGN_GLOBAL_AND_POP:    /* arg1: pike_fp->current obj    arg2: arg1+idenfier level    arg3: Pike_sp-1    */    /* NOTE: We cannot simply do the same optimization as for    ASSIGN_LOCAL_AND_POP with assign global, since assigning