pike.git/
src/
code/
amd64.c
Branch:
Tag:
Non-build tags
All tags
No tags
2014-08-15
2014-08-15 12:33:38 by Per Hedbor <ph@opera.com>
dbce5f3a7546461141833f592c3b8f5bba500779 (
21
lines) (+
21
/-
0
)
[
Show
|
Annotate
]
Branch:
8.0
Added lvalue version of lexical_local
3381:
} /* use c version. Could have a loop version here. */ break;
+
+
case F_LEXICAL_LOCAL_LVALUE:
+
if( c < 5 )
+
{
+
amd64_load_fp_reg();
+
amd64_load_sp_reg();
+
mov_reg_reg( fp_reg, P_REG_RAX );
+
while(c--)
+
mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,scope), P_REG_RAX );
+
mov_mem_reg( P_REG_RAX, OFFSETOF(pike_frame,locals), P_REG_RAX );
+
add_reg_imm_reg( P_REG_RAX, b*sizeof(struct svalue), P_REG_RAX );
+
mov_imm_mem( T_SVALUE_PTR, sp_reg, OFFSETOF(svalue, tu.t.type));
+
mov_reg_mem( P_REG_RAX, sp_reg, OFFSETOF(svalue,u.lval) );
+
mov_imm_mem( T_VOID, sp_reg,
+
OFFSETOF(svalue, tu.t.type)+sizeof(struct svalue));
+
amd64_add_sp( 2 );
+
return;
+
}
+
/* use c version. Could have a loop version here. */
+
break;
case F_LOCAL_2_LOCAL: ins_debug_instr_prologue(a-F_OFFSET, b, c); if( b != c )