pike.git/
src/
code/
amd64.c
Branch:
Tag:
Non-build tags
All tags
No tags
2014-12-04
2014-12-04 19:27:04 by Per Hedbor <ph@opera.com>
023b79507d06ce697de88c78297f596865e56ad7 (
32
lines) (+
11
/-
21
)
[
Show
|
Annotate
]
Branch:
bill/master_archive_support
More compact type checks, no need to do a cmp, & is enough now.
1087:
mov_mem_reg(reg, OFFSETOF(svalue, u.refs), P_REG_RCX); mov_reg_mem(P_REG_RAX, sp_reg, spoff*sizeof(struct svalue)+OFFSETOF(svalue, tu.t.type));
-
and_reg_imm(P_REG_RAX, ~(MIN_REF_TYPE - 1) & 0x1f);
+
mov_reg_mem(P_REG_RCX, sp_reg, spoff*sizeof(struct svalue)+OFFSETOF(svalue, u.refs));
-
cmp
_reg32_imm(P_REG_RAX, MIN_REF_TYPE);
-
jne
(&label_A);
+
and
_reg32_imm(P_REG_RAX, MIN_REF_TYPE);
+
jz
(&label_A);
add_imm_mem( 1, P_REG_RCX, OFFSETOF(pike_string, refs)); LABEL_A; }
1172:
/* load type -> RAX */ mov_sval_type( src, P_REG_RAX );
-
and_reg_imm(P_REG_RAX,
(~(
MIN_REF_TYPE
-
1))
&
0x1f
);
+
and_reg_imm(P_REG_RAX, MIN_REF_TYPE
);
+
jz(
&
label_A
);
-
/* if RAX != MIN_REF_TYPE */
-
cmp_reg32_imm( P_REG_RAX,MIN_REF_TYPE);
-
jne( &label_A );
-
+
/* Load pointer to refs -> RAX */ mov_mem_reg( src, OFFSETOF(svalue, u.refs), P_REG_RAX); /* if( !--*RAX ) */
1203:
if( src == P_REG_RAX ) Pike_fatal("Clobbering RAX for free-svalue\n");
-
and_
reg
_imm(type,
~(
MIN_REF_TYPE
-
1
)
)
;
+
and_
reg32
_imm(type, MIN_REF_TYPE
);
+
jz( &label_A
);
-
cmp_reg32_imm(type,MIN_REF_TYPE);
-
jne( &label_A );
-
+
/* Load pointer to refs -> RAX */ mov_mem_reg( src, OFFSETOF(svalue, u.refs), P_REG_RAX); /* if( !--*RAX ) */
1230:
if( src == P_REG_RAX ) Pike_fatal("Clobbering src in ref_svalue\n"); if( !already_have_type ) mov_sval_type( src, P_REG_RAX );
-
else
-
and_
reg
_imm( P_REG_RAX,
0x1f );
-
-
/* if RAX >
MIN_REF_
TYPE+1 */
-
cmp_reg32_imm(P_REG_RAX, MIN_REF_
TYPE );
-
jl
( &label_A );
+
and_
reg32
_imm( P_REG_RAX, MIN_REF_TYPE );
+
jz
( &label_A );
/* Load pointer to refs -> RAX */ mov_mem_reg( src, OFFSETOF(svalue, u.refs), P_REG_RAX); /* *RAX++ */
2190:
mov_reg_mem( P_REG_RCX, P_REG_RDX, 8 ); /* inc refs? */
-
and_
reg
_imm( P_REG_RAX,
0x1f );
-
cmp_reg32_imm(P_REG_RAX,
MIN_REF_TYPE);
-
jl
( &label_B );
+
and_
reg32
_imm( P_REG_RAX, MIN_REF_TYPE
);
+
jz
( &label_B );
add_imm_mem( 1, P_REG_RCX, OFFSETOF(pike_string, refs)); jmp( &label_B );