pike.git
/
src
/
code
/
amd64.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/code/amd64.c:2357:
LABELS(); ins_debug_instr_prologue(a-F_OFFSET, b, 0); 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
);
-
jge
( &label_A ); /*
b
>
=
RBX
, index outside array */
-
shl
_
reg_
imm( REG_RBX
, 4
);
+
cmp_
reg32
_
imm
( REG_RCX,
b
);
+
jle
( &label_A ); /*
RCX
<
=
b
, index outside array */
+
mov
_
imm_
reg(
b * sizeof(struct svalue),
REG_RBX);
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 ); amd64_call_c_function(really_free_array);