pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:3996:    add_reg_imm( P_REG_RAX, b*sizeof(struct svalue));       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;       case F_MARK_AT: +  { +  LABELS();    ins_debug_instr_prologue(a-F_OFFSET, b, 0);    amd64_load_fp_reg();    amd64_load_mark_sp_reg(); -  +  if (Pike_compiler->compiler_frame->generator_local != -1) { +  mov_mem32_reg( fp_reg, OFFSETOF(pike_frame, flags), P_REG_RAX ); +  mov_mem_reg(fp_reg, OFFSETOF(pike_frame, save_sp), ARG1_REG); +  and_reg32_imm( P_REG_RAX, PIKE_FRAME_MALLOCED_LOCALS); +  jz( &label_A ); +  }    mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), ARG1_REG);    if (b) {    add_reg_imm_reg(ARG1_REG, sizeof(struct svalue) * b, ARG1_REG);    } -  +  LABEL_A;    mov_reg_mem(ARG1_REG, mark_sp_reg, 0x00);    amd64_add_mark_sp( 1 );    return;    } -  +  }    update_arg1(b);    ins_f_byte(a);   }      int amd64_ins_f_jump_with_arg(unsigned int op, INT32 a, int backward_jump)   {    LABELS();    if (!(instrs[op - F_OFFSET].flags & I_BRANCH)) return -1;       switch( op )
pike.git/src/code/amd64.c:4559:   #endif    return;       case F_FILL_STACK:    {    LABELS();    if (!b) return;    ins_debug_instr_prologue(a-F_OFFSET, b, c);    amd64_load_fp_reg();    amd64_load_sp_reg(); +  +  if (Pike_compiler->compiler_frame->generator_local != -1) { +  mov_mem32_reg( fp_reg, OFFSETOF(pike_frame, flags), P_REG_RAX ); +  and_reg32_imm( P_REG_RAX, PIKE_FRAME_MALLOCED_LOCALS); +  jz( &label_C ); +  } +     mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), ARG1_REG);    add_reg_imm(ARG1_REG, b*sizeof(struct svalue));    jmp(&label_A);    LABEL_B;    amd64_push_int(0, c);    LABEL_A;    cmp_reg_reg(sp_reg, ARG1_REG);    jl(&label_B); -  +  LABEL_C;    }    return;       case F_INIT_FRAME:    ins_debug_instr_prologue(a-F_OFFSET, b, c);    amd64_load_fp_reg();       if(OFFSETOF(pike_frame, num_locals) != OFFSETOF(pike_frame, num_args)-2 )    Pike_fatal("This code does not with unless num_args\n"    "directly follows num_locals in struct pike_frame\n");