diff options
author | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2013-03-15 06:58:31 +0000 |
---|---|---|
committer | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2013-03-15 06:58:31 +0000 |
commit | d84f8eb8d8cb3bc13ca9db10793b0698ca9c4660 (patch) | |
tree | 40163aa0758e1256d8b05b09aff84424a7ef0ca3 /sljit | |
parent | 351b741cf519bec3a0da29843e9c737a86baae3d (diff) | |
download | pcre-d84f8eb8d8cb3bc13ca9db10793b0698ca9c4660.tar.gz |
JIT compiler update.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1280 2f5784b3-3f2a-0410-8824-cb99058d5e15
Diffstat (limited to 'sljit')
-rw-r--r-- | sljit/sljitLir.c | 6 | ||||
-rw-r--r-- | sljit/sljitLir.h | 24 | ||||
-rw-r--r-- | sljit/sljitNativeARM_Thumb2.c | 6 | ||||
-rw-r--r-- | sljit/sljitNativeARM_v5.c | 6 | ||||
-rw-r--r-- | sljit/sljitNativeMIPS_common.c | 6 | ||||
-rw-r--r-- | sljit/sljitNativePPC_common.c | 6 | ||||
-rw-r--r-- | sljit/sljitNativeSPARC_common.c | 6 | ||||
-rw-r--r-- | sljit/sljitNativeX86_common.c | 6 |
8 files changed, 57 insertions, 9 deletions
diff --git a/sljit/sljitLir.c b/sljit/sljitLir.c index 20e1e61..db23b07 100644 --- a/sljit/sljitLir.c +++ b/sljit/sljitLir.c @@ -993,6 +993,12 @@ static SLJIT_INLINE void check_sljit_get_register_index(sljit_si reg) SLJIT_ASSERT(reg > 0 && reg <= SLJIT_NO_REGISTERS); } +static SLJIT_INLINE void check_sljit_get_float_register_index(sljit_si reg) +{ + SLJIT_UNUSED_ARG(reg); + SLJIT_ASSERT(reg > 0 && reg <= SLJIT_NO_FLOAT_REGISTERS); +} + static SLJIT_INLINE void check_sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitLir.h b/sljit/sljitLir.h index ebe2142..a04ff06 100644 --- a/sljit/sljitLir.h +++ b/sljit/sljitLir.h @@ -161,12 +161,14 @@ of sljitConfigInternal.h */ /* Floating point operations are performed on double or single precision values. */ -#define SLJIT_FLOAT_REG1 1 -#define SLJIT_FLOAT_REG2 2 -#define SLJIT_FLOAT_REG3 3 -#define SLJIT_FLOAT_REG4 4 -#define SLJIT_FLOAT_REG5 5 -#define SLJIT_FLOAT_REG6 6 +#define SLJIT_FLOAT_REG1 1 +#define SLJIT_FLOAT_REG2 2 +#define SLJIT_FLOAT_REG3 3 +#define SLJIT_FLOAT_REG4 4 +#define SLJIT_FLOAT_REG5 5 +#define SLJIT_FLOAT_REG6 6 + +#define SLJIT_NO_FLOAT_REGISTERS 6 /* --------------------------------------------------------------------- */ /* Main structures and functions */ @@ -698,12 +700,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler /* The following function is a helper function for sljit_emit_op_custom. It returns with the real machine register index of any SLJIT_SCRATCH 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. */ + Note: it returns with -1 for virtual registers (all EREGs on x86-32). */ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg); +/* The following function is a helper function for sljit_emit_op_custom. + It returns with the real machine register index of any SLJIT_FLOAT register. + Note: the index is divided by 2 on ARM 32 bit architectures. */ + +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg); + /* Any instruction can be inserted into the instruction stream by sljit_emit_op_custom. It has a similar purpose as inline assembly. The size parameter must match to the instruction size of the target diff --git a/sljit/sljitNativeARM_Thumb2.c b/sljit/sljitNativeARM_Thumb2.c index 54b4cef..74ec831 100644 --- a/sljit/sljitNativeARM_Thumb2.c +++ b/sljit/sljitNativeARM_Thumb2.c @@ -1526,6 +1526,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitNativeARM_v5.c b/sljit/sljitNativeARM_v5.c index e09cbb2..e3ca3d9 100644 --- a/sljit/sljitNativeARM_v5.c +++ b/sljit/sljitNativeARM_v5.c @@ -1989,6 +1989,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitNativeMIPS_common.c b/sljit/sljitNativeMIPS_common.c index 2091f70..ede1c0b 100644 --- a/sljit/sljitNativeMIPS_common.c +++ b/sljit/sljitNativeMIPS_common.c @@ -1099,6 +1099,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg << 1; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitNativePPC_common.c b/sljit/sljitNativePPC_common.c index 8ae1bd5..67e6898 100644 --- a/sljit/sljitNativePPC_common.c +++ b/sljit/sljitNativePPC_common.c @@ -1507,6 +1507,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitNativeSPARC_common.c b/sljit/sljitNativeSPARC_common.c index 08d8772..e5571ee 100644 --- a/sljit/sljitNativeSPARC_common.c +++ b/sljit/sljitNativeSPARC_common.c @@ -921,6 +921,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg << 1; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { diff --git a/sljit/sljitNativeX86_common.c b/sljit/sljitNativeX86_common.c index e76b2ac..ceb3d67 100644 --- a/sljit/sljitNativeX86_common.c +++ b/sljit/sljitNativeX86_common.c @@ -2214,6 +2214,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg) return reg_map[reg]; } +SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg) +{ + check_sljit_get_float_register_index(reg); + return reg; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_si size) { |