pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:3374:    mov_reg_reg( fp_reg, P_REG_RAX );    while(c--)    mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,scope), P_REG_RAX );    mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,locals), P_REG_RAX );    add_reg_imm_reg( P_REG_RAX, b*sizeof(struct svalue), P_REG_RBX );    amd64_push_svaluep( P_REG_RBX );    return;    }    /* use c version. Could have a loop version here. */    break; +  +  case F_LEXICAL_LOCAL_LVALUE: +  if( c < 5 ) +  { +  amd64_load_fp_reg(); +  amd64_load_sp_reg(); +  mov_reg_reg( fp_reg, P_REG_RAX ); +  while(c--) +  mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,scope), P_REG_RAX ); +  mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,locals), P_REG_RAX ); +  add_reg_imm_reg( P_REG_RAX, b*sizeof(struct svalue), P_REG_RAX ); +  mov_imm_mem( T_SVALUE_PTR, sp_reg, OFFSETOF(svalue, tu.t.type)); +  mov_reg_mem( P_REG_RAX, sp_reg, OFFSETOF(svalue,u.lval) ); +  mov_imm_mem( T_VOID, sp_reg, +  OFFSETOF(svalue, tu.t.type)+sizeof(struct svalue)); +  amd64_add_sp( 2 ); +  return; +  } +  /* use c version. Could have a loop version here. */ +  break;    case F_LOCAL_2_LOCAL:    ins_debug_instr_prologue(a-F_OFFSET, b, c);    if( b != c )    {    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) );    /* RBX points to dst. */    amd64_free_svalue( P_REG_RBX, 0 );    /* assign rbx[0] = rbx[c-b] */