pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:1217: Inside #if defined(MACHINE_CODE_STACK_FRAMES)
  static void amd64_pop_internal_c_frame()   {    /* C.f. amd64_ins_start_function() */    mov_reg_reg(P_REG_RBP, P_REG_RSP);    pop(P_REG_RBP);    add_reg_imm(P_REG_RSP, 8);   }   #endif /* MACHINE_CODE_STACK_FRAMES */      static void amd64_load_fp_reg(void); + static void amd64_call_c_function(void *addr);      void amd64_ins_start_function(void)   {   #ifdef MACHINE_CODE_STACK_FRAMES    LABELS();    amd64_load_fp_reg();    /* Note: really mem16, but we & with PIKE_FRAME_RETURN_INTERNAL anyway */    mov_mem32_reg( fp_reg, OFFSETOF(pike_frame, flags), P_REG_RAX );    and_reg32_imm( P_REG_RAX, PIKE_FRAME_RETURN_INTERNAL);    jz( &label_A );    -  +  amd64_call_c_function(check_c_stack_margin); +     /* This is an internal frame (no entry prologue), so we'll insert a    minimal frame that can be used to unwind the C stack. */    mov_mem_reg(fp_reg, OFFSETOF(pike_frame, next), P_REG_RAX);    mov_mem_reg(P_REG_RAX, OFFSETOF(pike_frame, return_addr), P_REG_RAX);    push(P_REG_RAX);    push(P_REG_RBP);    mov_reg_reg(P_REG_RSP, P_REG_RBP);       LABEL_A;   #endif /* MACHINE_CODE_STACK_FRAMES */