summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2012-01-15 17:23:37 +0000
committerzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2012-01-15 17:23:37 +0000
commitc4e858ed1e48ee8284b05f4c46776540eec95e99 (patch)
tree006ae5920dc3412344ac2037c8d42cb39f8f4543
parent8eecdf202d334c6547a937193f830ad579d8e8dc (diff)
downloadpcre-c4e858ed1e48ee8284b05f4c46776540eec95e99.tar.gz
JIT compiler update (rename GENERAL to SAVED)
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@880 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--pcre_jit_compile.c32
-rw-r--r--sljit/sljitLir.c64
-rw-r--r--sljit/sljitLir.h46
-rw-r--r--sljit/sljitNativeARM_Thumb2.c54
-rw-r--r--sljit/sljitNativeARM_v5.c54
-rw-r--r--sljit/sljitNativeMIPS_common.c70
-rw-r--r--sljit/sljitNativePPC_common.c76
-rw-r--r--sljit/sljitNativeX86_32.c81
-rw-r--r--sljit/sljitNativeX86_64.c113
-rw-r--r--sljit/sljitNativeX86_common.c10
10 files changed, 299 insertions, 301 deletions
diff --git a/pcre_jit_compile.c b/pcre_jit_compile.c
index 2bb343f..c693fe3 100644
--- a/pcre_jit_compile.c
+++ b/pcre_jit_compile.c
@@ -358,12 +358,12 @@ enum {
#define TMP1 SLJIT_TEMPORARY_REG1
#define TMP2 SLJIT_TEMPORARY_REG3
#define TMP3 SLJIT_TEMPORARY_EREG2
-#define STR_PTR SLJIT_GENERAL_REG1
-#define STR_END SLJIT_GENERAL_REG2
+#define STR_PTR SLJIT_SAVED_REG1
+#define STR_END SLJIT_SAVED_REG2
#define STACK_TOP SLJIT_TEMPORARY_REG2
-#define STACK_LIMIT SLJIT_GENERAL_REG3
-#define ARGUMENTS SLJIT_GENERAL_EREG1
-#define CALL_COUNT SLJIT_GENERAL_EREG2
+#define STACK_LIMIT SLJIT_SAVED_REG3
+#define ARGUMENTS SLJIT_SAVED_EREG1
+#define CALL_COUNT SLJIT_SAVED_EREG2
#define RETURN_ADDR SLJIT_TEMPORARY_EREG1
/* Locals layout. */
@@ -1201,7 +1201,7 @@ struct sljit_label *loop;
int i;
/* At this point we can freely use all temporary registers. */
/* TMP1 returns with begin - 1. */
-OP2(SLJIT_SUB, SLJIT_TEMPORARY_REG1, 0, SLJIT_MEM1(SLJIT_GENERAL_REG1), SLJIT_OFFSETOF(jit_arguments, begin), SLJIT_IMM, IN_UCHARS(1));
+OP2(SLJIT_SUB, SLJIT_TEMPORARY_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(jit_arguments, begin), SLJIT_IMM, IN_UCHARS(1));
if (length < 8)
{
for (i = 0; i < length; i++)
@@ -1225,24 +1225,24 @@ struct sljit_label *loop;
struct sljit_jump *earlyexit;
/* At this point we can freely use all registers. */
-OP1(SLJIT_MOV, SLJIT_GENERAL_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
+OP1(SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1), STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV_SI, SLJIT_TEMPORARY_REG2, 0, SLJIT_MEM1(SLJIT_TEMPORARY_REG1), SLJIT_OFFSETOF(jit_arguments, offsetcount));
OP2(SLJIT_SUB, SLJIT_TEMPORARY_REG3, 0, SLJIT_MEM1(SLJIT_TEMPORARY_REG1), SLJIT_OFFSETOF(jit_arguments, offsets), SLJIT_IMM, sizeof(int));
OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG1, 0, SLJIT_MEM1(SLJIT_TEMPORARY_REG1), SLJIT_OFFSETOF(jit_arguments, begin));
-OP2(SLJIT_ADD, SLJIT_GENERAL_REG1, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, OVECTOR_START);
+OP2(SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, OVECTOR_START);
/* Unlikely, but possible */
earlyexit = CMP(SLJIT_C_EQUAL, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, 0);
loop = LABEL();
-OP2(SLJIT_SUB, SLJIT_GENERAL_REG2, 0, SLJIT_MEM1(SLJIT_GENERAL_REG1), 0, SLJIT_TEMPORARY_REG1, 0);
-OP2(SLJIT_ADD, SLJIT_GENERAL_REG1, 0, SLJIT_GENERAL_REG1, 0, SLJIT_IMM, sizeof(sljit_w));
+OP2(SLJIT_SUB, SLJIT_SAVED_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_TEMPORARY_REG1, 0);
+OP2(SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, sizeof(sljit_w));
/* Copy the integer value to the output buffer */
#ifdef COMPILE_PCRE16
-OP2(SLJIT_ASHR, SLJIT_GENERAL_REG2, 0, SLJIT_GENERAL_REG2, 0, SLJIT_IMM, 1);
+OP2(SLJIT_ASHR, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 1);
#endif
-OP1(SLJIT_MOVU_SI, SLJIT_MEM1(SLJIT_TEMPORARY_REG3), sizeof(int), SLJIT_GENERAL_REG2, 0);
+OP1(SLJIT_MOVU_SI, SLJIT_MEM1(SLJIT_TEMPORARY_REG3), sizeof(int), SLJIT_SAVED_REG2, 0);
OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_TEMPORARY_REG2, 0, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, loop);
JUMPHERE(earlyexit);
@@ -1253,11 +1253,11 @@ if (topbracket > 1)
OP2(SLJIT_ADD, SLJIT_TEMPORARY_REG1, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, OVECTOR_START + topbracket * 2 * sizeof(sljit_w));
OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, topbracket + 1);
- /* OVECTOR(0) is never equal to SLJIT_GENERAL_REG3. */
+ /* OVECTOR(0) is never equal to SLJIT_SAVED_REG3. */
loop = LABEL();
OP1(SLJIT_MOVU, SLJIT_TEMPORARY_REG3, 0, SLJIT_MEM1(SLJIT_TEMPORARY_REG1), -(2 * (sljit_w)sizeof(sljit_w)));
OP2(SLJIT_SUB, SLJIT_TEMPORARY_REG2, 0, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, 1);
- CMPTO(SLJIT_C_EQUAL, SLJIT_TEMPORARY_REG3, 0, SLJIT_GENERAL_REG3, 0, loop);
+ CMPTO(SLJIT_C_EQUAL, SLJIT_TEMPORARY_REG3, 0, SLJIT_SAVED_REG3, 0, loop);
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_TEMPORARY_REG2, 0);
}
else
@@ -6484,8 +6484,8 @@ reset_ovector(common, (re->top_bracket + 1) * 2);
if ((re->flags & PCRE_REQCHSET) != 0)
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), REQ_CHAR_PTR, SLJIT_TEMPORARY_REG1, 0);
-OP1(SLJIT_MOV, ARGUMENTS, 0, SLJIT_GENERAL_REG1, 0);
-OP1(SLJIT_MOV, TMP1, 0, SLJIT_GENERAL_REG1, 0);
+OP1(SLJIT_MOV, ARGUMENTS, 0, SLJIT_SAVED_REG1, 0);
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_SAVED_REG1, 0);
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));
OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, end));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
diff --git a/sljit/sljitLir.c b/sljit/sljitLir.c
index 6588de4..c2a636b 100644
--- a/sljit/sljitLir.c
+++ b/sljit/sljitLir.c
@@ -228,7 +228,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void)
compiler->abuf->used_size = 0;
compiler->temporaries = -1;
- compiler->generals = -1;
+ compiler->saveds = -1;
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
compiler->args = -1;
@@ -475,12 +475,12 @@ static SLJIT_INLINE void set_const(struct sljit_const *const_, struct sljit_comp
#define FUNCTION_CHECK_IS_REG(r) \
((r) == SLJIT_UNUSED || (r) == SLJIT_LOCALS_REG || \
((r) >= SLJIT_TEMPORARY_REG1 && (r) <= SLJIT_TEMPORARY_REG3 && (r) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
- ((r) >= SLJIT_GENERAL_REG1 && (r) <= SLJIT_GENERAL_REG3 && (r) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals)) \
+ ((r) >= SLJIT_SAVED_REG1 && (r) <= SLJIT_SAVED_REG3 && (r) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds)) \
#define FUNCTION_CHECK_SRC(p, i) \
- SLJIT_ASSERT(compiler->temporaries != -1 && compiler->generals != -1); \
+ SLJIT_ASSERT(compiler->temporaries != -1 && compiler->saveds != -1); \
if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
- ((p) >= SLJIT_GENERAL_REG1 && (p) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals) || \
+ ((p) >= SLJIT_SAVED_REG1 && (p) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds) || \
(p) == SLJIT_LOCALS_REG) \
SLJIT_ASSERT(i == 0); \
else if ((p) == SLJIT_IMM) \
@@ -498,9 +498,9 @@ static SLJIT_INLINE void set_const(struct sljit_const *const_, struct sljit_comp
SLJIT_ASSERT_STOP();
#define FUNCTION_CHECK_DST(p, i) \
- SLJIT_ASSERT(compiler->temporaries != -1 && compiler->generals != -1); \
+ SLJIT_ASSERT(compiler->temporaries != -1 && compiler->saveds != -1); \
if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
- ((p) >= SLJIT_GENERAL_REG1 && (p) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals) || \
+ ((p) >= SLJIT_SAVED_REG1 && (p) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds) || \
(p) == SLJIT_UNUSED) \
SLJIT_ASSERT(i == 0); \
else if ((p) & SLJIT_MEM) { \
@@ -551,9 +551,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(struct sljit_compiler *comp
}
static char* reg_names[] = {
- (char*)"<noreg>", (char*)"tmp_r1", (char*)"tmp_r2", (char*)"tmp_r3",
- (char*)"tmp_er1", (char*)"tmp_er2", (char*)"gen_r1", (char*)"gen_r2",
- (char*)"gen_r3", (char*)"gen_er1", (char*)"gen_er2", (char*)"stack_r"
+ (char*)"<noreg>", (char*)"t1", (char*)"t2", (char*)"t3",
+ (char*)"te1", (char*)"te2", (char*)"s1", (char*)"s2",
+ (char*)"s3", (char*)"se1", (char*)"se2", (char*)"lcr"
};
static char* freg_names[] = {
@@ -674,43 +674,43 @@ static SLJIT_INLINE void check_sljit_generate_code(struct sljit_compiler *compil
#endif
}
-static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
/* If debug and verbose are disabled, all arguments are unused. */
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT(args >= 0 && args <= 3);
SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
- SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);
- SLJIT_ASSERT(args <= generals);
+ SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
+ SLJIT_ASSERT(args <= saveds);
SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose))
- fprintf(compiler->verbose, " enter args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);
+ fprintf(compiler->verbose, " enter args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
#endif
}
-static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
/* If debug and verbose are disabled, all arguments are unused. */
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT(args >= 0 && args <= 3);
SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
- SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);
- SLJIT_ASSERT(args <= generals);
+ SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
+ SLJIT_ASSERT(args <= saveds);
SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose))
- fprintf(compiler->verbose, " fake_enter args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);
+ fprintf(compiler->verbose, " fake_enter args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
#endif
}
@@ -743,7 +743,7 @@ static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler
#endif
}
-static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
/* If debug and verbose are disabled, all arguments are unused. */
SLJIT_UNUSED_ARG(compiler);
@@ -751,26 +751,26 @@ static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *comp
SLJIT_UNUSED_ARG(dstw);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT(args >= 0 && args <= 3);
SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
- SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);
- SLJIT_ASSERT(args <= generals);
+ SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
+ SLJIT_ASSERT(args <= saveds);
SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
#if (defined SLJIT_DEBUG && SLJIT_DEBUG)
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
FUNCTION_CHECK_DST(dst, dstw);
compiler->temporaries = -1;
- compiler->generals = -1;
+ compiler->saveds = -1;
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose)) {
fprintf(compiler->verbose, " fast_enter ");
sljit_verbose_param(dst, dstw);
- fprintf(compiler->verbose, " args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);
+ fprintf(compiler->verbose, " args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
}
#endif
}
@@ -1318,23 +1318,23 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code)
SLJIT_ASSERT_STOP();
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT_STOP();
return SLJIT_ERR_UNSUPPORTED;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT_STOP();
}
@@ -1349,14 +1349,14 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
return SLJIT_ERR_UNSUPPORTED;
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(dst);
SLJIT_UNUSED_ARG(dstw);
SLJIT_UNUSED_ARG(args);
SLJIT_UNUSED_ARG(temporaries);
- SLJIT_UNUSED_ARG(generals);
+ SLJIT_UNUSED_ARG(saveds);
SLJIT_UNUSED_ARG(local_size);
SLJIT_ASSERT_STOP();
return SLJIT_ERR_UNSUPPORTED;
diff --git a/sljit/sljitLir.h b/sljit/sljitLir.h
index 589e2ea..0cb1c1e 100644
--- a/sljit/sljitLir.h
+++ b/sljit/sljitLir.h
@@ -44,10 +44,10 @@
- The compiler is thread-safe
Disadvantages:
- Limited number of registers (only 6+4 integer registers, max 3+2
- temporary and max 3+2 general, and 4 floating point registers)
+ temporary, max 3+2 saved and 4 floating point registers)
In practice:
- This approach is very effective for interpreters
- - One of the general registers typically points to a stack interface
+ - One of the saved registers typically points to a stack interface
- It can jump to any exception handler anytime (even for another
function. It is safe for SLJIT.)
- Fast paths can be modified during runtime reflecting the changes
@@ -104,14 +104,14 @@ of sljitConfigInternal.h */
#define SLJIT_TEMPORARY_EREG1 4
#define SLJIT_TEMPORARY_EREG2 5
-/* General (saved) registers preserve their values across function calls. */
-#define SLJIT_GENERAL_REG1 6
-#define SLJIT_GENERAL_REG2 7
-#define SLJIT_GENERAL_REG3 8
+/* Saved registers whose preserve their values across function calls. */
+#define SLJIT_SAVED_REG1 6
+#define SLJIT_SAVED_REG2 7
+#define SLJIT_SAVED_REG3 8
/* Note: Extra Registers cannot be used for memory addressing. */
/* Note: on x86-32, these registers are emulated (using stack loads & stores). */
-#define SLJIT_GENERAL_EREG1 9
-#define SLJIT_GENERAL_EREG2 10
+#define SLJIT_SAVED_EREG1 9
+#define SLJIT_SAVED_EREG2 10
/* Read-only register (cannot be the destination of an operation). */
/* Note: SLJIT_MEM2( ... , SLJIT_LOCALS_REG) is not supported (x86 limitation). */
@@ -196,8 +196,8 @@ struct sljit_compiler {
/* Used local registers. */
int temporaries;
- /* Used general registers. */
- int generals;
+ /* Used saved registers. */
+ int saveds;
/* Local stack size. */
int local_size;
/* Code size. */
@@ -208,7 +208,7 @@ struct sljit_compiler {
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
int args;
int temporaries_start;
- int generals_start;
+ int saveds_start;
#endif
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
@@ -228,7 +228,7 @@ struct sljit_compiler {
sljit_ub *cpool_unique;
sljit_uw cpool_diff;
sljit_uw cpool_fill;
- /* General fields. */
+ /* Other members. */
/* Contains pointer, "ldr pc, [...]" pairs. */
sljit_uw patches;
#endif
@@ -317,13 +317,13 @@ static SLJIT_INLINE sljit_uw sljit_get_generated_code_size(struct sljit_compiler
Binary Interface) of the platform, which specify the purpose of machine
registers and stack handling among other things. The sljit_emit_enter
function emits the necessary instructions for setting up a new context
- for the executable code and moves function arguments to the general
+ for the executable code and moves function arguments to the saved
registers. The number of arguments are specified in the "args"
- parameter and the first argument goes to SLJIT_GENERAL_REG1, the second
- goes to SLJIT_GENERAL_REG2 and so on. The number of temporary and
- general registers are passed in "temporaries" and "generals" arguments
- respectively. Since the general registers contains the arguments,
- "args" must be less or equal than "generals". The sljit_emit_enter
+ parameter and the first argument goes to SLJIT_SAVED_REG1, the second
+ goes to SLJIT_SAVED_REG2 and so on. The number of temporary and
+ saved registers are passed in "temporaries" and "saveds" arguments
+ respectively. Since the saved registers contains the arguments,
+ "args" must be less or equal than "saveds". The sljit_emit_enter
is also capable of allocating a stack space for local variables. The
"local_size" argument contains the size in bytes of this local area
and its staring address is stored in SLJIT_LOCALS_REG. However
@@ -338,7 +338,7 @@ static SLJIT_INLINE sljit_uw sljit_get_generated_code_size(struct sljit_compiler
#define SLJIT_MAX_LOCAL_SIZE 65536
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler,
- int args, int temporaries, int generals, int local_size);
+ int args, int temporaries, int saveds, int local_size);
/* The machine code has a context (which contains the local stack space size,
number of used registers, etc.) which initialized by sljit_emit_enter. Several
@@ -353,7 +353,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler,
/* Note: multiple calls of this function overwrites the previous call. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler,
- int args, int temporaries, int generals, int local_size);
+ int args, int temporaries, int saveds, int local_size);
/* Return from machine code. The op argument can be SLJIT_UNUSED which means the
function does not return with anything or any opcode between SLJIT_MOV and
@@ -369,7 +369,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
use this as a return value later. */
/* Note: only for sljit specific, non ABI compilant calls. Fast, since only a few machine instructions
- are needed. Excellent for small uility functions, where saving general registers and setting up
+ are needed. Excellent for small uility functions, where saving registers and setting up
a new stack frame would cost too much performance. However, it is still possible to return
to the address of the caller (or anywhere else). */
@@ -378,7 +378,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
/* Note: although sljit_emit_fast_return could be replaced by an ijump, it is not suggested,
since many architectures do clever branch prediction on call / return instruction pairs. */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size);
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size);
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw);
/*
@@ -586,7 +586,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int
/* The following function is a helper function for sljit_emit_op_custom.
It returns with the real machine register index of any SLJIT_TEMPORARY
- SLJIT_GENERAL or SLJIT_LOCALS register.
+ SLJIT_SAVED or SLJIT_LOCALS register.
Note: it returns with -1 for virtual registers (all EREGs on x86-32).
Note: register returned by SLJIT_LOCALS_REG is not necessary the real
stack pointer register of the target architecture. */
diff --git a/sljit/sljitNativeARM_Thumb2.c b/sljit/sljitNativeARM_Thumb2.c
index 363f022..5455ce6 100644
--- a/sljit/sljitNativeARM_Thumb2.c
+++ b/sljit/sljitNativeARM_Thumb2.c
@@ -1101,36 +1101,36 @@ static SLJIT_INLINE int emit_op_mem(struct sljit_compiler *compiler, int flags,
return getput_arg(compiler, flags, reg, arg, argw, 0, 0);
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size;
sljit_ins push;
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
push = (1 << 4);
- if (generals >= 5)
+ if (saveds >= 5)
push |= 1 << 11;
- if (generals >= 4)
+ if (saveds >= 4)
push |= 1 << 10;
- if (generals >= 3)
+ if (saveds >= 3)
push |= 1 << 8;
- if (generals >= 2)
+ if (saveds >= 2)
push |= 1 << 7;
- if (generals >= 1)
+ if (saveds >= 1)
push |= 1 << 6;
if (temporaries >= 5)
push |= 1 << 5;
- FAIL_IF(generals >= 3
+ FAIL_IF(saveds >= 3
? push_inst32(compiler, PUSH_W | (1 << 14) | push)
: push_inst16(compiler, PUSH | push));
/* Stack must be aligned to 8 bytes: */
- size = (3 + generals) * sizeof(sljit_uw);
+ size = (3 + saveds) * sizeof(sljit_uw);
local_size += size;
local_size = (local_size + 7) & ~7;
local_size -= size;
@@ -1143,26 +1143,26 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
}
if (args >= 1)
- FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_GENERAL_REG1, SLJIT_TEMPORARY_REG1)));
+ FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_SAVED_REG1, SLJIT_TEMPORARY_REG1)));
if (args >= 2)
- FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_GENERAL_REG2, SLJIT_TEMPORARY_REG2)));
+ FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_SAVED_REG2, SLJIT_TEMPORARY_REG2)));
if (args >= 3)
- FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_GENERAL_REG3, SLJIT_TEMPORARY_REG3)));
+ FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_SAVED_REG3, SLJIT_TEMPORARY_REG3)));
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size;
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
- size = (3 + generals) * sizeof(sljit_uw);
+ size = (3 + saveds) * sizeof(sljit_uw);
local_size += size;
local_size = (local_size + 7) & ~7;
local_size -= size;
@@ -1186,19 +1186,19 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
}
pop = (1 << 4);
- if (compiler->generals >= 5)
+ if (compiler->saveds >= 5)
pop |= 1 << 11;
- if (compiler->generals >= 4)
+ if (compiler->saveds >= 4)
pop |= 1 << 10;
- if (compiler->generals >= 3)
+ if (compiler->saveds >= 3)
pop |= 1 << 8;
- if (compiler->generals >= 2)
+ if (compiler->saveds >= 2)
pop |= 1 << 7;
- if (compiler->generals >= 1)
+ if (compiler->saveds >= 1)
pop |= 1 << 6;
if (compiler->temporaries >= 5)
pop |= 1 << 5;
- return compiler->generals >= 3
+ return compiler->saveds >= 3
? push_inst32(compiler, POP_W | (1 << 15) | pop)
: push_inst16(compiler, POP | pop);
}
@@ -1645,17 +1645,17 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, in
/* Other instructions */
/* --------------------------------------------------------------------- */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
int size;
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
- size = (3 + generals) * sizeof(sljit_uw);
+ size = (3 + saveds) * sizeof(sljit_uw);
local_size += size;
local_size = (local_size + 7) & ~7;
local_size -= size;
diff --git a/sljit/sljitNativeARM_v5.c b/sljit/sljitNativeARM_v5.c
index e22c249..63bc6ee 100644
--- a/sljit/sljitNativeARM_v5.c
+++ b/sljit/sljitNativeARM_v5.c
@@ -820,38 +820,38 @@ static int emit_op(struct sljit_compiler *compiler, int op, int inp_flags,
int src1, sljit_w src1w,
int src2, sljit_w src2w);
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size;
sljit_uw push;
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
- /* Push general registers, temporary registers
+ /* Push saved registers, temporary registers
stmdb sp!, {..., lr} */
push = PUSH | (1 << 14);
if (temporaries >= 5)
push |= 1 << 11;
if (temporaries >= 4)
push |= 1 << 10;
- if (generals >= 5)
+ if (saveds >= 5)
push |= 1 << 8;
- if (generals >= 4)
+ if (saveds >= 4)
push |= 1 << 7;
- if (generals >= 3)
+ if (saveds >= 3)
push |= 1 << 6;
- if (generals >= 2)
+ if (saveds >= 2)
push |= 1 << 5;
- if (generals >= 1)
+ if (saveds >= 1)
push |= 1 << 4;
EMIT_INSTRUCTION(push);
/* Stack must be aligned to 8 bytes: */
- size = (1 + generals) * sizeof(sljit_uw);
+ size = (1 + saveds) * sizeof(sljit_uw);
if (temporaries >= 4)
size += (temporaries - 3) * sizeof(sljit_uw);
local_size += size;
@@ -862,26 +862,26 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, local_size));
if (args >= 1)
- EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG1, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG1)));
+ EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG1, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG1)));
if (args >= 2)
- EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG2, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG2)));
+ EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG2, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG2)));
if (args >= 3)
- EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_GENERAL_REG3, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG3)));
+ EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, SLJIT_SAVED_REG3, SLJIT_UNUSED, RM(SLJIT_TEMPORARY_REG3)));
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size;
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
- size = (1 + generals) * sizeof(sljit_uw);
+ size = (1 + saveds) * sizeof(sljit_uw);
if (temporaries >= 4)
size += (temporaries - 3) * sizeof(sljit_uw);
local_size += size;
@@ -903,21 +903,21 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
FAIL_IF(emit_op(compiler, SLJIT_ADD, ALLOW_IMM, SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, compiler->local_size));
pop = POP | (1 << 15);
- /* Push general registers, temporary registers
+ /* Push saved registers, temporary registers
ldmia sp!, {..., pc} */
if (compiler->temporaries >= 5)
pop |= 1 << 11;
if (compiler->temporaries >= 4)
pop |= 1 << 10;
- if (compiler->generals >= 5)
+ if (compiler->saveds >= 5)
pop |= 1 << 8;
- if (compiler->generals >= 4)
+ if (compiler->saveds >= 4)
pop |= 1 << 7;
- if (compiler->generals >= 3)
+ if (compiler->saveds >= 3)
pop |= 1 << 6;
- if (compiler->generals >= 2)
+ if (compiler->saveds >= 2)
pop |= 1 << 5;
- if (compiler->generals >= 1)
+ if (compiler->saveds >= 1)
pop |= 1 << 4;
return push_inst(compiler, pop);
@@ -2141,17 +2141,17 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, in
/* Other instructions */
/* --------------------------------------------------------------------- */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
int size;
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
- size = (1 + generals) * sizeof(sljit_uw);
+ size = (1 + saveds) * sizeof(sljit_uw);
if (temporaries >= 4)
size += (temporaries - 3) * sizeof(sljit_uw);
local_size += size;
diff --git a/sljit/sljitNativeMIPS_common.c b/sljit/sljitNativeMIPS_common.c
index 26c9555..0358585 100644
--- a/sljit/sljitNativeMIPS_common.c
+++ b/sljit/sljitNativeMIPS_common.c
@@ -459,18 +459,18 @@ static int emit_op(struct sljit_compiler *compiler, int op, int inp_flags,
int src1, sljit_w src1w,
int src2, sljit_w src2w);
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
sljit_ins base;
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
- local_size += (generals + 2 + 4) * sizeof(sljit_w);
+ local_size += (saveds + 2 + 4) * sizeof(sljit_w);
local_size = (local_size + 15) & ~0xf;
compiler->local_size = local_size;
@@ -490,40 +490,40 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (int)sizeof(sljit_w)), MOVABLE_INS));
if (compiler->has_locals)
FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_LOCALS_REG) | IMM(local_size - 2 * (int)sizeof(sljit_w)), MOVABLE_INS));
- if (generals >= 1)
- FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_GENERAL_REG1) | IMM(local_size - 3 * (int)sizeof(sljit_w)), MOVABLE_INS));
- if (generals >= 2)
- FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_GENERAL_REG2) | IMM(local_size - 4 * (int)sizeof(sljit_w)), MOVABLE_INS));
- if (generals >= 3)
- FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_GENERAL_REG3) | IMM(local_size - 5 * (int)sizeof(sljit_w)), MOVABLE_INS));
- if (generals >= 4)
- FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_GENERAL_EREG1) | IMM(local_size - 6 * (int)sizeof(sljit_w)), MOVABLE_INS));
- if (generals >= 5)
- FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_GENERAL_EREG2) | IMM(local_size - 7 * (int)sizeof(sljit_w)), MOVABLE_INS));
+ if (saveds >= 1)
+ FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 3 * (int)sizeof(sljit_w)), MOVABLE_INS));
+ if (saveds >= 2)
+ FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 4 * (int)sizeof(sljit_w)), MOVABLE_INS));
+ if (saveds >= 3)
+ FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 5 * (int)sizeof(sljit_w)), MOVABLE_INS));
+ if (saveds >= 4)
+ FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 6 * (int)sizeof(sljit_w)), MOVABLE_INS));
+ if (saveds >= 5)
+ FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 7 * (int)sizeof(sljit_w)), MOVABLE_INS));
if (compiler->has_locals)
FAIL_IF(push_inst(compiler, ADDIU_W | S(REAL_STACK_PTR) | T(SLJIT_LOCALS_REG) | IMM(4 * sizeof(sljit_w)), DR(SLJIT_LOCALS_REG)));
if (args >= 1)
- FAIL_IF(push_inst(compiler, ADDU_W | SA(4) | TA(0) | D(SLJIT_GENERAL_REG1), DR(SLJIT_GENERAL_REG1)));
+ FAIL_IF(push_inst(compiler, ADDU_W | SA(4) | TA(0) | D(SLJIT_SAVED_REG1), DR(SLJIT_SAVED_REG1)));
if (args >= 2)
- FAIL_IF(push_inst(compiler, ADDU_W | SA(5) | TA(0) | D(SLJIT_GENERAL_REG2), DR(SLJIT_GENERAL_REG2)));
+ FAIL_IF(push_inst(compiler, ADDU_W | SA(5) | TA(0) | D(SLJIT_SAVED_REG2), DR(SLJIT_SAVED_REG2)));
if (args >= 3)
- FAIL_IF(push_inst(compiler, ADDU_W | SA(6) | TA(0) | D(SLJIT_GENERAL_REG3), DR(SLJIT_GENERAL_REG3)));
+ FAIL_IF(push_inst(compiler, ADDU_W | SA(6) | TA(0) | D(SLJIT_SAVED_REG3), DR(SLJIT_SAVED_REG3)));
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
- local_size += (generals + 2 + 4) * sizeof(sljit_w);
+ local_size += (saveds + 2 + 4) * sizeof(sljit_w);
compiler->local_size = (local_size + 15) & ~0xf;
}
@@ -548,16 +548,16 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
}
FAIL_IF(push_inst(compiler, STACK_LOAD | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (int)sizeof(sljit_w)), RETURN_ADDR_REG));
- if (compiler->generals >= 5)
- FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_GENERAL_EREG2) | IMM(local_size - 7 * (int)sizeof(sljit_w)), DR(SLJIT_GENERAL_EREG2)));
- if (compiler->generals >= 4)
- FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_GENERAL_EREG1) | IMM(local_size - 6 * (int)sizeof(sljit_w)), DR(SLJIT_GENERAL_EREG1)));
- if (compiler->generals >= 3)
- FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_GENERAL_REG3) | IMM(local_size - 5 * (int)sizeof(sljit_w)), DR(SLJIT_GENERAL_REG3)));
- if (compiler->generals >= 2)
- FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_GENERAL_REG2) | IMM(local_size - 4 * (int)sizeof(sljit_w)), DR(SLJIT_GENERAL_REG2)));
- if (compiler->generals >= 1)
- FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_GENERAL_REG1) | IMM(local_size - 3 * (int)sizeof(sljit_w)), DR(SLJIT_GENERAL_REG1)));
+ if (compiler->saveds >= 5)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 7 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_EREG2)));
+ if (compiler->saveds >= 4)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 6 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_EREG1)));
+ if (compiler->saveds >= 3)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 5 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG3)));
+ if (compiler->saveds >= 2)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 4 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG2)));
+ if (compiler->saveds >= 1)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 3 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG1)));
if (compiler->has_locals)
FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_LOCALS_REG) | IMM(local_size - 2 * (int)sizeof(sljit_w)), DR(SLJIT_LOCALS_REG)));
@@ -1264,16 +1264,16 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, in
/* Other instructions */
/* --------------------------------------------------------------------- */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
- local_size += (generals + 2 + 4) * sizeof(sljit_w);
+ local_size += (saveds + 2 + 4) * sizeof(sljit_w);
compiler->local_size = (local_size + 15) & ~0xf;
if (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS)
diff --git a/sljit/sljitNativePPC_common.c b/sljit/sljitNativePPC_common.c
index bb0552c..b45b476 100644
--- a/sljit/sljitNativePPC_common.c
+++ b/sljit/sljitNativePPC_common.c
@@ -437,43 +437,43 @@ static int emit_op(struct sljit_compiler *compiler, int op, int inp_flags,
int src1, sljit_w src1w,
int src2, sljit_w src2w);
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
FAIL_IF(push_inst(compiler, MFLR | D(0)));
if (compiler->has_locals)
FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_LOCALS_REG) | A(REAL_STACK_PTR) | IMM(-(int)(sizeof(sljit_w))) ));
FAIL_IF(push_inst(compiler, STACK_STORE | S(ZERO_REG) | A(REAL_STACK_PTR) | IMM(-2 * (int)(sizeof(sljit_w))) ));
- if (generals >= 1)
- FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_GENERAL_REG1) | A(REAL_STACK_PTR) | IMM(-3 * (int)(sizeof(sljit_w))) ));
- if (generals >= 2)
- FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_GENERAL_REG2) | A(REAL_STACK_PTR) | IMM(-4 * (int)(sizeof(sljit_w))) ));
- if (generals >= 3)
- FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_GENERAL_REG3) | A(REAL_STACK_PTR) | IMM(-5 * (int)(sizeof(sljit_w))) ));
- if (generals >= 4)
- FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_GENERAL_EREG1) | A(REAL_STACK_PTR) | IMM(-6 * (int)(sizeof(sljit_w))) ));
- if (generals >= 5)
- FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_GENERAL_EREG2) | A(REAL_STACK_PTR) | IMM(-7 * (int)(sizeof(sljit_w))) ));
+ if (saveds >= 1)
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG1) | A(REAL_STACK_PTR) | IMM(-3 * (int)(sizeof(sljit_w))) ));
+ if (saveds >= 2)
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG2) | A(REAL_STACK_PTR) | IMM(-4 * (int)(sizeof(sljit_w))) ));
+ if (saveds >= 3)
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG3) | A(REAL_STACK_PTR) | IMM(-5 * (int)(sizeof(sljit_w))) ));
+ if (saveds >= 4)
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG1) | A(REAL_STACK_PTR) | IMM(-6 * (int)(sizeof(sljit_w))) ));
+ if (saveds >= 5)
+ FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG2) | A(REAL_STACK_PTR) | IMM(-7 * (int)(sizeof(sljit_w))) ));
FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(REAL_STACK_PTR) | IMM(sizeof(sljit_w)) ));
FAIL_IF(push_inst(compiler, ADDI | D(ZERO_REG) | A(0) | 0));
if (args >= 1)
- FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG1) | A(SLJIT_GENERAL_REG1) | B(SLJIT_TEMPORARY_REG1)));
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG1) | A(SLJIT_SAVED_REG1) | B(SLJIT_TEMPORARY_REG1)));
if (args >= 2)
- FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG2) | A(SLJIT_GENERAL_REG2) | B(SLJIT_TEMPORARY_REG2)));
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG2) | A(SLJIT_SAVED_REG2) | B(SLJIT_TEMPORARY_REG2)));
if (args >= 3)
- FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG3) | A(SLJIT_GENERAL_REG3) | B(SLJIT_TEMPORARY_REG3)));
+ FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG3) | A(SLJIT_SAVED_REG3) | B(SLJIT_TEMPORARY_REG3)));
#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- compiler->local_size = (2 + generals + 2) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 2) * sizeof(sljit_w) + local_size;
#else
- compiler->local_size = (2 + generals + 7 + 8) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 7 + 8) * sizeof(sljit_w) + local_size;
#endif
compiler->local_size = (compiler->local_size + 15) & ~0xf;
@@ -500,19 +500,19 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- compiler->local_size = (2 + generals + 2) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 2) * sizeof(sljit_w) + local_size;
#else
- compiler->local_size = (2 + generals + 7 + 8) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 7 + 8) * sizeof(sljit_w) + local_size;
#endif
compiler->local_size = (compiler->local_size + 15) & ~0xf;
}
@@ -532,16 +532,16 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
}
FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(REAL_STACK_PTR) | IMM(sizeof(sljit_w))));
- if (compiler->generals >= 5)
- FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_GENERAL_EREG2) | A(REAL_STACK_PTR) | IMM(-7 * (int)(sizeof(sljit_w))) ));
- if (compiler->generals >= 4)
- FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_GENERAL_EREG1) | A(REAL_STACK_PTR) | IMM(-6 * (int)(sizeof(sljit_w))) ));
- if (compiler->generals >= 3)
- FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_GENERAL_REG3) | A(REAL_STACK_PTR) | IMM(-5 * (int)(sizeof(sljit_w))) ));
- if (compiler->generals >= 2)
- FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_GENERAL_REG2) | A(REAL_STACK_PTR) | IMM(-4 * (int)(sizeof(sljit_w))) ));
- if (compiler->generals >= 1)
- FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_GENERAL_REG1) | A(REAL_STACK_PTR) | IMM(-3 * (int)(sizeof(sljit_w))) ));
+ if (compiler->saveds >= 5)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG2) | A(REAL_STACK_PTR) | IMM(-7 * (int)(sizeof(sljit_w))) ));
+ if (compiler->saveds >= 4)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG1) | A(REAL_STACK_PTR) | IMM(-6 * (int)(sizeof(sljit_w))) ));
+ if (compiler->saveds >= 3)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG3) | A(REAL_STACK_PTR) | IMM(-5 * (int)(sizeof(sljit_w))) ));
+ if (compiler->saveds >= 2)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG2) | A(REAL_STACK_PTR) | IMM(-4 * (int)(sizeof(sljit_w))) ));
+ if (compiler->saveds >= 1)
+ FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG1) | A(REAL_STACK_PTR) | IMM(-3 * (int)(sizeof(sljit_w))) ));
FAIL_IF(push_inst(compiler, STACK_LOAD | D(ZERO_REG) | A(REAL_STACK_PTR) | IMM(-2 * (int)(sizeof(sljit_w))) ));
if (compiler->has_locals)
FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_LOCALS_REG) | A(REAL_STACK_PTR) | IMM(-(int)(sizeof(sljit_w))) ));
@@ -1554,19 +1554,19 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, in
/* Other instructions */
/* --------------------------------------------------------------------- */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->has_locals = local_size > 0;
#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
- compiler->local_size = (2 + generals + 2) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 2) * sizeof(sljit_w) + local_size;
#else
- compiler->local_size = (2 + generals + 7 + 8) * sizeof(sljit_w) + local_size;
+ compiler->local_size = (2 + saveds + 7 + 8) * sizeof(sljit_w) + local_size;
#endif
compiler->local_size = (compiler->local_size + 15) & ~0xf;
diff --git a/sljit/sljitNativeX86_32.c b/sljit/sljitNativeX86_32.c
index 4e316dc..68bca84 100644
--- a/sljit/sljitNativeX86_32.c
+++ b/sljit/sljitNativeX86_32.c
@@ -63,23 +63,23 @@ static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_
return code_ptr;
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size;
sljit_ub *buf;
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->args = args;
compiler->flags_saved = 0;
#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
- size = 1 + (generals <= 3 ? generals : 3) + (args > 0 ? (args * 2) : 0) + (args > 2 ? 2 : 0);
+ size = 1 + (saveds <= 3 ? saveds : 3) + (args > 0 ? (args * 2) : 0) + (args > 2 ? 2 : 0);
#else
- size = 1 + (generals <= 3 ? generals : 3) + (args > 0 ? (2 + args * 3) : 0);
+ size = 1 + (saveds <= 3 ? saveds : 3) + (args > 0 ? (2 + args * 3) : 0);
#endif
buf = (sljit_ub*)ensure_buf(compiler, 1 + size);
FAIL_IF(!buf);
@@ -92,42 +92,42 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
*buf++ = 0xc4 | (reg_map[TMP_REGISTER] << 3);
}
#endif
- if (generals > 2)
- PUSH_REG(reg_map[SLJIT_GENERAL_REG3]);
- if (generals > 1)
- PUSH_REG(reg_map[SLJIT_GENERAL_REG2]);
- if (generals > 0)
- PUSH_REG(reg_map[SLJIT_GENERAL_REG1]);
+ if (saveds > 2)
+ PUSH_REG(reg_map[SLJIT_SAVED_REG3]);
+ if (saveds > 1)
+ PUSH_REG(reg_map[SLJIT_SAVED_REG2]);
+ if (saveds > 0)
+ PUSH_REG(reg_map[SLJIT_SAVED_REG1]);
#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
if (args > 0) {
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG1] << 3) | reg_map[SLJIT_TEMPORARY_REG3];
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG1] << 3) | reg_map[SLJIT_TEMPORARY_REG3];
}
if (args > 1) {
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG2] << 3) | reg_map[SLJIT_TEMPORARY_REG2];
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG2] << 3) | reg_map[SLJIT_TEMPORARY_REG2];
}
if (args > 2) {
*buf++ = 0x8b;
- *buf++ = 0x44 | (reg_map[SLJIT_GENERAL_REG3] << 3);
+ *buf++ = 0x44 | (reg_map[SLJIT_SAVED_REG3] << 3);
*buf++ = 0x24;
- *buf++ = sizeof(sljit_w) * (3 + 2); /* generals >= 3 as well. */
+ *buf++ = sizeof(sljit_w) * (3 + 2); /* saveds >= 3 as well. */
}
#else
if (args > 0) {
*buf++ = 0x8b;
- *buf++ = 0x40 | (reg_map[SLJIT_GENERAL_REG1] << 3) | reg_map[TMP_REGISTER];
+ *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG1] << 3) | reg_map[TMP_REGISTER];
*buf++ = sizeof(sljit_w) * 2;
}
if (args > 1) {
*buf++ = 0x8b;
- *buf++ = 0x40 | (reg_map[SLJIT_GENERAL_REG2] << 3) | reg_map[TMP_REGISTER];
+ *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG2] << 3) | reg_map[TMP_REGISTER];
*buf++ = sizeof(sljit_w) * 3;
}
if (args > 2) {
*buf++ = 0x8b;
- *buf++ = 0x40 | (reg_map[SLJIT_GENERAL_REG3] << 3) | reg_map[TMP_REGISTER];
+ *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG3] << 3) | reg_map[TMP_REGISTER];
*buf++ = sizeof(sljit_w) * 4;
}
#endif
@@ -136,9 +136,9 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
compiler->temporaries_start = local_size;
if (temporaries > 3)
local_size += (temporaries - 3) * sizeof(sljit_uw);
- compiler->generals_start = local_size;
- if (generals > 3)
- local_size += (generals - 3) * sizeof(sljit_uw);
+ compiler->saveds_start = local_size;
+ if (saveds > 3)
+ local_size += (saveds - 3) * sizeof(sljit_uw);
#ifdef _WIN32
if (local_size > 1024) {
@@ -152,25 +152,24 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
return emit_non_cum_binary(compiler, 0x2b, 0x29, 0x5 << 3, 0x2d,
SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, local_size);
- /* Mov arguments to general registers. */
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->args = args;
compiler->local_size = (local_size + sizeof(sljit_uw) - 1) & ~(sizeof(sljit_uw) - 1);
compiler->temporaries_start = compiler->local_size;
if (temporaries > 3)
compiler->local_size += (temporaries - 3) * sizeof(sljit_uw);
- compiler->generals_start = compiler->local_size;
- if (generals > 3)
- compiler->local_size += (generals - 3) * sizeof(sljit_uw);
+ compiler->saveds_start = compiler->local_size;
+ if (saveds > 3)
+ compiler->local_size += (saveds - 3) * sizeof(sljit_uw);
}
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
@@ -189,7 +188,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
FAIL_IF(emit_cum_binary(compiler, 0x03, 0x01, 0x0 << 3, 0x05,
SLJIT_LOCALS_REG, 0, SLJIT_LOCALS_REG, 0, SLJIT_IMM, compiler->local_size));
- size = 2 + (compiler->generals <= 3 ? compiler->generals : 3);
+ size = 2 + (compiler->saveds <= 3 ? compiler->saveds : 3);
#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
if (compiler->args > 2)
size += 2;
@@ -202,12 +201,12 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
INC_SIZE(size);
- if (compiler->generals > 0)
- POP_REG(reg_map[SLJIT_GENERAL_REG1]);
- if (compiler->generals > 1)
- POP_REG(reg_map[SLJIT_GENERAL_REG2]);
- if (compiler->generals > 2)
- POP_REG(reg_map[SLJIT_GENERAL_REG3]);
+ if (compiler->saveds > 0)
+ POP_REG(reg_map[SLJIT_SAVED_REG1]);
+ if (compiler->saveds > 1)
+ POP_REG(reg_map[SLJIT_SAVED_REG2]);
+ if (compiler->saveds > 2)
+ POP_REG(reg_map[SLJIT_SAVED_REG3]);
POP_REG(reg_map[TMP_REGISTER]);
#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
if (compiler->args > 2)
@@ -432,23 +431,23 @@ static SLJIT_INLINE int call_with_args(struct sljit_compiler *compiler, int type
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
sljit_ub *buf;
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->args = args;
compiler->local_size = (local_size + sizeof(sljit_uw) - 1) & ~(sizeof(sljit_uw) - 1);
compiler->temporaries_start = compiler->local_size;
if (temporaries > 3)
compiler->local_size += (temporaries - 3) * sizeof(sljit_uw);
- compiler->generals_start = compiler->local_size;
- if (generals > 3)
- compiler->local_size += (generals - 3) * sizeof(sljit_uw);
+ compiler->saveds_start = compiler->local_size;
+ if (saveds > 3)
+ compiler->local_size += (saveds - 3) * sizeof(sljit_uw);
CHECK_EXTRA_REGS(dst, dstw, (void)0);
diff --git a/sljit/sljitNativeX86_64.c b/sljit/sljitNativeX86_64.c
index e54c8cf..40d875b 100644
--- a/sljit/sljitNativeX86_64.c
+++ b/sljit/sljitNativeX86_64.c
@@ -86,24 +86,24 @@ static sljit_ub* generate_fixed_jump(sljit_ub *code_ptr, sljit_w addr, int type)
return code_ptr;
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int size, pushed_size;
sljit_ub *buf;
CHECK_ERROR();
- check_sljit_emit_enter(compiler, args, temporaries, generals, local_size);
+ check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->flags_saved = 0;
- size = generals;
+ size = saveds;
/* Including the return address saved by the call instruction. */
- pushed_size = (generals + 1) * sizeof(sljit_w);
+ pushed_size = (saveds + 1) * sizeof(sljit_w);
#ifndef _WIN64
- if (generals >= 2)
- size += generals - 1;
+ if (saveds >= 2)
+ size += saveds - 1;
#else
/* Saving the virtual stack pointer. */
compiler->has_locals = local_size > 0;
@@ -111,8 +111,8 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
size += 2;
pushed_size += sizeof(sljit_w);
}
- if (generals >= 4)
- size += generals - 3;
+ if (saveds >= 4)
+ size += saveds - 3;
if (temporaries >= 5) {
size += (5 - 4) * 2;
pushed_size += sizeof(sljit_w);
@@ -124,37 +124,37 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
FAIL_IF(!buf);
INC_SIZE(size);
- if (generals >= 5) {
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_EREG2] >= 8, general_ereg2_is_hireg);
+ if (saveds >= 5) {
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_EREG2] >= 8, saved_ereg2_is_hireg);
*buf++ = REX_B;
- PUSH_REG(reg_lmap[SLJIT_GENERAL_EREG2]);
+ PUSH_REG(reg_lmap[SLJIT_SAVED_EREG2]);
}
- if (generals >= 4) {
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_EREG1] >= 8, general_ereg1_is_hireg);
+ if (saveds >= 4) {
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_EREG1] >= 8, saved_ereg1_is_hireg);
*buf++ = REX_B;
- PUSH_REG(reg_lmap[SLJIT_GENERAL_EREG1]);
+ PUSH_REG(reg_lmap[SLJIT_SAVED_EREG1]);
}
- if (generals >= 3) {
+ if (saveds >= 3) {
#ifndef _WIN64
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_REG3] >= 8, general_reg3_is_hireg);
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_REG3] >= 8, saved_reg3_is_hireg);
*buf++ = REX_B;
#else
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_REG3] < 8, general_reg3_is_loreg);
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_REG3] < 8, saved_reg3_is_loreg);
#endif
- PUSH_REG(reg_lmap[SLJIT_GENERAL_REG3]);
+ PUSH_REG(reg_lmap[SLJIT_SAVED_REG3]);
}
- if (generals >= 2) {
+ if (saveds >= 2) {
#ifndef _WIN64
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_REG2] >= 8, general_reg2_is_hireg);
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_REG2] >= 8, saved_reg2_is_hireg);
*buf++ = REX_B;
#else
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_REG2] < 8, general_reg2_is_loreg);
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_REG2] < 8, saved_reg2_is_loreg);
#endif
- PUSH_REG(reg_lmap[SLJIT_GENERAL_REG2]);
+ PUSH_REG(reg_lmap[SLJIT_SAVED_REG2]);
}
- if (generals >= 1) {
- SLJIT_COMPILE_ASSERT(reg_map[SLJIT_GENERAL_REG1] < 8, general_reg1_is_loreg);
- PUSH_REG(reg_lmap[SLJIT_GENERAL_REG1]);
+ if (saveds >= 1) {
+ SLJIT_COMPILE_ASSERT(reg_map[SLJIT_SAVED_REG1] < 8, saved_reg1_is_loreg);
+ PUSH_REG(reg_lmap[SLJIT_SAVED_REG1]);
}
#ifdef _WIN64
if (temporaries >= 5) {
@@ -173,33 +173,33 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
if (args > 0) {
*buf++ = REX_W;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG1] << 3) | 0x7;
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG1] << 3) | 0x7;
}
if (args > 1) {
*buf++ = REX_W | REX_R;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_lmap[SLJIT_GENERAL_REG2] << 3) | 0x6;
+ *buf++ = 0xc0 | (reg_lmap[SLJIT_SAVED_REG2] << 3) | 0x6;
}
if (args > 2) {
*buf++ = REX_W | REX_R;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_lmap[SLJIT_GENERAL_REG3] << 3) | 0x2;
+ *buf++ = 0xc0 | (reg_lmap[SLJIT_SAVED_REG3] << 3) | 0x2;
}
#else
if (args > 0) {
*buf++ = REX_W;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG1] << 3) | 0x1;
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG1] << 3) | 0x1;
}
if (args > 1) {
*buf++ = REX_W;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG2] << 3) | 0x2;
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG2] << 3) | 0x2;
}
if (args > 2) {
*buf++ = REX_W | REX_B;
*buf++ = 0x8b;
- *buf++ = 0xc0 | (reg_map[SLJIT_GENERAL_REG3] << 3) | 0x0;
+ *buf++ = 0xc0 | (reg_map[SLJIT_SAVED_REG3] << 3) | 0x0;
}
#endif
}
@@ -269,21 +269,20 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, i
}
#endif
- /* Mov arguments to general registers. */
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
{
int pushed_size;
CHECK_ERROR_VOID();
- check_sljit_set_context(compiler, args, temporaries, generals, local_size);
+ check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
/* Including the return address saved by the call instruction. */
- pushed_size = (generals + 1) * sizeof(sljit_w);
+ pushed_size = (saveds + 1) * sizeof(sljit_w);
#ifdef _WIN64
compiler->has_locals = local_size > 0;
if (local_size > 0)
@@ -329,15 +328,15 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
}
}
- size = 1 + compiler->generals;
+ size = 1 + compiler->saveds;
#ifndef _WIN64
- if (compiler->generals >= 2)
- size += compiler->generals - 1;
+ if (compiler->saveds >= 2)
+ size += compiler->saveds - 1;
#else
if (compiler->has_locals)
size += 2;
- if (compiler->generals >= 4)
- size += compiler->generals - 3;
+ if (compiler->saveds >= 4)
+ size += compiler->saveds - 3;
if (compiler->temporaries >= 5)
size += (5 - 4) * 2;
#endif
@@ -356,27 +355,27 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler,
POP_REG(reg_lmap[SLJIT_TEMPORARY_EREG2]);
}
#endif
- if (compiler->generals >= 1)
- POP_REG(reg_map[SLJIT_GENERAL_REG1]);
- if (compiler->generals >= 2) {
+ if (compiler->saveds >= 1)
+ POP_REG(reg_map[SLJIT_SAVED_REG1]);
+ if (compiler->saveds >= 2) {
#ifndef _WIN64
*buf++ = REX_B;
#endif
- POP_REG(reg_lmap[SLJIT_GENERAL_REG2]);
+ POP_REG(reg_lmap[SLJIT_SAVED_REG2]);
}
- if (compiler->generals >= 3) {
+ if (compiler->saveds >= 3) {
#ifndef _WIN64
*buf++ = REX_B;
#endif
- POP_REG(reg_lmap[SLJIT_GENERAL_REG3]);
+ POP_REG(reg_lmap[SLJIT_SAVED_REG3]);
}
- if (compiler->generals >= 4) {
+ if (compiler->saveds >= 4) {
*buf++ = REX_B;
- POP_REG(reg_lmap[SLJIT_GENERAL_EREG1]);
+ POP_REG(reg_lmap[SLJIT_SAVED_EREG1]);
}
- if (compiler->generals >= 5) {
+ if (compiler->saveds >= 5) {
*buf++ = REX_B;
- POP_REG(reg_lmap[SLJIT_GENERAL_EREG2]);
+ POP_REG(reg_lmap[SLJIT_SAVED_EREG2]);
}
RET();
@@ -672,15 +671,15 @@ static SLJIT_INLINE int call_with_args(struct sljit_compiler *compiler, int type
return SLJIT_SUCCESS;
}
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
{
sljit_ub *buf;
CHECK_ERROR();
- check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, generals, local_size);
+ check_sljit_emit_fast_enter(compiler, dst, dstw, args, temporaries, saveds, local_size);
compiler->temporaries = temporaries;
- compiler->generals = generals;
+ compiler->saveds = saveds;
compiler->local_size = (local_size + sizeof(sljit_uw) - 1) & ~(sizeof(sljit_uw) - 1);
#ifdef _WIN64
compiler->local_size += 4 * sizeof(sljit_w);
@@ -815,9 +814,9 @@ static int emit_mov_int(struct sljit_compiler *compiler, int sign,
return SLJIT_SUCCESS;
}
- dst_r = (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_GENERAL_REG3) ? dst : TMP_REGISTER;
+ dst_r = (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_SAVED_REG3) ? dst : TMP_REGISTER;
- if ((dst & SLJIT_MEM) && (src >= SLJIT_TEMPORARY_REG1 && src <= SLJIT_GENERAL_REG3))
+ if ((dst & SLJIT_MEM) && (src >= SLJIT_TEMPORARY_REG1 && src <= SLJIT_SAVED_REG3))
dst_r = src;
else {
if (sign) {
diff --git a/sljit/sljitNativeX86_common.c b/sljit/sljitNativeX86_common.c
index 6bd734b..9df4f4e 100644
--- a/sljit/sljitNativeX86_common.c
+++ b/sljit/sljitNativeX86_common.c
@@ -80,8 +80,8 @@ static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 2] = {
p = SLJIT_MEM1(SLJIT_LOCALS_REG); \
do; \
} \
- else if (p >= SLJIT_GENERAL_EREG1 && p <= SLJIT_GENERAL_EREG2) { \
- w = compiler->generals_start + (p - SLJIT_GENERAL_EREG1) * sizeof(sljit_w); \
+ else if (p >= SLJIT_SAVED_EREG1 && p <= SLJIT_SAVED_EREG2) { \
+ w = compiler->saveds_start + (p - SLJIT_SAVED_EREG1) * sizeof(sljit_w); \
p = SLJIT_MEM1(SLJIT_LOCALS_REG); \
do; \
}
@@ -95,7 +95,7 @@ static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 2] = {
/* Note: r12 & 0x7 == 0b100, which decoded as SIB byte present
Note: avoid to use r12 and r13 for memory addessing
- therefore r12 is better for GENERAL_EREG than GENERAL_REG. */
+ therefore r12 is better for SAVED_EREG than SAVED_REG. */
#ifndef _WIN64
/* 1st passed in rdi, 2nd argument passed in rsi, 3rd in rdx. */
static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 4] = {
@@ -1985,7 +1985,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
check_sljit_get_register_index(reg);
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
if (reg == SLJIT_TEMPORARY_EREG1 || reg == SLJIT_TEMPORARY_EREG2
- || reg == SLJIT_GENERAL_EREG1 || reg == SLJIT_GENERAL_EREG2)
+ || reg == SLJIT_SAVED_EREG1 || reg == SLJIT_SAVED_EREG2)
return -1;
#endif
return reg_map[reg];
@@ -2752,7 +2752,7 @@ SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compil
*buf++ = 0x0f;
*buf++ = 0xb6;
- if (dst >= SLJIT_GENERAL_REG1 && dst <= SLJIT_NO_REGISTERS)
+ if (dst >= SLJIT_SAVED_REG1 && dst <= SLJIT_NO_REGISTERS)
*buf = 0xC0 | (reg_map[dst] << 3);
else {
*buf = 0xC0;