pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:1089:   }      static void amd64_free_svalue(enum amd64_reg src, int guaranteed_ref )   {    LABELS();    if( src == REG_RAX )    Pike_fatal("Clobbering RAX for free-svalue\n");    /* load type -> RAX */    mov_sval_type( src, REG_RAX );    -  /* if RAX < MIN_REF_TYPE+1 */ +  and_reg_imm(REG_RAX, ~(MIN_REF_TYPE - 1)); +  +  /* if RAX != MIN_REF_TYPE */    cmp_reg32_imm( REG_RAX,MIN_REF_TYPE); -  jl( &label_A ); +  jne( &label_A );       /* Load pointer to refs -> RAX */    mov_mem_reg( src, OFFSETOF(svalue, u.refs), REG_RAX);    /* if( !--*RAX ) */    add_mem32_imm( REG_RAX, OFFSETOF(pike_string,refs), -1);    if( !guaranteed_ref )    {    /* We need to see if refs got to 0. */    jnz( &label_A );    /* if so, call really_free_svalue */    if( src != ARG1_REG )    mov_reg_reg( src, ARG1_REG );    amd64_call_c_function(really_free_svalue);    }    LABEL_A;   }    - /* Type already in RAX */ + /* Type already in register. Note: Clobbers the type register. */   static void amd64_free_svalue_type(enum amd64_reg src, enum amd64_reg type,    int guaranteed_ref )   {    LABELS();    /* if type < MIN_REF_TYPE+1 */    if( src == REG_RAX )    Pike_fatal("Clobbering RAX for free-svalue\n");    -  +  and_reg_imm(type, ~(MIN_REF_TYPE - 1)); +     cmp_reg32_imm(type,MIN_REF_TYPE); -  jl( &label_A ); +  jne( &label_A );       /* Load pointer to refs -> RAX */    mov_mem_reg( src, OFFSETOF(svalue, u.refs), REG_RAX);    /* if( !--*RAX ) */    add_mem32_imm( REG_RAX, OFFSETOF(pike_string,refs), -1);    if( !guaranteed_ref )    {    /* We need to see if refs got to 0. */    jnz( &label_A );    /* if so, call really_free_svalue */