summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2012-11-06 05:52:31 +0000
committerzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2012-11-06 05:52:31 +0000
commite06cd1ab1dad11a6fa0105bba1bae61244184420 (patch)
treefb5ddcf5f296abca53b8f6b8d55d8f6ea4082e3a
parent3b36ee67a3aa504252b2dd67e32cf59b026e5f04 (diff)
downloadpcre-e06cd1ab1dad11a6fa0105bba1bae61244184420.tar.gz
JIT compiler update.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1206 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--sljit/sljitNativeX86_common.c70
1 files changed, 4 insertions, 66 deletions
diff --git a/sljit/sljitNativeX86_common.c b/sljit/sljitNativeX86_common.c
index 161fab3..c744262 100644
--- a/sljit/sljitNativeX86_common.c
+++ b/sljit/sljitNativeX86_common.c
@@ -271,7 +271,7 @@ static sljit_si cpu_has_cmov = -1;
#include <intrin.h>
#endif
-static void get_cpu_features()
+static void get_cpu_features(void)
{
sljit_ui features;
@@ -2623,71 +2623,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *c
if (SLJIT_UNLIKELY(compiler->flags_saved))
FAIL_IF(emit_restore_flags(compiler, op & SLJIT_KEEP_FLAGS));
- switch (type) {
- case SLJIT_C_EQUAL:
- case SLJIT_C_FLOAT_EQUAL:
- cond_set = 0x94 /* sete */;
- break;
-
- case SLJIT_C_NOT_EQUAL:
- case SLJIT_C_FLOAT_NOT_EQUAL:
- cond_set = 0x95 /* setne */;
- break;
-
- case SLJIT_C_LESS:
- case SLJIT_C_FLOAT_LESS:
- cond_set = 0x92 /* setnae */;
- break;
-
- case SLJIT_C_GREATER_EQUAL:
- case SLJIT_C_FLOAT_GREATER_EQUAL:
- cond_set = 0x93 /* setnb */;
- break;
-
- case SLJIT_C_GREATER:
- case SLJIT_C_FLOAT_GREATER:
- cond_set = 0x97 /* seta */;
- break;
-
- case SLJIT_C_LESS_EQUAL:
- case SLJIT_C_FLOAT_LESS_EQUAL:
- cond_set = 0x96 /* setbe */;
- break;
-
- case SLJIT_C_SIG_LESS:
- cond_set = 0x9c /* setnge */;
- break;
-
- case SLJIT_C_SIG_GREATER_EQUAL:
- cond_set = 0x9d /* setnl */;
- break;
-
- case SLJIT_C_SIG_GREATER:
- cond_set = 0x9f /* setg */;
- break;
-
- case SLJIT_C_SIG_LESS_EQUAL:
- cond_set = 0x9e /* setle */;
- break;
-
- case SLJIT_C_OVERFLOW:
- case SLJIT_C_MUL_OVERFLOW:
- cond_set = 0x90 /* seto */;
- break;
-
- case SLJIT_C_NOT_OVERFLOW:
- case SLJIT_C_MUL_NOT_OVERFLOW:
- cond_set = 0x91 /* setno */;
- break;
-
- case SLJIT_C_FLOAT_UNORDERED:
- cond_set = 0x9a /* setp */;
- break;
-
- case SLJIT_C_FLOAT_ORDERED:
- cond_set = 0x9b /* setpo */;
- break;
- }
+ /* setcc = jcc + 0x10. */
+ cond_set = get_jump_code(type) + 0x10;
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
reg = (op == SLJIT_MOV && dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) ? dst : TMP_REGISTER;
@@ -2748,6 +2685,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *c
INC_SIZE(3);
*inst++ = GROUP_0F;
+ /* cmovcc = setcc - 0x50. */
*inst++ = cond_set - 0x50;
*inst++ = MOD_REG | (reg_map[dst] << 3) | reg_map[TMP_REGISTER];
return SLJIT_SUCCESS;