pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:2750:       case F_LOCAL:    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_load_fp_reg();    amd64_load_sp_reg();    mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RCX);    add_reg_imm(P_REG_RCX, b*sizeof(struct svalue));    amd64_push_svaluep(P_REG_RCX);    return;    -  case F_CLEAR_4_LOCAL: -  { -  LABELS(); -  ins_debug_instr_prologue(a-F_OFFSET, b, 0); -  amd64_load_fp_reg(); -  mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RBX); -  add_reg_imm(P_REG_RBX, b*sizeof(struct svalue)); -  mov_imm_reg(3, P_REG_R8 ); -  /* need to use a saving register for the counter. */ -  -  LABEL_A; -  amd64_free_svalue(P_REG_RBX, 0); -  mov_imm_mem(PIKE_T_INT, P_REG_RBX, OFFSETOF(svalue, tu.t.type)); -  mov_imm_mem(0, P_REG_RBX, OFFSETOF(svalue, u.integer)); -  add_reg_imm(P_REG_RBX, sizeof(struct svalue ) ); -  add_reg_imm(P_REG_R8,-1); -  jnz(&label_A); -  } -  return; -  -  case F_CLEAR_2_LOCAL: +     case F_CLEAR_LOCAL: -  ins_debug_instr_prologue(a-F_OFFSET, b, 0); -  amd64_load_fp_reg(); -  mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RBX); -  add_reg_imm(P_REG_RBX, b*sizeof(struct svalue)); -  amd64_free_svalue(P_REG_RBX, 0); -  mov_imm_mem(PIKE_T_INT, P_REG_RBX, OFFSETOF(svalue, tu.t.type)); -  mov_imm_mem(0, P_REG_RBX, OFFSETOF(svalue, u.integer)); -  if( a == F_CLEAR_2_LOCAL ) -  { -  add_reg_imm( P_REG_RBX, sizeof(struct svalue ) ); -  amd64_free_svalue(P_REG_RBX, 0); -  mov_imm_mem(PIKE_T_INT, P_REG_RBX, OFFSETOF(svalue, tu.t.type)); -  mov_imm_mem(0, P_REG_RBX, OFFSETOF(svalue, u.integer)); -  } +  ins_f_byte_with_2_args( F_CLEAR_N_LOCAL, b, 1 );    return;       case F_INC_LOCAL_AND_POP:    {    LABELS();    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_load_fp_reg();    mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RCX);    add_reg_imm(P_REG_RCX, b*sizeof(struct svalue));    mov_sval_type(P_REG_RCX, P_REG_RAX);
pike.git/src/code/amd64.c:3090:    maybe_update_pc();    switch(a) {    case F_NUMBER64:    ins_debug_instr_prologue(a-F_OFFSET, b, c);    amd64_push_int((((unsigned INT64)b)<<32)|(unsigned INT32)c, 0);    return;    case F_MARK_AND_EXTERNAL:    ins_f_byte(F_MARK);    ins_f_byte_with_2_args(F_EXTERNAL, b, c);    return; +  +  case F_CLEAR_N_LOCAL: +  { +  LABELS(); +  ins_debug_instr_prologue(a-F_OFFSET, b, 0); +  amd64_load_fp_reg(); +  mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RBX); +  add_reg_imm(P_REG_RBX, b*sizeof(struct svalue)); +  if( c > 1 ) +  add_reg_imm_reg(P_REG_RBX, c*sizeof(struct svalue), P_REG_RBP ); +  +  LABEL_A; +  amd64_free_svalue(P_REG_RBX, 0); +  mov_imm_mem(PIKE_T_INT, P_REG_RBX, OFFSETOF(svalue, tu.t.type)); +  mov_imm_mem(0, P_REG_RBX, OFFSETOF(svalue, u.integer)); +  if( c > 1 ) +  { +  add_reg_imm(P_REG_RBX, sizeof(struct svalue ) ); +  cmp_reg_reg( P_REG_RBX, P_REG_RBP ); +  jne(&label_A); +  } +  } +  return; +     case F_LOCAL_LOCAL_INDEX:    {    LABELS();    ins_debug_instr_prologue(a-F_OFFSET, b, c);    amd64_load_fp_reg();    mov_mem_reg( fp_reg, OFFSETOF(pike_frame,locals), P_REG_RDX);       add_reg_imm_reg( P_REG_RDX, b*sizeof(struct svalue), P_REG_RBX);    add_reg_imm_reg( P_REG_RDX, c*sizeof(struct svalue), P_REG_RCX);