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
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/jit_arm.c 49
1 files changed, 42 insertions, 7 deletions
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index fab42aa..0a11070 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -388,8 +388,8 @@ _jit_arg_d(jit_state_t *_jit)
if (_jit->function->self.argi < 3) {
if (_jit->function->self.argi & 1)
++_jit->function->self.argi;
- offset = _jit->function->self.argf;
- _jit->function->self.argf += 2;
+ offset = _jit->function->self.argi;
+ _jit->function->self.argi += 2;
return (offset);
}
}
@@ -409,7 +409,12 @@ _jit_arg_d_reg_p(jit_state_t *_jit, jit_int32_t offset)
void
_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
{
- if (v < 4)
+ if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_c(u, JIT_FP, v);
+ }
+ else if (v < 4)
jit_extr_c(u, JIT_RA0 - v);
else
jit_ldxi_c(u, JIT_FP, v);
@@ -418,7 +423,12 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
void
_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
{
- if (v < 4)
+ if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_uc(u, JIT_FP, v);
+ }
+ else if (v < 4)
jit_extr_uc(u, JIT_RA0 - v);
else
jit_ldxi_uc(u, JIT_FP, v);
@@ -427,7 +437,12 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
void
_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
{
- if (v < 4)
+ if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_s(u, JIT_FP, v);
+ }
+ else if (v < 4)
jit_extr_s(u, JIT_RA0 - v);
else
jit_ldxi_s(u, JIT_FP, v);
@@ -436,7 +451,12 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
void
_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
{
- if (v < 4)
+ if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_us(u, JIT_FP, v);
+ }
+ else if (v < 4)
jit_extr_us(u, JIT_RA0 - v);
else
jit_ldxi_us(u, JIT_FP, v);
@@ -445,7 +465,12 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
void
_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
{
- if (v < 4)
+ if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_i(u, JIT_FP, v);
+ }
+ else if (v < 4)
jit_movr(u, JIT_RA0 - v);
else
jit_ldxi_i(u, JIT_FP, v);
@@ -460,6 +485,11 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
else
jit_ldxi_f(u, JIT_FP, v);
}
+ else if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_f(u, JIT_FP, v);
+ }
else {
if (v < 4)
jit_movr_f(u, JIT_RA0 - v);
@@ -477,6 +507,11 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
else
jit_ldxi_d(u, JIT_FP, v);
}
+ else if (jit_swf_p()) {
+ if (v < 4)
+ v <<= 2;
+ jit_ldxi_d(u, JIT_FP, v);
+ }
else {
if (v < 4)
jit_movr_d(u, JIT_RA0 - v);
generated by cgit v1.2.3 (git 2.46.0) at 2025年10月03日 00:14:41 +0000

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