pike.git/
src/
code/
amd64.c
Branch:
Tag:
Non-build tags
All tags
No tags
2014-09-01
2014-09-01 10:23:12 by Per Hedbor <ph@opera.com>
ba5fbfa0d34084ea3a22da64d20cfa3a575d1461 (
31
lines) (+
11
/-
20
)
[
Show
|
Annotate
]
Branch:
8.0
Fixed some issues with +/- int and re-enabled F_MOD_INT.
3040:
LABEL_B; } return;
-
/*
case F_
XOR
_INT:
*/
+
+
case F_
MOD
_INT:
case F_DIVIDE_INT: if( b == 0 ) {
3226:
LABELS(); ins_debug_instr_prologue(a-F_OFFSET, b, 0); amd64_load_sp_reg();
-
mov_
mem16
_reg( sp_reg,
-sizeof
(
struct svalue
), P_REG_RAX );
-
cmp
_reg32
_imm
(
P_REG_RAX
,PIKE_T_INT
);
-
jne
( &label_A );
-
mov_mem_reg(sp_reg,
-
-sizeof
(
struct svalue
)
+OFFSETOF(svalue,u
.
integer)
,
-
P_REG_RAX );
-
test_reg32( P_REG_RAX );
-
jz( &label_C );
-
+
mov_
mem8
_reg( sp_reg,
SVAL(
-
1
)
.type
, P_REG_RAX );
+
test
_reg32(P_REG_RAX);
+
jnz
( &label_A );
+
mov_mem_reg(sp_reg,
SVAL(
-
1
).
value
,P_REG_RAX );
add_reg_imm( P_REG_RAX, b ); jo( &label_A ); /* if overflow, use f_add */
-
mov_
reg
_mem(
P
_
REG
_
RAX
,sp_reg,
-
-sizeof
(
struct svalue
)
+OFFSETOF(svalue,u
.
integer
)
)
;
+
mov_
imm
_mem(
PIKE
_
T
_
INT
,
sp_reg,
SVAL(-1).type
);
+
mov_reg_mem(
P_REG_RAX,
sp_reg,
SVAL(
-
1
).
value
);
jmp(&label_B); /* all done. */ LABEL_A;
3246:
update_arg1(2); amd64_call_c_opcode( f_add, I_UPDATE_SP ); amd64_load_sp_reg();
-
jmp( &label_B );
-
LABEL_C;
-
// int, and 0, we need to set it to b and clear subtype
-
mov_imm_mem( PIKE_T_INT, sp_reg, -sizeof(struct svalue ) );
-
mov_imm_mem( b, sp_reg,
-
-sizeof(struct svalue )+OFFSETOF(svalue,u.integer) );
+
LABEL_B; } return;