arm: Add initial jit_va_ calls to arm - lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_arm-swf.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2015年05月01日 14:05:00 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2015年05月01日 14:05:00 -0300
commit8cb302f33713b7d174886c74dfbb20b3bbcd94b4 (patch)
tree713862bbd419fcfd8ce8db133120730d5dc6bce8 /lib/jit_arm-swf.c
parent0986ae8a862028e0acc95795de13254fe1559638 (diff)
downloadlightning-8cb302f33713b7d174886c74dfbb20b3bbcd94b4.tar.gz
arm: Add initial jit_va_ calls to arm
* lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, lib/jit_arm.c: Add base support to jit vararg functions to the arm backend.
Diffstat (limited to 'lib/jit_arm-swf.c')
-rw-r--r--lib/jit_arm-swf.c 29
1 files changed, 29 insertions, 0 deletions
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
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月12日 09:51:02 +0000

AltStyle によって変換されたページ (->オリジナル) /