pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:2346:    amd64_load_sp_reg();    mov_mem8_reg( sp_reg, -1*sizeof(struct svalue), REG_RAX );    cmp_reg32_imm( REG_RAX, PIKE_T_ARRAY );    jne( &label_A );       mov_mem_reg( sp_reg, -1*sizeof(struct svalue)+8, REG_RDX ); /* u.array */    /* -> arr[sizeof(arr)-b] */    mov_mem32_reg( REG_RDX, OFFSETOF(array,size), REG_RCX );    mov_imm_reg( b, REG_RBX);    cmp_reg_reg( REG_RCX, REG_RBX ); -  jg( &label_A ); /* b > RBX, index outside array */ +  jge( &label_A ); /* b >= RBX, index outside array */    shl_reg_imm( REG_RBX, 4 );    add_reg_mem( REG_RBX, REG_RDX, OFFSETOF(array,item) );       /* This overwrites the array. */    amd64_push_svaluep_to( REG_RBX, -1 );       /* We know it's an array. */    add_mem32_imm( REG_RDX, OFFSETOF(array,refs), -1);    jnz( &label_C );    mov_reg_reg( REG_RDX, ARG1_REG );
pike.git/src/code/amd64.c:2397:    jne( &label_A );       /* Array and int index. */    mov_mem32_reg( REG_RCX, OFFSETOF(array,size), REG_RDX );    cmp_reg32_imm( REG_RBX, 0 ); jge( &label_D );    /* less than 0, add size */    add_reg_reg( REG_RBX, REG_RDX );       LABEL_D;    cmp_reg32_imm( REG_RBX, 0 ); jl( &label_B ); // <0 -  cmp_reg_reg( REG_RBX, REG_RCX); jge( &label_B ); // >size +  cmp_reg_reg( REG_RBX, REG_RCX); jge( &label_B ); // >=size       /* array, index inside array. push item, swap, pop, done */    mov_mem_reg( REG_RCX, OFFSETOF(array,item), REG_RCX );    shl_reg_imm( REG_RBX, 4 );    add_reg_reg( REG_RBX, REG_RCX );    amd64_push_svaluep_to( REG_RBX, -1 );    jmp( &label_C );       LABEL_A;   #if 0