[Pcre-svn] [1451] code/trunk: Little endian PowerPC systems …

トップ ページ
このメッセージを削除
著者: Subversion repository
日付:  
To: pcre-svn
題目: [Pcre-svn] [1451] code/trunk: Little endian PowerPC systems are supported now by the JIT compiler.
Revision: 1451
          http://vcs.pcre.org/viewvc?view=rev&revision=1451
Author:   zherczeg
Date:     2014-01-21 01:49:14 +0000 (Tue, 21 Jan 2014)


Log Message:
-----------
Little endian PowerPC systems are supported now by the JIT compiler.

Modified Paths:
--------------
    code/trunk/ChangeLog
    code/trunk/sljit/sljitConfigInternal.h
    code/trunk/sljit/sljitLir.c
    code/trunk/sljit/sljitNativePPC_common.c


Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog    2014-01-17 17:50:51 UTC (rev 1450)
+++ code/trunk/ChangeLog    2014-01-21 01:49:14 UTC (rev 1451)
@@ -94,7 +94,9 @@


18. pcretest was missing "-C bsr" for displaying the \R default setting.

+19. Little endian PowerPC systems are supported now by the JIT compiler.

+
Version 8.34 15-December-2013
-----------------------------


Modified: code/trunk/sljit/sljitConfigInternal.h
===================================================================
--- code/trunk/sljit/sljitConfigInternal.h    2014-01-17 17:50:51 UTC (rev 1450)
+++ code/trunk/sljit/sljitConfigInternal.h    2014-01-21 01:49:14 UTC (rev 1451)
@@ -353,11 +353,15 @@


#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN)

-/* These macros are useful for the application. */
+/* These macros are useful for the applications. */
 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) \
-    || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) \
-    || (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
+    || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+
+#ifdef __LITTLE_ENDIAN__
+#define SLJIT_LITTLE_ENDIAN 1
+#else
 #define SLJIT_BIG_ENDIAN 1
+#endif


#elif (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)

@@ -367,6 +371,10 @@
#define SLJIT_BIG_ENDIAN 1
#endif

+#elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
+
+#define SLJIT_BIG_ENDIAN 1
+
#else
#define SLJIT_LITTLE_ENDIAN 1
#endif
@@ -383,7 +391,8 @@
#endif

 #ifndef SLJIT_INDIRECT_CALL
-#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) || (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32 && defined _AIX)
+#if ((defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) && (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN))  \
+    || ((defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) && defined _AIX)
 /* It seems certain ppc compilers use an indirect addressing for functions
    which makes things complicated. */
 #define SLJIT_INDIRECT_CALL 1


Modified: code/trunk/sljit/sljitLir.c
===================================================================
--- code/trunk/sljit/sljitLir.c    2014-01-17 17:50:51 UTC (rev 1450)
+++ code/trunk/sljit/sljitLir.c    2014-01-21 01:49:14 UTC (rev 1451)
@@ -217,7 +217,7 @@


#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
#define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
-#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
+#ifdef _AIX
#define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_sw))
#else
#define FIXED_LOCALS_OFFSET (2 * sizeof(sljit_sw))

Modified: code/trunk/sljit/sljitNativePPC_common.c
===================================================================
--- code/trunk/sljit/sljitNativePPC_common.c    2014-01-17 17:50:51 UTC (rev 1450)
+++ code/trunk/sljit/sljitNativePPC_common.c    2014-01-21 01:49:14 UTC (rev 1451)
@@ -33,6 +33,11 @@
    Both for ppc-32 and ppc-64. */
 typedef sljit_ui sljit_ins;


+#if ((defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) && (defined _AIX)) \
+    || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+#define SLJIT_PPC_ABI_V2 1
+#endif
+
 #ifdef _AIX
 #include <sys/cache.h>
 #endif
@@ -509,7 +514,11 @@
         FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (sljit_si)(sizeof(sljit_sw))) ));
     if (saveds >= 5)
         FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (sljit_si)(sizeof(sljit_sw))) ));
+#if (defined SLJIT_PPC_ABI_V2 && SLJIT_PPC_ABI_V2)
+    FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_LOCALS_REG) | IMM(2 * sizeof(sljit_sw)) ));
+#else
     FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw)) ));
+#endif


     FAIL_IF(push_inst(compiler, ADDI | D(ZERO_REG) | A(0) | 0));
     if (args >= 1)
@@ -519,7 +528,7 @@
     if (args >= 3)
         FAIL_IF(push_inst(compiler, OR | S(SLJIT_SCRATCH_REG3) | A(SLJIT_SAVED_REG3) | B(SLJIT_SCRATCH_REG3)));


-#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
+#if (defined SLJIT_PPC_ABI_V2 && SLJIT_PPC_ABI_V2)
     compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
 #else
     compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
@@ -556,7 +565,7 @@
     compiler->logical_local_size = local_size;
 #endif


-#if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
+#if (defined SLJIT_PPC_ABI_V2 && SLJIT_PPC_ABI_V2)
     compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
 #else
     compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
@@ -578,7 +587,11 @@
         FAIL_IF(push_inst(compiler, ADD | D(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | B(0)));
     }


+#if (defined SLJIT_PPC_ABI_V2 && SLJIT_PPC_ABI_V2)
+    FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_LOCALS_REG) | IMM(2 * sizeof(sljit_sw))));
+#else
     FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw))));
+#endif
     if (compiler->saveds >= 5)
         FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (sljit_si)(sizeof(sljit_sw))) ));
     if (compiler->saveds >= 4)