pike.git/
src/
code/
amd64.c
Branch:
Tag:
Non-build tags
All tags
No tags
2019-09-14
2019-09-14 09:43:33 by Henrik Grubbström (Grubba) <grubba@grubba.org>
836022ab094141a5426ee58b89e2157eded1543a (
33
lines) (+
33
/-
0
)
[
Show
|
Annotate
]
Branch:
master
Compiler
[amd64]
: Inline F_SWAP_STACK_LOCAL.
3786:
ins_f_byte_with_2_args( F_CLEAR_N_LOCAL, b, 1 ); return;
+
case F_SWAP_STACK_LOCAL:
+
/*
+
* tmp = Pike_sp[-1]
+
* Pike_sp[-1] = Pike_fp->locals[arg1]
+
* Pike_fp->locals[arg1] = tmp
+
*/
+
ins_debug_instr_prologue(a-F_OFFSET, b, 0);
+
amd64_load_fp_reg();
+
amd64_load_sp_reg();
+
mov_mem_reg(fp_reg, OFFSETOF(pike_frame, locals), P_REG_RAX);
+
add_reg_imm_reg( sp_reg, -sizeof(struct svalue), P_REG_RCX );
+
+
#if SIZEOF_LONG_DOUBLE != 16
+
if (OFFSETOF(array, u.real_item) & 0x0f) {
+
mov_mem_reg( P_REG_RAX, b * sizeof(struct svalue), P_REG_RBX );
+
mov_mem_reg( P_REG_RCX, 0, P_REG_R10 );
+
mov_reg_mem( P_REG_RBX, P_REG_RCX, 0 );
+
mov_reg_mem( P_REG_R10, P_REG_RAX, b * sizeof(struct svalue) );
+
mov_mem_reg( P_REG_RAX, b * sizeof(struct svalue) + 8, P_REG_RBX );
+
mov_mem_reg( P_REG_RCX, 8, P_REG_R10 );
+
mov_reg_mem( P_REG_RBX, P_REG_RCX, 8 );
+
mov_reg_mem( P_REG_R10, P_REG_RAX, b * sizeof(struct svalue) + 8 );
+
return
+
}
+
#endif
+
+
mov_mem128_reg( P_REG_RAX, b * sizeof(struct svalue), P_REG_XMM1 );
+
mov_mem128_reg( P_REG_RCX, 0, P_REG_XMM0 );
+
mov_reg_mem128( P_REG_XMM0, P_REG_RAX, b * sizeof(struct svalue) );
+
mov_reg_mem128( P_REG_XMM1, P_REG_RCX, 0 );
+
return;
+
case F_INC_LOCAL_AND_POP: { LABELS();