author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2015年05月01日 14:05:00 -0300 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2015年05月01日 14:05:00 -0300 |
commit | 8cb302f33713b7d174886c74dfbb20b3bbcd94b4 (patch) | |
tree | 713862bbd419fcfd8ce8db133120730d5dc6bce8 /lib/jit_arm-swf.c | |
parent | 0986ae8a862028e0acc95795de13254fe1559638 (diff) | |
download | lightning-8cb302f33713b7d174886c74dfbb20b3bbcd94b4.tar.gz |
-rw-r--r-- | lib/jit_arm-swf.c | 29 |
diff --git a/lib/jit_arm-swf.c b/lib/jit_arm-swf.c index 8ba2b79..6e041fc 100644 --- a/lib/jit_arm-swf.c +++ b/lib/jit_arm-swf.c @@ -322,6 +322,8 @@ static void _swf_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); static void _swf_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); # define swf_stxi_d(r0,r1,i0) _swf_stxi_d(_jit,r0,r1,i0) static void _swf_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +# define swf_vaarg_d(r0, r1) _swf_vaarg_d(_jit, r0, r1) +static void _swf_vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); #endif #if CODE @@ -2614,4 +2616,31 @@ _swf_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } } } + +static void +_swf_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +{ + jit_int32_t rg0, rg1; + + assert(_jitc->function->self.call & jit_call_varargs); + + rg0 = jit_get_reg(jit_class_gpr); + + /* Load stack pointer. */ + ldxi(rn(rg0), r1, offsetof(jit_va_list_t, stack)); + rg1 = jit_get_reg(jit_class_gpr); + andi(rn(rg1), rn(rg0), 7); + addr(rn(rg0), rn(rg0), rn(rg1)); + jit_unget_reg(rg1); + + /* Load argument. */ + swf_ldr_d(r0, rn(rg0)); + + /* Update stack pointer. */ + addi(rn(rg0), rn(rg0), sizeof(jit_float64_t)); + stxi(offsetof(jit_va_list_t, stack), r1, rn(rg0)); + + jit_unget_reg(rg0); +} + #endif |