[Pcre-svn] [1195] code/trunk: Another huge JIT compiler upda…

Kezdőlap
Üzenet törlése
Szerző: Subversion repository
Dátum:  
Címzett: pcre-svn
Tárgy: [Pcre-svn] [1195] code/trunk: Another huge JIT compiler update.
Revision: 1195
          http://vcs.pcre.org/viewvc?view=rev&revision=1195
Author:   zherczeg
Date:     2012-11-01 15:21:27 +0000 (Thu, 01 Nov 2012)


Log Message:
-----------
Another huge JIT compiler update.

Modified Paths:
--------------
    code/trunk/Makefile.am
    code/trunk/pcre_jit_compile.c
    code/trunk/sljit/sljitConfigInternal.h
    code/trunk/sljit/sljitExecAllocator.c
    code/trunk/sljit/sljitLir.c
    code/trunk/sljit/sljitLir.h
    code/trunk/sljit/sljitNativeARM_Thumb2.c
    code/trunk/sljit/sljitNativeARM_v5.c
    code/trunk/sljit/sljitNativeMIPS_32.c
    code/trunk/sljit/sljitNativeMIPS_common.c
    code/trunk/sljit/sljitNativePPC_32.c
    code/trunk/sljit/sljitNativePPC_64.c
    code/trunk/sljit/sljitNativePPC_common.c
    code/trunk/sljit/sljitNativeSPARC_32.c
    code/trunk/sljit/sljitNativeSPARC_common.c
    code/trunk/sljit/sljitNativeX86_32.c
    code/trunk/sljit/sljitNativeX86_64.c
    code/trunk/sljit/sljitNativeX86_common.c
    code/trunk/sljit/sljitUtils.c


Modified: code/trunk/Makefile.am
===================================================================
--- code/trunk/Makefile.am    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/Makefile.am    2012-11-01 15:21:27 UTC (rev 1195)
@@ -336,6 +336,8 @@
   sljit/sljitNativePPC_32.c \
   sljit/sljitNativePPC_64.c \
   sljit/sljitNativePPC_common.c \
+  sljit/sljitNativeSPARC_32.c \
+  sljit/sljitNativeSPARC_common.c \
   sljit/sljitNativeX86_32.c \
   sljit/sljitNativeX86_64.c \
   sljit/sljitNativeX86_common.c \


Modified: code/trunk/pcre_jit_compile.c
===================================================================
--- code/trunk/pcre_jit_compile.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/pcre_jit_compile.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -301,7 +301,7 @@


/* Flipped and lower case tables. */
const pcre_uint8 *fcc;
- sljit_w lcc;
+ sljit_sw lcc;
/* Mode can be PCRE_STUDY_JIT_COMPILE and others. */
int mode;
/* Newline control. */
@@ -312,12 +312,12 @@
int endonly;
BOOL has_set_som;
/* Tables. */
- sljit_w ctypes;
+ sljit_sw ctypes;
int digits[2 + MAX_RANGE_SIZE];
/* Named capturing brackets. */
sljit_uw name_table;
- sljit_w name_count;
- sljit_w name_entry_size;
+ sljit_sw name_count;
+ sljit_sw name_entry_size;

   /* Labels and jump lists. */
   struct sljit_label *partialmatchlabel;
@@ -364,7 +364,7 @@
 #if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED
   int ucharptr;
   union {
-    sljit_i asint;
+    sljit_si asint;
     sljit_uh asushort;
 #if defined COMPILE_PCRE8
     sljit_ub asbyte;
@@ -376,7 +376,7 @@
 #endif
   } c;
   union {
-    sljit_i asint;
+    sljit_si asint;
     sljit_uh asushort;
 #if defined COMPILE_PCRE8
     sljit_ub asbyte;
@@ -400,7 +400,7 @@
 #undef CMP


 /* Used for accessing the elements of the stack. */
-#define STACK(i)      ((-(i) - 1) * (int)sizeof(sljit_w))
+#define STACK(i)      ((-(i) - 1) * (int)sizeof(sljit_sw))


 #define TMP1          SLJIT_TEMPORARY_REG1
 #define TMP2          SLJIT_TEMPORARY_REG3
@@ -415,20 +415,20 @@


 /* Local space layout. */
 /* These two locals can be used by the current opcode. */
-#define LOCALS0          (0 * sizeof(sljit_w))
-#define LOCALS1          (1 * sizeof(sljit_w))
+#define LOCALS0          (0 * sizeof(sljit_sw))
+#define LOCALS1          (1 * sizeof(sljit_sw))
 /* Two local variables for possessive quantifiers (char1 cannot use them). */
-#define POSSESSIVE0      (2 * sizeof(sljit_w))
-#define POSSESSIVE1      (3 * sizeof(sljit_w))
+#define POSSESSIVE0      (2 * sizeof(sljit_sw))
+#define POSSESSIVE1      (3 * sizeof(sljit_sw))
 /* Max limit of recursions. */
-#define CALL_LIMIT       (4 * sizeof(sljit_w))
+#define CALL_LIMIT       (4 * sizeof(sljit_sw))
 /* The output vector is stored on the stack, and contains pointers
 to characters. The vector data is divided into two groups: the first
 group contains the start / end character pointers, and the second is
 the start pointers when the end of the capturing group has not yet reached. */
 #define OVECTOR_START    (common->ovector_start)
-#define OVECTOR(i)       (OVECTOR_START + (i) * sizeof(sljit_w))
-#define OVECTOR_PRIV(i)  (common->cbraptr + (i) * sizeof(sljit_w))
+#define OVECTOR(i)       (OVECTOR_START + (i) * sizeof(sljit_sw))
+#define OVECTOR_PRIV(i)  (common->cbraptr + (i) * sizeof(sljit_sw))
 #define PRIVATE_DATA(cc) (common->private_data_ptrs[(cc) - common->start])


 #if defined COMPILE_PCRE8
@@ -799,13 +799,13 @@
     case OP_BRAPOS:
     case OP_SBRA:
     case OP_SBRAPOS:
-    private_data_length += sizeof(sljit_w);
+    private_data_length += sizeof(sljit_sw);
     bracketlen = 1 + LINK_SIZE;
     break;


     case OP_CBRAPOS:
     case OP_SCBRAPOS:
-    private_data_length += sizeof(sljit_w);
+    private_data_length += sizeof(sljit_sw);
     common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] = 0;
     bracketlen = 1 + LINK_SIZE + IMM2_SIZE;
     break;
@@ -843,10 +843,10 @@
       /* Might be a hidden SCOND. */
       alternative = cc + GET(cc, 1);
       if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
-        private_data_length += sizeof(sljit_w);
+        private_data_length += sizeof(sljit_sw);
       }
     else
-      private_data_length += sizeof(sljit_w);
+      private_data_length += sizeof(sljit_sw);
     bracketlen = 1 + LINK_SIZE;
     break;


@@ -909,7 +909,7 @@
     if (common->recursive_head == 0)
       {
       common->recursive_head = common->ovector_start;
-      common->ovector_start += sizeof(sljit_w);
+      common->ovector_start += sizeof(sljit_sw);
       }
     cc += 1 + LINK_SIZE;
     break;
@@ -918,7 +918,7 @@
     if (common->mark_ptr == 0)
       {
       common->mark_ptr = common->ovector_start;
-      common->ovector_start += sizeof(sljit_w);
+      common->ovector_start += sizeof(sljit_sw);
       }
     cc += 1 + 2 + cc[1];
     break;
@@ -931,7 +931,7 @@
     }


   if (space > 0 && cc >= end)
-    private_data_length += sizeof(sljit_w) * space;
+    private_data_length += sizeof(sljit_sw) * space;


   if (size != 0)
     {
@@ -985,14 +985,14 @@
     case OP_SBRAPOS:
     case OP_SCOND:
     common->private_data_ptrs[cc - common->start] = private_data_ptr;
-    private_data_ptr += sizeof(sljit_w);
+    private_data_ptr += sizeof(sljit_sw);
     bracketlen = 1 + LINK_SIZE;
     break;


     case OP_CBRAPOS:
     case OP_SCBRAPOS:
     common->private_data_ptrs[cc - common->start] = private_data_ptr;
-    private_data_ptr += sizeof(sljit_w);
+    private_data_ptr += sizeof(sljit_sw);
     bracketlen = 1 + LINK_SIZE + IMM2_SIZE;
     break;


@@ -1002,7 +1002,7 @@
     if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
       {
       common->private_data_ptrs[cc - common->start] = private_data_ptr;
-      private_data_ptr += sizeof(sljit_w);
+      private_data_ptr += sizeof(sljit_sw);
       }
     bracketlen = 1 + LINK_SIZE;
     break;
@@ -1070,7 +1070,7 @@
   if (space > 0 && cc >= end)
     {
     common->private_data_ptrs[cc - common->start] = private_data_ptr;
-    private_data_ptr += sizeof(sljit_w) * space;
+    private_data_ptr += sizeof(sljit_sw) * space;
     }


   if (size != 0)
@@ -1201,9 +1201,9 @@
       {
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, frame_setstrbegin);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       setsom_found = TRUE;
       }
     cc += 1;
@@ -1215,9 +1215,9 @@
       {
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, frame_setmark);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       setmark_found = TRUE;
       }
     cc += 1 + 2 + cc[1];
@@ -1228,18 +1228,18 @@
       {
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, frame_setstrbegin);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       setsom_found = TRUE;
       }
     if (common->mark_ptr != 0 && !setmark_found)
       {
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, frame_setmark);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
-      stackpos += (int)sizeof(sljit_w);
+      stackpos += (int)sizeof(sljit_sw);
       setmark_found = TRUE;
       }
     cc += 1 + LINK_SIZE;
@@ -1251,13 +1251,13 @@
     case OP_SCBRAPOS:
     offset = (GET2(cc, 1 + LINK_SIZE)) << 1;
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, OVECTOR(offset));
-    stackpos += (int)sizeof(sljit_w);
+    stackpos += (int)sizeof(sljit_sw);
     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
     OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
-    stackpos += (int)sizeof(sljit_w);
+    stackpos += (int)sizeof(sljit_sw);
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP2, 0);
-    stackpos += (int)sizeof(sljit_w);
+    stackpos += (int)sizeof(sljit_sw);


     cc += 1 + LINK_SIZE + IMM2_SIZE;
     break;
@@ -1408,17 +1408,17 @@


 if (!save)
   {
-  stackptr += sizeof(sljit_w);
+  stackptr += sizeof(sljit_sw);
   if (stackptr < stacktop)
     {
     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), stackptr);
-    stackptr += sizeof(sljit_w);
+    stackptr += sizeof(sljit_sw);
     tmp1empty = FALSE;
     }
   if (stackptr < stacktop)
     {
     OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), stackptr);
-    stackptr += sizeof(sljit_w);
+    stackptr += sizeof(sljit_sw);
     tmp2empty = FALSE;
     }
   /* The tmp1next must be TRUE in either way. */
@@ -1509,7 +1509,7 @@
         {
         count = 2;
         srcw[0] = PRIVATE_DATA(cc);
-        srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_w);
+        srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw);
         }
       cc += 2;
 #ifdef SUPPORT_UTF
@@ -1522,7 +1522,7 @@
         {
         count = 2;
         srcw[0] = PRIVATE_DATA(cc);
-        srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_w);
+        srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw);
         }
       cc += 2 + IMM2_SIZE;
 #ifdef SUPPORT_UTF
@@ -1544,7 +1544,7 @@
         {
         count = 2;
         srcw[0] = PRIVATE_DATA(cc);
-        srcw[1] = srcw[0] + sizeof(sljit_w);
+        srcw[1] = srcw[0] + sizeof(sljit_sw);
         }
       cc += 1;
       break;
@@ -1554,7 +1554,7 @@
         {
         count = 2;
         srcw[0] = PRIVATE_DATA(cc);
-        srcw[1] = srcw[0] + sizeof(sljit_w);
+        srcw[1] = srcw[0] + sizeof(sljit_sw);
         }
       cc += 1 + IMM2_SIZE;
       break;
@@ -1578,7 +1578,7 @@
           case 2:
           count = 2;
           srcw[0] = PRIVATE_DATA(cc);
-          srcw[1] = srcw[0] + sizeof(sljit_w);
+          srcw[1] = srcw[0] + sizeof(sljit_sw);
           break;


           default:
@@ -1610,7 +1610,7 @@
         if (!tmp1empty)
           {
           OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP1, 0);
-          stackptr += sizeof(sljit_w);
+          stackptr += sizeof(sljit_sw);
           }
         OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count]);
         tmp1empty = FALSE;
@@ -1621,7 +1621,7 @@
         if (!tmp2empty)
           {
           OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP2, 0);
-          stackptr += sizeof(sljit_w);
+          stackptr += sizeof(sljit_sw);
           }
         OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count]);
         tmp2empty = FALSE;
@@ -1638,7 +1638,7 @@
         if (!tmp1empty)
           {
           OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), stackptr);
-          stackptr += sizeof(sljit_w);
+          stackptr += sizeof(sljit_sw);
           }
         tmp1next = FALSE;
         }
@@ -1650,7 +1650,7 @@
         if (!tmp2empty)
           {
           OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), stackptr);
-          stackptr += sizeof(sljit_w);
+          stackptr += sizeof(sljit_sw);
           }
         tmp1next = TRUE;
         }
@@ -1665,12 +1665,12 @@
     if (!tmp1empty)
       {
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP1, 0);
-      stackptr += sizeof(sljit_w);
+      stackptr += sizeof(sljit_sw);
       }
     if (!tmp2empty)
       {
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP2, 0);
-      stackptr += sizeof(sljit_w);
+      stackptr += sizeof(sljit_sw);
       }
     }
   else
@@ -1678,12 +1678,12 @@
     if (!tmp2empty)
       {
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP2, 0);
-      stackptr += sizeof(sljit_w);
+      stackptr += sizeof(sljit_sw);
       }
     if (!tmp1empty)
       {
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP1, 0);
-      stackptr += sizeof(sljit_w);
+      stackptr += sizeof(sljit_sw);
       }
     }
   }
@@ -1773,7 +1773,7 @@
 /* May destroy all locals and registers except TMP2. */
 DEFINE_COMPILER;


-OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_w));
+OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw));
#ifdef DESTROY_REGISTERS
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 12345);
OP1(SLJIT_MOV, TMP3, 0, TMP1, 0);
@@ -1787,7 +1787,7 @@
static SLJIT_INLINE void free_stack(compiler_common *common, int size)
{
DEFINE_COMPILER;
-OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_w));
+OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw));
}

static SLJIT_INLINE void reset_ovector(compiler_common *common, int length)
@@ -1805,10 +1805,10 @@
}
else
{
- GET_LOCAL_BASE(SLJIT_TEMPORARY_REG2, 0, OVECTOR_START - sizeof(sljit_w));
+ GET_LOCAL_BASE(SLJIT_TEMPORARY_REG2, 0, OVECTOR_START - sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG3, 0, SLJIT_IMM, length);
loop = LABEL();
- OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_TEMPORARY_REG2), sizeof(sljit_w), SLJIT_TEMPORARY_REG1, 0);
+ OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_TEMPORARY_REG2), sizeof(sljit_sw), SLJIT_TEMPORARY_REG1, 0);
OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_TEMPORARY_REG3, 0, SLJIT_TEMPORARY_REG3, 0, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, loop);
}
@@ -1837,7 +1837,7 @@
earlyexit = CMP(SLJIT_C_EQUAL, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, 0);
loop = LABEL();
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));
+OP2(SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
/* Copy the integer value to the output buffer */
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
OP2(SLJIT_ASHR, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, UCHAR_SHIFT);
@@ -1850,12 +1850,12 @@
/* Calculate the return value, which is the maximum ovector value. */
if (topbracket > 1)
{
- GET_LOCAL_BASE(SLJIT_TEMPORARY_REG1, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_w));
+ GET_LOCAL_BASE(SLJIT_TEMPORARY_REG1, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, topbracket + 1);

/* 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)));
+ OP1(SLJIT_MOVU, SLJIT_TEMPORARY_REG3, 0, SLJIT_MEM1(SLJIT_TEMPORARY_REG1), -(2 * (sljit_sw)sizeof(sljit_sw)));
OP2(SLJIT_SUB, SLJIT_TEMPORARY_REG2, 0, SLJIT_TEMPORARY_REG2, 0, SLJIT_IMM, 1);
CMPTO(SLJIT_C_EQUAL, SLJIT_TEMPORARY_REG3, 0, SLJIT_SAVED_REG3, 0, loop);
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_TEMPORARY_REG2, 0);
@@ -2381,7 +2381,7 @@
JUMPHERE(jump);

/* We only have types for characters less than 256. */
-OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_w)PRIV(utf8_table4) - 0xc0);
+OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(utf8_table4) - 0xc0);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
@@ -2434,13 +2434,13 @@

sljit_emit_fast_enter(compiler, RETURN_ADDR, 0);
OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT);
-OP1(SLJIT_MOV_UB, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_w)PRIV(ucd_stage1));
+OP1(SLJIT_MOV_UB, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1));
OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK);
OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCD_BLOCK_SHIFT);
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_stage2));
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2));
OP1(SLJIT_MOV_UH, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1);
-OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype));
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype));
OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 3);
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
}
@@ -2537,7 +2537,7 @@
if (common->utf)
{
singlechar = CMP(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, 0xc0);
- OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)PRIV(utf8_table4) - 0xc0);
+ OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
JUMPHERE(singlechar);
}
@@ -2923,7 +2923,7 @@
if (common->utf)
{
CMPTO(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, 0xc0, start);
- OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)PRIV(utf8_table4) - 0xc0);
+ OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
}
#elif defined COMPILE_PCRE16
@@ -3024,9 +3024,9 @@
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), 0);
jump = CMP(SLJIT_C_SIG_LESS_EQUAL, TMP2, 0, SLJIT_IMM, frame_end);
OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP3, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(TMP1), sizeof(sljit_w));
-OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_w), SLJIT_MEM1(TMP1), 2 * sizeof(sljit_w));
-OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 3 * sizeof(sljit_w));
+OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(TMP1), sizeof(sljit_sw));
+OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_sw), SLJIT_MEM1(TMP1), 2 * sizeof(sljit_sw));
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 3 * sizeof(sljit_sw));
JUMPTO(SLJIT_JUMP, mainloop);

JUMPHERE(jump);
@@ -3037,8 +3037,8 @@
JUMPHERE(jump);
jump = CMP(SLJIT_C_NOT_EQUAL, TMP2, 0, SLJIT_IMM, frame_setstrbegin);
/* Set string begin. */
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), sizeof(sljit_w));
-OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_w));
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), sizeof(sljit_sw));
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), TMP2, 0);
JUMPTO(SLJIT_JUMP, mainloop);

@@ -3046,8 +3046,8 @@
if (common->mark_ptr != 0)
{
jump = CMP(SLJIT_C_NOT_EQUAL, TMP2, 0, SLJIT_IMM, frame_setmark);
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), sizeof(sljit_w));
- OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_w));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), sizeof(sljit_sw));
+ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP2, 0);
JUMPTO(SLJIT_JUMP, mainloop);

@@ -3055,7 +3055,7 @@
}

/* Unknown command. */
-OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_w));
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_sw));
JUMPTO(SLJIT_JUMP, mainloop);
}

@@ -3735,7 +3735,7 @@
     {
     OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x7);
     OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3);
-    OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)cc);
+    OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc);
     OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);
     OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0);
     add_jump(compiler, list, JUMP(SLJIT_C_NOT_ZERO));
@@ -3852,13 +3852,13 @@
     {
     if (scriptreg == TMP1)
       {
-      OP1(SLJIT_MOV, scriptreg, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));
+      OP1(SLJIT_MOV, scriptreg, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));
       OP1(SLJIT_MOV_UB, scriptreg, 0, SLJIT_MEM2(scriptreg, TMP2), 3);
       }
     else
       {
       OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3);
-      OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));
+      OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));
       OP1(SLJIT_MOV_UB, scriptreg, 0, SLJIT_MEM1(TMP2), 0);
       }
     }
@@ -4041,7 +4041,7 @@
           OP2(SLJIT_OR, TMP2, 0, TMP1, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]);
         else
           {
-          OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_w)charoffset);
+          OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset);
           OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]);
           }
         OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[1]);
@@ -4054,7 +4054,7 @@
           OP2(SLJIT_OR, TMP2, 0, TMP1, 0, SLJIT_IMM, other_cases[2] ^ other_cases[1]);
         else
           {
-          OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_w)charoffset);
+          OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset);
           OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]);
           }
         OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[2]);
@@ -4196,7 +4196,7 @@
 #if defined COMPILE_PCRE8 || defined COMPILE_PCRE16
 #if defined COMPILE_PCRE8
     jump[0] = CMP(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, 0xc0);
-    OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)PRIV(utf8_table4) - 0xc0);
+    OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);
     OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
 #elif defined COMPILE_PCRE16
     jump[0] = CMP(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, 0xd800);
@@ -4274,7 +4274,7 @@
   detect_partial_match(common, backtracks);
   read_char(common);
   add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL));
-  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, gbprop));
+  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, gbprop));
   /* Optimize register allocation: use a real register. */
   OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, STACK_TOP, 0);
   OP1(SLJIT_MOV_UB, STACK_TOP, 0, SLJIT_MEM2(TMP1, TMP2), 3);
@@ -4284,11 +4284,11 @@
   OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);
   read_char(common);
   add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL));
-  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_w)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, gbprop));
+  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, gbprop));
   OP1(SLJIT_MOV_UB, TMP2, 0, SLJIT_MEM2(TMP1, TMP2), 3);


   OP2(SLJIT_SHL, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 2);
-  OP1(SLJIT_MOV_UI, TMP1, 0, SLJIT_MEM1(STACK_TOP), (sljit_w)PRIV(ucp_gbtable));
+  OP1(SLJIT_MOV_UI, TMP1, 0, SLJIT_MEM1(STACK_TOP), (sljit_sw)PRIV(ucp_gbtable));
   OP1(SLJIT_MOV, STACK_TOP, 0, TMP2, 0);
   OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);
   OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0);
@@ -4539,7 +4539,7 @@
       /* Skip the variable-length character. */
       OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
       jump[0] = CMP(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, 0xc0);
-      OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)PRIV(utf8_table4) - 0xc0);
+      OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);
       OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
       JUMPHERE(jump[0]);
       return cc + 1;
@@ -4602,7 +4602,7 @@
 #endif /* SUPPORT_UTF || !COMPILE_PCRE8 */
   OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x7);
   OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3);
-  OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_w)cc);
+  OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc);
   OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);
   OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0);
   add_jump(compiler, backtracks, JUMP(SLJIT_C_ZERO));
@@ -4905,10 +4905,10 @@
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);
     /* Temporary release of STR_PTR. */
-    OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+    OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
     zerolength = compile_ref_checks(common, ccbegin, NULL);
     /* Restore if not zero length. */
-    OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+    OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
     }
   else
     {
@@ -5147,7 +5147,7 @@
     if ((opcode != OP_ASSERT_NOT && opcode != OP_ASSERTBACK_NOT) || conditional)
       {
       /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
-      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
       }
     else
       {
@@ -5167,17 +5167,17 @@
         OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), 0);
       else
         {
-        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_w));
-        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (framesize + 1) * sizeof(sljit_w));
+        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
+        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (framesize + 1) * sizeof(sljit_sw));
         OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
         }
-      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
       }
     else if (framesize >= 0)
       {
       /* For OP_BRA and OP_BRAMINZERO. */
-      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_w));
+      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
       }
     }
   add_jump(compiler, found, JUMP(SLJIT_JUMP));
@@ -5242,10 +5242,10 @@
     OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), 0);
     /* Keep the STR_PTR on the top of the stack. */
     if (bra == OP_BRAZERO)
-      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
     else if (bra == OP_BRAMINZERO)
       {
-      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
       }
     }
@@ -5254,13 +5254,13 @@
     if (bra == OP_BRA)
       {
       /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
-      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
       OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), 0);
       }
     else
       {
       /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
-      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_sw));
       OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), bra == OP_BRAZERO ? STR_PTR : SLJIT_IMM, 0);
       }
@@ -5279,7 +5279,7 @@
       {
       OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
       add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
-      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_w));
+      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
       }
     set_jumps(backtrack->common.topbacktracks, LABEL());
     }
@@ -5333,14 +5333,14 @@
 return cc + 1 + LINK_SIZE;
 }


-static sljit_w SLJIT_CALL do_searchovector(sljit_uw refno, sljit_w* locals, pcre_uchar *name_table)
+static sljit_sw SLJIT_CALL do_searchovector(sljit_uw refno, sljit_sw* locals, pcre_uchar *name_table)
{
int condition = FALSE;
pcre_uchar *slotA = name_table;
pcre_uchar *slotB;
-sljit_w name_count = locals[LOCALS0 / sizeof(sljit_w)];
-sljit_w name_entry_size = locals[LOCALS1 / sizeof(sljit_w)];
-sljit_w no_capture;
+sljit_sw name_count = locals[LOCALS0 / sizeof(sljit_sw)];
+sljit_sw name_entry_size = locals[LOCALS1 / sizeof(sljit_sw)];
+sljit_sw no_capture;
int i;

locals += refno & 0xff;
@@ -5390,14 +5390,14 @@
return condition;
}

-static sljit_w SLJIT_CALL do_searchgroups(sljit_uw recno, sljit_uw* locals, pcre_uchar *name_table)
+static sljit_sw SLJIT_CALL do_searchgroups(sljit_uw recno, sljit_uw* locals, pcre_uchar *name_table)
{
int condition = FALSE;
pcre_uchar *slotA = name_table;
pcre_uchar *slotB;
-sljit_uw name_count = locals[LOCALS0 / sizeof(sljit_w)];
-sljit_uw name_entry_size = locals[LOCALS1 / sizeof(sljit_w)];
-sljit_uw group_num = locals[POSSESSIVE0 / sizeof(sljit_w)];
+sljit_uw name_count = locals[LOCALS0 / sizeof(sljit_sw)];
+sljit_uw name_entry_size = locals[LOCALS1 / sizeof(sljit_sw)];
+sljit_uw group_num = locals[POSSESSIVE0 / sizeof(sljit_sw)];
sljit_uw i;

 for (i = 0; i < name_count; i++)
@@ -5637,7 +5637,7 @@
         {
         /* Except when the whole stack frame must be saved. */
         OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
-        braminzerojump = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (BACKTRACK_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_w));
+        braminzerojump = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (BACKTRACK_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw));
         }
       JUMPHERE(skip);
       }
@@ -5672,7 +5672,7 @@
       allocate_stack(common, 2);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
       OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);
-      OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+      OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
       }
     else if (ket == OP_KETRMAX || has_alternatives)
       {
@@ -5725,7 +5725,7 @@
     SLJIT_ASSERT(private_data_ptr == OVECTOR(offset));
     allocate_stack(common, 2);
     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
-    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr + sizeof(sljit_w));
+    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr + sizeof(sljit_sw));
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STR_PTR, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);
@@ -5765,7 +5765,7 @@
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, STACK_TOP, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, SLJIT_IMM, common->name_count);
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, SLJIT_IMM, common->name_entry_size);
-    OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG1, 0, SLJIT_IMM, (stacksize << 8) | (common->ovector_start / sizeof(sljit_w)));
+    OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG1, 0, SLJIT_IMM, (stacksize << 8) | (common->ovector_start / sizeof(sljit_sw)));
     GET_LOCAL_BASE(SLJIT_TEMPORARY_REG2, 0, 0);
     OP1(SLJIT_MOV, SLJIT_TEMPORARY_REG3, 0, SLJIT_IMM, common->name_table);
     sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_searchovector));
@@ -5859,7 +5859,7 @@
   else
     {
     stacksize = (ket == OP_KETRMIN || ket == OP_KETRMAX || has_alternatives) ? 2 : 1;
-    OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (BACKTRACK_AS(bracket_backtrack)->u.framesize + stacksize) * sizeof(sljit_w));
+    OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (BACKTRACK_AS(bracket_backtrack)->u.framesize + stacksize) * sizeof(sljit_sw));
     if (ket == OP_KETRMAX)
       {
       /* TMP2 which is set here used by OP_KETRMAX below. */
@@ -6106,7 +6106,7 @@
     {
     if (opcode == OP_CBRAPOS || opcode == OP_SCBRAPOS)
       {
-      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw));
       OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr);
       OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
       OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr, STR_PTR, 0);
@@ -6115,10 +6115,10 @@
     else
       {
       OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
-      OP2(SLJIT_ADD, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_w));
+      OP2(SLJIT_ADD, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));
       if (opcode == OP_SBRAPOS)
-        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_w));
-      OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_w), STR_PTR, 0);
+        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw));
+      OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw), STR_PTR, 0);
       }


     if (opcode == OP_SBRAPOS || opcode == OP_SCBRAPOS)
@@ -6159,7 +6159,7 @@
     else
       {
       OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
-      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_w));
+      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw));
       }
     }


@@ -6174,7 +6174,7 @@
   if (framesize < 0)
     add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(stacksize - 1), SLJIT_IMM, 0));
   else /* TMP2 is set to [private_data_ptr] above. */
-    add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(TMP2), (stacksize - 1) * sizeof(sljit_w), SLJIT_IMM, 0));
+    add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(TMP2), (stacksize - 1) * sizeof(sljit_sw), SLJIT_IMM, 0));
   }


/* None of them matched. */
@@ -6289,7 +6289,7 @@
int private_data_ptr = PRIVATE_DATA(cc);
int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_LOCALS_REG);
int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;
-int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_w);
+int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_sw);
int tmp_base, tmp_offset;

 PUSH_BACKTRACK(sizeof(iterator_backtrack), cc, NULL);
@@ -6775,7 +6775,7 @@
     allocate_stack(common, 1);
     OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
-    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_w)(cc + 2));
+    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)(cc + 2));
     OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP2, 0);
     OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, mark_ptr), TMP2, 0);
     cc += 1 + 2 + cc[1];
@@ -6838,7 +6838,7 @@
 int private_data_ptr = PRIVATE_DATA(cc);
 int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_LOCALS_REG);
 int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;
-int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_w);
+int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_sw);


cc = get_iterator_parameters(common, cc, &opcode, &type, &arg1, &arg2, NULL);

@@ -7062,7 +7062,7 @@
{
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(assert_backtrack)->private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(assert_backtrack)->framesize * sizeof(sljit_w));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(assert_backtrack)->framesize * sizeof(sljit_sw));

   set_jumps(current->topbacktracks, LABEL());
   }
@@ -7072,7 +7072,7 @@
 if (bra == OP_BRAZERO)
   {
   /* We know there is enough place on the stack. */
-  OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+  OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
   OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
   JUMPTO(SLJIT_JUMP, CURRENT_AS(assert_backtrack)->matchingpath);
   JUMPHERE(brajump);
@@ -7143,7 +7143,7 @@
       else
         {
         OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
-        CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (CURRENT_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_w), CURRENT_AS(bracket_backtrack)->recursive_matchingpath);
+        CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (CURRENT_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw), CURRENT_AS(bracket_backtrack)->recursive_matchingpath);
         }
       if (opcode != OP_ONCE)
         free_stack(common, 1);
@@ -7232,7 +7232,7 @@
       {
       OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr);
       add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
-      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_w));
+      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
       }
     cond = JUMP(SLJIT_JUMP);
     set_jumps(CURRENT_AS(bracket_backtrack)->u.assert->condfailed, LABEL());
@@ -7289,7 +7289,7 @@
         }
       else
         {
-        OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (CURRENT_AS(bracket_backtrack)->u.framesize + 2) * sizeof(sljit_w));
+        OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (CURRENT_AS(bracket_backtrack)->u.framesize + 2) * sizeof(sljit_sw));
         if (ket == OP_KETRMAX)
           {
           /* TMP2 which is set here used by OP_KETRMAX below. */
@@ -7311,7 +7311,7 @@
         {
         /* We know we have place at least for one item on the top of the stack. */
         SLJIT_ASSERT(stacksize == 1);
-        OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_w));
+        OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
         }
     }


@@ -7361,7 +7361,7 @@
       {
       OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr);
       add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
-      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_w));
+      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
       }
     JUMPHERE(cond);
     }
@@ -7416,7 +7416,7 @@
   JUMPHERE(once);
   /* Restore previous private_data_ptr */
   if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0)
-    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracket_backtrack)->u.framesize * sizeof(sljit_w));
+    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracket_backtrack)->u.framesize * sizeof(sljit_sw));
   else if (ket == OP_KETRMIN)
     {
     OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
@@ -7495,7 +7495,7 @@
   free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize);
   JUMPHERE(jump);
   }
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracketpos_backtrack)->framesize * sizeof(sljit_w));
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracketpos_backtrack)->framesize * sizeof(sljit_sw));
 }


static void compile_braminzero_backtrackingpath(compiler_common *common, struct backtrack_common *current)
@@ -7772,16 +7772,16 @@
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head);
if (needsframe)
{
- OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_w));
+ OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw));
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_w));
+ OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw));
}
OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 1);

JUMPHERE(jump);
copy_private_data(common, ccbegin, ccend, FALSE, private_data_size + framesize + alternativesize, framesize + alternativesize);
free_stack(common, private_data_size + framesize + alternativesize);
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_w));
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_sw));
OP1(SLJIT_MOV, TMP1, 0, TMP3, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head, TMP2, 0);
sljit_emit_fast_return(compiler, SLJIT_MEM1(STACK_TOP), 0);
@@ -7826,7 +7826,7 @@

common->start = rootbacktrack.cc;
common->fcc = tables + fcc_offset;
-common->lcc = (sljit_w)(tables + lcc_offset);
+common->lcc = (sljit_sw)(tables + lcc_offset);
common->mode = mode;
common->nltype = NLTYPE_FIXED;
switch(re->options & PCRE_NEWLINE_BITS)
@@ -7861,9 +7861,9 @@
#endif
}
common->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-common->ctypes = (sljit_w)(tables + ctypes_offset);
+common->ctypes = (sljit_sw)(tables + ctypes_offset);
common->digits[0] = -2;
-common->name_table = (sljit_w)((pcre_uchar *)re + re->name_table_offset);
+common->name_table = (sljit_sw)((pcre_uchar *)re + re->name_table_offset);
common->name_count = re->name_count;
common->name_entry_size = re->name_entry_size;
common->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0;
@@ -7877,7 +7877,7 @@
ccend = bracketend(rootbacktrack.cc);

 /* Calculate the local space size on the stack. */
-common->ovector_start = CALL_LIMIT + sizeof(sljit_w);
+common->ovector_start = CALL_LIMIT + sizeof(sljit_sw);
 common->optimized_cbracket = (pcre_uint8 *)SLJIT_MALLOC(re->top_bracket + 1);
 if (!common->optimized_cbracket)
   return;
@@ -7895,31 +7895,31 @@
 if (mode == JIT_COMPILE && (re->flags & PCRE_REQCHSET) != 0 && (re->options & PCRE_NO_START_OPTIMIZE) == 0)
   {
   common->req_char_ptr = common->ovector_start;
-  common->ovector_start += sizeof(sljit_w);
+  common->ovector_start += sizeof(sljit_sw);
   }
 if (mode != JIT_COMPILE)
   {
   common->start_used_ptr = common->ovector_start;
-  common->ovector_start += sizeof(sljit_w);
+  common->ovector_start += sizeof(sljit_sw);
   if (mode == JIT_PARTIAL_SOFT_COMPILE)
     {
     common->hit_start = common->ovector_start;
-    common->ovector_start += sizeof(sljit_w);
+    common->ovector_start += sizeof(sljit_sw);
     }
   }
 if ((re->options & PCRE_FIRSTLINE) != 0)
   {
   common->first_line_end = common->ovector_start;
-  common->ovector_start += sizeof(sljit_w);
+  common->ovector_start += sizeof(sljit_sw);
   }


/* Aligning ovector to even number of sljit words. */
-if ((common->ovector_start & sizeof(sljit_w)) != 0)
- common->ovector_start += sizeof(sljit_w);
+if ((common->ovector_start & sizeof(sljit_sw)) != 0)
+ common->ovector_start += sizeof(sljit_sw);

SLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0));
-common->cbraptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_w);
-private_data_size += common->cbraptr + (re->top_bracket + 1) * sizeof(sljit_w);
+common->cbraptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw);
+private_data_size += common->cbraptr + (re->top_bracket + 1) * sizeof(sljit_sw);
if (private_data_size > SLJIT_MAX_LOCAL_SIZE)
{
SLJIT_FREE(common->optimized_cbracket);
@@ -7932,7 +7932,7 @@
return;
}
memset(common->private_data_ptrs, 0, (ccend - rootbacktrack.cc) * sizeof(int));
-set_private_data_ptrs(common, common->cbraptr + (re->top_bracket + 1) * sizeof(sljit_w), ccend);
+set_private_data_ptrs(common, common->cbraptr + (re->top_bracket + 1) * sizeof(sljit_sw), ccend);

compiler = sljit_create_compiler();
if (!compiler)
@@ -8261,7 +8261,7 @@
pcre_uint8 local_space[MACHINE_STACK_SIZE];
struct sljit_stack local_stack;

-local_stack.top = (sljit_w)&local_space;
+local_stack.top = (sljit_sw)&local_space;
local_stack.base = local_stack.top;
local_stack.limit = local_stack.base + MACHINE_STACK_SIZE;
local_stack.max_limit = local_stack.limit;

Modified: code/trunk/sljit/sljitConfigInternal.h
===================================================================
--- code/trunk/sljit/sljitConfigInternal.h    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitConfigInternal.h    2012-11-01 15:21:27 UTC (rev 1195)
@@ -33,7 +33,7 @@
    Feature detection (boolean) macros:
    SLJIT_32BIT_ARCHITECTURE : 32 bit architecture
    SLJIT_64BIT_ARCHITECTURE : 64 bit architecture
-   SLJIT_WORD_SHIFT : the shift required to apply when accessing a sljit_w/sljit_uw array by index
+   SLJIT_WORD_SHIFT : the shift required to apply when accessing a sljit_sw/sljit_uw array by index
    SLJIT_DOUBLE_SHIFT : the shift required to apply when accessing a double array by index
    SLJIT_LITTLE_ENDIAN : little endian architecture
    SLJIT_BIG_ENDIAN : big endian architecture
@@ -42,13 +42,14 @@
    SLJIT_RETURN_ADDRESS_OFFSET : a return instruction always adds this offset to the return address


    Types and useful macros:
-   sljit_b, sljit_ub : signed and unsigned 8 bit byte
-   sljit_h, sljit_uh : signed and unsigned 16 bit half-word (short) type
-   sljit_i, sljit_ui : signed and unsigned 32 bit integer type
-   sljit_w, sljit_uw : signed and unsigned machine word, enough to store a pointer
-   sljit_p           : unsgined pointer value (usually the same as sljit_uw, but
-                       some 64 bit ABIs may use 32 bit pointers)
-   sljit_d           : double precision floating point value
+   sljit_sb, sljit_ub : signed and unsigned 8 bit byte
+   sljit_sh, sljit_uh : signed and unsigned 16 bit half-word (short) type
+   sljit_si, sljit_ui : signed and unsigned 32 bit integer type
+   sljit_sw, sljit_uw : signed and unsigned machine word, enough to store a pointer
+   sljit_p : unsgined pointer value (usually the same as sljit_uw, but
+             some 64 bit ABIs may use 32 bit pointers)
+   sljit_s : single precision floating point value
+   sljit_d : double precision floating point value
    SLJIT_CALL : C calling convention define for both calling JIT form C and C callbacks for JIT
    SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (compiler independent helper)
 */
@@ -240,15 +241,15 @@


/* 8 bit byte type. */
typedef unsigned char sljit_ub;
-typedef signed char sljit_b;
+typedef signed char sljit_sb;

/* 16 bit half-word type. */
typedef unsigned short int sljit_uh;
-typedef signed short int sljit_h;
+typedef signed short int sljit_sh;

/* 32 bit integer type. */
typedef unsigned int sljit_ui;
-typedef signed int sljit_i;
+typedef signed int sljit_si;

 /* Machine word type. Can encapsulate a pointer.
      32 bit for 32 bit machines.
@@ -257,25 +258,28 @@
 /* Just to have something. */
 #define SLJIT_WORD_SHIFT 0
 typedef unsigned long int sljit_uw;
-typedef long int sljit_w;
+typedef long int sljit_sw;
 #elif !(defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) && !(defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
 #define SLJIT_32BIT_ARCHITECTURE 1
 #define SLJIT_WORD_SHIFT 2
 typedef unsigned int sljit_uw;
-typedef int sljit_w;
+typedef int sljit_sw;
 #else
 #define SLJIT_64BIT_ARCHITECTURE 1
 #define SLJIT_WORD_SHIFT 3
 #ifdef _WIN32
 typedef unsigned __int64 sljit_uw;
-typedef __int64 sljit_w;
+typedef __int64 sljit_sw;
 #else
 typedef unsigned long int sljit_uw;
-typedef long int sljit_w;
+typedef long int sljit_sw;
 #endif
 #endif


typedef sljit_uw sljit_p;
+
+/* Floating point types. */
+typedef float sljit_s;
typedef double sljit_d;

/* Shift for pointer sized data. */
@@ -419,7 +423,7 @@
#ifndef SLJIT_ASSERT

 #define SLJIT_HALT_PROCESS() \
-    *((int*)0) = 0
+    *((sljit_si*)0) = 0


 #define SLJIT_ASSERT(x) \
     do { \


Modified: code/trunk/sljit/sljitExecAllocator.c
===================================================================
--- code/trunk/sljit/sljitExecAllocator.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitExecAllocator.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -246,14 +246,14 @@
     struct free_block* free_block;


     allocator_grab_lock();
-    header = AS_BLOCK_HEADER(ptr, -(sljit_w)sizeof(struct block_header));
+    header = AS_BLOCK_HEADER(ptr, -(sljit_sw)sizeof(struct block_header));
     allocated_size -= header->size;


     /* Connecting free blocks together if possible. */


     /* If header->prev_size == 0, free_block will equal to header.
        In this case, free_block->header.size will be > 0. */
-    free_block = AS_FREE_BLOCK(header, -(sljit_w)header->prev_size);
+    free_block = AS_FREE_BLOCK(header, -(sljit_sw)header->prev_size);
     if (SLJIT_UNLIKELY(!free_block->header.size)) {
         free_block->size += header->size;
         header = AS_BLOCK_HEADER(free_block, free_block->size);


Modified: code/trunk/sljit/sljitLir.c
===================================================================
--- code/trunk/sljit/sljitLir.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitLir.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -89,8 +89,11 @@
     ((op) & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C))


 #define GET_ALL_FLAGS(op) \
-    ((op) & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))
+    ((op) & (SLJIT_INT_OP | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))


+#define TYPE_CAST_NEEDED(op) \
+    (((op) >= SLJIT_MOV_UB && (op) <= SLJIT_MOV_SH) || ((op) >= SLJIT_MOVU_UB && (op) <= SLJIT_MOVU_SH))
+
 #define BUF_SIZE    4096


#if (defined SLJIT_32BIT_ARCHITECTURE && SLJIT_32BIT_ARCHITECTURE)
@@ -195,34 +198,34 @@
#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
#define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
#ifdef _WIN64
-#define FIXED_LOCALS_OFFSET (4 * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET (4 * sizeof(sljit_sw))
#else
-#define FIXED_LOCALS_OFFSET (sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET (sizeof(sljit_sw))
#endif
#endif

#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)
-#define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_sw))
#else
-#define FIXED_LOCALS_OFFSET (2 * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET (2 * sizeof(sljit_sw))
#endif
#endif

#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
#define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
-#define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET ((6 + 8) * sizeof(sljit_sw))
#endif

#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
#define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
-#define FIXED_LOCALS_OFFSET (4 * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET (4 * sizeof(sljit_sw))
#endif

#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
#define SLJIT_HAS_FIXED_LOCALS_OFFSET 1
-#define FIXED_LOCALS_OFFSET (23 * sizeof(sljit_w))
+#define FIXED_LOCALS_OFFSET (23 * sizeof(sljit_sw))
#endif

#if (defined SLJIT_HAS_VARIABLE_LOCALS_OFFSET && SLJIT_HAS_VARIABLE_LOCALS_OFFSET)
@@ -264,7 +267,7 @@

 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || ((defined SLJIT_SSE2 && SLJIT_SSE2) && ((defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)))
 #define SLJIT_NEEDS_COMPILER_INIT 1
-static int compiler_initialized = 0;
+static sljit_si compiler_initialized = 0;
 /* A thread safe initialization. */
 static void init_compiler(void);
 #endif
@@ -277,13 +280,18 @@
     SLJIT_ZEROMEM(compiler, sizeof(struct sljit_compiler));


     SLJIT_COMPILE_ASSERT(
-        sizeof(sljit_b) == 1 && sizeof(sljit_ub) == 1
-        && sizeof(sljit_h) == 2 && sizeof(sljit_uh) == 2
-        && sizeof(sljit_i) == 4 && sizeof(sljit_ui) == 4
+        sizeof(sljit_sb) == 1 && sizeof(sljit_ub) == 1
+        && sizeof(sljit_sh) == 2 && sizeof(sljit_uh) == 2
+        && sizeof(sljit_si) == 4 && sizeof(sljit_ui) == 4
         && (sizeof(sljit_p) == 4 || sizeof(sljit_p) == 8)
-        && (sizeof(sljit_w) == 4 || sizeof(sljit_w) == 8)
+        && sizeof(sljit_p) <= sizeof(sljit_sw)
+        && (sizeof(sljit_sw) == 4 || sizeof(sljit_sw) == 8)
         && (sizeof(sljit_uw) == 4 || sizeof(sljit_uw) == 8),
         invalid_integer_types);
+    SLJIT_COMPILE_ASSERT(SLJIT_INT_OP == SLJIT_SINGLE_OP,
+        int_op_and_single_op_must_be_the_same);
+    SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_SINGLE_OP,
+        rewritable_jump_and_single_op_must_not_be_the_same);


     /* Only the non-zero members must be set. */
     compiler->error = SLJIT_SUCCESS;
@@ -411,12 +419,13 @@
 /*  Private functions                                                    */
 /* --------------------------------------------------------------------- */


-static void* ensure_buf(struct sljit_compiler *compiler, int size)
+static void* ensure_buf(struct sljit_compiler *compiler, sljit_uw size)
 {
     sljit_ub *ret;
     struct sljit_memory_fragment *new_frag;


-    if (compiler->buf->used_size + size <= (int)(BUF_SIZE - sizeof(sljit_uw) - sizeof(void*))) {
+    SLJIT_ASSERT(size <= 256);
+    if (compiler->buf->used_size + size <= (BUF_SIZE - (sljit_uw)SLJIT_OFFSETOF(struct sljit_memory_fragment, memory))) {
         ret = compiler->buf->memory + compiler->buf->used_size;
         compiler->buf->used_size += size;
         return ret;
@@ -429,12 +438,13 @@
     return new_frag->memory;
 }


-static void* ensure_abuf(struct sljit_compiler *compiler, int size)
+static void* ensure_abuf(struct sljit_compiler *compiler, sljit_uw size)
 {
     sljit_ub *ret;
     struct sljit_memory_fragment *new_frag;


-    if (compiler->abuf->used_size + size <= (int)(ABUF_SIZE - sizeof(sljit_uw) - sizeof(void*))) {
+    SLJIT_ASSERT(size <= 256);
+    if (compiler->abuf->used_size + size <= (ABUF_SIZE - (sljit_uw)SLJIT_OFFSETOF(struct sljit_memory_fragment, memory))) {
         ret = compiler->abuf->memory + compiler->abuf->used_size;
         compiler->abuf->used_size += size;
         return ret;
@@ -447,7 +457,7 @@
     return new_frag->memory;
 }


-SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, int size)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_si size)
 {
     CHECK_ERROR_PTR();


@@ -490,7 +500,7 @@
     compiler->last_label = label;
 }


-static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, int flags)
+static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_si flags)
 {
     jump->next = NULL;
     jump->flags = flags;
@@ -535,8 +545,8 @@
     case SLJIT_MUL: \
         SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_C))); \
         break; \
-    case SLJIT_FCMP: \
-        SLJIT_ASSERT(!(op & (SLJIT_INT_OP | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
+    case SLJIT_CMPD: \
+        SLJIT_ASSERT(!(op & (SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
         SLJIT_ASSERT((op & (SLJIT_SET_E | SLJIT_SET_S))); \
         break; \
     case SLJIT_ADD: \
@@ -548,10 +558,21 @@
     case SLJIT_SUBC: \
         SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O))); \
         break; \
-    default: \
+    case SLJIT_BREAKPOINT: \
+    case SLJIT_NOP: \
+    case SLJIT_UMUL: \
+    case SLJIT_SMUL: \
+    case SLJIT_MOV: \
+    case SLJIT_MOV_P: \
+    case SLJIT_MOVU: \
+    case SLJIT_MOVU_P: \
         /* Nothing allowed */ \
         SLJIT_ASSERT(!(op & (SLJIT_INT_OP | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
         break; \
+    default: \
+        /* Only SLJIT_INT_OP or SLJIT_SINGLE_OP is allowed. */ \
+        SLJIT_ASSERT(!(op & (SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U | SLJIT_SET_O | SLJIT_SET_C | SLJIT_KEEP_FLAGS))); \
+        break; \
     }


 #define FUNCTION_CHECK_IS_REG(r) \
@@ -596,7 +617,7 @@
         SLJIT_ASSERT_STOP();


 #define FUNCTION_FCHECK(p, i) \
-    if ((p) >= SLJIT_FLOAT_REG1 && (p) <= SLJIT_FLOAT_REG4) \
+    if ((p) >= SLJIT_FLOAT_REG1 && (p) <= SLJIT_FLOAT_REG6) \
         SLJIT_ASSERT(i == 0); \
     else if ((p) & SLJIT_MEM) { \
         SLJIT_ASSERT(FUNCTION_CHECK_IS_REG((p) & 0xf)); \
@@ -611,10 +632,7 @@
         SLJIT_ASSERT_STOP();


 #define FUNCTION_CHECK_OP1() \
-    if (GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_MOVU_P) { \
-        SLJIT_ASSERT(!GET_ALL_FLAGS(op)); \
-    } \
-        if (GET_OPCODE(op) >= SLJIT_MOVU && GET_OPCODE(op) <= SLJIT_MOVU_P) { \
+    if (GET_OPCODE(op) >= SLJIT_MOVU && GET_OPCODE(op) <= SLJIT_MOVU_P) { \
         SLJIT_ASSERT(!(src & SLJIT_MEM) || (src & 0xf) != SLJIT_LOCALS_REG); \
         SLJIT_ASSERT(!(dst & SLJIT_MEM) || (dst & 0xf) != SLJIT_LOCALS_REG); \
         if ((src & SLJIT_MEM) && (src & 0xf)) \
@@ -637,7 +655,8 @@
 };


 static char* freg_names[] = {
-    (char*)"<noreg>", (char*)"float_r1", (char*)"float_r2", (char*)"float_r3", (char*)"float_r4"
+    (char*)"<noreg>", (char*)"float_r1", (char*)"float_r2", (char*)"float_r3",
+    (char*)"float_r4", (char*)"float_r5", (char*)"float_r6"
 };


 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
@@ -708,9 +727,9 @@
     (char*)"mul", (char*)"and", (char*)"or", (char*)"xor",
     (char*)"shl", (char*)"lshr", (char*)"ashr",
     /* fop1 */
-    (char*)"fcmp", (char*)"fmov", (char*)"fneg", (char*)"fabs",
+    (char*)"cmp", (char*)"mov", (char*)"neg", (char*)"abs",
     /* fop2 */
-    (char*)"fadd", (char*)"fsub", (char*)"fmul", (char*)"fdiv"
+    (char*)"add", (char*)"sub", (char*)"mul", (char*)"div"
 };


static char* jump_names[] = {
@@ -754,7 +773,7 @@
#endif
}

-static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -774,7 +793,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -801,7 +820,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -830,7 +849,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -849,7 +868,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+static SLJIT_INLINE void check_sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -868,7 +887,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_op0(struct sljit_compiler *compiler, int op)
+static SLJIT_INLINE void check_sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -882,9 +901,9 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static SLJIT_INLINE void check_sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -920,10 +939,10 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static SLJIT_INLINE void check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -952,7 +971,8 @@
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
     if (SLJIT_UNLIKELY(!!compiler->verbose)) {
         fprintf(compiler->verbose, "  %s%s%s%s%s%s%s%s ", !(op & SLJIT_INT_OP) ? "" : "i", op_names[GET_OPCODE(op)],
-            !(op & SLJIT_SET_E) ? "" : "E", !(op & SLJIT_SET_S) ? "" : "S", !(op & SLJIT_SET_U) ? "" : "U", !(op & SLJIT_SET_O) ? "" : "O", !(op & SLJIT_SET_C) ? "" : "C", !(op & SLJIT_KEEP_FLAGS) ? "" : "K");
+            !(op & SLJIT_SET_E) ? "" : "E", !(op & SLJIT_SET_S) ? "" : "S", !(op & SLJIT_SET_U) ? "" : "U",
+            !(op & SLJIT_SET_O) ? "" : "O", !(op & SLJIT_SET_C) ? "" : "C", !(op & SLJIT_KEEP_FLAGS) ? "" : "K");
         sljit_verbose_param(dst, dstw);
         fprintf(compiler->verbose, ", ");
         sljit_verbose_param(src1, src1w);
@@ -963,14 +983,14 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_get_register_index(int reg)
+static SLJIT_INLINE void check_sljit_get_register_index(sljit_si reg)
 {
     SLJIT_UNUSED_ARG(reg);
     SLJIT_ASSERT(reg > 0 && reg <= SLJIT_NO_REGISTERS);
 }


 static SLJIT_INLINE void check_sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+    void *instruction, sljit_si size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(instruction);
@@ -978,9 +998,9 @@
     SLJIT_ASSERT(instruction);
 }


-static SLJIT_INLINE void check_sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static SLJIT_INLINE void check_sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -998,7 +1018,7 @@
 #endif


     SLJIT_ASSERT(sljit_is_fpu_available());
-    SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_FCMP && GET_OPCODE(op) <= SLJIT_FABS);
+    SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_CMPD && GET_OPCODE(op) <= SLJIT_ABSD);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
     FUNCTION_CHECK_OP();
     FUNCTION_FCHECK(src, srcw);
@@ -1006,7 +1026,7 @@
 #endif
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
     if (SLJIT_UNLIKELY(!!compiler->verbose)) {
-        fprintf(compiler->verbose, "  %s%s%s ", op_names[GET_OPCODE(op)],
+        fprintf(compiler->verbose, "  %s%s%s%s ", op_names[GET_OPCODE(op)], (op & SLJIT_SINGLE_OP) ? "s" : "d",
             !(op & SLJIT_SET_E) ? "" : "E", !(op & SLJIT_SET_S) ? "" : "S");
         sljit_verbose_fparam(dst, dstw);
         fprintf(compiler->verbose, ", ");
@@ -1016,10 +1036,10 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static SLJIT_INLINE void check_sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -1032,7 +1052,7 @@
     SLJIT_UNUSED_ARG(src2w);


     SLJIT_ASSERT(sljit_is_fpu_available());
-    SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_FADD && GET_OPCODE(op) <= SLJIT_FDIV);
+    SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_ADDD && GET_OPCODE(op) <= SLJIT_DIVD);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
     FUNCTION_CHECK_OP();
     FUNCTION_FCHECK(src1, src1w);
@@ -1041,7 +1061,7 @@
 #endif
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
     if (SLJIT_UNLIKELY(!!compiler->verbose)) {
-        fprintf(compiler->verbose, "  %s ", op_names[GET_OPCODE(op)]);
+        fprintf(compiler->verbose, "  %s%s ", op_names[GET_OPCODE(op)], (op & SLJIT_SINGLE_OP) ? "s" : "d");
         sljit_verbose_fparam(dst, dstw);
         fprintf(compiler->verbose, ", ");
         sljit_verbose_fparam(src1, src1w);
@@ -1063,7 +1083,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_jump(struct sljit_compiler *compiler, int type)
+static SLJIT_INLINE void check_sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -1084,9 +1104,9 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_cmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static SLJIT_INLINE void check_sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1112,9 +1132,9 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static SLJIT_INLINE void check_sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1124,7 +1144,7 @@
     SLJIT_UNUSED_ARG(src2w);


     SLJIT_ASSERT(sljit_is_fpu_available());
-    SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP)));
+    SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_SINGLE_OP)));
     SLJIT_ASSERT((type & 0xff) >= SLJIT_C_FLOAT_EQUAL && (type & 0xff) <= SLJIT_C_FLOAT_ORDERED);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
     FUNCTION_FCHECK(src1, src1w);
@@ -1132,7 +1152,8 @@
 #endif
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
     if (SLJIT_UNLIKELY(!!compiler->verbose)) {
-        fprintf(compiler->verbose, "  fcmp%s <%s> ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : "R", jump_names[type & 0xff]);
+        fprintf(compiler->verbose, "  %scmpj%s <%s> ", (type & SLJIT_SINGLE_OP) ? "s" : "d",
+            !(type & SLJIT_REWRITABLE_JUMP) ? "" : "R", jump_names[type & 0xff]);
         sljit_verbose_fparam(src1, src1w);
         fprintf(compiler->verbose, ", ");
         sljit_verbose_fparam(src2, src2w);
@@ -1141,7 +1162,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+static SLJIT_INLINE void check_sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -1162,7 +1183,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+static SLJIT_INLINE void check_sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -1187,7 +1208,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_get_local_base(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w offset)
+static SLJIT_INLINE void check_sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(dst);
@@ -1206,7 +1227,7 @@
 #endif
 }


-static SLJIT_INLINE void check_sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+static SLJIT_INLINE void check_sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     /* If debug and verbose are disabled, all arguments are unused. */
     SLJIT_UNUSED_ARG(compiler);
@@ -1226,14 +1247,14 @@
 #endif
 }


-static SLJIT_INLINE int emit_mov_before_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+static SLJIT_INLINE sljit_si emit_mov_before_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     /* Return if don't need to do anything. */
     if (op == SLJIT_UNUSED)
         return SLJIT_SUCCESS;


 #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
-    /* At the moment the pointer size is always equal to sljit_w. May be changed in the future. */
+    /* At the moment the pointer size is always equal to sljit_sw. May be changed in the future. */
     if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_P))
         return SLJIT_SUCCESS;
 #else
@@ -1295,13 +1316,13 @@


#if !(defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)

-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* Default compare for most architectures. */
-    int flags, tmp_src, condition;
-    sljit_w tmp_srcw;
+    sljit_si flags, tmp_src, condition;
+    sljit_sw tmp_srcw;


     CHECK_ERROR_PTR();
     check_sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w);
@@ -1362,24 +1383,23 @@
     return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int flags, condition;
+    sljit_si flags, condition;


     check_sljit_emit_fcmp(compiler, type, src1, src1w, src2, src2w);


     condition = type & 0xff;
-    if (condition <= SLJIT_C_FLOAT_NOT_EQUAL)
-        flags = SLJIT_SET_E;
-    else
-        flags = SLJIT_SET_S;
+    flags = (condition <= SLJIT_C_FLOAT_NOT_EQUAL) ? SLJIT_SET_E : SLJIT_SET_S;
+    if (type & SLJIT_SINGLE_OP)
+        flags |= SLJIT_SINGLE_OP;


 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
     compiler->skip_checks = 1;
 #endif
-    sljit_emit_fop1(compiler, SLJIT_FCMP | flags, src1, src1w, src2, src2w);
+    sljit_emit_fop1(compiler, SLJIT_CMPD | flags, src1, src1w, src2, src2w);


 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
     compiler->skip_checks = 1;
@@ -1391,7 +1411,7 @@


#if !(defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) && !(defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)

-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_local_base(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w offset)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
 {
     CHECK_ERROR();
     check_sljit_get_local_base(compiler, dst, dstw, offset);
@@ -1428,7 +1448,7 @@
     SLJIT_ASSERT_STOP();
 }


-SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, int size)
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_si size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(size);
@@ -1458,7 +1478,7 @@
     SLJIT_ASSERT_STOP();
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(args);
@@ -1469,7 +1489,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(args);
@@ -1479,7 +1499,7 @@
     SLJIT_ASSERT_STOP();
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1489,7 +1509,7 @@
     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 saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(dst);
@@ -1502,7 +1522,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(src);
@@ -1511,7 +1531,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1519,9 +1539,9 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1533,10 +1553,10 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1550,14 +1570,14 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     SLJIT_ASSERT_STOP();
     return reg;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(instruction);
@@ -1566,15 +1586,15 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     SLJIT_ASSERT_STOP();
     return 0;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1586,10 +1606,10 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1610,7 +1630,7 @@
     return NULL;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1618,9 +1638,9 @@
     return NULL;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1632,9 +1652,9 @@
     return NULL;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1660,7 +1680,7 @@
     SLJIT_ASSERT_STOP();
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(type);
@@ -1670,7 +1690,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(op);
@@ -1681,7 +1701,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_local_base(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w offset)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(dst);
@@ -1691,7 +1711,7 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w initval)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw initval)
 {
     SLJIT_UNUSED_ARG(compiler);
     SLJIT_UNUSED_ARG(dst);
@@ -1708,7 +1728,7 @@
     SLJIT_ASSERT_STOP();
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     SLJIT_UNUSED_ARG(addr);
     SLJIT_UNUSED_ARG(new_constant);


Modified: code/trunk/sljit/sljitLir.h
===================================================================
--- code/trunk/sljit/sljitLir.h    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitLir.h    2012-11-01 15:21:27 UTC (rev 1195)
@@ -153,6 +153,8 @@
 #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


 /* --------------------------------------------------------------------- */
 /*  Main structures and functions                                        */
@@ -161,6 +163,7 @@
 struct sljit_memory_fragment {
     struct sljit_memory_fragment *next;
     sljit_uw used_size;
+    /* Must be aligned to sljit_sw. */
     sljit_ub memory[1];
 };


@@ -174,7 +177,7 @@
 struct sljit_jump {
     struct sljit_jump *next;
     sljit_uw addr;
-    sljit_w flags;
+    sljit_sw flags;
     union {
         sljit_uw target;
         struct sljit_label* label;
@@ -187,7 +190,7 @@
 };


 struct sljit_compiler {
-    int error;
+    sljit_si error;


     struct sljit_label *labels;
     struct sljit_jump *jumps;
@@ -200,29 +203,29 @@
     struct sljit_memory_fragment *abuf;


     /* Used local registers. */
-    int temporaries;
+    sljit_si temporaries;
     /* Used saved registers. */
-    int saveds;
+    sljit_si saveds;
     /* Local stack size. */
-    int local_size;
+    sljit_si local_size;
     /* Code size. */
     sljit_uw size;
     /* For statistical purposes. */
     sljit_uw executable_size;


 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-    int args;
-    int locals_offset;
-    int temporaries_start;
-    int saveds_start;
+    sljit_si args;
+    sljit_si locals_offset;
+    sljit_si temporaries_start;
+    sljit_si saveds_start;
 #endif


 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    int mode32;
+    sljit_si mode32;
 #endif


 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    int flags_saved;
+    sljit_si flags_saved;
 #endif


 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
@@ -239,31 +242,31 @@
 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
     /* Temporary fields. */
     sljit_uw shift_imm;
-    int cache_arg;
-    sljit_w cache_argw;
+    sljit_si cache_arg;
+    sljit_sw cache_argw;
 #endif


 #if (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
-    int cache_arg;
-    sljit_w cache_argw;
+    sljit_si cache_arg;
+    sljit_sw cache_argw;
 #endif


 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-    sljit_w imm;
-    int cache_arg;
-    sljit_w cache_argw;
+    sljit_sw imm;
+    sljit_si cache_arg;
+    sljit_sw cache_argw;
 #endif


 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
-    int delay_slot;
-    int cache_arg;
-    sljit_w cache_argw;
+    sljit_si delay_slot;
+    sljit_si cache_arg;
+    sljit_sw cache_argw;
 #endif


 #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
-    int delay_slot;
-    int cache_arg;
-    sljit_w cache_argw;
+    sljit_si delay_slot;
+    sljit_si cache_arg;
+    sljit_sw cache_argw;
 #endif


#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
@@ -272,11 +275,11 @@

 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
     /* Local size passed to the functions. */
-    int logical_local_size;
+    sljit_si logical_local_size;
 #endif


 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
-    int skip_checks;
+    sljit_si skip_checks;
 #endif
 };


@@ -290,19 +293,19 @@
/* Free everything except the codes. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_compiler(struct sljit_compiler *compiler);

-static SLJIT_INLINE int sljit_get_compiler_error(struct sljit_compiler *compiler) { return compiler->error; }
+static SLJIT_INLINE sljit_si sljit_get_compiler_error(struct sljit_compiler *compiler) { return compiler->error; }

 /*
    Allocate a small amount of memory. The size must be <= 64 bytes on 32 bit,
    and <= 128 bytes on 64 bit architectures. The memory area is owned by the compiler,
-   and freed by sljit_free_compiler. The returned pointer is sizeof(sljit_w) aligned.
+   and freed by sljit_free_compiler. The returned pointer is sizeof(sljit_sw) aligned.
    Excellent for allocating small blocks during the compiling, and no need to worry
    about freeing them. The size is enough to contain at most 16 pointers.
    If the size is outside of the range, the function will return with NULL,
    but this return value does not indicate that there is no more memory (does
    not set the compiler to out-of-memory status).
 */
-SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, int size);
+SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compiler, sljit_si size);


#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
/* Passing NULL disables verbose. */
@@ -349,8 +352,8 @@

 #define SLJIT_MAX_LOCAL_SIZE    65536


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler,
-    int args, int temporaries, int saveds, int local_size);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler,
+    sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si 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
@@ -365,15 +368,15 @@
 /* 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 saveds, int local_size);
+    sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si 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
    SLJIT_MOV_P (see sljit_emit_op1). As for src and srcw they must be 0 if op
    is SLJIT_UNUSED, otherwise see below the description about source and
    destination arguments. */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op,
-    int src, sljit_w srcw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si src, sljit_sw srcw);


 /* Really fast calling method for utility functions inside sljit (see SLJIT_FAST_CALL).
    All registers and even the stack frame is passed to the callee. The return address is
@@ -390,8 +393,8 @@
 /* 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);
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw);

 /*
    Source and destination values for arithmetical instructions
@@ -400,7 +403,7 @@
     [imm]            - absolute immediate memory address
     [reg+imm]        - indirect memory address
     [reg+(reg<<imm)] - indirect indexed memory address (shift must be between 0 and 3)
-                       useful for (byte, half, int, sljit_w) array access
+                       useful for (byte, half, int, sljit_sw) array access
                        (fully supported by both x86 and ARM architectures, and cheap operation on others)
 */


@@ -410,24 +413,42 @@

      length | alignment
    ---------+-----------
-     byte   | 1 byte (not aligned)
-     half   | 2 byte (real_address & 0x1 == 0)
-     int    | 4 byte (real_address & 0x3 == 0)
-    sljit_w | 4 byte if SLJIT_32BIT_ARCHITECTURE is defined and its value is 1
+     byte   | 1 byte (any physical_address is accepted)
+     half   | 2 byte (physical_address & 0x1 == 0)
+     int    | 4 byte (physical_address & 0x3 == 0)
+     word   | 4 byte if SLJIT_32BIT_ARCHITECTURE is defined and its value is 1
             | 8 byte if SLJIT_64BIT_ARCHITECTURE is defined and its value is 1
+    pointer | size of sljit_p type (4 byte on 32 bit machines, 4 or 8 byte
+            | on 64 bit machines)


-   Note: different architectures have different addressing limitations
-         Thus sljit may generate several instructions for other addressing modes
-   x86:  all addressing modes supported, but write-back is not supported
-         (requires an extra instruction). On x86-64 only 32 bit signed
-         integers are supported by the architecture.
-   arm:  [reg+imm] supported for small immediates (-4095 <= imm <= 4095
-         or -255 <= imm <= 255 for loading signed bytes, any halfs or doubles)
-         [reg+(reg<<imm)] are supported or requires only two instructions
-         Write back is limited to small immediates on thumb2
-   ppc:  [reg+imm], -65535 <= imm <= 65535. 64 bit moves requires immediates
-         divisible by 4. [reg+reg] supported, write-back supported
-         [reg+(reg<<imm)] (imm != 0) is cheap (requires two instructions)
+   Note:   Different architectures have different addressing limitations.
+           A single instruction is enough for the following addressing
+           modes. Other adrressing modes are emulated by instruction
+           sequences. This information could help to improve those code
+           generators which focuses only a few architectures.
+
+   x86:    [reg+imm], -2^32+1 <= imm <= 2^32-1 (full adress space on x86-32)
+           [reg+(reg<<imm)] is supported
+           [imm], -2^32+1 <= imm <= 2^32-1 is supported
+           Write-back is not supported
+   arm:    [reg+imm], -4095 <= imm <= 4095 or -255 <= imm <= 255 for signed
+                bytes, any halfs or floating point values)
+           [reg+(reg<<imm)] is supported
+           Write-back is supported
+   arm-t2: [reg+imm], -255 <= imm <= 4095
+           [reg+(reg<<imm)] is supported
+           Write back is supported only for [reg+imm], where -255 <= imm <= 255
+   ppc:    [reg+imm], -65536 <= imm <= 65535. 64 bit loads/stores and 32 bit
+                signed load on 64 bit requires immediates divisible by 4.
+                [reg+imm] is not supported for signed 8 bit values.
+           [reg+reg] is supported
+           Write-back is supported except for one instruction: 32 bit signed
+                load with [reg+imm] addressing mode on 64 bit.
+   mips:   [reg+imm], -65536 <= imm <= 65535
+           Nothing else is supported
+   sparc:  [reg+imm], -4096 <= imm <= 4095
+           [reg+reg] is supported
+           Nothing else is supported
 */


 /* Register output: simply the name of the register.
@@ -439,12 +460,31 @@
 #define SLJIT_IMM        0x200


 /* Set 32 bit operation mode (I) on 64 bit CPUs. The flag is totally ignored on
-   32 bit CPUs. The arithmetic instruction uses only the lower 32 bit of the
-   input register(s), and set the flags according to the 32 bit result. If the
-   destination is a register, the higher 32 bit of the result is undefined.
-   The addressing modes (SLJIT_MEM1/SLJIT_MEM2 macros) are unaffected by this flag. */
+   32 bit CPUs. If this flag is set for an arithmetic operation, it uses only the
+   lower 32 bit of the input register(s), and set the CPU status flags according
+   to the 32 bit result. The higher 32 bits are undefined for both the input and
+   output. However, the CPU might not ignore those higher 32 bits, like MIPS, which
+   expects it to be the sign extension of the lower 32 bit. All 32 bit operations
+   are undefined, if this condition is not fulfilled. Therefore, when SLJIT_INT_OP
+   is specified, all register arguments must be the result of other operations with
+   the same SLJIT_INT_OP flag. In other words, although a register can hold either
+   a 64 or 32 bit value, these values cannot be mixed. The only exceptions are
+   SLJIT_IMOV and SLJIT_IMOVU (SLJIT_MOV_SI/SLJIT_MOV_UI/SLJIT_MOVU_SI/SLJIT_MOV_UI
+   with SLJIT_INT_OP flag) which can convert any source argument to SLJIT_INT_OP
+   compatible result. This conversion might be unnecessary on some CPUs like x86-64,
+   since the upper 32 bit is always ignored. In this case SLJIT is clever enough
+   to not generate any instructions if the source and destination operands are the
+   same registers. Affects sljit_emit_op0, sljit_emit_op1 and sljit_emit_op2. */
 #define SLJIT_INT_OP        0x100


+/* Single precision mode (SP). This flag is similar to SLJIT_INT_OP, just
+   it applies to floating point registers (it is even the same bit). When
+   this flag is passed, the CPU performs single precision floating point
+   operations. Similar to SLJIT_INT_OP, all register arguments must be the
+   result of other floating point operations with this flag. Affects
+   sljit_emit_fop1, sljit_emit_fop2 and sljit_emit_fcmp. */
+#define SLJIT_SINGLE_OP        0x100
+
 /* Common CPU status flags for all architectures (x86, ARM, PPC)
     - carry flag
     - overflow flag
@@ -486,26 +526,28 @@
    Note: may or may not cause an extra cycle wait
          it can even decrease the runtime in a few cases. */
 #define SLJIT_NOP            1
-/* Flags: may destroy flags
+/* Flags: - (may destroy flags)
    Unsigned multiplication of SLJIT_TEMPORARY_REG1 and SLJIT_TEMPORARY_REG2.
    Result goes to SLJIT_TEMPORARY_REG2:SLJIT_TEMPORARY_REG1 (high:low) word */
 #define SLJIT_UMUL            2
-/* Flags: may destroy flags
+/* Flags: - (may destroy flags)
    Signed multiplication of SLJIT_TEMPORARY_REG1 and SLJIT_TEMPORARY_REG2.
    Result goes to SLJIT_TEMPORARY_REG2:SLJIT_TEMPORARY_REG1 (high:low) word */
 #define SLJIT_SMUL            3
-/* Flags: I | may destroy flags
+/* Flags: I - (may destroy flags)
    Unsigned divide of the value in SLJIT_TEMPORARY_REG1 by the value in SLJIT_TEMPORARY_REG2.
    The result is placed in SLJIT_TEMPORARY_REG1 and the remainder goes to SLJIT_TEMPORARY_REG2.
    Note: if SLJIT_TEMPORARY_REG2 contains 0, the behaviour is undefined. */
 #define SLJIT_UDIV            4
-/* Flags: I | may destroy flags
+#define SLJIT_IUDIV            (SLJIT_UDIV | SLJIT_INT_OP)
+/* Flags: I - (may destroy flags)
    Signed divide of the value in SLJIT_TEMPORARY_REG1 by the value in SLJIT_TEMPORARY_REG2.
    The result is placed in SLJIT_TEMPORARY_REG1 and the remainder goes to SLJIT_TEMPORARY_REG2.
    Note: if SLJIT_TEMPORARY_REG2 contains 0, the behaviour is undefined. */
 #define SLJIT_SDIV            5
+#define SLJIT_ISDIV            (SLJIT_SDIV | SLJIT_INT_OP)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op);

 /* Notes for MOV instructions:
    U = Mov with update (post form). If source or destination defined as SLJIT_MEM1(r1)
@@ -520,90 +562,120 @@


 /* Flags: - (never set any flags) */
 #define SLJIT_MOV            6
-/* Flags: - (never set any flags) */
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOV_UB            7
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOV_UB            (SLJIT_MOV_UB | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOV_SB            8
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOV_SB            (SLJIT_MOV_SB | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOV_UH            9
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOV_UH            (SLJIT_MOV_UH | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOV_SH            10
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOV_SH            (SLJIT_MOV_SH | SLJIT_INT_OP)
+/* Flags: I - (never set any flags)
+   Note: see SLJIT_INT_OP for further details. */
 #define SLJIT_MOV_UI            11
-/* Flags: - (never set any flags) */
+/* No SLJIT_INT_OP form, since it the same as SLJIT_IMOVU. */
+/* Flags: I - (never set any flags)
+   Note: see SLJIT_INT_OP for further details. */
 #define SLJIT_MOV_SI            12
+#define SLJIT_IMOV            (SLJIT_MOV_SI | SLJIT_INT_OP)
 /* Flags: - (never set any flags) */
 #define SLJIT_MOV_P            13
 /* Flags: - (never set any flags) */
 #define SLJIT_MOVU            14
-/* Flags: - (never set any flags) */
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOVU_UB            15
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOVU_UB            (SLJIT_MOVU_UB | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOVU_SB            16
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOVU_SB            (SLJIT_MOVU_SB | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOVU_UH            17
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOVU_UH            (SLJIT_MOVU_UH | SLJIT_INT_OP)
+/* Flags: I - (never set any flags) */
 #define SLJIT_MOVU_SH            18
-/* Flags: - (never set any flags) */
+#define SLJIT_IMOVU_SH            (SLJIT_MOVU_SH | SLJIT_INT_OP)
+/* Flags: I - (never set any flags)
+   Note: see SLJIT_INT_OP for further details. */
 #define SLJIT_MOVU_UI            19
-/* Flags: - (never set any flags) */
+/* No SLJIT_INT_OP form, since it the same as SLJIT_IMOVU. */
+/* Flags: I - (never set any flags)
+   Note: see SLJIT_INT_OP for further details. */
 #define SLJIT_MOVU_SI            20
+#define SLJIT_IMOVU            (SLJIT_MOVU_SI | SLJIT_INT_OP)
 /* Flags: - (never set any flags) */
 #define SLJIT_MOVU_P            21
 /* Flags: I | E | K */
 #define SLJIT_NOT            22
+#define SLJIT_INOT            (SLJIT_NOT | SLJIT_INT_OP)
 /* Flags: I | E | O | K */
 #define SLJIT_NEG            23
+#define SLJIT_INEG            (SLJIT_NEG | SLJIT_INT_OP)
 /* Count leading zeroes
    Flags: I | E | K
    Important note! Sparc 32 does not support K flag, since
    the required popc instruction is introduced only in sparc 64. */
 #define SLJIT_CLZ            24
+#define SLJIT_ICLZ            (SLJIT_CLZ | SLJIT_INT_OP)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw);


 /* Flags: I | E | O | C | K */
 #define SLJIT_ADD            25
+#define SLJIT_IADD            (SLJIT_ADD | SLJIT_INT_OP)
 /* Flags: I | C | K */
 #define SLJIT_ADDC            26
+#define SLJIT_IADDC            (SLJIT_ADDC | SLJIT_INT_OP)
 /* Flags: I | E | S | U | O | C | K */
 #define SLJIT_SUB            27
+#define SLJIT_ISUB            (SLJIT_SUB | SLJIT_INT_OP)
 /* Flags: I | C | K */
 #define SLJIT_SUBC            28
+#define SLJIT_ISUBC            (SLJIT_SUBC | SLJIT_INT_OP)
 /* Note: integer mul
    Flags: I | O (see SLJIT_C_MUL_*) | K */
 #define SLJIT_MUL            29
+#define SLJIT_IMUL            (SLJIT_MUL | SLJIT_INT_OP)
 /* Flags: I | E | K */
 #define SLJIT_AND            30
+#define SLJIT_IAND            (SLJIT_AND | SLJIT_INT_OP)
 /* Flags: I | E | K */
 #define SLJIT_OR            31
+#define SLJIT_IOR            (SLJIT_OR | SLJIT_INT_OP)
 /* Flags: I | E | K */
 #define SLJIT_XOR            32
+#define SLJIT_IXOR            (SLJIT_XOR | SLJIT_INT_OP)
 /* Flags: I | E | K
    Let bit_length be the length of the shift operation: 32 or 64.
    If src2 is immediate, src2w is masked by (bit_length - 1).
    Otherwise, if the content of src2 is outside the range from 0
    to bit_length - 1, the operation is undefined. */
 #define SLJIT_SHL            33
+#define SLJIT_ISHL            (SLJIT_SHL | SLJIT_INT_OP)
 /* Flags: I | E | K
    Let bit_length be the length of the shift operation: 32 or 64.
    If src2 is immediate, src2w is masked by (bit_length - 1).
    Otherwise, if the content of src2 is outside the range from 0
    to bit_length - 1, the operation is undefined. */
 #define SLJIT_LSHR            34
+#define SLJIT_ILSHR            (SLJIT_LSHR | SLJIT_INT_OP)
 /* Flags: I | E | K
    Let bit_length be the length of the shift operation: 32 or 64.
    If src2 is immediate, src2w is masked by (bit_length - 1).
    Otherwise, if the content of src2 is outside the range from 0
    to bit_length - 1, the operation is undefined. */
 #define SLJIT_ASHR            35
+#define SLJIT_IASHR            (SLJIT_ASHR | SLJIT_INT_OP)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


 /* The following function is a helper function for sljit_emit_op_custom.
    It returns with the real machine register index of any SLJIT_TEMPORARY
@@ -612,7 +684,7 @@
    Note: register returned by SLJIT_LOCALS_REG is not necessary the real
          stack pointer register of the target architecture. */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_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.
@@ -624,42 +696,50 @@
               if size == 4, the instruction argument must be 4 byte aligned.
    Otherwise: size must be 4 and instruction argument must be 4 byte aligned. */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size);


/* Returns with non-zero if fpu is available. */

-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void);

 /* Note: dst is the left and src is the right operand for SLJIT_FCMP.
    Note: NaN check is always performed. If SLJIT_C_FLOAT_UNORDERED is set,
          the comparison result is unpredictable.
-   Flags: E | S (see SLJIT_C_FLOAT_*) */
-#define SLJIT_FCMP            36
-/* Flags: - (never set any flags) */
-#define SLJIT_FMOV            37
-/* Flags: - (never set any flags) */
-#define SLJIT_FNEG            38
-/* Flags: - (never set any flags) */
-#define SLJIT_FABS            39
+   Flags: SP | E | S (see SLJIT_C_FLOAT_*) */
+#define SLJIT_CMPD            36
+#define SLJIT_CMPS            (SLJIT_CMPD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_MOVD            37
+#define SLJIT_MOVS            (SLJIT_MOVD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_NEGD            38
+#define SLJIT_NEGS            (SLJIT_NEGD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_ABSD            39
+#define SLJIT_ABSS            (SLJIT_ABSD | SLJIT_SINGLE_OP)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw);


-/* Flags: - (never set any flags) */
-#define SLJIT_FADD            40
-/* Flags: - (never set any flags) */
-#define SLJIT_FSUB            41
-/* Flags: - (never set any flags) */
-#define SLJIT_FMUL            42
-/* Flags: - (never set any flags) */
-#define SLJIT_FDIV            43
+/* Flags: SP - (never set any flags) */
+#define SLJIT_ADDD            40
+#define SLJIT_ADDS            (SLJIT_ADDD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_SUBD            41
+#define SLJIT_SUBS            (SLJIT_SUBD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_MULD            42
+#define SLJIT_MULS            (SLJIT_MULD | SLJIT_SINGLE_OP)
+/* Flags: SP - (never set any flags) */
+#define SLJIT_DIVD            43
+#define SLJIT_DIVS            (SLJIT_DIVD | SLJIT_SINGLE_OP)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


/* Label and jump instructions. */

@@ -712,7 +792,7 @@
     type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP
    Flags: - (never set any flags) for both conditional and unconditional jumps.
    Flags: destroy all flags for calls. */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type);


 /* Basic arithmetic comparison. In most architectures it is implemented as
    an SLJIT_SUB operation (with SLJIT_UNUSED destination and setting
@@ -722,9 +802,9 @@
     type must be between SLJIT_C_EQUAL and SLJIT_C_SIG_LESS_EQUAL
     type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP or SLJIT_INT_OP
    Flags: destroy flags. */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


 /* Basic floating point comparison. In most architectures it is implemented as
    an SLJIT_FCMP operation (setting appropriate flags) followed by a
@@ -732,13 +812,13 @@
    special optimizations here. It is suggested to use this comparison form
    when appropriate.
     type must be between SLJIT_C_FLOAT_EQUAL and SLJIT_C_FLOAT_ORDERED
-    type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP
+    type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP and SLJIT_SINGLE_OP
    Flags: destroy flags.
    Note: if either operand is NaN, the behaviour is undefined for
          type <= SLJIT_C_FLOAT_LESS_EQUAL. */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


 /* Set the destination of the jump to this label. */
 SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label);
@@ -752,7 +832,7 @@
     Indirect form: any other valid addressing mode
    Flags: - (never set any flags) for unconditional jumps.
    Flags: destroy all flags for calls. */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw);


 /* If op == SLJIT_MOV:
      Set dst to 1 if condition is fulfilled, 0 otherwise
@@ -763,15 +843,15 @@
      the condition is fulfilled. Otherwise it does nothing.
      Flags: E | K
    Note: sljit_emit_cond_value does nothing, if dst is SLJIT_UNUSED (regardless of op). */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type);


-/* Copies the base address of SLJIT_MEM1(SLJIT_LOCALS_REG)+offset to dst.
+/* Copies the base address of SLJIT_LOCALS_REG+offset to dst.
    Flags: - (never set any flags) */
-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_local_base(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w offset);
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset);


 /* The constant can be changed runtime (see: sljit_set_const)
    Flags: - (never set any flags) */
-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value);
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value);


 /* After the code generation the address for label, jump and const instructions
    are computed. Since these structures are freed sljit_free_compiler, the
@@ -782,14 +862,14 @@


/* Only the address is required to rewrite the code. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_addr);
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant);
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant);

 /* --------------------------------------------------------------------- */
 /*  Miscellaneous utility functions                                      */
 /* --------------------------------------------------------------------- */


 #define SLJIT_MAJOR_VERSION    0
-#define SLJIT_MINOR_VERSION    88
+#define SLJIT_MINOR_VERSION    90


 /* Get the human readable name of the platfrom.
    Can be useful for debugging on platforms like ARM, where ARM and
@@ -797,7 +877,7 @@
 SLJIT_API_FUNC_ATTRIBUTE SLJIT_CONST char* sljit_get_platform_name(void);


/* Portble helper function to get an offset of a member. */
-#define SLJIT_OFFSETOF(base, member) ((sljit_w)(&((base*)0x10)->member) - 0x10)
+#define SLJIT_OFFSETOF(base, member) ((sljit_sw)(&((base*)0x10)->member) - 0x10)

 #if (defined SLJIT_UTIL_GLOBAL_LOCK && SLJIT_UTIL_GLOBAL_LOCK)
 /* This global lock is useful to compile common functions. */
@@ -846,32 +926,32 @@
    since the growth ratio can be added to the current limit, and sljit_stack_resize
    will do all the necessary checks. The fields of the stack are not changed if
    sljit_stack_resize fails. */
-SLJIT_API_FUNC_ATTRIBUTE sljit_w SLJIT_CALL sljit_stack_resize(struct sljit_stack* stack, sljit_uw new_limit);
+SLJIT_API_FUNC_ATTRIBUTE sljit_sw SLJIT_CALL sljit_stack_resize(struct sljit_stack* stack, sljit_uw new_limit);


#endif /* (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK) */

#if !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)

 /* Get the entry address of a given function. */
-#define SLJIT_FUNC_OFFSET(func_name)    ((sljit_w)func_name)
+#define SLJIT_FUNC_OFFSET(func_name)    ((sljit_sw)func_name)


#else /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */

/* All JIT related code should be placed in the same context (library, binary, etc.). */

-#define SLJIT_FUNC_OFFSET(func_name)    ((sljit_w)*(void**)func_name)
+#define SLJIT_FUNC_OFFSET(func_name)    ((sljit_sw)*(void**)func_name)


 /* For powerpc64, the function pointers point to a context descriptor. */
 struct sljit_function_context {
-    sljit_w addr;
-    sljit_w r2;
-    sljit_w r11;
+    sljit_sw addr;
+    sljit_sw r2;
+    sljit_sw r11;
 };


 /* Fill the context arguments using the addr and the function.
    If func_ptr is NULL, it will not be set to the address of context
    If addr is NULL, the function address also comes from the func pointer. */
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_w addr, void* func);
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func);


#endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */


Modified: code/trunk/sljit/sljitNativeARM_Thumb2.c
===================================================================
--- code/trunk/sljit/sljitNativeARM_Thumb2.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeARM_Thumb2.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -38,8 +38,8 @@
 #define TMP_REG3    (SLJIT_NO_REGISTERS + 3)
 #define TMP_PC        (SLJIT_NO_REGISTERS + 4)


-#define TMP_FREG1    (SLJIT_FLOAT_REG4 + 1)
-#define TMP_FREG2    (SLJIT_FLOAT_REG4 + 2)
+#define TMP_FREG1    (0)
+#define TMP_FREG2    (SLJIT_FLOAT_REG6 + 1)


 /* See sljit_emit_enter and sljit_emit_op0 if you want to change them. */
 static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 5] = {
@@ -166,18 +166,18 @@
 #define UXTB_W        0xfa5ff080
 #define UXTH        0xb280
 #define UXTH_W        0xfa1ff080
-#define VABS_F64    0xeeb00bc0
-#define VADD_F64    0xee300b00
-#define VCMP_F64    0xeeb40b40
-#define VDIV_F64    0xee800b00
-#define VMOV_F64    0xeeb00b40
+#define VABS_F32    0xeeb00ac0
+#define VADD_F32    0xee300a00
+#define VCMP_F32    0xeeb40a40
+#define VDIV_F32    0xee800a00
+#define VMOV_F32    0xeeb00a40
 #define VMRS        0xeef1fa10
-#define VMUL_F64    0xee200b00
-#define VNEG_F64    0xeeb10b40
-#define VSTR        0xed000b00
-#define VSUB_F64    0xee300b40
+#define VMUL_F32    0xee200a00
+#define VNEG_F32    0xeeb10a40
+#define VSTR_F32    0xed000a00
+#define VSUB_F32    0xee300a40


-static int push_inst16(struct sljit_compiler *compiler, sljit_ins inst)
+static sljit_si push_inst16(struct sljit_compiler *compiler, sljit_ins inst)
 {
     sljit_uh *ptr;
     SLJIT_ASSERT(!(inst & 0xffff0000));
@@ -189,7 +189,7 @@
     return SLJIT_SUCCESS;
 }


-static int push_inst32(struct sljit_compiler *compiler, sljit_ins inst)
+static sljit_si push_inst32(struct sljit_compiler *compiler, sljit_ins inst)
 {
     sljit_uh *ptr = (sljit_uh*)ensure_buf(compiler, sizeof(sljit_ins));
     FAIL_IF(!ptr);
@@ -199,7 +199,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_imm32_const(struct sljit_compiler *compiler, int dst, sljit_uw imm)
+static SLJIT_INLINE sljit_si emit_imm32_const(struct sljit_compiler *compiler, sljit_si dst, sljit_uw imm)
 {
     FAIL_IF(push_inst32(compiler, MOVW | RD4(dst) |
         COPY_BITS(imm, 12, 16, 4) | COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | (imm & 0xff)));
@@ -209,7 +209,7 @@


 static SLJIT_INLINE void modify_imm32_const(sljit_uh* inst, sljit_uw new_imm)
 {
-    int dst = inst[1] & 0x0f00;
+    sljit_si dst = inst[1] & 0x0f00;
     SLJIT_ASSERT(((inst[0] & 0xfbf0) == (MOVW >> 16)) && ((inst[2] & 0xfbf0) == (MOVT >> 16)) && dst == (inst[3] & 0x0f00));
     inst[0] = (MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1);
     inst[1] = dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff);
@@ -217,9 +217,9 @@
     inst[3] = dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16);
 }


-static SLJIT_INLINE int detect_jump_type(struct sljit_jump *jump, sljit_uh *code_ptr, sljit_uh *code)
+static SLJIT_INLINE sljit_si detect_jump_type(struct sljit_jump *jump, sljit_uh *code_ptr, sljit_uh *code)
 {
-    sljit_w diff;
+    sljit_sw diff;


     if (jump->flags & SLJIT_REWRITABLE_JUMP)
         return 0;
@@ -228,11 +228,11 @@
         /* Branch to ARM code is not optimized yet. */
         if (!(jump->u.target & 0x1))
             return 0;
-        diff = ((sljit_w)jump->u.target - (sljit_w)(code_ptr + 2)) >> 1;
+        diff = ((sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2)) >> 1;
     }
     else {
         SLJIT_ASSERT(jump->flags & JUMP_LABEL);
-        diff = ((sljit_w)(code + jump->u.label->size) - (sljit_w)(code_ptr + 2)) >> 1;
+        diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2)) >> 1;
     }


     if (jump->flags & IS_COND) {
@@ -272,7 +272,7 @@
     return 0;
 }


-static SLJIT_INLINE void inline_set_jump_addr(sljit_uw addr, sljit_uw new_addr, int flush)
+static SLJIT_INLINE void inline_set_jump_addr(sljit_uw addr, sljit_uw new_addr, sljit_si flush)
 {
     sljit_uh* inst = (sljit_uh*)addr;
     modify_imm32_const(inst, new_addr);
@@ -283,10 +283,10 @@


 static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump)
 {
-    int type = (jump->flags >> 4) & 0xf;
-    sljit_w diff;
+    sljit_si type = (jump->flags >> 4) & 0xf;
+    sljit_sw diff;
     sljit_uh *jump_inst;
-    int s, j1, j2;
+    sljit_si s, j1, j2;


     if (SLJIT_UNLIKELY(type == 0)) {
         inline_set_jump_addr(jump->addr, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
@@ -295,10 +295,10 @@


     if (jump->flags & JUMP_ADDR) {
         SLJIT_ASSERT(jump->u.target & 0x1);
-        diff = ((sljit_w)jump->u.target - (sljit_w)(jump->addr + 4)) >> 1;
+        diff = ((sljit_sw)jump->u.target - (sljit_sw)(jump->addr + 4)) >> 1;
     }
     else
-        diff = ((sljit_w)(jump->u.label->addr) - (sljit_w)(jump->addr + 4)) >> 1;
+        diff = ((sljit_sw)(jump->u.label->addr) - (sljit_sw)(jump->addr + 4)) >> 1;
     jump_inst = (sljit_uh*)jump->addr;


     switch (type) {
@@ -410,7 +410,7 @@
     SLJIT_ASSERT(!label);
     SLJIT_ASSERT(!jump);
     SLJIT_ASSERT(!const_);
-    SLJIT_ASSERT(code_ptr - code <= (int)compiler->size);
+    SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);


     jump = compiler->jumps;
     while (jump) {
@@ -429,7 +429,7 @@
 static sljit_uw get_imm(sljit_uw imm)
 {
     /* Thumb immediate form. */
-    int counter;
+    sljit_si counter;


     if (imm <= 0xff)
         return imm;
@@ -475,7 +475,7 @@
     return ((imm >> 24) & 0x7f) | COPY_BITS(counter, 4, 26, 1) | COPY_BITS(counter, 1, 12, 3) | COPY_BITS(counter, 0, 7, 1);
 }


-static int load_immediate(struct sljit_compiler *compiler, int dst, sljit_uw imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si dst, sljit_uw imm)
 {
     sljit_uw tmp;


@@ -510,12 +510,12 @@
 #define SLOW_SRC1    0x0800000
 #define SLOW_SRC2    0x1000000


-static int emit_op_imm(struct sljit_compiler *compiler, int flags, int dst, sljit_uw arg1, sljit_uw arg2)
+static sljit_si emit_op_imm(struct sljit_compiler *compiler, sljit_si flags, sljit_si dst, sljit_uw arg1, sljit_uw arg2)
 {
     /* dst must be register, TMP_REG1
        arg1 must be register, TMP_REG1, imm
        arg2 must be register, TMP_REG2, imm */
-    int reg;
+    sljit_si reg;
     sljit_uw imm, negated_imm;


     if (SLJIT_UNLIKELY((flags & (ARG1_IMM | ARG2_IMM)) == (ARG1_IMM | ARG2_IMM))) {
@@ -543,7 +543,7 @@
             /* No form with immediate operand. */
             break;
         case SLJIT_ADD:
-            negated_imm = (sljit_uw)-(sljit_w)imm;
+            negated_imm = (sljit_uw)-(sljit_sw)imm;
             if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(reg, dst)) {
                 if (imm <= 0x7)
                     return push_inst16(compiler, ADDSI3 | IMM3(imm) | RD3(dst) | RN3(reg));
@@ -573,7 +573,7 @@
             break;
         case SLJIT_SUB:
             if (flags & ARG2_IMM) {
-                negated_imm = (sljit_uw)-(sljit_w)imm;
+                negated_imm = (sljit_uw)-(sljit_sw)imm;
                 if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(reg, dst)) {
                     if (imm <= 0x7)
                         return push_inst16(compiler, SUBSI3 | IMM3(imm) | RD3(dst) | RN3(reg));
@@ -888,7 +888,7 @@
 };


 /* Helper function. Dst should be reg + value, using at most 1 instruction, flags does not set. */
-static int emit_set_delta(struct sljit_compiler *compiler, int dst, int reg, sljit_w value)
+static sljit_si emit_set_delta(struct sljit_compiler *compiler, sljit_si dst, sljit_si reg, sljit_sw value)
 {
     if (value >= 0) {
         if (value <= 0xfff)
@@ -909,9 +909,9 @@
 }


 /* Can perform an operation using at most 1 instruction. */
-static int getput_arg_fast(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw)
+static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
-    int tmp;
+    sljit_si tmp;


     SLJIT_ASSERT(arg & SLJIT_MEM);


@@ -994,7 +994,7 @@
 /* see getput_arg below.
    Note: can_cache is called only for binary operators. Those
    operators always uses word arguments without write back. */
-static int can_cache(int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
     /* Simple operation except for updates. */
     if ((arg & 0xf0) || !(next_arg & SLJIT_MEM))
@@ -1016,10 +1016,10 @@
 }


 /* Emit the necessary instructions. See can_cache above. */
-static int getput_arg(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
-    int tmp_r;
-    sljit_w tmp;
+    sljit_si tmp_r;
+    sljit_sw tmp;


     SLJIT_ASSERT(arg & SLJIT_MEM);
     if (!(next_arg & SLJIT_MEM)) {
@@ -1115,7 +1115,7 @@
     return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(TMP_REG3) | 0);
 }


-static SLJIT_INLINE int emit_op_mem(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw)
+static SLJIT_INLINE sljit_si emit_op_mem(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
     if (getput_arg_fast(compiler, flags, reg, arg, argw))
         return compiler->error;
@@ -1128,9 +1128,9 @@
 /*  Entry, exit                                                          */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size;
+    sljit_si size;
     sljit_ins push;


     CHECK_ERROR();
@@ -1182,9 +1182,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size;
+    sljit_si size;


     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -1202,7 +1202,7 @@
     compiler->local_size = local_size;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     sljit_ins pop;


@@ -1245,8 +1245,8 @@
#endif

#if defined(__GNUC__)
-extern unsigned int __aeabi_uidivmod(unsigned numerator, unsigned denominator);
-extern unsigned int __aeabi_idivmod(unsigned numerator, unsigned denominator);
+extern unsigned int __aeabi_uidivmod(unsigned int numerator, int unsigned denominator);
+extern int __aeabi_idivmod(int numerator, int denominator);
#else
#error "Software divmod functions are needed"
#endif
@@ -1255,7 +1255,7 @@
}
#endif

-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     CHECK_ERROR();
     check_sljit_emit_op0(compiler, op);
@@ -1299,11 +1299,12 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int op_type, dst_r, flags;
+    sljit_si dst_r, flags;
+    sljit_si op_flags = GET_ALL_FLAGS(op);


     CHECK_ERROR();
     check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);
@@ -1313,11 +1314,11 @@
     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    op_type = GET_OPCODE(op);
     dst_r = (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) ? dst : TMP_REG1;


-    if (op_type >= SLJIT_MOV && op_type <= SLJIT_MOVU_P) {
-        switch (op_type) {
+    op = GET_OPCODE(op);
+    if (op >= SLJIT_MOV && op <= SLJIT_MOVU_P) {
+        switch (op) {
         case SLJIT_MOV:
         case SLJIT_MOV_UI:
         case SLJIT_MOV_SI:
@@ -1332,7 +1333,7 @@
         case SLJIT_MOV_SB:
             flags = BYTE_SIZE | SIGNED;
             if (src & SLJIT_IMM)
-                srcw = (sljit_b)srcw;
+                srcw = (sljit_sb)srcw;
             break;
         case SLJIT_MOV_UH:
             flags = HALF_SIZE;
@@ -1342,7 +1343,7 @@
         case SLJIT_MOV_SH:
             flags = HALF_SIZE | SIGNED;
             if (src & SLJIT_IMM)
-                srcw = (sljit_h)srcw;
+                srcw = (sljit_sh)srcw;
             break;
         case SLJIT_MOVU:
         case SLJIT_MOVU_UI:
@@ -1358,7 +1359,7 @@
         case SLJIT_MOVU_SB:
             flags = BYTE_SIZE | SIGNED | UPDATE;
             if (src & SLJIT_IMM)
-                srcw = (sljit_b)srcw;
+                srcw = (sljit_sb)srcw;
             break;
         case SLJIT_MOVU_UH:
             flags = HALF_SIZE | UPDATE;
@@ -1368,7 +1369,7 @@
         case SLJIT_MOVU_SH:
             flags = HALF_SIZE | SIGNED | UPDATE;
             if (src & SLJIT_IMM)
-                srcw = (sljit_h)srcw;
+                srcw = (sljit_sh)srcw;
             break;
         default:
             SLJIT_ASSERT_STOP();
@@ -1385,7 +1386,7 @@
                 FAIL_IF(getput_arg(compiler, flags, dst_r, src, srcw, dst, dstw));
         } else {
             if (dst_r != TMP_REG1)
-                return emit_op_imm(compiler, op_type, dst_r, TMP_REG1, src);
+                return emit_op_imm(compiler, op, dst_r, TMP_REG1, src);
             dst_r = src;
         }


@@ -1398,14 +1399,14 @@
         return SLJIT_SUCCESS;
     }


-    if (op_type == SLJIT_NEG) {
+    if (op == SLJIT_NEG) {
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
         compiler->skip_checks = 1;
 #endif
-        return sljit_emit_op2(compiler, GET_FLAGS(op) | SLJIT_SUB, dst, dstw, SLJIT_IMM, 0, src, srcw);
+        return sljit_emit_op2(compiler, SLJIT_SUB | op_flags, dst, dstw, SLJIT_IMM, 0, src, srcw);
     }


-    flags = (GET_FLAGS(op) ? SET_FLAGS : 0) | ((op & SLJIT_KEEP_FLAGS) ? KEEP_FLAGS : 0);
+    flags = (GET_FLAGS(op_flags) ? SET_FLAGS : 0) | ((op_flags & SLJIT_KEEP_FLAGS) ? KEEP_FLAGS : 0);
     if (src & SLJIT_MEM) {
         if (getput_arg_fast(compiler, WORD_SIZE, TMP_REG2, src, srcw))
             FAIL_IF(compiler->error);
@@ -1419,7 +1420,7 @@
     else
         srcw = src;


-    emit_op_imm(compiler, flags | op_type, dst_r, TMP_REG1, srcw);
+    emit_op_imm(compiler, flags | op, dst_r, TMP_REG1, srcw);


     if (dst & SLJIT_MEM) {
         if (getput_arg_fast(compiler, flags | STORE, dst_r, dst, dstw))
@@ -1430,12 +1431,12 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_r, flags;
+    sljit_si dst_r, flags;


     CHECK_ERROR();
     check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1512,14 +1513,14 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     CHECK_ERROR();
     check_sljit_emit_op_custom(compiler, instruction, size);
@@ -1534,15 +1535,18 @@
 /*  Floating point operators                                             */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     return 1;
 }


-static int emit_fop_mem(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw)
+#define FPU_LOAD (1 << 20)
+
+static sljit_si emit_fop_mem(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
-    sljit_w tmp;
-    sljit_w inst = VSTR | ((flags & STORE) ? 0 : 0x00100000);
+    sljit_sw tmp;
+    sljit_uw imm;
+    sljit_sw inst = VSTR_F32 | (flags & (SLJIT_SINGLE_OP | FPU_LOAD));


     SLJIT_ASSERT(arg & SLJIT_MEM);


@@ -1553,7 +1557,7 @@
         argw = 0;
     }


-    if (arg & 0xf) {
+    if ((arg & 0xf) && (argw & 0x3) == 0) {
         if (!(argw & ~0x3fc))
             return push_inst32(compiler, inst | 0x800000 | RN4(arg & 0xf) | DD4(reg) | (argw >> 2));
         if (!(-argw & ~0x3fc))
@@ -1574,13 +1578,29 @@
         }
     }


+    if (arg & 0xf) {
+        if (emit_set_delta(compiler, TMP_REG1, arg & 0xf, argw) != SLJIT_ERR_UNSUPPORTED) {
+            FAIL_IF(compiler->error);
+            return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg));
+        }
+        imm = get_imm(argw & ~0x3fc);
+        if (imm != INVALID_IMM) {
+            FAIL_IF(push_inst32(compiler, ADD_WI | RD4(TMP_REG1) | RN4(arg & 0xf) | imm));
+            return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2));
+        }
+        imm = get_imm(-argw & ~0x3fc);
+        if (imm != INVALID_IMM) {
+            argw = -argw;
+            FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(arg & 0xf) | imm));
+            return push_inst32(compiler, inst | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2));
+        }
+    }
+
     compiler->cache_arg = arg;
     compiler->cache_argw = argw;


     if (SLJIT_UNLIKELY(!(arg & 0xf)))
         FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
-    else if (emit_set_delta(compiler, TMP_REG3, arg & 0xf, argw) != SLJIT_ERR_UNSUPPORTED)
-        FAIL_IF(compiler->error);
     else {
         FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
         if (arg & 0xf)
@@ -1589,103 +1609,108 @@
     return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG3) | DD4(reg));
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_r;
+    sljit_si dst_r;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
+    SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100), float_transfer_bit_error);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
+    op ^= SLJIT_SINGLE_OP;


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
         if (dst & SLJIT_MEM) {
-            emit_fop_mem(compiler, 0, TMP_FREG1, dst, dstw);
+            emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG1, dst, dstw);
             dst = TMP_FREG1;
         }
         if (src & SLJIT_MEM) {
-            emit_fop_mem(compiler, 0, TMP_FREG2, src, srcw);
+            emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG2, src, srcw);
             src = TMP_FREG2;
         }
-        FAIL_IF(push_inst32(compiler, VCMP_F64 | DD4(dst) | DM4(src)));
+        FAIL_IF(push_inst32(compiler, VCMP_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst) | DM4(src)));
         return push_inst32(compiler, VMRS);
     }


-    dst_r = (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4) ? dst : TMP_FREG1;
+    dst_r = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;
     if (src & SLJIT_MEM) {
-        emit_fop_mem(compiler, 0, dst_r, src, srcw);
+        emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, dst_r, src, srcw);
         src = dst_r;
     }


     switch (GET_OPCODE(op)) {
-    case SLJIT_FMOV:
+    case SLJIT_MOVD:
         if (src != dst_r)
-            FAIL_IF(push_inst32(compiler, VMOV_F64 | DD4(dst_r) | DM4(src)));
+            FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DM4(src)));
         break;
-    case SLJIT_FNEG:
-        FAIL_IF(push_inst32(compiler, VNEG_F64 | DD4(dst_r) | DM4(src)));
+    case SLJIT_NEGD:
+        FAIL_IF(push_inst32(compiler, VNEG_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DM4(src)));
         break;
-    case SLJIT_FABS:
-        FAIL_IF(push_inst32(compiler, VABS_F64 | DD4(dst_r) | DM4(src)));
+    case SLJIT_ABSD:
+        FAIL_IF(push_inst32(compiler, VABS_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DM4(src)));
         break;
     }


     if (dst & SLJIT_MEM)
-        return emit_fop_mem(compiler, STORE, TMP_FREG1, dst, dstw);
+        return emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP), TMP_FREG1, dst, dstw);
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_r;
+    sljit_si dst_r;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
+    op ^= SLJIT_SINGLE_OP;


-    dst_r = (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4) ? dst : TMP_FREG1;
+    dst_r = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;
     if (src1 & SLJIT_MEM) {
-        emit_fop_mem(compiler, 0, TMP_FREG1, src1, src1w);
+        emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG1, src1, src1w);
         src1 = TMP_FREG1;
     }
     if (src2 & SLJIT_MEM) {
-        emit_fop_mem(compiler, 0, TMP_FREG2, src2, src2w);
+        emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG2, src2, src2w);
         src2 = TMP_FREG2;
     }


     switch (GET_OPCODE(op)) {
-    case SLJIT_FADD:
-        FAIL_IF(push_inst32(compiler, VADD_F64 | DD4(dst_r) | DN4(src1) | DM4(src2)));
+    case SLJIT_ADDD:
+        FAIL_IF(push_inst32(compiler, VADD_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DN4(src1) | DM4(src2)));
         break;
-    case SLJIT_FSUB:
-        FAIL_IF(push_inst32(compiler, VSUB_F64 | DD4(dst_r) | DN4(src1) | DM4(src2)));
+    case SLJIT_SUBD:
+        FAIL_IF(push_inst32(compiler, VSUB_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DN4(src1) | DM4(src2)));
         break;
-    case SLJIT_FMUL:
-        FAIL_IF(push_inst32(compiler, VMUL_F64 | DD4(dst_r) | DN4(src1) | DM4(src2)));
+    case SLJIT_MULD:
+        FAIL_IF(push_inst32(compiler, VMUL_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DN4(src1) | DM4(src2)));
         break;
-    case SLJIT_FDIV:
-        FAIL_IF(push_inst32(compiler, VDIV_F64 | DD4(dst_r) | DN4(src1) | DM4(src2)));
+    case SLJIT_DIVD:
+        FAIL_IF(push_inst32(compiler, VDIV_F32 | (op & SLJIT_SINGLE_OP) | DD4(dst_r) | DN4(src1) | DM4(src2)));
         break;
     }


     if (dst & SLJIT_MEM)
-        return emit_fop_mem(compiler, STORE, TMP_FREG1, dst, dstw);
+        return emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP), TMP_FREG1, dst, dstw);
     return SLJIT_SUCCESS;
 }


+#undef FPU_LOAD
+
 /* --------------------------------------------------------------------- */
 /*  Other instructions                                                   */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_enter(compiler, dst, dstw);
@@ -1705,7 +1730,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_return(compiler, src, srcw);
@@ -1732,7 +1757,7 @@
 /*  Conditional instructions                                             */
 /* --------------------------------------------------------------------- */


-static sljit_uw get_cc(int type)
+static sljit_uw get_cc(sljit_si type)
 {
     switch (type) {
     case SLJIT_C_EQUAL:
@@ -1802,10 +1827,10 @@
     return label;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     struct sljit_jump *jump;
-    int cc;
+    sljit_si cc;


     CHECK_ERROR_PTR();
     check_sljit_emit_jump(compiler, type);
@@ -1835,7 +1860,7 @@
     return jump;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     struct sljit_jump *jump;


@@ -1865,9 +1890,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
-    int dst_r;
+    sljit_si dst_r;
     sljit_uw cc;


     CHECK_ERROR();
@@ -1913,10 +1938,10 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     struct sljit_const *const_;
-    int dst_r;
+    sljit_si dst_r;


     CHECK_ERROR_PTR();
     check_sljit_emit_const(compiler, dst, dstw, init_value);
@@ -1939,7 +1964,7 @@
     inline_set_jump_addr(addr, new_addr, 1);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     sljit_uh* inst = (sljit_uh*)addr;
     modify_imm32_const(inst, new_constant);


Modified: code/trunk/sljit/sljitNativeARM_v5.c
===================================================================
--- code/trunk/sljit/sljitNativeARM_v5.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeARM_v5.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -41,8 +41,8 @@
 #define TMP_REG3    (SLJIT_NO_REGISTERS + 3)
 #define TMP_PC        (SLJIT_NO_REGISTERS + 4)


-#define TMP_FREG1    (SLJIT_FLOAT_REG4 + 1)
-#define TMP_FREG2    (SLJIT_FLOAT_REG4 + 2)
+#define TMP_FREG1    (0)
+#define TMP_FREG2    (SLJIT_FLOAT_REG6 + 1)


 /* In ARM instruction words.
    Cache lines are usually 32 byte aligned. */
@@ -52,7 +52,7 @@
 #define ALIGN_INSTRUCTION(ptr) \
     (sljit_uw*)(((sljit_uw)(ptr) + (CONST_POOL_ALIGNMENT * sizeof(sljit_uw)) - 1) & ~((CONST_POOL_ALIGNMENT * sizeof(sljit_uw)) - 1))
 #define MAX_DIFFERENCE(max_diff) \
-    (((max_diff) / (int)sizeof(sljit_uw)) - (CONST_POOL_ALIGNMENT - 1))
+    (((max_diff) / (sljit_si)sizeof(sljit_uw)) - (CONST_POOL_ALIGNMENT - 1))


 /* See sljit_emit_enter and sljit_emit_op0 if you want to change them. */
 static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 5] = {
@@ -99,16 +99,16 @@
 #define SMULL        0xe0c00090
 #define SUB_DP        0x2
 #define UMULL        0xe0800090
-#define VABS_F64    0xeeb00bc0
-#define VADD_F64    0xee300b00
-#define VCMP_F64    0xeeb40b40
-#define VDIV_F64    0xee800b00
-#define VMOV_F64    0xeeb00b40
+#define VABS_F32    0xeeb00ac0
+#define VADD_F32    0xee300a00
+#define VCMP_F32    0xeeb40a40
+#define VDIV_F32    0xee800a00
+#define VMOV_F32    0xeeb00a40
 #define VMRS        0xeef1fa10
-#define VMUL_F64    0xee200b00
-#define VNEG_F64    0xeeb10b40
-#define VSTR        0xed000b00
-#define VSUB_F64    0xee300b40
+#define VMUL_F32    0xee200a00
+#define VNEG_F32    0xeeb10a40
+#define VSTR_F32    0xed000a00
+#define VSUB_F32    0xee300a40


#if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
/* Arm v7 specific instructions. */
@@ -122,13 +122,13 @@

#if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)

-static int push_cpool(struct sljit_compiler *compiler)
+static sljit_si push_cpool(struct sljit_compiler *compiler)
 {
     /* Pushing the constant pool into the instruction stream. */
     sljit_uw* inst;
     sljit_uw* cpool_ptr;
     sljit_uw* cpool_end;
-    int i;
+    sljit_si i;


     /* The label could point the address after the constant pool. */
     if (compiler->last_label && compiler->last_label->size == compiler->size)
@@ -160,7 +160,7 @@
     return SLJIT_SUCCESS;
 }


-static int push_inst(struct sljit_compiler *compiler, sljit_uw inst)
+static sljit_si push_inst(struct sljit_compiler *compiler, sljit_uw inst)
 {
     sljit_uw* ptr;


@@ -174,7 +174,7 @@
     return SLJIT_SUCCESS;
 }


-static int push_inst_with_literal(struct sljit_compiler *compiler, sljit_uw inst, sljit_uw literal)
+static sljit_si push_inst_with_literal(struct sljit_compiler *compiler, sljit_uw inst, sljit_uw literal)
 {
     sljit_uw* ptr;
     sljit_uw cpool_index = CPOOL_SIZE;
@@ -224,7 +224,7 @@
     return SLJIT_SUCCESS;
 }


-static int push_inst_with_unique_literal(struct sljit_compiler *compiler, sljit_uw inst, sljit_uw literal)
+static sljit_si push_inst_with_unique_literal(struct sljit_compiler *compiler, sljit_uw inst, sljit_uw literal)
 {
     sljit_uw* ptr;
     if (SLJIT_UNLIKELY((compiler->cpool_diff != CONST_POOL_EMPTY && compiler->size - compiler->cpool_diff >= MAX_DIFFERENCE(4092)) || compiler->cpool_fill >= CPOOL_SIZE))
@@ -244,7 +244,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int prepare_blx(struct sljit_compiler *compiler)
+static SLJIT_INLINE sljit_si prepare_blx(struct sljit_compiler *compiler)
 {
     /* Place for at least two instruction (doesn't matter whether the first has a literal). */
     if (SLJIT_UNLIKELY(compiler->cpool_diff != CONST_POOL_EMPTY && compiler->size - compiler->cpool_diff >= MAX_DIFFERENCE(4088)))
@@ -252,7 +252,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_blx(struct sljit_compiler *compiler)
+static SLJIT_INLINE sljit_si emit_blx(struct sljit_compiler *compiler)
 {
     /* Must follow tightly the previous instruction (to be able to convert it to bl instruction). */
     SLJIT_ASSERT(compiler->cpool_diff == CONST_POOL_EMPTY || compiler->size - compiler->cpool_diff < MAX_DIFFERENCE(4092));
@@ -282,7 +282,7 @@


             /* Must be a load instruction with immediate offset. */
             SLJIT_ASSERT(ind < cpool_size && !(*last_pc_patch & (1 << 25)) && (*last_pc_patch & (1 << 20)));
-            if ((int)const_pool[ind] < 0) {
+            if ((sljit_si)const_pool[ind] < 0) {
                 const_pool[ind] = counter;
                 ind = counter;
                 counter++;
@@ -307,24 +307,24 @@
 /* In some rare ocasions we may need future patches. The probability is close to 0 in practice. */
 struct future_patch {
     struct future_patch* next;
-    int index;
-    int value;
+    sljit_si index;
+    sljit_si value;
 };


-static SLJIT_INLINE int resolve_const_pool_index(struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr)
+static SLJIT_INLINE sljit_si resolve_const_pool_index(struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr)
 {
-    int value;
+    sljit_si value;
     struct future_patch *curr_patch, *prev_patch;


     /* Using the values generated by patch_pc_relative_loads. */
     if (!*first_patch)
-        value = (int)cpool_start_address[cpool_current_index];
+        value = (sljit_si)cpool_start_address[cpool_current_index];
     else {
         curr_patch = *first_patch;
         prev_patch = 0;
         while (1) {
             if (!curr_patch) {
-                value = (int)cpool_start_address[cpool_current_index];
+                value = (sljit_si)cpool_start_address[cpool_current_index];
                 break;
             }
             if ((sljit_uw)curr_patch->index == cpool_current_index) {
@@ -364,7 +364,7 @@


#else

-static int push_inst(struct sljit_compiler *compiler, sljit_uw inst)
+static sljit_si push_inst(struct sljit_compiler *compiler, sljit_uw inst)
 {
     sljit_uw* ptr;


@@ -375,7 +375,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_imm(struct sljit_compiler *compiler, int reg, sljit_w imm)
+static SLJIT_INLINE sljit_si emit_imm(struct sljit_compiler *compiler, sljit_si reg, sljit_sw imm)
 {
     FAIL_IF(push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | (imm & 0xfff)));
     return push_inst(compiler, MOVT | RD(reg) | ((imm >> 12) & 0xf0000) | ((imm >> 16) & 0xfff));
@@ -383,9 +383,9 @@


#endif

-static SLJIT_INLINE int detect_jump_type(struct sljit_jump *jump, sljit_uw *code_ptr, sljit_uw *code)
+static SLJIT_INLINE sljit_si detect_jump_type(struct sljit_jump *jump, sljit_uw *code_ptr, sljit_uw *code)
 {
-    sljit_w diff;
+    sljit_sw diff;


     if (jump->flags & SLJIT_REWRITABLE_JUMP)
         return 0;
@@ -395,10 +395,10 @@
         code_ptr--;


     if (jump->flags & JUMP_ADDR)
-        diff = ((sljit_w)jump->u.target - (sljit_w)(code_ptr + 2));
+        diff = ((sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2));
     else {
         SLJIT_ASSERT(jump->flags & JUMP_LABEL);
-        diff = ((sljit_w)(code + jump->u.label->size) - (sljit_w)(code_ptr + 2));
+        diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2));
     }


     /* Branch to Thumb code has not been optimized yet. */
@@ -421,10 +421,10 @@
     }
 #else
     if (jump->flags & JUMP_ADDR)
-        diff = ((sljit_w)jump->u.target - (sljit_w)code_ptr);
+        diff = ((sljit_sw)jump->u.target - (sljit_sw)code_ptr);
     else {
         SLJIT_ASSERT(jump->flags & JUMP_LABEL);
-        diff = ((sljit_w)(code + jump->u.label->size) - (sljit_w)code_ptr);
+        diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)code_ptr);
     }


     /* Branch to Thumb code has not been optimized yet. */
@@ -442,14 +442,14 @@
     return 0;
 }


-static SLJIT_INLINE void inline_set_jump_addr(sljit_uw addr, sljit_uw new_addr, int flush)
+static SLJIT_INLINE void inline_set_jump_addr(sljit_uw addr, sljit_uw new_addr, sljit_si flush)
 {
 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
     sljit_uw *ptr = (sljit_uw*)addr;
     sljit_uw *inst = (sljit_uw*)ptr[0];
     sljit_uw mov_pc = ptr[1];
-    int bl = (mov_pc & 0x0000f000) != RD(TMP_PC);
-    sljit_w diff = (sljit_w)(((sljit_w)new_addr - (sljit_w)(inst + 2)) >> 2);
+    sljit_si bl = (mov_pc & 0x0000f000) != RD(TMP_PC);
+    sljit_sw diff = (sljit_sw)(((sljit_sw)new_addr - (sljit_sw)(inst + 2)) >> 2);


     if (diff <= 0x7fffff && diff >= -0x800000) {
         /* Turn to branch. */
@@ -498,9 +498,9 @@
 #endif
 }


-static sljit_uw get_immediate(sljit_uw imm);
+static sljit_uw get_imm(sljit_uw imm);

-static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_w new_constant, int flush)
+static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw new_constant, sljit_si flush)
 {
 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
     sljit_uw *ptr = (sljit_uw*)addr;
@@ -508,7 +508,7 @@
     sljit_uw ldr_literal = ptr[1];
     sljit_uw src2;


-    src2 = get_immediate(new_constant);
+    src2 = get_imm(new_constant);
     if (src2) {
         *inst = 0xe3a00000 | (ldr_literal & 0xf000) | src2;
         if (flush) {
@@ -517,7 +517,7 @@
         return;
     }


-    src2 = get_immediate(~new_constant);
+    src2 = get_imm(~new_constant);
     if (src2) {
         *inst = 0xe3e00000 | (ldr_literal & 0xf000) | src2;
         if (flush) {
@@ -730,12 +730,12 @@
         if (jump->flags & PATCH_B) {
             if (!(jump->flags & JUMP_ADDR)) {
                 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
-                SLJIT_ASSERT(((sljit_w)jump->u.label->addr - (sljit_w)(buf_ptr + 2)) <= 0x01ffffff && ((sljit_w)jump->u.label->addr - (sljit_w)(buf_ptr + 2)) >= -0x02000000);
-                *buf_ptr |= (((sljit_w)jump->u.label->addr - (sljit_w)(buf_ptr + 2)) >> 2) & 0x00ffffff;
+                SLJIT_ASSERT(((sljit_sw)jump->u.label->addr - (sljit_sw)(buf_ptr + 2)) <= 0x01ffffff && ((sljit_sw)jump->u.label->addr - (sljit_sw)(buf_ptr + 2)) >= -0x02000000);
+                *buf_ptr |= (((sljit_sw)jump->u.label->addr - (sljit_sw)(buf_ptr + 2)) >> 2) & 0x00ffffff;
             }
             else {
-                SLJIT_ASSERT(((sljit_w)jump->u.target - (sljit_w)(buf_ptr + 2)) <= 0x01ffffff && ((sljit_w)jump->u.target - (sljit_w)(buf_ptr + 2)) >= -0x02000000);
-                *buf_ptr |= (((sljit_w)jump->u.target - (sljit_w)(buf_ptr + 2)) >> 2) & 0x00ffffff;
+                SLJIT_ASSERT(((sljit_sw)jump->u.target - (sljit_sw)(buf_ptr + 2)) <= 0x01ffffff && ((sljit_sw)jump->u.target - (sljit_sw)(buf_ptr + 2)) >= -0x02000000);
+                *buf_ptr |= (((sljit_sw)jump->u.target - (sljit_sw)(buf_ptr + 2)) >> 2) & 0x00ffffff;
             }
         }
         else if (jump->flags & SLJIT_REWRITABLE_JUMP) {
@@ -785,7 +785,7 @@
     }
 #endif


-    SLJIT_ASSERT(code_ptr - code <= (int)size);
+    SLJIT_ASSERT(code_ptr - code <= (sljit_si)size);


     SLJIT_CACHE_FLUSH(code, code_ptr);
     compiler->error = SLJIT_ERR_COMPILED;
@@ -819,14 +819,14 @@
 #define EMIT_DATA_PROCESS_INS(opcode, set_flags, dst, src1, src2) \
     (0xe0000000 | ((opcode) << 21) | (set_flags) | RD(dst) | RN(src1) | (src2))


-static int emit_op(struct sljit_compiler *compiler, int op, int inp_flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si inp_flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size;
+    sljit_si size;
     sljit_uw push;


     CHECK_ERROR();
@@ -878,9 +878,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size;
+    sljit_si size;


     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -900,7 +900,7 @@
     compiler->local_size = local_size;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     sljit_uw pop;


@@ -942,7 +942,7 @@
    w/b/h/N - word/byte/half/NOT allowed (2 bit)
    It contans 16 items, but not all are different. */


-static sljit_w data_transfer_insts[16] = {
+static sljit_sw data_transfer_insts[16] = {
 /* s u w */ 0xe5000000 /* str */,
 /* s u b */ 0xe5400000 /* strb */,
 /* s u h */ 0xe10000b0 /* strh */,
@@ -1008,10 +1008,10 @@
     } \
     return push_inst(compiler, EMIT_DATA_PROCESS_INS(MOV_DP, flags & SET_FLAGS, dst, SLJIT_UNUSED, (reg_map[(flags & ARGS_SWAPPED) ? src1 : src2] << 8) | (opcode << 5) | 0x10 | ((flags & ARGS_SWAPPED) ? reg_map[src2] : reg_map[src1])));


-static SLJIT_INLINE int emit_single_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, int src1, int src2)
+static SLJIT_INLINE sljit_si emit_single_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_si src1, sljit_si src2)
 {
-    sljit_w mul_inst;
+    sljit_sw mul_inst;


     switch (GET_OPCODE(op)) {
     case SLJIT_MOV:
@@ -1162,9 +1162,9 @@


 /* Tests whether the immediate can be stored in the 12 bit imm field.
    Returns with 0 if not possible. */
-static sljit_uw get_immediate(sljit_uw imm)
+static sljit_uw get_imm(sljit_uw imm)
 {
-    int rol;
+    sljit_si rol;


     if (imm <= 0xff)
         return SRC2_IMM | imm;
@@ -1200,12 +1200,12 @@
 }


 #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5)
-static int generate_int(struct sljit_compiler *compiler, int reg, sljit_uw imm, int positive)
+static sljit_si generate_int(struct sljit_compiler *compiler, sljit_si reg, sljit_uw imm, sljit_si positive)
 {
     sljit_uw mask;
     sljit_uw imm1;
     sljit_uw imm2;
-    int rol;
+    sljit_si rol;


     /* Step1: Search a zero byte (8 continous zero bit). */
     mask = 0xff000000;
@@ -1311,7 +1311,7 @@
 }
 #endif


-static int load_immediate(struct sljit_compiler *compiler, int reg, sljit_uw imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si reg, sljit_uw imm)
 {
     sljit_uw tmp;


@@ -1321,13 +1321,13 @@
#endif

     /* Create imm by 1 inst. */
-    tmp = get_immediate(imm);
+    tmp = get_imm(imm);
     if (tmp) {
         EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, reg, SLJIT_UNUSED, tmp));
         return SLJIT_SUCCESS;
     }


-    tmp = get_immediate(~imm);
+    tmp = get_imm(~imm);
     if (tmp) {
         EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MVN_DP, 0, reg, SLJIT_UNUSED, tmp));
         return SLJIT_SUCCESS;
@@ -1345,20 +1345,36 @@
 #endif
 }


+/* Helper function. Dst should be reg + value, using at most 1 instruction, flags does not set. */
+static sljit_si emit_set_delta(struct sljit_compiler *compiler, sljit_si dst, sljit_si reg, sljit_sw value)
+{
+    if (value >= 0) {
+        value = get_imm(value);
+        if (value)
+            return push_inst(compiler, EMIT_DATA_PROCESS_INS(ADD_DP, 0, dst, reg, value));
+    }
+    else {
+        value = get_imm(-value);
+        if (value)
+            return push_inst(compiler, EMIT_DATA_PROCESS_INS(SUB_DP, 0, dst, reg, value));
+    }
+    return SLJIT_ERR_UNSUPPORTED;
+}
+
 /* Can perform an operation using at most 1 instruction. */
-static int getput_arg_fast(struct sljit_compiler *compiler, int inp_flags, int reg, int arg, sljit_w argw)
+static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
     sljit_uw imm;


     if (arg & SLJIT_IMM) {
-        imm = get_immediate(argw);
+        imm = get_imm(argw);
         if (imm) {
             if (inp_flags & ARG_TEST)
                 return 1;
             EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(MOV_DP, 0, reg, SLJIT_UNUSED, imm));
             return -1;
         }
-        imm = get_immediate(~argw);
+        imm = get_imm(~argw);
         if (imm) {
             if (inp_flags & ARG_TEST)
                 return 1;
@@ -1418,7 +1434,7 @@
 /* See getput_arg below.
    Note: can_cache is called only for binary operators. Those
    operators always uses word arguments without write back. */
-static int can_cache(int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
     /* Immediate caching is not supported as it would be an operation on constant arguments. */
     if (arg & SLJIT_IMM)
@@ -1466,11 +1482,12 @@
     }


 /* Emit the necessary instructions. See can_cache above. */
-static int getput_arg(struct sljit_compiler *compiler, int inp_flags, int reg, int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
-    int tmp_r;
-    sljit_w max_delta;
-    sljit_w sign;
+    sljit_si tmp_r;
+    sljit_sw max_delta;
+    sljit_sw sign;
+    sljit_uw imm;


     if (arg & SLJIT_IMM) {
         SLJIT_ASSERT(inp_flags & LOAD_DATA);
@@ -1484,8 +1501,9 @@


     if ((arg & 0xf) == SLJIT_UNUSED) {
         /* Write back is not used. */
-        if ((compiler->cache_arg & SLJIT_IMM) && (((sljit_uw)argw - (sljit_uw)compiler->cache_argw) <= (sljit_uw)max_delta || ((sljit_uw)compiler->cache_argw - (sljit_uw)argw) <= (sljit_uw)max_delta)) {
-            if (((sljit_uw)argw - (sljit_uw)compiler->cache_argw) <= (sljit_uw)max_delta) {
+        imm = (sljit_uw)(argw - compiler->cache_argw);
+        if ((compiler->cache_arg & SLJIT_IMM) && (imm <= (sljit_uw)max_delta || imm >= (sljit_uw)-max_delta)) {
+            if (imm <= (sljit_uw)max_delta) {
                 sign = 1;
                 argw = argw - compiler->cache_argw;
             }
@@ -1494,18 +1512,14 @@
                 argw = compiler->cache_argw - argw;
             }


-            if (max_delta & 0xf00) {
-                EMIT_INSTRUCTION(EMIT_DATA_TRANSFER(inp_flags, sign, 0, reg, TMP_REG3, argw));
-            }
-            else {
-                EMIT_INSTRUCTION(EMIT_DATA_TRANSFER(inp_flags, sign, 0, reg, TMP_REG3, TYPE2_TRANSFER_IMM(argw)));
-            }
+            GETPUT_ARG_DATA_TRANSFER(sign, 0, reg, TMP_REG3, argw);
             return SLJIT_SUCCESS;
         }


         /* With write back, we can create some sophisticated loads, but
            it is hard to decide whether we should convert downward (0s) or upward (1s). */
-        if ((next_arg & SLJIT_MEM) && ((sljit_uw)argw - (sljit_uw)next_argw <= (sljit_uw)max_delta || (sljit_uw)next_argw - (sljit_uw)argw <= (sljit_uw)max_delta)) {
+        imm = (sljit_uw)(argw - next_argw);
+        if ((next_arg & SLJIT_MEM) && (imm <= (sljit_uw)max_delta || imm >= (sljit_uw)-max_delta)) {
             SLJIT_ASSERT(inp_flags & LOAD_DATA);


             compiler->cache_arg = SLJIT_IMM;
@@ -1518,29 +1532,6 @@
         return SLJIT_SUCCESS;
     }


-    /* Extended imm addressing for [reg+imm] format. */
-    sign = (max_delta << 8) | 0xff;
-    if (!(arg & 0xf0) && argw <= sign && argw >= -sign) {
-        TEST_WRITE_BACK();
-        if (argw >= 0) {
-            sign = 1;
-        }
-        else {
-            sign = 0;
-            argw = -argw;
-        }
-
-        /* Optimization: add is 0x4, sub is 0x2. Sign is 1 for add and 0 for sub. */
-        if (max_delta & 0xf00)
-            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(SUB_DP << sign, 0, tmp_r, arg & 0xf, SRC2_IMM | (argw >> 12) | 0xa00));
-        else
-            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(SUB_DP << sign, 0, tmp_r, arg & 0xf, SRC2_IMM | (argw >> 8) | 0xc00));
-
-        argw &= max_delta;
-        GETPUT_ARG_DATA_TRANSFER(sign, inp_flags & WRITE_BACK, reg, tmp_r, argw);
-        return SLJIT_SUCCESS;
-    }
-
     if (arg & 0xf0) {
         SLJIT_ASSERT((argw & 0x3) && !(max_delta & 0xf00));
         if (inp_flags & WRITE_BACK)
@@ -1550,20 +1541,36 @@
         return SLJIT_SUCCESS;
     }


-    if (compiler->cache_arg == arg && ((sljit_uw)argw - (sljit_uw)compiler->cache_argw) <= (sljit_uw)max_delta) {
+    imm = (sljit_uw)(argw - compiler->cache_argw);
+    if (compiler->cache_arg == arg && imm <= (sljit_uw)max_delta) {
         SLJIT_ASSERT(!(inp_flags & WRITE_BACK));
-        argw = argw - compiler->cache_argw;
-        GETPUT_ARG_DATA_TRANSFER(1, 0, reg, TMP_REG3, argw);
+        GETPUT_ARG_DATA_TRANSFER(1, 0, reg, TMP_REG3, imm);
         return SLJIT_SUCCESS;
     }
-
-    if (compiler->cache_arg == arg && ((sljit_uw)compiler->cache_argw - (sljit_uw)argw) <= (sljit_uw)max_delta) {
+    if (compiler->cache_arg == arg && imm >= (sljit_uw)-max_delta) {
         SLJIT_ASSERT(!(inp_flags & WRITE_BACK));
-        argw = compiler->cache_argw - argw;
-        GETPUT_ARG_DATA_TRANSFER(0, 0, reg, TMP_REG3, argw);
+        imm = (sljit_uw)-(sljit_sw)imm;
+        GETPUT_ARG_DATA_TRANSFER(0, 0, reg, TMP_REG3, imm);
         return SLJIT_SUCCESS;
     }


+    imm = get_imm(argw & ~max_delta);
+    if (imm) {
+        TEST_WRITE_BACK();
+        EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, tmp_r, arg & 0xf, imm));
+        GETPUT_ARG_DATA_TRANSFER(1, inp_flags & WRITE_BACK, reg, tmp_r, argw & max_delta);
+        return SLJIT_SUCCESS;
+    }
+
+    imm = get_imm(-argw & ~max_delta);
+    if (imm) {
+        argw = -argw;
+        TEST_WRITE_BACK();
+        EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(SUB_DP, 0, tmp_r, arg & 0xf, imm));
+        GETPUT_ARG_DATA_TRANSFER(0, inp_flags & WRITE_BACK, reg, tmp_r, argw & max_delta);
+        return SLJIT_SUCCESS;
+    }
+
     if ((compiler->cache_arg & SLJIT_IMM) && compiler->cache_argw == argw) {
         TEST_WRITE_BACK();
         EMIT_INSTRUCTION(EMIT_DATA_TRANSFER(inp_flags, 1, inp_flags & WRITE_BACK, reg, arg & 0xf, RM(TMP_REG3) | (max_delta & 0xf00 ? SRC2_IMM : 0)));
@@ -1582,7 +1589,8 @@
         return SLJIT_SUCCESS;
     }


-    if (arg == next_arg && !(inp_flags & WRITE_BACK) && ((sljit_uw)argw - (sljit_uw)next_argw <= (sljit_uw)max_delta || (sljit_uw)next_argw - (sljit_uw)argw <= (sljit_uw)max_delta)) {
+    imm = (sljit_uw)(argw - next_argw);
+    if (arg == next_arg && !(inp_flags & WRITE_BACK) && (imm <= (sljit_uw)max_delta || imm >= (sljit_uw)-max_delta)) {
         SLJIT_ASSERT(inp_flags & LOAD_DATA);
         FAIL_IF(load_immediate(compiler, TMP_REG3, argw));
         EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, TMP_REG3, TMP_REG3, reg_map[arg & 0xf]));
@@ -1605,10 +1613,10 @@
     return SLJIT_SUCCESS;
 }


-static int emit_op(struct sljit_compiler *compiler, int op, int inp_flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si inp_flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* arg1 goes to TMP_REG1 or src reg
        arg2 goes to TMP_REG2, imm or src reg
@@ -1616,11 +1624,11 @@
        result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */


     /* We prefers register and simple consts. */
-    int dst_r;
-    int src1_r;
-    int src2_r = 0;
-    int sugg_src2_r = TMP_REG2;
-    int flags = GET_FLAGS(op) ? SET_FLAGS : 0;
+    sljit_si dst_r;
+    sljit_si src1_r;
+    sljit_si src2_r = 0;
+    sljit_si sugg_src2_r = TMP_REG2;
+    sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
@@ -1662,7 +1670,7 @@
         src1_r = 0;
         if ((inp_flags & ALLOW_ANY_IMM) && (src1 & SLJIT_IMM)) {
             /* The second check will generate a hit. */
-            src2_r = get_immediate(src1w);
+            src2_r = get_imm(src1w);
             if (src2_r) {
                 flags |= ARGS_SWAPPED;
                 src1 = src2;
@@ -1670,7 +1678,7 @@
                 break;
             }
             if (inp_flags & ALLOW_INV_IMM) {
-                src2_r = get_immediate(~src1w);
+                src2_r = get_imm(~src1w);
                 if (src2_r) {
                     flags |= ARGS_SWAPPED | INV_IMM;
                     src1 = src2;
@@ -1679,7 +1687,7 @@
                 }
             }
             if (GET_OPCODE(op) == SLJIT_ADD) {
-                src2_r = get_immediate(-src1w);
+                src2_r = get_imm(-src1w);
                 if (src2_r) {
                     /* Note: ARGS_SWAPPED is intentionally not applied! */
                     src1 = src2;
@@ -1706,18 +1714,18 @@
         }
         else do { /* do { } while(0) is used because of breaks. */
             if ((inp_flags & ALLOW_ANY_IMM) && (src2 & SLJIT_IMM)) {
-                src2_r = get_immediate(src2w);
+                src2_r = get_imm(src2w);
                 if (src2_r)
                     break;
                 if (inp_flags & ALLOW_INV_IMM) {
-                    src2_r = get_immediate(~src2w);
+                    src2_r = get_imm(~src2w);
                     if (src2_r) {
                         flags |= INV_IMM;
                         break;
                     }
                 }
                 if (GET_OPCODE(op) == SLJIT_ADD) {
-                    src2_r = get_immediate(-src2w);
+                    src2_r = get_imm(-src2w);
                     if (src2_r) {
                         op = SLJIT_SUB | GET_ALL_FLAGS(op);
                         flags &= ~ARGS_SWAPPED;
@@ -1725,7 +1733,7 @@
                     }
                 }
                 if (GET_OPCODE(op) == SLJIT_SUB && !(flags & ARGS_SWAPPED)) {
-                    src2_r = get_immediate(-src2w);
+                    src2_r = get_imm(-src2w);
                     if (src2_r) {
                         op = SLJIT_ADD | GET_ALL_FLAGS(op);
                         flags &= ~ARGS_SWAPPED;
@@ -1800,8 +1808,8 @@
 #endif


#if defined(__GNUC__)
-extern unsigned int __aeabi_uidivmod(unsigned numerator, unsigned denominator);
-extern unsigned int __aeabi_idivmod(unsigned numerator, unsigned denominator);
+extern unsigned int __aeabi_uidivmod(unsigned int numerator, unsigned int denominator);
+extern int __aeabi_idivmod(int numerator, int denominator);
#else
#error "Software divmod functions are needed"
#endif
@@ -1810,7 +1818,7 @@
}
#endif

-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     CHECK_ERROR();
     check_sljit_emit_op0(compiler, op);
@@ -1857,9 +1865,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);
@@ -1877,13 +1885,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, ALLOW_ANY_IMM | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOV_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, ALLOW_ANY_IMM | SIGNED_DATA | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, ALLOW_ANY_IMM | SIGNED_DATA | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOV_UH:
         return emit_op(compiler, SLJIT_MOV_UH, ALLOW_ANY_IMM | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOV_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, ALLOW_ANY_IMM | SIGNED_DATA | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, ALLOW_ANY_IMM | SIGNED_DATA | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_MOVU:
     case SLJIT_MOVU_UI:
@@ -1895,13 +1903,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, ALLOW_ANY_IMM | BYTE_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOVU_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, ALLOW_ANY_IMM | SIGNED_DATA | BYTE_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, ALLOW_ANY_IMM | SIGNED_DATA | BYTE_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOVU_UH:
         return emit_op(compiler, SLJIT_MOV_UH, ALLOW_ANY_IMM | HALF_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOVU_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, ALLOW_ANY_IMM | SIGNED_DATA | HALF_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, ALLOW_ANY_IMM | SIGNED_DATA | HALF_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_NOT:
         return emit_op(compiler, op, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw);
@@ -1919,10 +1927,10 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     CHECK_ERROR();
     check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1961,14 +1969,14 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     CHECK_ERROR();
     check_sljit_emit_op_custom(compiler, instruction, size);
@@ -1985,7 +1993,7 @@


 /* 0 - no fpu
    1 - vfp */
-static int arm_fpu_type = -1;
+static sljit_si arm_fpu_type = -1;


 static void init_compiler(void)
 {
@@ -1996,7 +2004,7 @@
     arm_fpu_type = 1;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     if (arm_fpu_type == -1)
         init_compiler();
@@ -2007,7 +2015,7 @@


#define arm_fpu_type 1

-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     /* Always available. */
     return 1;
@@ -2015,57 +2023,62 @@


#endif

-#define EMIT_FPU_DATA_TRANSFER(add, load, base, freg, offs) \
-    (VSTR | ((add) << 23) | ((load) << 20) | (reg_map[base] << 16) | (freg << 12) | (offs))
-#define EMIT_FPU_OPERATION(opcode, dst, src1, src2) \
-    ((opcode) | ((dst) << 12) | (src1) | ((src2) << 16))
+#define FPU_LOAD (1 << 20)
+#define EMIT_FPU_DATA_TRANSFER(inst, add, base, freg, offs) \
+    ((inst) | ((add) << 23) | (reg_map[base] << 16) | (freg << 12) | (offs))
+#define EMIT_FPU_OPERATION(opcode, mode, dst, src1, src2) \
+    ((opcode) | (mode) | ((dst) << 12) | (src1) | ((src2) << 16))


-static int emit_fpu_data_transfer(struct sljit_compiler *compiler, int fpu_reg, int load, int arg, sljit_w argw)
+static sljit_si emit_fop_mem(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
+    sljit_sw tmp;
+    sljit_uw imm;
+    sljit_sw inst = VSTR_F32 | (flags & (SLJIT_SINGLE_OP | FPU_LOAD));
     SLJIT_ASSERT(arg & SLJIT_MEM);


+    if (SLJIT_UNLIKELY(arg & 0xf0)) {
+        EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, TMP_REG1, arg & 0xf, RM((arg >> 4) & 0xf) | ((argw & 0x3) << 7)));
+        arg = SLJIT_MEM | TMP_REG1;
+        argw = 0;
+    }
+
     /* Fast loads and stores. */
-    if ((arg & 0xf) && !(arg & 0xf0) && (argw & 0x3) == 0) {
-        if (argw >= 0 && argw <= 0x3ff) {
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(1, load, arg & 0xf, fpu_reg, argw >> 2));
-            return SLJIT_SUCCESS;
-        }
-        if (argw < 0 && argw >= -0x3ff) {
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(0, load, arg & 0xf, fpu_reg, (-argw) >> 2));
-            return SLJIT_SUCCESS;
-        }
-        if (argw >= 0 && argw <= 0x3ffff) {
-            SLJIT_ASSERT(get_immediate(argw & 0x3fc00));
-            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, TMP_REG1, arg & 0xf, get_immediate(argw & 0x3fc00)));
-            argw &= 0x3ff;
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(1, load, TMP_REG1, fpu_reg, argw >> 2));
-            return SLJIT_SUCCESS;
-        }
-        if (argw < 0 && argw >= -0x3ffff) {
-            argw = -argw;
-            SLJIT_ASSERT(get_immediate(argw & 0x3fc00));
-            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(SUB_DP, 0, TMP_REG1, arg & 0xf, get_immediate(argw & 0x3fc00)));
-            argw &= 0x3ff;
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(0, load, TMP_REG1, fpu_reg, argw >> 2));
-            return SLJIT_SUCCESS;
-        }
+    if ((arg & 0xf)) {
+        if (!(argw & ~0x3fc))
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, arg & 0xf, reg, argw >> 2));
+        if (!(-argw & ~0x3fc))
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, arg & 0xf, reg, (-argw) >> 2));
     }


-    if (arg & 0xf0) {
-        EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, TMP_REG1, arg & 0xf, RM((arg >> 4) & 0xf) | ((argw & 0x3) << 7)));
-        EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(1, load, TMP_REG1, fpu_reg, 0));
-        return SLJIT_SUCCESS;
+    if (compiler->cache_arg == arg) {
+        tmp = argw - compiler->cache_argw;
+        if (!(tmp & ~0x3fc))
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG3, reg, tmp >> 2));
+        if (!(-tmp & ~0x3fc))
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, TMP_REG3, reg, -tmp >> 2));
+        if (emit_set_delta(compiler, TMP_REG3, TMP_REG3, tmp) != SLJIT_ERR_UNSUPPORTED) {
+            FAIL_IF(compiler->error);
+            compiler->cache_argw = argw;
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG3, reg, 0));
+        }
     }


-    if (compiler->cache_arg == arg && ((argw - compiler->cache_argw) & 0x3) == 0) {
-        if (((sljit_uw)argw - (sljit_uw)compiler->cache_argw) <= 0x3ff) {
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(1, load, TMP_REG3, fpu_reg, (argw - compiler->cache_argw) >> 2));
-            return SLJIT_SUCCESS;
+    if (arg & 0xf) {
+        if (emit_set_delta(compiler, TMP_REG1, arg & 0xf, argw) != SLJIT_ERR_UNSUPPORTED) {
+            FAIL_IF(compiler->error);
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG1, reg, 0));
         }
-        if (((sljit_uw)compiler->cache_argw - (sljit_uw)argw) <= 0x3ff) {
-            EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(0, load, TMP_REG3, fpu_reg, (compiler->cache_argw - argw) >> 2));
-            return SLJIT_SUCCESS;
+        imm = get_imm(argw & ~0x3fc);
+        if (imm) {
+            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(ADD_DP, 0, TMP_REG1, arg & 0xf, imm));
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG1, reg, (argw & 0x3fc) >> 2));
         }
+        imm = get_imm(-argw & ~0x3fc);
+        if (imm) {
+            argw = -argw;
+            EMIT_INSTRUCTION(EMIT_DATA_PROCESS_INS(SUB_DP, 0, TMP_REG1, arg & 0xf, imm));
+            return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, TMP_REG1, reg, (argw & 0x3fc) >> 2));
+        }
     }


     compiler->cache_arg = arg;
@@ -2077,119 +2090,125 @@
     else
         FAIL_IF(load_immediate(compiler, TMP_REG3, argw));


-    EMIT_INSTRUCTION(EMIT_FPU_DATA_TRANSFER(1, load, TMP_REG3, fpu_reg, 0));
-    return SLJIT_SUCCESS;
+    return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG3, reg, 0));
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_fr;
+    sljit_si dst_fr;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
+    SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100), float_transfer_bit_error);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
+    op ^= SLJIT_SINGLE_OP;


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
-        if (dst > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_fpu_data_transfer(compiler, TMP_FREG1, 1, dst, dstw));
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
+        if (dst > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG1, dst, dstw));
             dst = TMP_FREG1;
         }
-        if (src > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_fpu_data_transfer(compiler, TMP_FREG2, 1, src, srcw));
+        if (src > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG2, src, srcw));
             src = TMP_FREG2;
         }
-        EMIT_INSTRUCTION(VCMP_F64 | (dst << 12) | src);
+        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VCMP_F32, op & SLJIT_SINGLE_OP, dst, src, 0));
         EMIT_INSTRUCTION(VMRS);
         return SLJIT_SUCCESS;
     }


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG1 : dst;
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;


-    if (src > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_fpu_data_transfer(compiler, dst_fr, 1, src, srcw));
+    if (src > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, dst_fr, src, srcw));
         src = dst_fr;
     }


-    switch (op) {
-        case SLJIT_FMOV:
+    switch (GET_OPCODE(op)) {
+        case SLJIT_MOVD:
             if (src != dst_fr && dst_fr != TMP_FREG1)
-                EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VMOV_F64, dst_fr, src, 0));
+                EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_SINGLE_OP, dst_fr, src, 0));
             break;
-        case SLJIT_FNEG:
-            EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VNEG_F64, dst_fr, src, 0));
+        case SLJIT_NEGD:
+            EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_SINGLE_OP, dst_fr, src, 0));
             break;
-        case SLJIT_FABS:
-            EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VABS_F64, dst_fr, src, 0));
+        case SLJIT_ABSD:
+            EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_SINGLE_OP, dst_fr, src, 0));
             break;
     }


     if (dst_fr == TMP_FREG1) {
-        if (op == SLJIT_FMOV)
+        if (GET_OPCODE(op) == SLJIT_MOVD)
             dst_fr = src;
-        FAIL_IF(emit_fpu_data_transfer(compiler, dst_fr, 0, dst, dstw));
+        FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP), dst_fr, dst, dstw));
     }


     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_fr;
+    sljit_si dst_fr;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
+    op ^= SLJIT_SINGLE_OP;


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG1 : dst;
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;


-    if (src2 > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_fpu_data_transfer(compiler, TMP_FREG2, 1, src2, src2w));
+    if (src2 > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG2, src2, src2w));
         src2 = TMP_FREG2;
     }


-    if (src1 > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_fpu_data_transfer(compiler, TMP_FREG1, 1, src1, src1w));
+    if (src1 > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP) | FPU_LOAD, TMP_FREG1, src1, src1w));
         src1 = TMP_FREG1;
     }


-    switch (op) {
-    case SLJIT_FADD:
-        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VADD_F64, dst_fr, src2, src1));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_ADDD:
+        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_SINGLE_OP, dst_fr, src2, src1));
         break;


-    case SLJIT_FSUB:
-        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VSUB_F64, dst_fr, src2, src1));
+    case SLJIT_SUBD:
+        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_SINGLE_OP, dst_fr, src2, src1));
         break;


-    case SLJIT_FMUL:
-        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VMUL_F64, dst_fr, src2, src1));
+    case SLJIT_MULD:
+        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_SINGLE_OP, dst_fr, src2, src1));
         break;


-    case SLJIT_FDIV:
-        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VDIV_F64, dst_fr, src2, src1));
+    case SLJIT_DIVD:
+        EMIT_INSTRUCTION(EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_SINGLE_OP, dst_fr, src2, src1));
         break;
     }


     if (dst_fr == TMP_FREG1)
-        FAIL_IF(emit_fpu_data_transfer(compiler, TMP_FREG1, 0, dst, dstw));
+        FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_SINGLE_OP), TMP_FREG1, dst, dstw));


     return SLJIT_SUCCESS;
 }


+#undef FPU_LOAD
+#undef EMIT_FPU_DATA_TRANSFER
+#undef EMIT_FPU_OPERATION
+
 /* --------------------------------------------------------------------- */
 /*  Other instructions                                                   */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_enter(compiler, dst, dstw);
@@ -2209,7 +2228,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_return(compiler, src, srcw);
@@ -2236,7 +2255,7 @@
 /*  Conditional instructions                                             */
 /* --------------------------------------------------------------------- */


-static sljit_uw get_cc(int type)
+static sljit_uw get_cc(sljit_si type)
 {
     switch (type) {
     case SLJIT_C_EQUAL:
@@ -2306,7 +2325,7 @@
     return label;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     struct sljit_jump *jump;


@@ -2347,7 +2366,7 @@
     return jump;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     struct sljit_jump *jump;


@@ -2386,9 +2405,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
-    int reg;
+    sljit_si reg;
     sljit_uw cc;


     CHECK_ERROR();
@@ -2425,10 +2444,10 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     struct sljit_const *const_;
-    int reg;
+    sljit_si reg;


     CHECK_ERROR_PTR();
     check_sljit_emit_const(compiler, dst, dstw, init_value);
@@ -2458,7 +2477,7 @@
     inline_set_jump_addr(addr, new_addr, 1);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     inline_set_const(addr, new_constant, 1);
 }


Modified: code/trunk/sljit/sljitNativeMIPS_32.c
===================================================================
--- code/trunk/sljit/sljitNativeMIPS_32.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeMIPS_32.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -26,7 +26,7 @@


/* mips 32-bit arch dependent functions. */

-static int load_immediate(struct sljit_compiler *compiler, int dst_ar, sljit_w imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si dst_ar, sljit_sw imm)
 {
     if (!(imm & ~0xffff))
         return push_inst(compiler, ORI | SA(0) | TA(dst_ar) | IMM(imm), dst_ar);
@@ -66,10 +66,10 @@
             FAIL_IF(push_inst(compiler, op_norm | S(src2) | T(src1) | D(dst), DR(dst))); \
     }


-static SLJIT_INLINE int emit_single_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, int src1, sljit_w src2)
+static SLJIT_INLINE sljit_si emit_single_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_si src1, sljit_sw src2)
 {
-    int overflow_ra = 0;
+    sljit_si overflow_ra = 0;


     switch (GET_OPCODE(op)) {
     case SLJIT_MOV:
@@ -379,7 +379,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_const(struct sljit_compiler *compiler, int dst, sljit_w init_value)
+static SLJIT_INLINE sljit_si emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw init_value)
 {
     FAIL_IF(push_inst(compiler, LUI | T(dst) | IMM(init_value >> 16), DR(dst)));
     return push_inst(compiler, ORI | S(dst) | T(dst) | IMM(init_value), DR(dst));
@@ -394,7 +394,7 @@
     SLJIT_CACHE_FLUSH(inst, inst + 2);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     sljit_ins *inst = (sljit_ins*)addr;



Modified: code/trunk/sljit/sljitNativeMIPS_common.c
===================================================================
--- code/trunk/sljit/sljitNativeMIPS_common.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeMIPS_common.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -60,8 +60,8 @@
 #define GREATER_FLAG    13
 #define OVERFLOW_FLAG    14


-#define TMP_FREG1    ((SLJIT_FLOAT_REG4 + 1) << 1)
-#define TMP_FREG2    ((SLJIT_FLOAT_REG4 + 2) << 1)
+#define TMP_FREG1    (0)
+#define TMP_FREG2    ((SLJIT_FLOAT_REG6 + 1) << 1)


 static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 4] = {
     0, 2, 5, 6, 3, 8, 16, 17, 18, 19, 20, 29, 4, 25, 9
@@ -87,10 +87,11 @@
 #define DR(dr)        (reg_map[dr])
 #define HI(opcode)    ((opcode) << 26)
 #define LO(opcode)    (opcode)
-#define FMT_D        (17 << 21)
+/* S = (16 << 21) D = (17 << 21) */
+#define FMT_SD        (16 << 21)


-#define ABS_D        (HI(17) | FMT_D | LO(5))
-#define ADD_D        (HI(17) | FMT_D | LO(0))
+#define ABS_fmt        (HI(17) | FMT_SD | LO(5))
+#define ADD_fmt        (HI(17) | FMT_SD | LO(0))
 #define ADDU        (HI(0) | LO(33))
 #define ADDIU        (HI(9))
 #define AND        (HI(0) | LO(36))
@@ -106,13 +107,14 @@
 #define BLTZ        (HI(1) | (0 << 16))
 #define BNE        (HI(5))
 #define BREAK        (HI(0) | LO(13))
-#define C_UN_D        (HI(17) | FMT_D | LO(49))
-#define C_UEQ_D        (HI(17) | FMT_D | LO(51))
-#define C_ULE_D        (HI(17) | FMT_D | LO(55))
-#define C_ULT_D        (HI(17) | FMT_D | LO(53))
+#define CFC1        (HI(17) | (2 << 21))
+#define C_UN_fmt    (HI(17) | FMT_SD | LO(49))
+#define C_UEQ_fmt    (HI(17) | FMT_SD | LO(51))
+#define C_ULE_fmt    (HI(17) | FMT_SD | LO(55))
+#define C_ULT_fmt    (HI(17) | FMT_SD | LO(53))
 #define DIV        (HI(0) | LO(26))
 #define DIVU        (HI(0) | LO(27))
-#define DIV_D        (HI(17) | FMT_D | LO(3))
+#define DIV_fmt        (HI(17) | FMT_SD | LO(3))
 #define J        (HI(2))
 #define JAL        (HI(3))
 #define JALR        (HI(0) | LO(9))
@@ -120,16 +122,15 @@
 #define LD        (HI(55))
 #define LUI        (HI(15))
 #define LW        (HI(35))
-#define NEG_D        (HI(17) | FMT_D | LO(7))
 #define MFHI        (HI(0) | LO(16))
 #define MFLO        (HI(0) | LO(18))
-#define MOV_D        (HI(17) | FMT_D | LO(6))
-#define CFC1        (HI(17) | (2 << 21))
+#define MOV_fmt        (HI(17) | FMT_SD | LO(6))
 #define MOVN        (HI(0) | LO(11))
 #define MOVZ        (HI(0) | LO(10))
-#define MUL_D        (HI(17) | FMT_D | LO(2))
+#define MUL_fmt        (HI(17) | FMT_SD | LO(2))
 #define MULT        (HI(0) | LO(24))
 #define MULTU        (HI(0) | LO(25))
+#define NEG_fmt        (HI(17) | FMT_SD | LO(7))
 #define NOP        (HI(0) | LO(0))
 #define NOR        (HI(0) | LO(39))
 #define OR        (HI(0) | LO(37))
@@ -145,7 +146,7 @@
 #define SRLV        (HI(0) | LO(6))
 #define SRA        (HI(0) | LO(3))
 #define SRAV        (HI(0) | LO(7))
-#define SUB_D        (HI(17) | FMT_D | LO(1))
+#define SUB_fmt        (HI(17) | FMT_SD | LO(1))
 #define SUBU        (HI(0) | LO(35))
 #define SW        (HI(43))
 #define XOR        (HI(0) | LO(38))
@@ -176,7 +177,7 @@


 /* dest_reg is the absolute name of the register
    Useful for reordering instructions in the delay slot. */
-static int push_inst(struct sljit_compiler *compiler, sljit_ins ins, int delay_slot)
+static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_si delay_slot)
 {
     SLJIT_ASSERT(delay_slot == MOVABLE_INS || delay_slot >= UNMOVABLE_INS
         || delay_slot == ((ins >> 11) & 0x1f) || delay_slot == ((ins >> 16) & 0x1f));
@@ -188,14 +189,14 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE sljit_ins invert_branch(int flags)
+static SLJIT_INLINE sljit_ins invert_branch(sljit_si flags)
 {
     return (flags & IS_BIT26_COND) ? (1 << 26) : (1 << 16);
 }


 static SLJIT_INLINE sljit_ins* optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
 {
-    sljit_w diff;
+    sljit_sw diff;
     sljit_uw target_addr;
     sljit_ins *inst;
     sljit_ins saved_inst;
@@ -215,7 +216,7 @@


     /* B instructions. */
     if (jump->flags & IS_MOVABLE) {
-        diff = ((sljit_w)target_addr - (sljit_w)(inst)) >> 2;
+        diff = ((sljit_sw)target_addr - (sljit_sw)(inst)) >> 2;
         if (diff <= SIMM_MAX && diff >= SIMM_MIN) {
             jump->flags |= PATCH_B;


@@ -233,7 +234,7 @@
         }
     }


-    diff = ((sljit_w)target_addr - (sljit_w)(inst + 1)) >> 2;
+    diff = ((sljit_sw)target_addr - (sljit_sw)(inst + 1)) >> 2;
     if (diff <= SIMM_MAX && diff >= SIMM_MIN) {
         jump->flags |= PATCH_B;


@@ -361,7 +362,7 @@
     SLJIT_ASSERT(!label);
     SLJIT_ASSERT(!jump);
     SLJIT_ASSERT(!const_);
-    SLJIT_ASSERT(code_ptr - code <= (int)compiler->size);
+    SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);


     jump = compiler->jumps;
     while (jump) {
@@ -370,8 +371,8 @@
             buf_ptr = (sljit_ins*)jump->addr;


             if (jump->flags & PATCH_B) {
-                addr = (sljit_w)(addr - (jump->addr + sizeof(sljit_ins))) >> 2;
-                SLJIT_ASSERT((sljit_w)addr <= SIMM_MAX && (sljit_w)addr >= SIMM_MIN);
+                addr = (sljit_sw)(addr - (jump->addr + sizeof(sljit_ins))) >> 2;
+                SLJIT_ASSERT((sljit_sw)addr <= SIMM_MAX && (sljit_sw)addr >= SIMM_MIN);
                 buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | (addr & 0xffff);
                 break;
             }
@@ -453,7 +454,7 @@
 #include "sljitNativeMIPS_64.c"
 #endif


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     sljit_ins base;


@@ -466,7 +467,7 @@
     compiler->logical_local_size = local_size;
 #endif


-    local_size += (saveds + 1 + 4) * sizeof(sljit_w);
+    local_size += (saveds + 1 + 4) * sizeof(sljit_sw);
     local_size = (local_size + 15) & ~0xf;
     compiler->local_size = local_size;


@@ -483,17 +484,17 @@
         local_size = 0;
     }


-    FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (int)sizeof(sljit_w)), MOVABLE_INS));
+    FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));
     if (saveds >= 1)
-        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 2 * (int)sizeof(sljit_w)), MOVABLE_INS));
+        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 2 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));
     if (saveds >= 2)
-        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 3 * (int)sizeof(sljit_w)), MOVABLE_INS));
+        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 3 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));
     if (saveds >= 3)
-        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 4 * (int)sizeof(sljit_w)), MOVABLE_INS));
+        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 4 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));
     if (saveds >= 4)
-        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 5 * (int)sizeof(sljit_w)), MOVABLE_INS));
+        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 5 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));
     if (saveds >= 5)
-        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 6 * (int)sizeof(sljit_w)), MOVABLE_INS));
+        FAIL_IF(push_inst(compiler, STACK_STORE | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 6 * (sljit_si)sizeof(sljit_sw)), MOVABLE_INS));


     if (args >= 1)
         FAIL_IF(push_inst(compiler, ADDU_W | SA(4) | TA(0) | D(SLJIT_SAVED_REG1), DR(SLJIT_SAVED_REG1)));
@@ -505,7 +506,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -516,13 +517,13 @@
     compiler->logical_local_size = local_size;
 #endif


-    local_size += (saveds + 1 + 4) * sizeof(sljit_w);
+    local_size += (saveds + 1 + 4) * sizeof(sljit_sw);
     compiler->local_size = (local_size + 15) & ~0xf;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
-    int local_size;
+    sljit_si local_size;
     sljit_ins base;


     CHECK_ERROR();
@@ -540,17 +541,17 @@
         local_size = 0;
     }


-    FAIL_IF(push_inst(compiler, STACK_LOAD | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (int)sizeof(sljit_w)), RETURN_ADDR_REG));
+    FAIL_IF(push_inst(compiler, STACK_LOAD | base | TA(RETURN_ADDR_REG) | IMM(local_size - 1 * (sljit_si)sizeof(sljit_sw)), RETURN_ADDR_REG));
     if (compiler->saveds >= 5)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 6 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_EREG2)));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG2) | IMM(local_size - 6 * (sljit_si)sizeof(sljit_sw)), DR(SLJIT_SAVED_EREG2)));
     if (compiler->saveds >= 4)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 5 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_EREG1)));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_EREG1) | IMM(local_size - 5 * (sljit_si)sizeof(sljit_sw)), DR(SLJIT_SAVED_EREG1)));
     if (compiler->saveds >= 3)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 4 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG3)));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG3) | IMM(local_size - 4 * (sljit_si)sizeof(sljit_sw)), DR(SLJIT_SAVED_REG3)));
     if (compiler->saveds >= 2)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 3 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG2)));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG2) | IMM(local_size - 3 * (sljit_si)sizeof(sljit_sw)), DR(SLJIT_SAVED_REG2)));
     if (compiler->saveds >= 1)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 2 * (int)sizeof(sljit_w)), DR(SLJIT_SAVED_REG1)));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(SLJIT_SAVED_REG1) | IMM(local_size - 2 * (sljit_si)sizeof(sljit_sw)), DR(SLJIT_SAVED_REG1)));


     FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS));
     if (compiler->local_size <= SIMM_MAX)
@@ -572,7 +573,7 @@
 #define ARCH_32_64(a, b)    b
 #endif


-static SLJIT_CONST sljit_ins data_transfer_insts[16 + 2] = {
+static SLJIT_CONST sljit_ins data_transfer_insts[16 + 4] = {
/* u w s */ ARCH_32_64(HI(43) /* sw */, HI(63) /* sd */),
/* u w l */ ARCH_32_64(HI(35) /* lw */, HI(55) /* ld */),
/* u b s */ HI(40) /* sb */,
@@ -593,6 +594,8 @@

/* d s */ HI(61) /* sdc1 */,
/* d l */ HI(53) /* ldc1 */,
+/* s s */ HI(57) /* swc1 */,
+/* s l */ HI(49) /* lwc1 */,
};

#undef ARCH_32_64
@@ -600,7 +603,7 @@
/* reg_ar is an absoulute register! */

 /* Can perform an operation using at most 1 instruction. */
-static int getput_arg_fast(struct sljit_compiler *compiler, int flags, int reg_ar, int arg, sljit_w argw)
+static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg_ar, sljit_si arg, sljit_sw argw)
 {
     SLJIT_ASSERT(arg & SLJIT_MEM);


@@ -618,7 +621,7 @@
 /* See getput_arg below.
    Note: can_cache is called only for binary operators. Those
    operators always uses word arguments without write back. */
-static int can_cache(int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
     SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));


@@ -641,9 +644,9 @@
}

 /* Emit the necessary instructions. See can_cache above. */
-static int getput_arg(struct sljit_compiler *compiler, int flags, int reg_ar, int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg_ar, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
-    int tmp_ar, base, delay_slot;
+    sljit_si tmp_ar, base, delay_slot;


     SLJIT_ASSERT(arg & SLJIT_MEM);
     if (!(next_arg & SLJIT_MEM)) {
@@ -780,7 +783,7 @@
     return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | SA(tmp_ar) | TA(reg_ar), delay_slot);
 }


-static SLJIT_INLINE int emit_op_mem(struct sljit_compiler *compiler, int flags, int reg_ar, int arg, sljit_w argw)
+static SLJIT_INLINE sljit_si emit_op_mem(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg_ar, sljit_si arg, sljit_sw argw)
 {
     if (getput_arg_fast(compiler, flags, reg_ar, arg, argw))
         return compiler->error;
@@ -789,26 +792,26 @@
     return getput_arg(compiler, flags, reg_ar, arg, argw, 0, 0);
 }


-static SLJIT_INLINE int emit_op_mem2(struct sljit_compiler *compiler, int flags, int reg, int arg1, sljit_w arg1w, int arg2, sljit_w arg2w)
+static SLJIT_INLINE sljit_si emit_op_mem2(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg1, sljit_sw arg1w, sljit_si arg2, sljit_sw arg2w)
 {
     if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
         return compiler->error;
     return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
 }


-static int emit_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* arg1 goes to TMP_REG1 or src reg
        arg2 goes to TMP_REG2, imm or src reg
        TMP_REG3 can be used for caching
        result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
-    int dst_r = TMP_REG2;
-    int src1_r;
-    sljit_w src2_r = 0;
-    int sugg_src2_r = TMP_REG2;
+    sljit_si dst_r = TMP_REG2;
+    sljit_si src1_r;
+    sljit_sw src2_r = 0;
+    sljit_si sugg_src2_r = TMP_REG2;


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
@@ -926,7 +929,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     CHECK_ERROR();
     check_sljit_emit_op0(compiler, op);
@@ -956,9 +959,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
     #define flags 0
@@ -984,13 +987,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, flags | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOV_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOV_UH:
         return emit_op(compiler, SLJIT_MOV_UH, flags | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOV_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_MOVU:
     case SLJIT_MOVU_P:
@@ -1006,13 +1009,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, flags | BYTE_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOVU_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOVU_UH:
         return emit_op(compiler, SLJIT_MOV_UH, flags | HALF_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOVU_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_NOT:
         return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);
@@ -1030,10 +1033,10 @@
 #endif
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
     #define flags 0
@@ -1080,14 +1083,14 @@
 #endif
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     CHECK_ERROR();
     check_sljit_emit_op_custom(compiler, instruction, size);
@@ -1100,13 +1103,13 @@
 /*  Floating point operators                                             */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
 #if (defined SLJIT_QEMU && SLJIT_QEMU)
     /* Qemu says fir is 0 by default. */
     return 1;
 #elif defined(__GNUC__)
-    sljit_w fir;
+    sljit_sw fir;
     asm ("cfc1 %0, $0" : "=r"(fir));
     return (fir >> 22) & 0x1;
 #else
@@ -1114,28 +1117,32 @@
 #endif
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_SINGLE_OP) >> 7))
+#define FMT(op) (((op & SLJIT_SINGLE_OP) ^ SLJIT_SINGLE_OP) << (21 - 8))
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_fr;
+    sljit_si dst_fr;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
+    SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
-        if (dst > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
+        if (dst > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
             dst = TMP_FREG1;
         }
         else
             dst <<= 1;


-        if (src > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
+        if (src > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
             src = TMP_FREG2;
         }
         else
@@ -1143,62 +1150,62 @@


         /* src and dst are swapped. */
         if (op & SLJIT_SET_E) {
-            FAIL_IF(push_inst(compiler, C_UEQ_D | FT(src) | FS(dst), UNMOVABLE_INS));
+            FAIL_IF(push_inst(compiler, C_UEQ_fmt | FMT(op) | FT(src) | FS(dst), UNMOVABLE_INS));
             FAIL_IF(push_inst(compiler, CFC1 | TA(EQUAL_FLAG) | DA(FCSR_REG), EQUAL_FLAG));
             FAIL_IF(push_inst(compiler, SRL | TA(EQUAL_FLAG) | DA(EQUAL_FLAG) | SH_IMM(23), EQUAL_FLAG));
             FAIL_IF(push_inst(compiler, ANDI | SA(EQUAL_FLAG) | TA(EQUAL_FLAG) | IMM(1), EQUAL_FLAG));
         }
         if (op & SLJIT_SET_S) {
             /* Mixing the instructions for the two checks. */
-            FAIL_IF(push_inst(compiler, C_ULT_D | FT(src) | FS(dst), UNMOVABLE_INS));
+            FAIL_IF(push_inst(compiler, C_ULT_fmt | FMT(op) | FT(src) | FS(dst), UNMOVABLE_INS));
             FAIL_IF(push_inst(compiler, CFC1 | TA(ULESS_FLAG) | DA(FCSR_REG), ULESS_FLAG));
-            FAIL_IF(push_inst(compiler, C_ULT_D | FT(dst) | FS(src), UNMOVABLE_INS));
+            FAIL_IF(push_inst(compiler, C_ULT_fmt | FMT(op) | FT(dst) | FS(src), UNMOVABLE_INS));
             FAIL_IF(push_inst(compiler, SRL | TA(ULESS_FLAG) | DA(ULESS_FLAG) | SH_IMM(23), ULESS_FLAG));
             FAIL_IF(push_inst(compiler, ANDI | SA(ULESS_FLAG) | TA(ULESS_FLAG) | IMM(1), ULESS_FLAG));
             FAIL_IF(push_inst(compiler, CFC1 | TA(UGREATER_FLAG) | DA(FCSR_REG), UGREATER_FLAG));
             FAIL_IF(push_inst(compiler, SRL | TA(UGREATER_FLAG) | DA(UGREATER_FLAG) | SH_IMM(23), UGREATER_FLAG));
             FAIL_IF(push_inst(compiler, ANDI | SA(UGREATER_FLAG) | TA(UGREATER_FLAG) | IMM(1), UGREATER_FLAG));
         }
-        return push_inst(compiler, C_UN_D | FT(src) | FS(dst), FCSR_FCC);
+        return push_inst(compiler, C_UN_fmt | FMT(op) | FT(src) | FS(dst), FCSR_FCC);
     }


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG1 : (dst << 1);
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : (dst << 1);


-    if (src > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
+    if (src > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
         src = dst_fr;
     }
     else
         src <<= 1;


-    switch (op) {
-        case SLJIT_FMOV:
+    switch (GET_OPCODE(op)) {
+        case SLJIT_MOVD:
             if (src != dst_fr && dst_fr != TMP_FREG1)
-                FAIL_IF(push_inst(compiler, MOV_D | FS(src) | FD(dst_fr), MOVABLE_INS));
+                FAIL_IF(push_inst(compiler, MOV_fmt | FMT(op) | FS(src) | FD(dst_fr), MOVABLE_INS));
             break;
-        case SLJIT_FNEG:
-            FAIL_IF(push_inst(compiler, NEG_D | FS(src) | FD(dst_fr), MOVABLE_INS));
+        case SLJIT_NEGD:
+            FAIL_IF(push_inst(compiler, NEG_fmt | FMT(op) | FS(src) | FD(dst_fr), MOVABLE_INS));
             break;
-        case SLJIT_FABS:
-            FAIL_IF(push_inst(compiler, ABS_D | FS(src) | FD(dst_fr), MOVABLE_INS));
+        case SLJIT_ABSD:
+            FAIL_IF(push_inst(compiler, ABS_fmt | FMT(op) | FS(src) | FD(dst_fr), MOVABLE_INS));
             break;
     }


     if (dst_fr == TMP_FREG1) {
-        if (op == SLJIT_FMOV)
+        if (GET_OPCODE(op) == SLJIT_MOVD)
             dst_fr = src;
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, dst_fr, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), dst_fr, dst, dstw, 0, 0));
     }


     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_fr, flags = 0;
+    sljit_si dst_fr, flags = 0;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1206,10 +1213,10 @@
     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG2 : (dst << 1);
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG2 : (dst << 1);


-    if (src1 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w)) {
+    if (src1 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
             FAIL_IF(compiler->error);
             src1 = TMP_FREG1;
         } else
@@ -1218,8 +1225,8 @@
     else
         src1 <<= 1;


-    if (src2 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w)) {
+    if (src2 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
             FAIL_IF(compiler->error);
             src2 = TMP_FREG2;
         } else
@@ -1230,44 +1237,44 @@


     if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
         if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
         }
         else {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
         }
     }
     else if (flags & SLOW_SRC1)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
     else if (flags & SLOW_SRC2)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));


     if (flags & SLOW_SRC1)
         src1 = TMP_FREG1;
     if (flags & SLOW_SRC2)
         src2 = TMP_FREG2;


-    switch (op) {
-    case SLJIT_FADD:
-        FAIL_IF(push_inst(compiler, ADD_D | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_ADDD:
+        FAIL_IF(push_inst(compiler, ADD_fmt | FMT(op) | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
         break;


-    case SLJIT_FSUB:
-        FAIL_IF(push_inst(compiler, SUB_D | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
+    case SLJIT_SUBD:
+        FAIL_IF(push_inst(compiler, SUB_fmt | FMT(op) | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
         break;


-    case SLJIT_FMUL:
-        FAIL_IF(push_inst(compiler, MUL_D | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
+    case SLJIT_MULD:
+        FAIL_IF(push_inst(compiler, MUL_fmt | FMT(op) | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
         break;


-    case SLJIT_FDIV:
-        FAIL_IF(push_inst(compiler, DIV_D | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
+    case SLJIT_DIVD:
+        FAIL_IF(push_inst(compiler, DIV_fmt | FMT(op) | FT(src2) | FS(src1) | FD(dst_fr), MOVABLE_INS));
         break;
     }


     if (dst_fr == TMP_FREG2)
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, TMP_FREG2, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));


     return SLJIT_SUCCESS;
 }
@@ -1276,7 +1283,7 @@
 /*  Other instructions                                                   */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_enter(compiler, dst, dstw);
@@ -1291,7 +1298,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_return(compiler, src, srcw);
@@ -1355,12 +1362,12 @@
     flags = IS_BIT16_COND; \
     delay_check = FCSR_FCC;


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     struct sljit_jump *jump;
     sljit_ins inst;
-    int flags = 0;
-    int delay_check = UNMOVABLE_INS;
+    sljit_si flags = 0;
+    sljit_si delay_check = UNMOVABLE_INS;


     CHECK_ERROR_PTR();
     check_sljit_emit_jump(compiler, type);
@@ -1471,12 +1478,12 @@
             src2 = 0; \
     }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     struct sljit_jump *jump;
-    int flags;
+    sljit_si flags;
     sljit_ins inst;


     CHECK_ERROR_PTR();
@@ -1592,13 +1599,13 @@
 #undef RESOLVE_IMM1
 #undef RESOLVE_IMM2


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, sljit_si type,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     struct sljit_jump *jump;
     sljit_ins inst;
-    int if_true;
+    sljit_si if_true;


     CHECK_ERROR_PTR();
     check_sljit_emit_fcmp(compiler, type, src1, src1w, src2, src2w);
@@ -1606,15 +1613,15 @@
     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    if (src1 > SLJIT_FLOAT_REG4) {
-        PTR_FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+    if (src1 > SLJIT_FLOAT_REG6) {
+        PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
         src1 = TMP_FREG1;
     }
     else
         src1 <<= 1;


-    if (src2 > SLJIT_FLOAT_REG4) {
-        PTR_FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));
+    if (src2 > SLJIT_FLOAT_REG6) {
+        PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));
         src2 = TMP_FREG2;
     }
     else
@@ -1624,45 +1631,44 @@
     PTR_FAIL_IF(!jump);
     set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
     jump->flags |= IS_BIT16_COND;
-    type &= 0xff;


-    switch (type) {
+    switch (type & 0xff) {
     case SLJIT_C_FLOAT_EQUAL:
-        inst = C_UEQ_D;
+        inst = C_UEQ_fmt;
         if_true = 1;
         break;
     case SLJIT_C_FLOAT_NOT_EQUAL:
-        inst = C_UEQ_D;
+        inst = C_UEQ_fmt;
         if_true = 0;
         break;
     case SLJIT_C_FLOAT_LESS:
-        inst = C_ULT_D;
+        inst = C_ULT_fmt;
         if_true = 1;
         break;
     case SLJIT_C_FLOAT_GREATER_EQUAL:
-        inst = C_ULT_D;
+        inst = C_ULT_fmt;
         if_true = 0;
         break;
     case SLJIT_C_FLOAT_GREATER:
-        inst = C_ULE_D;
+        inst = C_ULE_fmt;
         if_true = 0;
         break;
     case SLJIT_C_FLOAT_LESS_EQUAL:
-        inst = C_ULE_D;
+        inst = C_ULE_fmt;
         if_true = 1;
         break;
     case SLJIT_C_FLOAT_UNORDERED:
-        inst = C_UN_D;
+        inst = C_UN_fmt;
         if_true = 1;
         break;
     case SLJIT_C_FLOAT_ORDERED:
     default: /* Make compilers happy. */
-        inst = C_UN_D;
+        inst = C_UN_fmt;
         if_true = 0;
         break;
     }


-    PTR_FAIL_IF(push_inst(compiler, inst | FT(src2) | FS(src1), UNMOVABLE_INS));
+    PTR_FAIL_IF(push_inst(compiler, inst | FMT(type) | FT(src2) | FS(src1), UNMOVABLE_INS));
     /* Intentionally the other opcode. */
     PTR_FAIL_IF(push_inst(compiler, (if_true ? BC1F : BC1T) | JUMP_LENGTH, UNMOVABLE_INS));
     PTR_FAIL_IF(emit_const(compiler, TMP_REG2, 0));
@@ -1678,9 +1684,12 @@
 #undef BR_T
 #undef BR_F


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+#undef FLOAT_DATA
+#undef FMT
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
-    int src_r = TMP_REG2;
+    sljit_si src_r = TMP_REG2;
     struct sljit_jump *jump = NULL;


     CHECK_ERROR();
@@ -1736,9 +1745,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
-    int sugg_dst_ar, dst_ar;
+    sljit_si sugg_dst_ar, dst_ar;


     CHECK_ERROR();
     check_sljit_emit_cond_value(compiler, op, dst, dstw, type);
@@ -1823,10 +1832,10 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     struct sljit_const *const_;
-    int reg;
+    sljit_si reg;


     CHECK_ERROR_PTR();
     check_sljit_emit_const(compiler, dst, dstw, init_value);


Modified: code/trunk/sljit/sljitNativePPC_32.c
===================================================================
--- code/trunk/sljit/sljitNativePPC_32.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativePPC_32.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -26,7 +26,7 @@


/* ppc 32-bit arch dependent functions. */

-static int load_immediate(struct sljit_compiler *compiler, int reg, sljit_w imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si reg, sljit_sw imm)
 {
     if (imm <= SIMM_MAX && imm >= SIMM_MIN)
         return push_inst(compiler, ADDI | D(reg) | A(0) | IMM(imm));
@@ -41,8 +41,8 @@
 #define INS_CLEAR_LEFT(dst, src, from) \
     (RLWINM | S(src) | A(dst) | ((from) << 6) | (31 << 1))


-static SLJIT_INLINE int emit_single_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, int src1, int src2)
+static SLJIT_INLINE sljit_si emit_single_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_si src1, sljit_si src2)
 {
     switch (op) {
     case SLJIT_MOV:
@@ -120,7 +120,7 @@


     case SLJIT_ADDC:
         if (flags & ALT_FORM1) {
-            FAIL_IF(push_inst(compiler, MFXER | S(0)));
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
             FAIL_IF(push_inst(compiler, ADDE | D(dst) | A(src1) | B(src2)));
             return push_inst(compiler, MTXER | S(0));
         }
@@ -155,7 +155,7 @@


     case SLJIT_SUBC:
         if (flags & ALT_FORM1) {
-            FAIL_IF(push_inst(compiler, MFXER | S(0)));
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
             FAIL_IF(push_inst(compiler, SUBFE | D(dst) | A(src2) | B(src1)));
             return push_inst(compiler, MTXER | S(0));
         }
@@ -228,19 +228,23 @@
         return push_inst(compiler, SRW | RC(flags) | S(src1) | A(dst) | B(src2));


     case SLJIT_ASHR:
+        if (flags & ALT_FORM3)
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
         if (flags & ALT_FORM1) {
             SLJIT_ASSERT(src2 == TMP_REG2);
             compiler->imm &= 0x1f;
-            return push_inst(compiler, SRAWI | RC(flags) | S(src1) | A(dst) | (compiler->imm << 11));
+            FAIL_IF(push_inst(compiler, SRAWI | RC(flags) | S(src1) | A(dst) | (compiler->imm << 11)));
         }
-        return push_inst(compiler, SRAW | RC(flags) | S(src1) | A(dst) | B(src2));
+        else
+            FAIL_IF(push_inst(compiler, SRAW | RC(flags) | S(src1) | A(dst) | B(src2)));
+        return (flags & ALT_FORM3) ? push_inst(compiler, MTXER | S(0)) : SLJIT_SUCCESS;
     }


     SLJIT_ASSERT_STOP();
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_const(struct sljit_compiler *compiler, int reg, sljit_w init_value)
+static SLJIT_INLINE sljit_si emit_const(struct sljit_compiler *compiler, sljit_si reg, sljit_sw init_value)
 {
     FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(init_value >> 16)));
     return push_inst(compiler, ORI | S(reg) | A(reg) | IMM(init_value));
@@ -255,7 +259,7 @@
     SLJIT_CACHE_FLUSH(inst, inst + 2);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     sljit_ins *inst = (sljit_ins*)addr;



Modified: code/trunk/sljit/sljitNativePPC_64.c
===================================================================
--- code/trunk/sljit/sljitNativePPC_64.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativePPC_64.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -41,7 +41,7 @@
 #define PUSH_RLDICR(reg, shift) \
     push_inst(compiler, RLDI(reg, reg, 63 - shift, shift, 1))


-static int load_immediate(struct sljit_compiler *compiler, int reg, sljit_w imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si reg, sljit_sw imm)
 {
     sljit_uw tmp;
     sljit_uw shift;
@@ -145,8 +145,8 @@
         src1 = TMP_REG1; \
     }


-static SLJIT_INLINE int emit_single_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, int src1, int src2)
+static SLJIT_INLINE sljit_si emit_single_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_si src1, sljit_si src2)
 {
     switch (op) {
     case SLJIT_MOV:
@@ -241,7 +241,7 @@


     case SLJIT_ADDC:
         if (flags & ALT_FORM1) {
-            FAIL_IF(push_inst(compiler, MFXER | S(0)));
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
             FAIL_IF(push_inst(compiler, ADDE | D(dst) | A(src1) | B(src2)));
             return push_inst(compiler, MTXER | S(0));
         }
@@ -278,7 +278,7 @@


     case SLJIT_SUBC:
         if (flags & ALT_FORM1) {
-            FAIL_IF(push_inst(compiler, MFXER | S(0)));
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
             FAIL_IF(push_inst(compiler, SUBFE | D(dst) | A(src2) | B(src1)));
             return push_inst(compiler, MTXER | S(0));
         }
@@ -350,9 +350,7 @@
                 return push_inst(compiler, RLDI(dst, src1, compiler->imm, 63 - compiler->imm, 1) | RC(flags));
             }
         }
-        if (flags & ALT_FORM2)
-            return push_inst(compiler, SLW | RC(flags) | S(src1) | A(dst) | B(src2));
-        return push_inst(compiler, SLD | RC(flags) | S(src1) | A(dst) | B(src2));
+        return push_inst(compiler, ((flags & ALT_FORM2) ? SLW : SLD) | RC(flags) | S(src1) | A(dst) | B(src2));


     case SLJIT_LSHR:
         if (flags & ALT_FORM1) {
@@ -366,32 +364,32 @@
                 return push_inst(compiler, RLDI(dst, src1, 64 - compiler->imm, compiler->imm, 0) | RC(flags));
             }
         }
-        if (flags & ALT_FORM2)
-            return push_inst(compiler, SRW | RC(flags) | S(src1) | A(dst) | B(src2));
-        return push_inst(compiler, SRD | RC(flags) | S(src1) | A(dst) | B(src2));
+        return push_inst(compiler, ((flags & ALT_FORM2) ? SRW : SRD) | RC(flags) | S(src1) | A(dst) | B(src2));


     case SLJIT_ASHR:
+        if (flags & ALT_FORM3)
+            FAIL_IF(push_inst(compiler, MFXER | D(0)));
         if (flags & ALT_FORM1) {
             SLJIT_ASSERT(src2 == TMP_REG2);
             if (flags & ALT_FORM2) {
                 compiler->imm &= 0x1f;
-                return push_inst(compiler, SRAWI | RC(flags) | S(src1) | A(dst) | (compiler->imm << 11));
+                FAIL_IF(push_inst(compiler, SRAWI | RC(flags) | S(src1) | A(dst) | (compiler->imm << 11)));
             }
             else {
                 compiler->imm &= 0x3f;
-                return push_inst(compiler, SRADI | RC(flags) | S(src1) | A(dst) | ((compiler->imm & 0x1f) << 11) | ((compiler->imm & 0x20) >> 4));
+                FAIL_IF(push_inst(compiler, SRADI | RC(flags) | S(src1) | A(dst) | ((compiler->imm & 0x1f) << 11) | ((compiler->imm & 0x20) >> 4)));
             }
         }
-        if (flags & ALT_FORM2)
-            return push_inst(compiler, SRAW | RC(flags) | S(src1) | A(dst) | B(src2));
-        return push_inst(compiler, SRAD | RC(flags) | S(src1) | A(dst) | B(src2));
+        else
+            FAIL_IF(push_inst(compiler, ((flags & ALT_FORM2) ? SRAW : SRAD) | RC(flags) | S(src1) | A(dst) | B(src2)));
+        return (flags & ALT_FORM3) ? push_inst(compiler, MTXER | S(0)) : SLJIT_SUCCESS;
     }


     SLJIT_ASSERT_STOP();
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_const(struct sljit_compiler *compiler, int reg, sljit_w init_value)
+static SLJIT_INLINE sljit_si emit_const(struct sljit_compiler *compiler, sljit_si reg, sljit_sw init_value)
 {
     FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(init_value >> 48)));
     FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | IMM(init_value >> 32)));
@@ -411,7 +409,7 @@
     SLJIT_CACHE_FLUSH(inst, inst + 5);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     sljit_ins *inst = (sljit_ins*)addr;



Modified: code/trunk/sljit/sljitNativePPC_common.c
===================================================================
--- code/trunk/sljit/sljitNativePPC_common.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativePPC_common.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -83,8 +83,8 @@
 #define TMP_REG3    (SLJIT_NO_REGISTERS + 3)
 #define ZERO_REG    (SLJIT_NO_REGISTERS + 4)


-#define TMP_FREG1    (SLJIT_FLOAT_REG4 + 1)
-#define TMP_FREG2    (SLJIT_FLOAT_REG4 + 2)
+#define TMP_FREG1    (0)
+#define TMP_FREG2    (SLJIT_FLOAT_REG6 + 1)


 static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 5] = {
     0, 3, 4, 5, 6, 7, 30, 29, 28, 27, 26, 1, 8, 9, 10, 31
@@ -143,12 +143,16 @@
 #define EXTSW        (HI(31) | LO(986))
 #define FABS        (HI(63) | LO(264))
 #define FADD        (HI(63) | LO(21))
+#define FADDS        (HI(59) | LO(21))
 #define FCMPU        (HI(63) | LO(0))
 #define FDIV        (HI(63) | LO(18))
+#define FDIVS        (HI(59) | LO(18))
 #define FMR        (HI(63) | LO(72))
 #define FMUL        (HI(63) | LO(25))
+#define FMULS        (HI(59) | LO(25))
 #define FNEG        (HI(63) | LO(40))
 #define FSUB        (HI(63) | LO(20))
+#define FSUBS        (HI(59) | LO(20))
 #define LD        (HI(58) | 0)
 #define LWZ        (HI(32))
 #define MFCR        (HI(31) | LO(19))
@@ -199,19 +203,19 @@
 #define UIMM_MAX    (0xffff)


 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_w addr, void* func)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func)
 {
-    sljit_w* ptrs;
+    sljit_sw* ptrs;
     if (func_ptr)
         *func_ptr = (void*)context;
-    ptrs = (sljit_w*)func;
+    ptrs = (sljit_sw*)func;
     context->addr = addr ? addr : ptrs[0];
     context->r2 = ptrs[1];
     context->r11 = ptrs[2];
 }
 #endif


-static int push_inst(struct sljit_compiler *compiler, sljit_ins ins)
+static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins)
 {
     sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
     FAIL_IF(!ptr);
@@ -220,9 +224,9 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
+static SLJIT_INLINE sljit_si optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
 {
-    sljit_w diff;
+    sljit_sw diff;
     sljit_uw target_addr;


     if (jump->flags & SLJIT_REWRITABLE_JUMP)
@@ -234,7 +238,7 @@
         SLJIT_ASSERT(jump->flags & JUMP_LABEL);
         target_addr = (sljit_uw)(code + jump->u.label->size);
     }
-    diff = ((sljit_w)target_addr - (sljit_w)(code_ptr)) & ~0x3l;
+    diff = ((sljit_sw)target_addr - (sljit_sw)(code_ptr)) & ~0x3l;


     if (jump->flags & UNCOND_B) {
         if (diff <= 0x01ffffff && diff >= -0x02000000) {
@@ -347,9 +351,9 @@
     SLJIT_ASSERT(!jump);
     SLJIT_ASSERT(!const_);
 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-    SLJIT_ASSERT(code_ptr - code <= (int)compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins)));
+    SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins)));
 #else
-    SLJIT_ASSERT(code_ptr - code <= (int)compiler->size);
+    SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size);
 #endif


     jump = compiler->jumps;
@@ -361,7 +365,7 @@
                 if (jump->flags & UNCOND_B) {
                     if (!(jump->flags & ABSOLUTE_B)) {
                         addr = addr - jump->addr;
-                        SLJIT_ASSERT((sljit_w)addr <= 0x01ffffff && (sljit_w)addr >= -0x02000000);
+                        SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000);
                         *buf_ptr = Bx | (addr & 0x03fffffc) | ((*buf_ptr) & 0x1);
                     }
                     else {
@@ -372,7 +376,7 @@
                 else {
                     if (!(jump->flags & ABSOLUTE_B)) {
                         addr = addr - jump->addr;
-                        SLJIT_ASSERT((sljit_w)addr <= 0x7fff && (sljit_w)addr >= -0x8000);
+                        SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000);
                         *buf_ptr = BCx | (addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001);
                     }
                     else {
@@ -404,12 +408,12 @@


 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-    if (((sljit_w)code_ptr) & 0x4)
+    if (((sljit_sw)code_ptr) & 0x4)
         code_ptr++;
-    sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_w)code, (void*)sljit_generate_code);
+    sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code);
     return code_ptr;
 #else
-    sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_w)code, (void*)sljit_generate_code);
+    sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code);
     return code_ptr;
 #endif
 #else
@@ -481,7 +485,7 @@
 #define STACK_LOAD    LD
 #endif


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     CHECK_ERROR();
     check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
@@ -493,18 +497,18 @@
 #endif


     FAIL_IF(push_inst(compiler, MFLR | D(0)));
-    FAIL_IF(push_inst(compiler, STACK_STORE | S(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(int)(sizeof(sljit_w))) ));
+    FAIL_IF(push_inst(compiler, STACK_STORE | S(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(sljit_si)(sizeof(sljit_sw))) ));
     if (saveds >= 1)
-        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (sljit_si)(sizeof(sljit_sw))) ));
     if (saveds >= 2)
-        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (sljit_si)(sizeof(sljit_sw))) ));
     if (saveds >= 3)
-        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (sljit_si)(sizeof(sljit_sw))) ));
     if (saveds >= 4)
-        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (int)(sizeof(sljit_w))) ));
+        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 * (int)(sizeof(sljit_w))) ));
-    FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_w)) ));
+        FAIL_IF(push_inst(compiler, STACK_STORE | S(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (sljit_si)(sizeof(sljit_sw))) ));
+    FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw)) ));


     FAIL_IF(push_inst(compiler, ADDI | D(ZERO_REG) | A(0) | 0));
     if (args >= 1)
@@ -515,9 +519,9 @@
         FAIL_IF(push_inst(compiler, OR | S(SLJIT_TEMPORARY_REG3) | A(SLJIT_SAVED_REG3) | B(SLJIT_TEMPORARY_REG3)));


 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-    compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_w) + local_size;
+    compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
 #else
-    compiler->local_size = (1 + saveds + 2) * sizeof(sljit_w) + local_size;
+    compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
 #endif
     compiler->local_size = (compiler->local_size + 15) & ~0xf;


@@ -540,7 +544,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -552,14 +556,14 @@
 #endif


 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
-    compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_w) + local_size;
+    compiler->local_size = (1 + saveds + 6 + 8) * sizeof(sljit_sw) + local_size;
 #else
-    compiler->local_size = (1 + saveds + 2) * sizeof(sljit_w) + local_size;
+    compiler->local_size = (1 + saveds + 2) * sizeof(sljit_sw) + local_size;
 #endif
     compiler->local_size = (compiler->local_size + 15) & ~0xf;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_return(compiler, op, src, srcw);
@@ -573,18 +577,18 @@
         FAIL_IF(push_inst(compiler, ADD | D(SLJIT_LOCALS_REG) | A(SLJIT_LOCALS_REG) | B(0)));
     }


-    FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_w))));
+    FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_LOCALS_REG) | IMM(sizeof(sljit_sw))));
     if (compiler->saveds >= 5)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG2) | A(SLJIT_LOCALS_REG) | IMM(-6 * (int)(sizeof(sljit_w))) ));
+        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)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_EREG1) | A(SLJIT_LOCALS_REG) | IMM(-5 * (sljit_si)(sizeof(sljit_sw))) ));
     if (compiler->saveds >= 3)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG3) | A(SLJIT_LOCALS_REG) | IMM(-4 * (sljit_si)(sizeof(sljit_sw))) ));
     if (compiler->saveds >= 2)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG2) | A(SLJIT_LOCALS_REG) | IMM(-3 * (sljit_si)(sizeof(sljit_sw))) ));
     if (compiler->saveds >= 1)
-        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (int)(sizeof(sljit_w))) ));
-    FAIL_IF(push_inst(compiler, STACK_LOAD | D(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(int)(sizeof(sljit_w))) ));
+        FAIL_IF(push_inst(compiler, STACK_LOAD | D(SLJIT_SAVED_REG1) | A(SLJIT_LOCALS_REG) | IMM(-2 * (sljit_si)(sizeof(sljit_sw))) ));
+    FAIL_IF(push_inst(compiler, STACK_LOAD | D(ZERO_REG) | A(SLJIT_LOCALS_REG) | IMM(-(sljit_si)(sizeof(sljit_sw))) ));


     FAIL_IF(push_inst(compiler, MTLR | S(0)));
     FAIL_IF(push_inst(compiler, BLR));
@@ -621,7 +625,7 @@
     (((inst) & ~(ADDR_MODE2 | UPDATE_REQ)) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg)))
 #endif


-static SLJIT_CONST sljit_ins data_transfer_insts[64 + 4] = {
+static SLJIT_CONST sljit_ins data_transfer_insts[64 + 8] = {

/* -------- Unsigned -------- */

@@ -730,16 +734,21 @@
/* d n x s */ HI(31) | LO(727) /* stfdx */,
/* d n x l */ HI(31) | LO(599) /* lfdx */,

+/* s n i s */ HI(52) /* stfs */,
+/* s n i l */ HI(48) /* lfs */,
+/* s n x s */ HI(31) | LO(663) /* stfsx */,
+/* s n x l */ HI(31) | LO(535) /* lfsx */,
+
};

#undef ARCH_32_64

 /* Simple cases, (no caching is required). */
-static int getput_arg_fast(struct sljit_compiler *compiler, int inp_flags, int reg, int arg, sljit_w argw)
+static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
     sljit_ins inst;
 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-    int tmp_reg;
+    sljit_si tmp_reg;
 #endif


     SLJIT_ASSERT(arg & SLJIT_MEM);
@@ -811,7 +820,7 @@
 /* See getput_arg below.
    Note: can_cache is called only for binary operators. Those operator always
    uses word arguments without write back. */
-static int can_cache(int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
     SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));


@@ -845,9 +854,9 @@
#endif

 /* Emit the necessary instructions. See can_cache above. */
-static int getput_arg(struct sljit_compiler *compiler, int inp_flags, int reg, int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si inp_flags, sljit_si reg, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
-    int tmp_r;
+    sljit_si tmp_r;
     sljit_ins inst;


     SLJIT_ASSERT(arg & SLJIT_MEM);
@@ -947,27 +956,27 @@
     return push_inst(compiler, INST_CODE_AND_DST(inst, inp_flags, reg) | A(arg & 0xf) | B(tmp_r));
 }


-static SLJIT_INLINE int emit_op_mem2(struct sljit_compiler *compiler, int flags, int reg, int arg1, sljit_w arg1w, int arg2, sljit_w arg2w)
+static SLJIT_INLINE sljit_si emit_op_mem2(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg1, sljit_sw arg1w, sljit_si arg2, sljit_sw arg2w)
 {
     if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
         return compiler->error;
     return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
 }


-static int emit_op(struct sljit_compiler *compiler, int op, int input_flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si input_flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* arg1 goes to TMP_REG1 or src reg
        arg2 goes to TMP_REG2, imm or src reg
        TMP_REG3 can be used for caching
        result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
-    int dst_r;
-    int src1_r;
-    int src2_r;
-    int sugg_src2_r = TMP_REG2;
-    int flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_FORM6 | ALT_SIGN_EXT | ALT_SET_FLAGS);
+    sljit_si dst_r;
+    sljit_si src1_r;
+    sljit_si src2_r;
+    sljit_si sugg_src2_r = TMP_REG2;
+    sljit_si flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_FORM6 | ALT_SIGN_EXT | ALT_SET_FLAGS);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
@@ -1002,15 +1011,6 @@
         flags |= REG1_SOURCE;
     }
     else if (src1 & SLJIT_IMM) {
-#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-        SLJIT_COMPILE_ASSERT(INT_DATA == 0x18, int_data_check1);
-        if ((input_flags & 0x18) == INT_DATA) {
-            if (input_flags & SIGNED_DATA)
-                src1w = (signed int)src1w;
-            else
-                src1w = (unsigned int)src1w;
-        }
-#endif
         FAIL_IF(load_immediate(compiler, TMP_REG1, src1w));
         src1_r = TMP_REG1;
     }
@@ -1029,15 +1029,6 @@
             dst_r = src2_r;
     }
     else if (src2 & SLJIT_IMM) {
-#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-        SLJIT_COMPILE_ASSERT(INT_DATA == 0x18, int_data_check2);
-        if ((input_flags & 0x18) == INT_DATA) {
-            if (input_flags & SIGNED_DATA)
-                src2w = (signed int)src2w;
-            else
-                src2w = (unsigned int)src2w;
-        }
-#endif
         FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));
         src2_r = sugg_src2_r;
     }
@@ -1099,7 +1090,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     CHECK_ERROR();
     check_sljit_emit_op0(compiler, op);
@@ -1144,74 +1135,108 @@
 #define EMIT_MOV(type, type_flags, type_cast) \
     emit_op(compiler, (src & SLJIT_IMM) ? SLJIT_MOV : type, flags | (type_flags), dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? type_cast srcw : srcw)


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
+    sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
+    sljit_si op_flags = GET_ALL_FLAGS(op);


     CHECK_ERROR();
     check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);
     ADJUST_LOCAL_OFFSET(dst, dstw);
     ADJUST_LOCAL_OFFSET(src, srcw);


-    if ((src & SLJIT_IMM) && srcw == 0 && GET_OPCODE(op) >= SLJIT_NOT)
+    op = GET_OPCODE(op);
+    if ((src & SLJIT_IMM) && srcw == 0 && op >= SLJIT_NOT)
         src = ZERO_REG;


+    if (op_flags & SLJIT_SET_O)
+        FAIL_IF(push_inst(compiler, MTXER | S(ZERO_REG)));
+
+    if (op_flags & SLJIT_INT_OP) {
+        if (op >= SLJIT_MOV && op <= SLJIT_MOVU_P) {
+            if (src <= SLJIT_NO_REGISTERS && src == dst) {
+                if (!TYPE_CAST_NEEDED(op))
+                    return SLJIT_SUCCESS;
+            }
 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-    if (op & SLJIT_INT_OP) {
-        flags |= INT_DATA | SIGNED_DATA;
-        if (src & SLJIT_IMM)
-            srcw = (int)srcw;
+            if (op == SLJIT_MOV_SI && (src & SLJIT_MEM))
+                op = SLJIT_MOV_UI;
+            if (op == SLJIT_MOVU_SI && (src & SLJIT_MEM))
+                op = SLJIT_MOVU_UI;
+            if (op == SLJIT_MOV_UI && (src & SLJIT_IMM))
+                op = SLJIT_MOV_SI;
+            if (op == SLJIT_MOVU_UI && (src & SLJIT_IMM))
+                op = SLJIT_MOVU_SI;
+#endif
+        }
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+        else {
+            /* Most operations expect sign extended arguments. */
+            flags |= INT_DATA | SIGNED_DATA;
+            if (src & SLJIT_IMM)
+                srcw = (sljit_si)srcw;
+        }
+#endif
     }
-#endif
-    if (op & SLJIT_SET_O)
-        FAIL_IF(push_inst(compiler, MTXER | S(ZERO_REG)));


-    switch (GET_OPCODE(op)) {
+    switch (op) {
     case SLJIT_MOV:
     case SLJIT_MOV_P:
+#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
+    case SLJIT_MOV_UI:
+    case SLJIT_MOV_SI:
+#endif
         return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw);


+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
     case SLJIT_MOV_UI:
-        return emit_op(compiler, SLJIT_MOV_UI, flags | INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw);
+        return EMIT_MOV(SLJIT_MOV_UI, INT_DATA, (sljit_ui));


     case SLJIT_MOV_SI:
-        return emit_op(compiler, SLJIT_MOV_SI, flags | INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, srcw);
+        return EMIT_MOV(SLJIT_MOV_SI, INT_DATA | SIGNED_DATA, (sljit_si));
+#endif


     case SLJIT_MOV_UB:
         return EMIT_MOV(SLJIT_MOV_UB, BYTE_DATA, (sljit_ub));


     case SLJIT_MOV_SB:
-        return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA, (sljit_b));
+        return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA, (sljit_sb));


     case SLJIT_MOV_UH:
         return EMIT_MOV(SLJIT_MOV_UH, HALF_DATA, (sljit_uh));


     case SLJIT_MOV_SH:
-        return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA, (sljit_h));
+        return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA, (sljit_sh));


     case SLJIT_MOVU:
     case SLJIT_MOVU_P:
+#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
+    case SLJIT_MOVU_UI:
+    case SLJIT_MOVU_SI:
+#endif
         return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, srcw);


+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
     case SLJIT_MOVU_UI:
-        return emit_op(compiler, SLJIT_MOV_UI, flags | INT_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, srcw);
+        return EMIT_MOV(SLJIT_MOV_UI, INT_DATA | WRITE_BACK, (sljit_ui));


     case SLJIT_MOVU_SI:
-        return emit_op(compiler, SLJIT_MOV_SI, flags | INT_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, srcw);
+        return EMIT_MOV(SLJIT_MOV_SI, INT_DATA | SIGNED_DATA | WRITE_BACK, (sljit_si));
+#endif


     case SLJIT_MOVU_UB:
         return EMIT_MOV(SLJIT_MOV_UB, BYTE_DATA | WRITE_BACK, (sljit_ub));


     case SLJIT_MOVU_SB:
-        return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA | WRITE_BACK, (sljit_b));
+        return EMIT_MOV(SLJIT_MOV_SB, BYTE_DATA | SIGNED_DATA | WRITE_BACK, (sljit_sb));


     case SLJIT_MOVU_UH:
         return EMIT_MOV(SLJIT_MOV_UH, HALF_DATA | WRITE_BACK, (sljit_uh));


     case SLJIT_MOVU_SH:
-        return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA | WRITE_BACK, (sljit_h));
+        return EMIT_MOV(SLJIT_MOV_SH, HALF_DATA | SIGNED_DATA | WRITE_BACK, (sljit_sh));


     case SLJIT_NOT:
         return emit_op(compiler, SLJIT_NOT, flags, dst, dstw, TMP_REG1, 0, src, srcw);
@@ -1221,7 +1246,7 @@


     case SLJIT_CLZ:
 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
-        return emit_op(compiler, SLJIT_CLZ, flags | (!(op & SLJIT_INT_OP) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw);
+        return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_INT_OP) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw);
 #else
         return emit_op(compiler, SLJIT_CLZ, flags, dst, dstw, TMP_REG1, 0, src, srcw);
 #endif
@@ -1265,12 +1290,12 @@
     ((src) & SLJIT_IMM)
 #endif


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
+    sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;


     CHECK_ERROR();
     check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1285,11 +1310,12 @@


 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
     if (op & SLJIT_INT_OP) {
+        /* Most operations expect sign extended arguments. */
         flags |= INT_DATA | SIGNED_DATA;
         if (src1 & SLJIT_IMM)
-            src1w = (src1w << 32) >> 32;
+            src1w = (sljit_si)(src1w);
         if (src2 & SLJIT_IMM)
-            src2w = (src2w << 32) >> 32;
+            src2w = (sljit_si)(src2w);
         if (GET_FLAGS(op))
             flags |= ALT_SIGN_EXT;
     }
@@ -1450,9 +1476,12 @@
         }
         return emit_op(compiler, GET_OPCODE(op), flags, dst, dstw, src1, src1w, src2, src2w);


+    case SLJIT_ASHR:
+        if (op & SLJIT_KEEP_FLAGS)
+            flags |= ALT_FORM3;
+        /* Fall through. */
     case SLJIT_SHL:
     case SLJIT_LSHR:
-    case SLJIT_ASHR:
 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
         if (op & SLJIT_INT_OP)
             flags |= ALT_FORM2;
@@ -1467,14 +1496,14 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     CHECK_ERROR();
     check_sljit_emit_op_custom(compiler, instruction, size);
@@ -1487,73 +1516,77 @@
 /*  Floating point operators                                             */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     /* Always available. */
     return 1;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_SINGLE_OP) >> 6))
+#define SELECT_FOP(op, single, double) ((op & SLJIT_SINGLE_OP) ? single : double)
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_fr;
+    sljit_si dst_fr;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
+    SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
-        if (dst > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
+        if (dst > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
             dst = TMP_FREG1;
         }


-        if (src > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
+        if (src > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
             src = TMP_FREG2;
         }


         return push_inst(compiler, FCMPU | CRD(4) | FA(dst) | FB(src));
     }


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG1 : dst;
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : dst;


-    if (src > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
+    if (src > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
         src = dst_fr;
     }


-    switch (op) {
-        case SLJIT_FMOV:
+    switch (GET_OPCODE(op)) {
+        case SLJIT_MOVD:
             if (src != dst_fr && dst_fr != TMP_FREG1)
                 FAIL_IF(push_inst(compiler, FMR | FD(dst_fr) | FB(src)));
             break;
-        case SLJIT_FNEG:
+        case SLJIT_NEGD:
             FAIL_IF(push_inst(compiler, FNEG | FD(dst_fr) | FB(src)));
             break;
-        case SLJIT_FABS:
+        case SLJIT_ABSD:
             FAIL_IF(push_inst(compiler, FABS | FD(dst_fr) | FB(src)));
             break;
     }


     if (dst_fr == TMP_FREG1) {
-        if (op == SLJIT_FMOV)
+        if (GET_OPCODE(op) == SLJIT_MOVD)
             dst_fr = src;
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, dst_fr, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), dst_fr, dst, dstw, 0, 0));
     }


     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_fr, flags = 0;
+    sljit_si dst_fr, flags = 0;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1561,18 +1594,18 @@
     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG2 : dst;
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG2 : dst;


-    if (src1 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w)) {
+    if (src1 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
             FAIL_IF(compiler->error);
             src1 = TMP_FREG1;
         } else
             flags |= ALT_FORM1;
     }


-    if (src2 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w)) {
+    if (src2 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
             FAIL_IF(compiler->error);
             src2 = TMP_FREG2;
         } else
@@ -1581,53 +1614,56 @@


     if ((flags & (ALT_FORM1 | ALT_FORM2)) == (ALT_FORM1 | ALT_FORM2)) {
         if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
         }
         else {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
         }
     }
     else if (flags & ALT_FORM1)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
     else if (flags & ALT_FORM2)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));


     if (flags & ALT_FORM1)
         src1 = TMP_FREG1;
     if (flags & ALT_FORM2)
         src2 = TMP_FREG2;


-    switch (op) {
-    case SLJIT_FADD:
-        FAIL_IF(push_inst(compiler, FADD | FD(dst_fr) | FA(src1) | FB(src2)));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_ADDD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADD) | FD(dst_fr) | FA(src1) | FB(src2)));
         break;


-    case SLJIT_FSUB:
-        FAIL_IF(push_inst(compiler, FSUB | FD(dst_fr) | FA(src1) | FB(src2)));
+    case SLJIT_SUBD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUB) | FD(dst_fr) | FA(src1) | FB(src2)));
         break;


-    case SLJIT_FMUL:
-        FAIL_IF(push_inst(compiler, FMUL | FD(dst_fr) | FA(src1) | FC(src2) /* FMUL use FC as src2 */));
+    case SLJIT_MULD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMUL) | FD(dst_fr) | FA(src1) | FC(src2) /* FMUL use FC as src2 */));
         break;


-    case SLJIT_FDIV:
-        FAIL_IF(push_inst(compiler, FDIV | FD(dst_fr) | FA(src1) | FB(src2)));
+    case SLJIT_DIVD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIV) | FD(dst_fr) | FA(src1) | FB(src2)));
         break;
     }


     if (dst_fr == TMP_FREG2)
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, TMP_FREG2, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));


     return SLJIT_SUCCESS;
 }


+#undef FLOAT_DATA
+#undef SELECT_FOP
+
 /* --------------------------------------------------------------------- */
 /*  Other instructions                                                   */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_enter(compiler, dst, dstw);
@@ -1644,7 +1680,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_return(compiler, src, srcw);
@@ -1682,7 +1718,7 @@
     return label;
 }


-static sljit_ins get_bo_bi_flags(int type)
+static sljit_ins get_bo_bi_flags(sljit_si type)
 {
     switch (type) {
     case SLJIT_C_EQUAL:
@@ -1745,7 +1781,7 @@
     }
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     struct sljit_jump *jump;
     sljit_ins bo_bi_flags;
@@ -1773,10 +1809,10 @@
     return jump;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     struct sljit_jump *jump = NULL;
-    int src_r;
+    sljit_si src_r;


     CHECK_ERROR();
     check_sljit_emit_ijump(compiler, type, src, srcw);
@@ -1812,9 +1848,9 @@
 #define INVERT_BIT(dst) \
     FAIL_IF(push_inst(compiler, XORI | S(dst) | A(dst) | 0x1));


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
-    int reg;
+    sljit_si reg;


     CHECK_ERROR();
     check_sljit_emit_cond_value(compiler, op, dst, dstw, type);
@@ -1915,10 +1951,10 @@
     return (reg == TMP_REG2) ? emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, TMP_REG2, 0) : SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     struct sljit_const *const_;
-    int reg;
+    sljit_si reg;


     CHECK_ERROR_PTR();
     check_sljit_emit_const(compiler, dst, dstw, init_value);


Modified: code/trunk/sljit/sljitNativeSPARC_32.c
===================================================================
--- code/trunk/sljit/sljitNativeSPARC_32.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeSPARC_32.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -24,7 +24,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */


-static int load_immediate(struct sljit_compiler *compiler, int dst, sljit_w imm)
+static sljit_si load_immediate(struct sljit_compiler *compiler, sljit_si dst, sljit_sw imm)
 {
     if (imm <= SIMM_MAX && imm >= SIMM_MIN)
         return push_inst(compiler, OR | D(dst) | S1(0) | IMM(imm), DR(dst));
@@ -35,8 +35,8 @@


#define ARG2(flags, src2) ((flags & SRC2_IMM) ? IMM(src2) : S2(src2))

-static SLJIT_INLINE int emit_single_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, int src1, sljit_w src2)
+static SLJIT_INLINE sljit_si emit_single_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_si src1, sljit_sw src2)
 {
     SLJIT_COMPILE_ASSERT(ICC_IS_SET == SET_FLAGS, icc_is_set_and_set_flags_must_be_the_same);


@@ -139,7 +139,7 @@
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_const(struct sljit_compiler *compiler, int dst, sljit_w init_value)
+static SLJIT_INLINE sljit_si emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw init_value)
 {
     FAIL_IF(push_inst(compiler, SETHI | D(dst) | ((init_value >> 10) & 0x3fffff), DR(dst)));
     return push_inst(compiler, OR | D(dst) | S1(dst) | IMM_ARG | (init_value & 0x3ff), DR(dst));
@@ -154,7 +154,7 @@
     SLJIT_CACHE_FLUSH(inst, inst + 2);
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
     sljit_ins *inst = (sljit_ins*)addr;



Modified: code/trunk/sljit/sljitNativeSPARC_common.c
===================================================================
--- code/trunk/sljit/sljitNativeSPARC_common.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeSPARC_common.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -64,8 +64,8 @@
 #define TMP_REG4    (SLJIT_NO_REGISTERS + 4)
 #define LINK_REG    (SLJIT_NO_REGISTERS + 5)


-#define TMP_FREG1    ((SLJIT_FLOAT_REG4 + 1) << 1)
-#define TMP_FREG2    ((SLJIT_FLOAT_REG4 + 2) << 1)
+#define TMP_FREG1    (0)
+#define TMP_FREG2    ((SLJIT_FLOAT_REG6 + 1) << 1)


 static SLJIT_CONST sljit_ub reg_map[SLJIT_NO_REGISTERS + 7] = {
     0, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 14, 1, 24, 25, 26, 15
@@ -98,12 +98,17 @@
 #define CALL        (OPC1(0x1))
 #define FABSS        (OPC1(0x2) | OPC3(0x34) | DOP(0x09))
 #define FADDD        (OPC1(0x2) | OPC3(0x34) | DOP(0x42))
+#define FADDS        (OPC1(0x2) | OPC3(0x34) | DOP(0x41))
 #define FCMPD        (OPC1(0x2) | OPC3(0x35) | DOP(0x52))
+#define FCMPS        (OPC1(0x2) | OPC3(0x35) | DOP(0x51))
 #define FDIVD        (OPC1(0x2) | OPC3(0x34) | DOP(0x4e))
+#define FDIVS        (OPC1(0x2) | OPC3(0x34) | DOP(0x4d))
 #define FMOVS        (OPC1(0x2) | OPC3(0x34) | DOP(0x01))
 #define FMULD        (OPC1(0x2) | OPC3(0x34) | DOP(0x4a))
+#define FMULS        (OPC1(0x2) | OPC3(0x34) | DOP(0x49))
 #define FNEGS        (OPC1(0x2) | OPC3(0x34) | DOP(0x05))
 #define FSUBD        (OPC1(0x2) | OPC3(0x34) | DOP(0x46))
+#define FSUBS        (OPC1(0x2) | OPC3(0x34) | DOP(0x45))
 #define JMPL        (OPC1(0x2) | OPC3(0x38))
 #define NOP        (OPC1(0x0) | OPC2(0x04))
 #define OR        (OPC1(0x2) | OPC3(0x02))
@@ -146,7 +151,7 @@


 /* dest_reg is the absolute name of the register
    Useful for reordering instructions in the delay slot. */
-static int push_inst(struct sljit_compiler *compiler, sljit_ins ins, int delay_slot)
+static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_si delay_slot)
 {
     SLJIT_ASSERT((delay_slot & DST_INS_MASK) == UNMOVABLE_INS
         || (delay_slot & DST_INS_MASK) == MOVABLE_INS
@@ -161,7 +166,7 @@


 static SLJIT_INLINE sljit_ins* optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
 {
-    sljit_w diff;
+    sljit_sw diff;
     sljit_uw target_addr;
     sljit_ins *inst;
     sljit_ins saved_inst;
@@ -200,7 +205,7 @@
         inst--;


     if (jump->flags & IS_MOVABLE) {
-        diff = ((sljit_w)target_addr - (sljit_w)(inst - 1)) >> 2;
+        diff = ((sljit_sw)target_addr - (sljit_sw)(inst - 1)) >> 2;
         if (diff <= MAX_DISP && diff >= MIN_DISP) {
             jump->flags |= PATCH_B;
             inst--;
@@ -217,7 +222,7 @@
         }
     }


-    diff = ((sljit_w)target_addr - (sljit_w)(inst)) >> 2;
+    diff = ((sljit_sw)target_addr - (sljit_sw)(inst)) >> 2;
     if (diff <= MAX_DISP && diff >= MIN_DISP) {
         jump->flags |= PATCH_B;
         if (jump->flags & IS_COND)
@@ -304,7 +309,7 @@
     SLJIT_ASSERT(!label);
     SLJIT_ASSERT(!jump);
     SLJIT_ASSERT(!const_);
-    SLJIT_ASSERT(code_ptr - code <= (int)compiler->size);
+    SLJIT_ASSERT(code_ptr - code <= (sljit_si)compiler->size);


     jump = compiler->jumps;
     while (jump) {
@@ -313,14 +318,14 @@
             buf_ptr = (sljit_ins*)jump->addr;


             if (jump->flags & PATCH_CALL) {
-                addr = (sljit_w)(addr - jump->addr) >> 2;
-                SLJIT_ASSERT((sljit_w)addr <= 0x1fffffff && (sljit_w)addr >= -0x20000000);
+                addr = (sljit_sw)(addr - jump->addr) >> 2;
+                SLJIT_ASSERT((sljit_sw)addr <= 0x1fffffff && (sljit_sw)addr >= -0x20000000);
                 buf_ptr[0] = CALL | (addr & 0x3fffffff);
                 break;
             }
             if (jump->flags & PATCH_B) {
-                addr = (sljit_w)(addr - jump->addr) >> 2;
-                SLJIT_ASSERT((sljit_w)addr <= MAX_DISP && (sljit_w)addr >= MIN_DISP);
+                addr = (sljit_sw)(addr - jump->addr) >> 2;
+                SLJIT_ASSERT((sljit_sw)addr <= MAX_DISP && (sljit_sw)addr >= MIN_DISP);
                 buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | (addr & DISP_MASK);
                 break;
             }
@@ -379,7 +384,7 @@
 #include "sljitNativeSPARC_64.c"
 #endif


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     CHECK_ERROR();
     check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);
@@ -390,7 +395,7 @@
     compiler->logical_local_size = local_size;
 #endif


-    local_size += 23 * sizeof(sljit_w);
+    local_size += 23 * sizeof(sljit_sw);
     local_size = (local_size + 7) & ~0x7;
     compiler->local_size = local_size;


@@ -412,7 +417,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -423,11 +428,11 @@
     compiler->logical_local_size = local_size;
 #endif


-    local_size += 23 * sizeof(sljit_w);
+    local_size += 23 * sizeof(sljit_sw);
     compiler->local_size = (local_size + 7) & ~0x7;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_return(compiler, op, src, srcw);
@@ -451,7 +456,7 @@
 #define ARCH_32_64(a, b)    b
 #endif


-static SLJIT_CONST sljit_ins data_transfer_insts[16 + 2] = {
+static SLJIT_CONST sljit_ins data_transfer_insts[16 + 4] = {
/* u w s */ ARCH_32_64(OPC1(3) | OPC3(0x04) /* stw */, OPC1(3) | OPC3(0x0e) /* stx */),
/* u w l */ ARCH_32_64(OPC1(3) | OPC3(0x00) /* lduw */, OPC1(3) | OPC3(0x0b) /* ldx */),
/* u b s */ OPC1(3) | OPC3(0x05) /* stb */,
@@ -472,12 +477,14 @@

/* d s */ OPC1(3) | OPC3(0x27),
/* d l */ OPC1(3) | OPC3(0x23),
+/* s s */ OPC1(3) | OPC3(0x24),
+/* s l */ OPC1(3) | OPC3(0x20),
};

#undef ARCH_32_64

 /* Can perform an operation using at most 1 instruction. */
-static int getput_arg_fast(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw)
+static sljit_si getput_arg_fast(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
     SLJIT_ASSERT(arg & SLJIT_MEM);


@@ -500,7 +507,7 @@
 /* See getput_arg below.
    Note: can_cache is called only for binary operators. Those
    operators always uses word arguments without write back. */
-static int can_cache(int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si can_cache(sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
     SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));


@@ -520,9 +527,9 @@
}

 /* Emit the necessary instructions. See can_cache above. */
-static int getput_arg(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw, int next_arg, sljit_w next_argw)
+static sljit_si getput_arg(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw, sljit_si next_arg, sljit_sw next_argw)
 {
-    int base, arg2, delay_slot;
+    sljit_si base, arg2, delay_slot;
     sljit_ins dest;


     SLJIT_ASSERT(arg & SLJIT_MEM);
@@ -584,7 +591,7 @@
     return push_inst(compiler, ADD | D(base) | S1(base) | S2(arg2), DR(base));
 }


-static SLJIT_INLINE int emit_op_mem(struct sljit_compiler *compiler, int flags, int reg, int arg, sljit_w argw)
+static SLJIT_INLINE sljit_si emit_op_mem(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg, sljit_sw argw)
 {
     if (getput_arg_fast(compiler, flags, reg, arg, argw))
         return compiler->error;
@@ -593,26 +600,26 @@
     return getput_arg(compiler, flags, reg, arg, argw, 0, 0);
 }


-static SLJIT_INLINE int emit_op_mem2(struct sljit_compiler *compiler, int flags, int reg, int arg1, sljit_w arg1w, int arg2, sljit_w arg2w)
+static SLJIT_INLINE sljit_si emit_op_mem2(struct sljit_compiler *compiler, sljit_si flags, sljit_si reg, sljit_si arg1, sljit_sw arg1w, sljit_si arg2, sljit_sw arg2w)
 {
     if (getput_arg_fast(compiler, flags, reg, arg1, arg1w))
         return compiler->error;
     return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w);
 }


-static int emit_op(struct sljit_compiler *compiler, int op, int flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_op(struct sljit_compiler *compiler, sljit_si op, sljit_si flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* arg1 goes to TMP_REG1 or src reg
        arg2 goes to TMP_REG2, imm or src reg
        TMP_REG3 can be used for caching
        result goes to TMP_REG2, so put result can use TMP_REG1 and TMP_REG3. */
-    int dst_r = TMP_REG2;
-    int src1_r;
-    sljit_w src2_r = 0;
-    int sugg_src2_r = TMP_REG2;
+    sljit_si dst_r = TMP_REG2;
+    sljit_si src1_r;
+    sljit_sw src2_r = 0;
+    sljit_si sugg_src2_r = TMP_REG2;


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;
@@ -724,7 +731,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     CHECK_ERROR();
     check_sljit_emit_op0(compiler, op);
@@ -765,11 +772,11 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int flags = GET_FLAGS(op) ? SET_FLAGS : 0;
+    sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;


     CHECK_ERROR();
     check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);
@@ -792,13 +799,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, flags | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOV_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOV_UH:
         return emit_op(compiler, SLJIT_MOV_UH, flags | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOV_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_MOVU:
     case SLJIT_MOVU_P:
@@ -814,13 +821,13 @@
         return emit_op(compiler, SLJIT_MOV_UB, flags | BYTE_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_ub)srcw : srcw);


     case SLJIT_MOVU_SB:
-        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_b)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SB, flags | BYTE_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sb)srcw : srcw);


     case SLJIT_MOVU_UH:
         return emit_op(compiler, SLJIT_MOV_UH, flags | HALF_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_uh)srcw : srcw);


     case SLJIT_MOVU_SH:
-        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_h)srcw : srcw);
+        return emit_op(compiler, SLJIT_MOV_SH, flags | HALF_DATA | SIGNED_DATA | WRITE_BACK, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_sh)srcw : srcw);


     case SLJIT_NOT:
     case SLJIT_CLZ:
@@ -833,12 +840,12 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int flags = GET_FLAGS(op) ? SET_FLAGS : 0;
+    sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;


     CHECK_ERROR();
     check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -875,14 +882,14 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     CHECK_ERROR();
     check_sljit_emit_op_custom(compiler, instruction, size);
@@ -895,84 +902,89 @@
 /*  Floating point operators                                             */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
     return 1;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_SINGLE_OP) >> 7))
+#define SELECT_FOP(op, single, double) ((op & SLJIT_SINGLE_OP) ? single : double)
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_fr;
+    sljit_si dst_fr;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
+    SLJIT_COMPILE_ASSERT((SLJIT_SINGLE_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error);


     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
-        if (dst > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
+        if (dst > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
             dst = TMP_FREG1;
         }
         else
             dst <<= 1;


-        if (src > SLJIT_FLOAT_REG4) {
-            FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
+        if (src > SLJIT_FLOAT_REG6) {
+            FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
             src = TMP_FREG2;
         }
         else
             src <<= 1;


-        return push_inst(compiler, FCMPD | S1A(dst) | S2A(src), FCC_IS_SET | MOVABLE_INS);
+        return push_inst(compiler, SELECT_FOP(op, FCMPS, FCMPD) | S1A(dst) | S2A(src), FCC_IS_SET | MOVABLE_INS);
     }


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG1 : (dst << 1);
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : (dst << 1);


-    if (src > SLJIT_FLOAT_REG4) {
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
+    if (src > SLJIT_FLOAT_REG6) {
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
         src = dst_fr;
     }
     else
         src <<= 1;


-    switch (op) {
-        case SLJIT_FMOV:
+    switch (GET_OPCODE(op)) {
+        case SLJIT_MOVD:
             if (src != dst_fr && dst_fr != TMP_FREG1) {
                 FAIL_IF(push_inst(compiler, FMOVS | DA(dst_fr) | S2A(src), MOVABLE_INS));
-                FAIL_IF(push_inst(compiler, FMOVS | DA(dst_fr | 1) | S2A(src | 1), MOVABLE_INS));
+                if (!(op & SLJIT_SINGLE_OP))
+                    FAIL_IF(push_inst(compiler, FMOVS | DA(dst_fr | 1) | S2A(src | 1), MOVABLE_INS));
             }
             break;
-        case SLJIT_FNEG:
+        case SLJIT_NEGD:
             FAIL_IF(push_inst(compiler, FNEGS | DA(dst_fr) | S2A(src), MOVABLE_INS));
-            if (dst_fr != src)
+            if (dst_fr != src && !(op & SLJIT_SINGLE_OP))
                 FAIL_IF(push_inst(compiler, FMOVS | DA(dst_fr | 1) | S2A(src | 1), MOVABLE_INS));
             break;
-        case SLJIT_FABS:
+        case SLJIT_ABSD:
             FAIL_IF(push_inst(compiler, FABSS | DA(dst_fr) | S2A(src), MOVABLE_INS));
-            if (dst_fr != src)
+            if (dst_fr != src && !(op & SLJIT_SINGLE_OP))
                 FAIL_IF(push_inst(compiler, FMOVS | DA(dst_fr | 1) | S2A(src | 1), MOVABLE_INS));
             break;
     }


     if (dst_fr == TMP_FREG1) {
-        if (op == SLJIT_FMOV)
+        if (GET_OPCODE(op) == SLJIT_MOVD)
             dst_fr = src;
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, dst_fr, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), dst_fr, dst, dstw, 0, 0));
     }


     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_fr, flags = 0;
+    sljit_si dst_fr, flags = 0;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -980,10 +992,10 @@
     compiler->cache_arg = 0;
     compiler->cache_argw = 0;


-    dst_fr = (dst > SLJIT_FLOAT_REG4) ? TMP_FREG2 : (dst << 1);
+    dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG2 : (dst << 1);


-    if (src1 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w)) {
+    if (src1 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
             FAIL_IF(compiler->error);
             src1 = TMP_FREG1;
         } else
@@ -992,8 +1004,8 @@
     else
         src1 <<= 1;


-    if (src2 > SLJIT_FLOAT_REG4) {
-        if (getput_arg_fast(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w)) {
+    if (src2 > SLJIT_FLOAT_REG6) {
+        if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
             FAIL_IF(compiler->error);
             src2 = TMP_FREG2;
         } else
@@ -1004,53 +1016,56 @@


     if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) {
         if (!can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, src1, src1w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
         }
         else {
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
-            FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
+            FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
         }
     }
     else if (flags & SLOW_SRC1)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w, dst, dstw));
     else if (flags & SLOW_SRC2)
-        FAIL_IF(getput_arg(compiler, DOUBLE_DATA | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));
+        FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w, dst, dstw));


     if (flags & SLOW_SRC1)
         src1 = TMP_FREG1;
     if (flags & SLOW_SRC2)
         src2 = TMP_FREG2;


-    switch (op) {
-    case SLJIT_FADD:
-        FAIL_IF(push_inst(compiler, FADDD | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_ADDD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADDD) | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
         break;


-    case SLJIT_FSUB:
-        FAIL_IF(push_inst(compiler, FSUBD | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
+    case SLJIT_SUBD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUBD) | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
         break;


-    case SLJIT_FMUL:
-        FAIL_IF(push_inst(compiler, FMULD | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
+    case SLJIT_MULD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMULD) | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
         break;


-    case SLJIT_FDIV:
-        FAIL_IF(push_inst(compiler, FDIVD | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
+    case SLJIT_DIVD:
+        FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIVD) | DA(dst_fr) | S1A(src1) | S2A(src2), MOVABLE_INS));
         break;
     }


     if (dst_fr == TMP_FREG2)
-        FAIL_IF(emit_op_mem2(compiler, DOUBLE_DATA, TMP_FREG2, dst, dstw, 0, 0));
+        FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw, 0, 0));


     return SLJIT_SUCCESS;
 }


+#undef FLOAT_DATA
+#undef SELECT_FOP
+
 /* --------------------------------------------------------------------- */
 /*  Other instructions                                                   */
 /* --------------------------------------------------------------------- */


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_enter(compiler, dst, dstw);
@@ -1065,7 +1080,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     check_sljit_emit_fast_return(compiler, src, srcw);
@@ -1103,7 +1118,7 @@
     return label;
 }


-static sljit_ins get_cc(int type)
+static sljit_ins get_cc(sljit_si type)
 {
     switch (type) {
     case SLJIT_C_EQUAL:
@@ -1174,7 +1189,7 @@
     }
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     struct sljit_jump *jump;


@@ -1220,10 +1235,10 @@
     return jump;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     struct sljit_jump *jump = NULL;
-    int src_r;
+    sljit_si src_r;


     CHECK_ERROR();
     check_sljit_emit_ijump(compiler, type, src, srcw);
@@ -1255,9 +1270,9 @@
     return push_inst(compiler, NOP, UNMOVABLE_INS);
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
-    int reg;
+    sljit_si reg;


     CHECK_ERROR();
     check_sljit_emit_cond_value(compiler, op, dst, dstw, type);
@@ -1286,9 +1301,9 @@
 #endif
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
-    int reg;
+    sljit_si reg;
     struct sljit_const *const_;


     CHECK_ERROR_PTR();


Modified: code/trunk/sljit/sljitNativeX86_32.c
===================================================================
--- code/trunk/sljit/sljitNativeX86_32.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeX86_32.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -26,19 +26,19 @@


/* x86 32-bit arch dependent functions. */

-static int emit_do_imm(struct sljit_compiler *compiler, sljit_ub opcode, sljit_w imm)
+static sljit_si emit_do_imm(struct sljit_compiler *compiler, sljit_ub opcode, sljit_sw imm)
 {
     sljit_ub *buf;


-    buf = (sljit_ub*)ensure_buf(compiler, 1 + 1 + sizeof(sljit_w));
+    buf = (sljit_ub*)ensure_buf(compiler, 1 + 1 + sizeof(sljit_sw));
     FAIL_IF(!buf);
-    INC_SIZE(1 + sizeof(sljit_w));
+    INC_SIZE(1 + sizeof(sljit_sw));
     *buf++ = opcode;
-    *(sljit_w*)buf = imm;
+    *(sljit_sw*)buf = imm;
     return SLJIT_SUCCESS;
 }


-static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, int type)
+static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, sljit_si type)
 {
     if (type == SLJIT_JUMP) {
         *code_ptr++ = 0xe9;
@@ -57,16 +57,16 @@
     if (jump->flags & JUMP_LABEL)
         jump->flags |= PATCH_MW;
     else
-        *(sljit_w*)code_ptr = jump->u.target - (jump->addr + 4);
+        *(sljit_sw*)code_ptr = jump->u.target - (jump->addr + 4);
     code_ptr += 4;


     return code_ptr;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size;
-    int locals_offset;
+    sljit_si size;
+    sljit_si locals_offset;
     sljit_ub *buf;


     CHECK_ERROR();
@@ -116,23 +116,23 @@
         *buf++ = 0x8b;
         *buf++ = 0x44 | (reg_map[SLJIT_SAVED_REG3] << 3);
         *buf++ = 0x24;
-        *buf++ = sizeof(sljit_w) * (3 + 2); /* saveds >= 3 as well. */
+        *buf++ = sizeof(sljit_sw) * (3 + 2); /* saveds >= 3 as well. */
     }
 #else
     if (args > 0) {
         *buf++ = 0x8b;
         *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG1] << 3) | reg_map[TMP_REGISTER];
-        *buf++ = sizeof(sljit_w) * 2;
+        *buf++ = sizeof(sljit_sw) * 2;
     }
     if (args > 1) {
         *buf++ = 0x8b;
         *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG2] << 3) | reg_map[TMP_REGISTER];
-        *buf++ = sizeof(sljit_w) * 3;
+        *buf++ = sizeof(sljit_sw) * 3;
     }
     if (args > 2) {
         *buf++ = 0x8b;
         *buf++ = 0x40 | (reg_map[SLJIT_SAVED_REG3] << 3) | reg_map[TMP_REGISTER];
-        *buf++ = sizeof(sljit_w) * 4;
+        *buf++ = sizeof(sljit_sw) * 4;
     }
 #endif


@@ -161,9 +161,9 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int locals_offset;
+    sljit_si locals_offset;


     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -186,9 +186,9 @@
     compiler->local_size = locals_offset + ((local_size + sizeof(sljit_uw) - 1) & ~(sizeof(sljit_uw) - 1));
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
-    int size;
+    sljit_si size;
     sljit_ub *buf;


     CHECK_ERROR();
@@ -224,12 +224,12 @@
     POP_REG(reg_map[TMP_REGISTER]);
 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
     if (compiler->args > 2)
-        RETN(sizeof(sljit_w));
+        RETN(sizeof(sljit_sw));
     else
         RET();
 #else
     if (compiler->args > 0)
-        RETN(compiler->args * sizeof(sljit_w));
+        RETN(compiler->args * sizeof(sljit_sw));
     else
         RET();
 #endif
@@ -242,16 +242,16 @@
 /* --------------------------------------------------------------------- */


 /* Size contains the flags as well. */
-static sljit_ub* emit_x86_instruction(struct sljit_compiler *compiler, int size,
+static sljit_ub* emit_x86_instruction(struct sljit_compiler *compiler, sljit_si size,
     /* The register or immediate operand. */
-    int a, sljit_w imma,
+    sljit_si a, sljit_sw imma,
     /* The general operand (not immediate). */
-    int b, sljit_w immb)
+    sljit_si b, sljit_sw immb)
 {
     sljit_ub *buf;
     sljit_ub *buf_ptr;
-    int flags = size & ~0xf;
-    int inst_size;
+    sljit_si flags = size & ~0xf;
+    sljit_si inst_size;


     /* Both cannot be switched on. */
     SLJIT_ASSERT((flags & (EX86_BIN_INS | EX86_SHIFT_INS)) != (EX86_BIN_INS | EX86_SHIFT_INS));
@@ -262,13 +262,16 @@
 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
     /* SSE2 and immediate is not possible. */
     SLJIT_ASSERT(!(a & SLJIT_IMM) || !(flags & EX86_SSE2));
+    SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3)
+        && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66)
+        && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66));
 #endif


     size &= 0xf;
     inst_size = size;


 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
-    if (flags & EX86_PREF_F2)
+    if (flags & (EX86_PREF_F2 | EX86_PREF_F3))
         inst_size++;
 #endif
     if (flags & EX86_PREF_66)
@@ -278,13 +281,13 @@
     inst_size += 1; /* mod r/m byte. */
     if (b & SLJIT_MEM) {
         if ((b & 0x0f) == SLJIT_UNUSED)
-            inst_size += sizeof(sljit_w);
+            inst_size += sizeof(sljit_sw);
         else if (immb != 0 && !(b & 0xf0)) {
             /* Immediate operand. */
             if (immb <= 127 && immb >= -128)
-                inst_size += sizeof(sljit_b);
+                inst_size += sizeof(sljit_sb);
             else
-                inst_size += sizeof(sljit_w);
+                inst_size += sizeof(sljit_sw);
         }


         if ((b & 0xf) == SLJIT_LOCALS_REG && !(b & 0xf0))
@@ -314,7 +317,7 @@
         else if (flags & EX86_HALF_ARG)
             inst_size += sizeof(short);
         else
-            inst_size += sizeof(sljit_w);
+            inst_size += sizeof(sljit_sw);
     }
     else
         SLJIT_ASSERT(!(flags & EX86_SHIFT_INS) || a == SLJIT_PREF_SHIFT_REG);
@@ -327,6 +330,8 @@
 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
     if (flags & EX86_PREF_F2)
         *buf++ = 0xf2;
+    if (flags & EX86_PREF_F3)
+        *buf++ = 0xf3;
 #endif
     if (flags & EX86_PREF_66)
         *buf++ = 0x66;
@@ -387,8 +392,8 @@
                 if (immb <= 127 && immb >= -128)
                     *buf_ptr++ = immb; /* 8 bit displacement. */
                 else {
-                    *(sljit_w*)buf_ptr = immb; /* 32 bit displacement. */
-                    buf_ptr += sizeof(sljit_w);
+                    *(sljit_sw*)buf_ptr = immb; /* 32 bit displacement. */
+                    buf_ptr += sizeof(sljit_sw);
                 }
             }
         }
@@ -399,8 +404,8 @@
     }
     else {
         *buf_ptr++ |= 0x05;
-        *(sljit_w*)buf_ptr = immb; /* 32 bit displacement. */
-        buf_ptr += sizeof(sljit_w);
+        *(sljit_sw*)buf_ptr = immb; /* 32 bit displacement. */
+        buf_ptr += sizeof(sljit_sw);
     }


     if (a & SLJIT_IMM) {
@@ -409,7 +414,7 @@
         else if (flags & EX86_HALF_ARG)
             *(short*)buf_ptr = imma;
         else if (!(flags & EX86_SHIFT_INS))
-            *(sljit_w*)buf_ptr = imma;
+            *(sljit_sw*)buf_ptr = imma;
     }


     return !(flags & EX86_SHIFT_INS) ? buf : (buf + 1);
@@ -419,7 +424,7 @@
 /*  Call / return instructions                                           */
 /* --------------------------------------------------------------------- */


-static SLJIT_INLINE int call_with_args(struct sljit_compiler *compiler, int type)
+static SLJIT_INLINE sljit_si call_with_args(struct sljit_compiler *compiler, sljit_si type)
 {
     sljit_ub *buf;


@@ -445,7 +450,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     sljit_ub *buf;


@@ -479,7 +484,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     sljit_ub *buf;


@@ -513,8 +518,8 @@

         INC_SIZE(5 + 1);
         *buf++ = 0x68;
-        *(sljit_w*)buf = srcw;
-        buf += sizeof(sljit_w);
+        *(sljit_sw*)buf = srcw;
+        buf += sizeof(sljit_sw);
     }


     RET();


Modified: code/trunk/sljit/sljitNativeX86_64.c
===================================================================
--- code/trunk/sljit/sljitNativeX86_64.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeX86_64.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -26,20 +26,20 @@


/* x86 64-bit arch dependent functions. */

-static int emit_load_imm64(struct sljit_compiler *compiler, int reg, sljit_w imm)
+static sljit_si emit_load_imm64(struct sljit_compiler *compiler, sljit_si reg, sljit_sw imm)
 {
     sljit_ub *buf;


-    buf = (sljit_ub*)ensure_buf(compiler, 1 + 2 + sizeof(sljit_w));
+    buf = (sljit_ub*)ensure_buf(compiler, 1 + 2 + sizeof(sljit_sw));
     FAIL_IF(!buf);
-    INC_SIZE(2 + sizeof(sljit_w));
+    INC_SIZE(2 + sizeof(sljit_sw));
     *buf++ = REX_W | ((reg_map[reg] <= 7) ? 0 : REX_B);
     *buf++ = 0xb8 + (reg_map[reg] & 0x7);
-    *(sljit_w*)buf = imm;
+    *(sljit_sw*)buf = imm;
     return SLJIT_SUCCESS;
 }


-static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, int type)
+static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, sljit_si type)
 {
     if (type < SLJIT_JUMP) {
         *code_ptr++ = get_jump_code(type ^ 0x1) - 0x10;
@@ -54,9 +54,9 @@
     if (jump->flags & JUMP_LABEL)
         jump->flags |= PATCH_MD;
     else
-        *(sljit_w*)code_ptr = jump->u.target;
+        *(sljit_sw*)code_ptr = jump->u.target;


-    code_ptr += sizeof(sljit_w);
+    code_ptr += sizeof(sljit_sw);
     *code_ptr++ = REX_B;
     *code_ptr++ = 0xff;
     *code_ptr++ = (type >= SLJIT_FAST_CALL) ? 0xd1 /* call */ : 0xe1 /* jmp */;
@@ -64,20 +64,20 @@
     return code_ptr;
 }


-static sljit_ub* generate_fixed_jump(sljit_ub *code_ptr, sljit_w addr, int type)
+static sljit_ub* generate_fixed_jump(sljit_ub *code_ptr, sljit_sw addr, sljit_si type)
 {
-    sljit_w delta = addr - ((sljit_w)code_ptr + 1 + sizeof(sljit_hw));
+    sljit_sw delta = addr - ((sljit_sw)code_ptr + 1 + sizeof(sljit_si));


     if (delta <= SLJIT_W(0x7fffffff) && delta >= SLJIT_W(-0x80000000)) {
         *code_ptr++ = (type == 2) ? 0xe8 /* call */ : 0xe9 /* jmp */;
-        *(sljit_w*)code_ptr = delta;
+        *(sljit_sw*)code_ptr = delta;
     }
     else {
         SLJIT_COMPILE_ASSERT(reg_map[TMP_REG3] == 9, tmp3_is_9_second);
         *code_ptr++ = REX_W | REX_B;
         *code_ptr++ = 0xb8 + 1;
-        *(sljit_w*)code_ptr = addr;
-        code_ptr += sizeof(sljit_w);
+        *(sljit_sw*)code_ptr = addr;
+        code_ptr += sizeof(sljit_sw);
         *code_ptr++ = REX_B;
         *code_ptr++ = 0xff;
         *code_ptr++ = (type == 2) ? 0xd1 /* call */ : 0xe1 /* jmp */;
@@ -86,9 +86,9 @@
     return code_ptr;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int size, pushed_size;
+    sljit_si size, pushed_size;
     sljit_ub *buf;


     CHECK_ERROR();
@@ -103,7 +103,7 @@


     size = saveds;
     /* Including the return address saved by the call instruction. */
-    pushed_size = (saveds + 1) * sizeof(sljit_w);
+    pushed_size = (saveds + 1) * sizeof(sljit_sw);
 #ifndef _WIN64
     if (saveds >= 2)
         size += saveds - 1;
@@ -112,7 +112,7 @@
         size += saveds - 3;
     if (temporaries >= 5) {
         size += (5 - 4) * 2;
-        pushed_size += sizeof(sljit_w);
+        pushed_size += sizeof(sljit_sw);
     }
 #endif
     size += args * 3;
@@ -210,11 +210,11 @@
         /* Pushed size must be divisible by 8. */
         SLJIT_ASSERT(!(pushed_size & 0x7));
         if (pushed_size & 0x8) {
-            *buf++ = 5 * sizeof(sljit_w);
-            local_size -= 5 * sizeof(sljit_w);
+            *buf++ = 5 * sizeof(sljit_sw);
+            local_size -= 5 * sizeof(sljit_sw);
         } else {
-            *buf++ = 4 * sizeof(sljit_w);
-            local_size -= 4 * sizeof(sljit_w);
+            *buf++ = 4 * sizeof(sljit_sw);
+            local_size -= 4 * sizeof(sljit_sw);
         }
         FAIL_IF(emit_load_imm64(compiler, SLJIT_TEMPORARY_REG1, local_size));
         FAIL_IF(sljit_emit_ijump(compiler, SLJIT_CALL1, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_grow_stack)));
@@ -237,16 +237,16 @@
         *buf++ = REX_W;
         *buf++ = 0x81;
         *buf++ = 0xc0 | (5 << 3) | 4;
-        *(sljit_hw*)buf = local_size;
-        buf += sizeof(sljit_hw);
+        *(sljit_si*)buf = local_size;
+        buf += sizeof(sljit_si);
     }


     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)
 {
-    int pushed_size;
+    sljit_si pushed_size;


     CHECK_ERROR_VOID();
     check_sljit_set_context(compiler, args, temporaries, saveds, local_size);
@@ -258,17 +258,17 @@
 #endif


     /* Including the return address saved by the call instruction. */
-    pushed_size = (saveds + 1) * sizeof(sljit_w);
+    pushed_size = (saveds + 1) * sizeof(sljit_sw);
 #ifdef _WIN64
     if (temporaries >= 5)
-        pushed_size += sizeof(sljit_w);
+        pushed_size += sizeof(sljit_sw);
 #endif
     compiler->local_size = ((local_size + FIXED_LOCALS_OFFSET + pushed_size + 16 - 1) & ~(16 - 1)) - pushed_size;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
 {
-    int size;
+    sljit_si size;
     sljit_ub *buf;


     CHECK_ERROR();
@@ -294,7 +294,7 @@
         *buf++ = REX_W;
         *buf++ = 0x81;
         *buf++ = 0xc0 | (0 << 3) | 4;
-        *(sljit_hw*)buf = compiler->local_size;
+        *(sljit_si*)buf = compiler->local_size;
     }


     size = 1 + compiler->saveds;
@@ -349,39 +349,39 @@
 /*  Operators                                                            */
 /* --------------------------------------------------------------------- */


-static int emit_do_imm32(struct sljit_compiler *compiler, sljit_ub rex, sljit_ub opcode, sljit_w imm)
+static sljit_si emit_do_imm32(struct sljit_compiler *compiler, sljit_ub rex, sljit_ub opcode, sljit_sw imm)
 {
     sljit_ub *buf;


     if (rex != 0) {
-        buf = (sljit_ub*)ensure_buf(compiler, 1 + 2 + sizeof(sljit_hw));
+        buf = (sljit_ub*)ensure_buf(compiler, 1 + 2 + sizeof(sljit_si));
         FAIL_IF(!buf);
-        INC_SIZE(2 + sizeof(sljit_hw));
+        INC_SIZE(2 + sizeof(sljit_si));
         *buf++ = rex;
         *buf++ = opcode;
-        *(sljit_hw*)buf = imm;
+        *(sljit_si*)buf = imm;
     }
     else {
-        buf = (sljit_ub*)ensure_buf(compiler, 1 + 1 + sizeof(sljit_hw));
+        buf = (sljit_ub*)ensure_buf(compiler, 1 + 1 + sizeof(sljit_si));
         FAIL_IF(!buf);
-        INC_SIZE(1 + sizeof(sljit_hw));
+        INC_SIZE(1 + sizeof(sljit_si));
         *buf++ = opcode;
-        *(sljit_hw*)buf = imm;
+        *(sljit_si*)buf = imm;
     }
     return SLJIT_SUCCESS;
 }


-static sljit_ub* emit_x86_instruction(struct sljit_compiler *compiler, int size,
+static sljit_ub* emit_x86_instruction(struct sljit_compiler *compiler, sljit_si size,
     /* The register or immediate operand. */
-    int a, sljit_w imma,
+    sljit_si a, sljit_sw imma,
     /* The general operand (not immediate). */
-    int b, sljit_w immb)
+    sljit_si b, sljit_sw immb)
 {
     sljit_ub *buf;
     sljit_ub *buf_ptr;
     sljit_ub rex = 0;
-    int flags = size & ~0xf;
-    int inst_size;
+    sljit_si flags = size & ~0xf;
+    sljit_si inst_size;


     /* The immediate operand must be 32 bit. */
     SLJIT_ASSERT(!(a & SLJIT_IMM) || compiler->mode32 || IS_HALFWORD(imma));
@@ -394,6 +394,9 @@
 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
     /* SSE2 and immediate is not possible. */
     SLJIT_ASSERT(!(a & SLJIT_IMM) || !(flags & EX86_SSE2));
+    SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3)
+        && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66)
+        && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66));
 #endif


     size &= 0xf;
@@ -415,7 +418,7 @@
         rex |= REX;


 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
-    if (flags & EX86_PREF_F2)
+    if (flags & (EX86_PREF_F2 | EX86_PREF_F3))
         inst_size++;
 #endif
     if (flags & EX86_PREF_66)
@@ -425,16 +428,16 @@
     inst_size += 1; /* mod r/m byte. */
     if (b & SLJIT_MEM) {
         if ((b & 0x0f) == SLJIT_UNUSED)
-            inst_size += 1 + sizeof(sljit_hw); /* SIB byte required to avoid RIP based addressing. */
+            inst_size += 1 + sizeof(sljit_si); /* SIB byte required to avoid RIP based addressing. */
         else {
             if (reg_map[b & 0x0f] >= 8)
                 rex |= REX_B;
             if (immb != 0 && !(b & 0xf0)) {
                 /* Immediate operand. */
                 if (immb <= 127 && immb >= -128)
-                    inst_size += sizeof(sljit_b);
+                    inst_size += sizeof(sljit_sb);
                 else
-                    inst_size += sizeof(sljit_hw);
+                    inst_size += sizeof(sljit_si);
             }
         }


@@ -474,7 +477,7 @@
         else if (flags & EX86_HALF_ARG)
             inst_size += sizeof(short);
         else
-            inst_size += sizeof(sljit_hw);
+            inst_size += sizeof(sljit_si);
     }
     else {
         SLJIT_ASSERT(!(flags & EX86_SHIFT_INS) || a == SLJIT_PREF_SHIFT_REG);
@@ -499,6 +502,8 @@
 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
     if (flags & EX86_PREF_F2)
         *buf++ = 0xf2;
+    if (flags & EX86_PREF_F3)
+        *buf++ = 0xf3;
 #endif
     if (flags & EX86_PREF_66)
         *buf++ = 0x66;
@@ -560,8 +565,8 @@
                 if (immb <= 127 && immb >= -128)
                     *buf_ptr++ = immb; /* 8 bit displacement. */
                 else {
-                    *(sljit_hw*)buf_ptr = immb; /* 32 bit displacement. */
-                    buf_ptr += sizeof(sljit_hw);
+                    *(sljit_si*)buf_ptr = immb; /* 32 bit displacement. */
+                    buf_ptr += sizeof(sljit_si);
                 }
             }
         }
@@ -573,8 +578,8 @@
     else {
         *buf_ptr++ |= 0x04;
         *buf_ptr++ = 0x25;
-        *(sljit_hw*)buf_ptr = immb; /* 32 bit displacement. */
-        buf_ptr += sizeof(sljit_hw);
+        *(sljit_si*)buf_ptr = immb; /* 32 bit displacement. */
+        buf_ptr += sizeof(sljit_si);
     }


     if (a & SLJIT_IMM) {
@@ -583,7 +588,7 @@
         else if (flags & EX86_HALF_ARG)
             *(short*)buf_ptr = imma;
         else if (!(flags & EX86_SHIFT_INS))
-            *(sljit_hw*)buf_ptr = imma;
+            *(sljit_si*)buf_ptr = imma;
     }


     return !(flags & EX86_SHIFT_INS) ? buf : (buf + 1);
@@ -593,7 +598,7 @@
 /*  Call / return instructions                                           */
 /* --------------------------------------------------------------------- */


-static SLJIT_INLINE int call_with_args(struct sljit_compiler *compiler, int type)
+static SLJIT_INLINE sljit_si call_with_args(struct sljit_compiler *compiler, sljit_si type)
 {
     sljit_ub *buf;


@@ -629,7 +634,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
 {
     sljit_ub *buf;


@@ -668,7 +673,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_return(struct sljit_compiler *compiler, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
 {
     sljit_ub *buf;


@@ -718,8 +723,8 @@

         INC_SIZE(5 + 1);
         *buf++ = 0x68;
-        *(sljit_hw*)buf = srcw;
-        buf += sizeof(sljit_hw);
+        *(sljit_si*)buf = srcw;
+        buf += sizeof(sljit_si);
     }


     RET();
@@ -731,12 +736,12 @@
 /*  Extend input                                                         */
 /* --------------------------------------------------------------------- */


-static int emit_mov_int(struct sljit_compiler *compiler, int sign,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_mov_int(struct sljit_compiler *compiler, sljit_si sign,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;
-    int dst_r;
+    sljit_si dst_r;


     compiler->mode32 = 0;


@@ -746,7 +751,7 @@
     if (src & SLJIT_IMM) {
         if (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) {
             if (sign || ((sljit_uw)srcw <= 0x7fffffff)) {
-                code = emit_x86_instruction(compiler, 1, SLJIT_IMM, (sljit_w)(sljit_i)srcw, dst, dstw);
+                code = emit_x86_instruction(compiler, 1, SLJIT_IMM, (sljit_sw)(sljit_si)srcw, dst, dstw);
                 FAIL_IF(!code);
                 *code = 0xc7;
                 return SLJIT_SUCCESS;
@@ -754,7 +759,7 @@
             return emit_load_imm64(compiler, dst, srcw);
         }
         compiler->mode32 = 1;
-        code = emit_x86_instruction(compiler, 1, SLJIT_IMM, (sljit_w)(sljit_i)srcw, dst, dstw);
+        code = emit_x86_instruction(compiler, 1, SLJIT_IMM, (sljit_sw)(sljit_si)srcw, dst, dstw);
         FAIL_IF(!code);
         *code = 0xc7;
         compiler->mode32 = 0;


Modified: code/trunk/sljit/sljitNativeX86_common.c
===================================================================
--- code/trunk/sljit/sljitNativeX86_common.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitNativeX86_common.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -72,12 +72,12 @@


 #define CHECK_EXTRA_REGS(p, w, do) \
     if (p >= SLJIT_TEMPORARY_EREG1 && p <= SLJIT_TEMPORARY_EREG2) { \
-        w = compiler->temporaries_start + (p - SLJIT_TEMPORARY_EREG1) * sizeof(sljit_w); \
+        w = compiler->temporaries_start + (p - SLJIT_TEMPORARY_EREG1) * sizeof(sljit_sw); \
         p = SLJIT_MEM1(SLJIT_LOCALS_REG); \
         do; \
     } \
     else if (p >= SLJIT_SAVED_EREG1 && p <= SLJIT_SAVED_EREG2) { \
-        w = compiler->saveds_start + (p - SLJIT_SAVED_EREG1) * sizeof(sljit_w); \
+        w = compiler->saveds_start + (p - SLJIT_SAVED_EREG1) * sizeof(sljit_sw); \
         p = SLJIT_MEM1(SLJIT_LOCALS_REG); \
         do; \
     }
@@ -118,9 +118,6 @@
 #define REX_B        0x41
 #define REX        0x40


-typedef unsigned int sljit_uhw;
-typedef int sljit_hw;
-
 #define IS_HALFWORD(x)        ((x) <= 0x7fffffffll && (x) >= -0x80000000ll)
 #define NOT_HALFWORD(x)        ((x) > 0x7fffffffll || (x) < -0x80000000ll)


@@ -129,7 +126,7 @@
#endif /* SLJIT_CONFIG_X86_32 */

 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
-#define TMP_FREG    (SLJIT_FLOAT_REG4 + 1)
+#define TMP_FREG    (0)
 #endif


 /* Size flags for emit_x86_instruction: */
@@ -142,8 +139,9 @@
 #define EX86_PREF_66        0x0400


 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
-#define EX86_PREF_F2        0x0800
-#define EX86_SSE2        0x1000
+#define EX86_SSE2        0x0800
+#define EX86_PREF_F2        0x1000
+#define EX86_PREF_F3        0x2000
 #endif


 #define INC_SIZE(s)            (*buf++ = (s), compiler->size += (s))
@@ -156,7 +154,7 @@
 /* r32, r/m32 */
 #define MOV_RM(mod, reg, rm)        (*buf++ = (0x8b), *buf++ = (mod) << 6 | (reg) << 3 | (rm))


-static sljit_ub get_jump_code(int type)
+static sljit_ub get_jump_code(sljit_si type)
 {
     switch (type) {
     case SLJIT_C_EQUAL:
@@ -212,25 +210,25 @@
     return 0;
 }


-static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, int type);
+static sljit_ub* generate_far_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, sljit_si type);

#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-static sljit_ub* generate_fixed_jump(sljit_ub *code_ptr, sljit_w addr, int type);
+static sljit_ub* generate_fixed_jump(sljit_ub *code_ptr, sljit_sw addr, sljit_si type);
#endif

-static sljit_ub* generate_near_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, sljit_ub *code, int type)
+static sljit_ub* generate_near_jump_code(struct sljit_jump *jump, sljit_ub *code_ptr, sljit_ub *code, sljit_si type)
 {
-    int short_jump;
+    sljit_si short_jump;
     sljit_uw label_addr;


     if (jump->flags & JUMP_LABEL)
         label_addr = (sljit_uw)(code + jump->u.label->size);
     else
         label_addr = jump->u.target;
-    short_jump = (sljit_w)(label_addr - (jump->addr + 2)) >= -128 && (sljit_w)(label_addr - (jump->addr + 2)) <= 127;
+    short_jump = (sljit_sw)(label_addr - (jump->addr + 2)) >= -128 && (sljit_sw)(label_addr - (jump->addr + 2)) <= 127;


 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    if ((sljit_w)(label_addr - (jump->addr + 1)) > 0x7fffffffll || (sljit_w)(label_addr - (jump->addr + 1)) < -0x80000000ll)
+    if ((sljit_sw)(label_addr - (jump->addr + 1)) > 0x7fffffffll || (sljit_sw)(label_addr - (jump->addr + 1)) < -0x80000000ll)
         return generate_far_jump_code(jump, code_ptr, type);
 #endif


@@ -258,13 +256,13 @@

     if (short_jump) {
         jump->flags |= PATCH_MB;
-        code_ptr += sizeof(sljit_b);
+        code_ptr += sizeof(sljit_sb);
     } else {
         jump->flags |= PATCH_MW;
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-        code_ptr += sizeof(sljit_w);
+        code_ptr += sizeof(sljit_sw);
 #else
-        code_ptr += sizeof(sljit_hw);
+        code_ptr += sizeof(sljit_si);
 #endif
     }


@@ -323,19 +321,19 @@
                     label = label->next;
                 }
                 else if (*buf_ptr == 1) {
-                    const_->addr = ((sljit_uw)code_ptr) - sizeof(sljit_w);
+                    const_->addr = ((sljit_uw)code_ptr) - sizeof(sljit_sw);
                     const_ = const_->next;
                 }
                 else {
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
                     *code_ptr++ = (*buf_ptr == 2) ? 0xe8 /* call */ : 0xe9 /* jmp */;
                     buf_ptr++;
-                    *(sljit_w*)code_ptr = *(sljit_w*)buf_ptr - ((sljit_w)code_ptr + sizeof(sljit_w));
-                    code_ptr += sizeof(sljit_w);
-                    buf_ptr += sizeof(sljit_w) - 1;
+                    *(sljit_sw*)code_ptr = *(sljit_sw*)buf_ptr - ((sljit_sw)code_ptr + sizeof(sljit_sw));
+                    code_ptr += sizeof(sljit_sw);
+                    buf_ptr += sizeof(sljit_sw) - 1;
 #else
-                    code_ptr = generate_fixed_jump(code_ptr, *(sljit_w*)(buf_ptr + 1), *buf_ptr);
-                    buf_ptr += sizeof(sljit_w);
+                    code_ptr = generate_fixed_jump(code_ptr, *(sljit_sw*)(buf_ptr + 1), *buf_ptr);
+                    buf_ptr += sizeof(sljit_sw);
 #endif
                 }
                 buf_ptr++;
@@ -352,29 +350,29 @@
     jump = compiler->jumps;
     while (jump) {
         if (jump->flags & PATCH_MB) {
-            SLJIT_ASSERT((sljit_w)(jump->u.label->addr - (jump->addr + sizeof(sljit_b))) >= -128 && (sljit_w)(jump->u.label->addr - (jump->addr + sizeof(sljit_b))) <= 127);
-            *(sljit_ub*)jump->addr = (sljit_ub)(jump->u.label->addr - (jump->addr + sizeof(sljit_b)));
+            SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - (jump->addr + sizeof(sljit_sb))) >= -128 && (sljit_sw)(jump->u.label->addr - (jump->addr + sizeof(sljit_sb))) <= 127);
+            *(sljit_ub*)jump->addr = (sljit_ub)(jump->u.label->addr - (jump->addr + sizeof(sljit_sb)));
         } else if (jump->flags & PATCH_MW) {
             if (jump->flags & JUMP_LABEL) {
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-                *(sljit_w*)jump->addr = (sljit_w)(jump->u.label->addr - (jump->addr + sizeof(sljit_w)));
+                *(sljit_sw*)jump->addr = (sljit_sw)(jump->u.label->addr - (jump->addr + sizeof(sljit_sw)));
 #else
-                SLJIT_ASSERT((sljit_w)(jump->u.label->addr - (jump->addr + sizeof(sljit_hw))) >= -0x80000000ll && (sljit_w)(jump->u.label->addr - (jump->addr + sizeof(sljit_hw))) <= 0x7fffffffll);
-                *(sljit_hw*)jump->addr = (sljit_hw)(jump->u.label->addr - (jump->addr + sizeof(sljit_hw)));
+                SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - (jump->addr + sizeof(sljit_si))) >= -0x80000000ll && (sljit_sw)(jump->u.label->addr - (jump->addr + sizeof(sljit_si))) <= 0x7fffffffll);
+                *(sljit_si*)jump->addr = (sljit_si)(jump->u.label->addr - (jump->addr + sizeof(sljit_si)));
 #endif
             }
             else {
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-                *(sljit_w*)jump->addr = (sljit_w)(jump->u.target - (jump->addr + sizeof(sljit_w)));
+                *(sljit_sw*)jump->addr = (sljit_sw)(jump->u.target - (jump->addr + sizeof(sljit_sw)));
 #else
-                SLJIT_ASSERT((sljit_w)(jump->u.target - (jump->addr + sizeof(sljit_hw))) >= -0x80000000ll && (sljit_w)(jump->u.target - (jump->addr + sizeof(sljit_hw))) <= 0x7fffffffll);
-                *(sljit_hw*)jump->addr = (sljit_hw)(jump->u.target - (jump->addr + sizeof(sljit_hw)));
+                SLJIT_ASSERT((sljit_sw)(jump->u.target - (jump->addr + sizeof(sljit_si))) >= -0x80000000ll && (sljit_sw)(jump->u.target - (jump->addr + sizeof(sljit_si))) <= 0x7fffffffll);
+                *(sljit_si*)jump->addr = (sljit_si)(jump->u.target - (jump->addr + sizeof(sljit_si)));
 #endif
             }
         }
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
         else if (jump->flags & PATCH_MD)
-            *(sljit_w*)jump->addr = jump->u.label->addr;
+            *(sljit_sw*)jump->addr = jump->u.label->addr;
 #endif


         jump = jump->next;
@@ -391,23 +389,23 @@
 /*  Operators                                                            */
 /* --------------------------------------------------------------------- */


-static int emit_cum_binary(struct sljit_compiler *compiler,
+static sljit_si emit_cum_binary(struct sljit_compiler *compiler,
     sljit_ub op_rm, sljit_ub op_mr, sljit_ub op_imm, sljit_ub op_eax_imm,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


-static int emit_non_cum_binary(struct sljit_compiler *compiler,
+static sljit_si emit_non_cum_binary(struct sljit_compiler *compiler,
     sljit_ub op_rm, sljit_ub op_mr, sljit_ub op_imm, sljit_ub op_eax_imm,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w);
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w);


-static int emit_mov(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw);
+static sljit_si emit_mov(struct sljit_compiler *compiler,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw);


-static SLJIT_INLINE int emit_save_flags(struct sljit_compiler *compiler)
+static SLJIT_INLINE sljit_si emit_save_flags(struct sljit_compiler *compiler)
 {
     sljit_ub *buf;


@@ -421,16 +419,16 @@
     INC_SIZE(6);
     *buf++ = REX_W;
 #endif
-    *buf++ = 0x8d; /* lea esp/rsp, [esp/rsp + sizeof(sljit_w)] */
+    *buf++ = 0x8d; /* lea esp/rsp, [esp/rsp + sizeof(sljit_sw)] */
     *buf++ = 0x64;
     *buf++ = 0x24;
-    *buf++ = (sljit_ub)sizeof(sljit_w);
+    *buf++ = (sljit_ub)sizeof(sljit_sw);
     *buf++ = 0x9c; /* pushfd / pushfq */
     compiler->flags_saved = 1;
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_restore_flags(struct sljit_compiler *compiler, int keep_flags)
+static SLJIT_INLINE sljit_si emit_restore_flags(struct sljit_compiler *compiler, sljit_si keep_flags)
 {
     sljit_ub *buf;


@@ -446,10 +444,10 @@
     *buf++ = 0x9d; /* popfq */
     *buf++ = REX_W;
 #endif
-    *buf++ = 0x8d; /* lea esp/rsp, [esp/rsp - sizeof(sljit_w)] */
+    *buf++ = 0x8d; /* lea esp/rsp, [esp/rsp - sizeof(sljit_sw)] */
     *buf++ = 0x64;
     *buf++ = 0x24;
-    *buf++ = (sljit_ub)-(int)sizeof(sljit_w);
+    *buf++ = (sljit_ub)-(sljit_sb)sizeof(sljit_sw);
     compiler->flags_saved = keep_flags;
     return SLJIT_SUCCESS;
 }
@@ -457,7 +455,7 @@
 #ifdef _WIN32
 #include <malloc.h>


-static void SLJIT_CALL sljit_grow_stack(sljit_w local_size)
+static void SLJIT_CALL sljit_grow_stack(sljit_sw local_size)
 {
     /* Workaround for calling the internal _chkstk() function on Windows.
     This function touches all 4k pages belongs to the requested stack space,
@@ -476,9 +474,9 @@
 #include "sljitNativeX86_64.c"
 #endif


-static int emit_mov(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_mov(struct sljit_compiler *compiler,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;


@@ -544,11 +542,11 @@
 #define EMIT_MOV(compiler, dst, dstw, src, srcw) \
     FAIL_IF(emit_mov(compiler, dst, dstw, src, srcw));


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op0(struct sljit_compiler *compiler, int op)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
 {
     sljit_ub *buf;
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    int size;
+    sljit_si size;
 #endif


     CHECK_ERROR();
@@ -688,14 +686,14 @@
         *code = (prefix); \
     } while (0)


-static int emit_mov_byte(struct sljit_compiler *compiler, int sign,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_mov_byte(struct sljit_compiler *compiler, sljit_si sign,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;
-    int dst_r;
+    sljit_si dst_r;
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-    int work_r;
+    sljit_si work_r;
 #endif


 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
@@ -831,12 +829,12 @@
     return SLJIT_SUCCESS;
 }


-static int emit_mov_half(struct sljit_compiler *compiler, int sign,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_mov_half(struct sljit_compiler *compiler, sljit_si sign,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;
-    int dst_r;
+    sljit_si dst_r;


 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
     compiler->mode32 = 0;
@@ -879,9 +877,9 @@
     return SLJIT_SUCCESS;
 }


-static int emit_unary(struct sljit_compiler *compiler, int un_index,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_unary(struct sljit_compiler *compiler, sljit_si un_index,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;


@@ -918,9 +916,9 @@
     return SLJIT_SUCCESS;
 }


-static int emit_not_with_flags(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_not_with_flags(struct sljit_compiler *compiler,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;


@@ -958,14 +956,14 @@
     return SLJIT_SUCCESS;
 }


-static int emit_clz(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+static sljit_si emit_clz(struct sljit_compiler *compiler, sljit_si op_flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;
-    int dst_r;
+    sljit_si dst_r;


-    SLJIT_UNUSED_ARG(op);
+    SLJIT_UNUSED_ARG(op_flags);
     if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) {
         /* Just set the zero flag. */
         EMIT_MOV(compiler, TMP_REGISTER, 0, src, srcw);
@@ -976,7 +974,7 @@
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
         code = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_IMM, 31, TMP_REGISTER, 0);
 #else
-        code = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_IMM, !(op & SLJIT_INT_OP) ? 63 : 31, TMP_REGISTER, 0);
+        code = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_IMM, !(op_flags & SLJIT_INT_OP) ? 63 : 31, TMP_REGISTER, 0);
 #endif
         FAIL_IF(!code);
         *code |= 0x5 << 3;
@@ -1011,8 +1009,8 @@
 #else
     dst_r = (dst >= SLJIT_TEMPORARY_REG1 && dst <= TMP_REGISTER) ? dst : TMP_REG2;
     compiler->mode32 = 0;
-    EMIT_MOV(compiler, dst_r, 0, SLJIT_IMM, !(op & SLJIT_INT_OP) ? 64 + 63 : 32 + 31);
-    compiler->mode32 = op & SLJIT_INT_OP;
+    EMIT_MOV(compiler, dst_r, 0, SLJIT_IMM, !(op_flags & SLJIT_INT_OP) ? 64 + 63 : 32 + 31);
+    compiler->mode32 = op_flags & SLJIT_INT_OP;
 #endif


     code = emit_x86_instruction(compiler, 2, dst_r, 0, TMP_REGISTER, 0);
@@ -1023,7 +1021,7 @@
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
     code = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, 31, dst_r, 0);
 #else
-    code = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op & SLJIT_INT_OP) ? 63 : 31, dst_r, 0);
+    code = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op_flags & SLJIT_INT_OP) ? 63 : 31, dst_r, 0);
 #endif
     FAIL_IF(!code);
     *(code + 1) |= 0x6 << 3;
@@ -1041,15 +1039,16 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     sljit_ub* code;
-    int update = 0;
+    sljit_si update = 0;
+    sljit_si op_flags = GET_ALL_FLAGS(op);
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-    int dst_is_ereg = 0;
-    int src_is_ereg = 0;
+    sljit_si dst_is_ereg = 0;
+    sljit_si src_is_ereg = 0;
 #else
     #define src_is_ereg 0
 #endif
@@ -1062,15 +1061,32 @@
     CHECK_EXTRA_REGS(dst, dstw, dst_is_ereg = 1);
     CHECK_EXTRA_REGS(src, srcw, src_is_ereg = 1);
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    compiler->mode32 = op & SLJIT_INT_OP;
+    compiler->mode32 = op_flags & SLJIT_INT_OP;
 #endif


-    if (GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_MOVU_P) {
-        op = GET_OPCODE(op);
+    op = GET_OPCODE(op);
+    if (op >= SLJIT_MOV && op <= SLJIT_MOVU_P) {
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
         compiler->mode32 = 0;
 #endif


+        if (op_flags & SLJIT_INT_OP) {
+            if (src <= SLJIT_NO_REGISTERS && src == dst) {
+                if (!TYPE_CAST_NEEDED(op))
+                    return SLJIT_SUCCESS;
+            }
+#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
+            if (op == SLJIT_MOV_SI && (src & SLJIT_MEM))
+                op = SLJIT_MOV_UI;
+            if (op == SLJIT_MOVU_SI && (src & SLJIT_MEM))
+                op = SLJIT_MOVU_UI;
+            if (op == SLJIT_MOV_UI && (src & SLJIT_IMM))
+                op = SLJIT_MOV_SI;
+            if (op == SLJIT_MOVU_UI && (src & SLJIT_IMM))
+                op = SLJIT_MOVU_SI;
+#endif
+        }
+
         SLJIT_COMPILE_ASSERT(SLJIT_MOV + 8 == SLJIT_MOVU, movu_offset);
         if (op >= SLJIT_MOVU) {
             update = 1;
@@ -1083,20 +1099,20 @@
                 srcw = (sljit_ub)srcw;
                 break;
             case SLJIT_MOV_SB:
-                srcw = (sljit_b)srcw;
+                srcw = (sljit_sb)srcw;
                 break;
             case SLJIT_MOV_UH:
                 srcw = (sljit_uh)srcw;
                 break;
             case SLJIT_MOV_SH:
-                srcw = (sljit_h)srcw;
+                srcw = (sljit_sh)srcw;
                 break;
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
             case SLJIT_MOV_UI:
                 srcw = (sljit_ui)srcw;
                 break;
             case SLJIT_MOV_SI:
-                srcw = (sljit_i)srcw;
+                srcw = (sljit_si)srcw;
                 break;
 #endif
             }
@@ -1165,24 +1181,24 @@
         return SLJIT_SUCCESS;
     }


-    if (SLJIT_UNLIKELY(GET_FLAGS(op)))
+    if (SLJIT_UNLIKELY(GET_FLAGS(op_flags)))
         compiler->flags_saved = 0;


-    switch (GET_OPCODE(op)) {
+    switch (op) {
     case SLJIT_NOT:
-        if (SLJIT_UNLIKELY(op & SLJIT_SET_E))
+        if (SLJIT_UNLIKELY(op_flags & SLJIT_SET_E))
             return emit_not_with_flags(compiler, dst, dstw, src, srcw);
         return emit_unary(compiler, 0x2, dst, dstw, src, srcw);


     case SLJIT_NEG:
-        if (SLJIT_UNLIKELY(op & SLJIT_KEEP_FLAGS) && !compiler->flags_saved)
+        if (SLJIT_UNLIKELY(op_flags & SLJIT_KEEP_FLAGS) && !compiler->flags_saved)
             FAIL_IF(emit_save_flags(compiler));
         return emit_unary(compiler, 0x3, dst, dstw, src, srcw);


     case SLJIT_CLZ:
-        if (SLJIT_UNLIKELY(op & SLJIT_KEEP_FLAGS) && !compiler->flags_saved)
+        if (SLJIT_UNLIKELY(op_flags & SLJIT_KEEP_FLAGS) && !compiler->flags_saved)
             FAIL_IF(emit_save_flags(compiler));
-        return emit_clz(compiler, op, dst, dstw, src, srcw);
+        return emit_clz(compiler, op_flags, dst, dstw, src, srcw);
     }


     return SLJIT_SUCCESS;
@@ -1222,11 +1238,11 @@


#endif

-static int emit_cum_binary(struct sljit_compiler *compiler,
+static sljit_si emit_cum_binary(struct sljit_compiler *compiler,
     sljit_ub op_rm, sljit_ub op_mr, sljit_ub op_imm, sljit_ub op_eax_imm,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;


@@ -1338,11 +1354,11 @@
     return SLJIT_SUCCESS;
 }


-static int emit_non_cum_binary(struct sljit_compiler *compiler,
+static sljit_si emit_non_cum_binary(struct sljit_compiler *compiler,
     sljit_ub op_rm, sljit_ub op_mr, sljit_ub op_imm, sljit_ub op_eax_imm,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;


@@ -1420,13 +1436,13 @@
     return SLJIT_SUCCESS;
 }


-static int emit_mul(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_mul(struct sljit_compiler *compiler,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;
-    int dst_r;
+    sljit_si dst_r;


     dst_r = (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) ? dst : TMP_REGISTER;


@@ -1457,7 +1473,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 1);
             FAIL_IF(!code);
             INC_CSIZE(1);
-            *code = (sljit_b)src1w;
+            *code = (sljit_sb)src1w;
         }
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
         else {
@@ -1467,7 +1483,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 4);
             FAIL_IF(!code);
             INC_CSIZE(4);
-            *(sljit_w*)code = src1w;
+            *(sljit_sw*)code = src1w;
         }
 #else
         else if (IS_HALFWORD(src1w)) {
@@ -1477,7 +1493,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 4);
             FAIL_IF(!code);
             INC_CSIZE(4);
-            *(sljit_hw*)code = (sljit_hw)src1w;
+            *(sljit_si*)code = (sljit_si)src1w;
         }
         else {
             EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, src1w);
@@ -1500,7 +1516,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 1);
             FAIL_IF(!code);
             INC_CSIZE(1);
-            *code = (sljit_b)src2w;
+            *code = (sljit_sb)src2w;
         }
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
         else {
@@ -1510,7 +1526,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 4);
             FAIL_IF(!code);
             INC_CSIZE(4);
-            *(sljit_w*)code = src2w;
+            *(sljit_sw*)code = src2w;
         }
 #else
         else if (IS_HALFWORD(src2w)) {
@@ -1520,7 +1536,7 @@
             code = (sljit_ub*)ensure_buf(compiler, 1 + 4);
             FAIL_IF(!code);
             INC_CSIZE(4);
-            *(sljit_hw*)code = (sljit_hw)src2w;
+            *(sljit_si*)code = (sljit_si)src2w;
         }
         else {
             EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, src1w);
@@ -1550,13 +1566,13 @@
     return SLJIT_SUCCESS;
 }


-static int emit_lea_binary(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_lea_binary(struct sljit_compiler *compiler,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;
-    int dst_r, done = 0;
+    sljit_si dst_r, done = 0;


     /* These cases better be left to handled by normal way. */
     if (dst == src1 && dstw == src1w)
@@ -1575,7 +1591,7 @@
         }
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
         if ((src2 & SLJIT_IMM) && (compiler->mode32 || IS_HALFWORD(src2w))) {
-            code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src1), (int)src2w);
+            code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src1), (sljit_si)src2w);
 #else
         if (src2 & SLJIT_IMM) {
             code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src1), src2w);
@@ -1588,7 +1604,7 @@
     else if (src2 >= SLJIT_TEMPORARY_REG1 && src2 <= SLJIT_NO_REGISTERS) {
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
         if ((src1 & SLJIT_IMM) && (compiler->mode32 || IS_HALFWORD(src1w))) {
-            code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src2), (int)src1w);
+            code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src2), (sljit_si)src1w);
 #else
         if (src1 & SLJIT_IMM) {
             code = emit_x86_instruction(compiler, 1, dst_r, 0, SLJIT_MEM1(src2), src1w);
@@ -1607,9 +1623,9 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-static int emit_cmp_binary(struct sljit_compiler *compiler,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_cmp_binary(struct sljit_compiler *compiler,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;


@@ -1658,9 +1674,9 @@
     return SLJIT_SUCCESS;
 }


-static int emit_test_binary(struct sljit_compiler *compiler,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_test_binary(struct sljit_compiler *compiler,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;


@@ -1766,11 +1782,11 @@
     return SLJIT_SUCCESS;
 }


-static int emit_shift(struct sljit_compiler *compiler,
+static sljit_si emit_shift(struct sljit_compiler *compiler,
     sljit_ub mode,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     sljit_ub* code;


@@ -1838,7 +1854,7 @@
         EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_PREF_SHIFT_REG, 0);
 #else
         /* [esp+0] contains the flags. */
-        EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_w), SLJIT_PREF_SHIFT_REG, 0);
+        EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_sw), SLJIT_PREF_SHIFT_REG, 0);
 #endif
         EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, src2, src2w);
         code = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_PREF_SHIFT_REG, 0, TMP_REGISTER, 0);
@@ -1847,7 +1863,7 @@
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
         EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, TMP_REG2, 0);
 #else
-        EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_w));
+        EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_sw));
 #endif
         EMIT_MOV(compiler, dst, dstw, TMP_REGISTER, 0);
     }
@@ -1855,11 +1871,11 @@
     return SLJIT_SUCCESS;
 }


-static int emit_shift_with_flags(struct sljit_compiler *compiler,
-    sljit_ub mode, int set_flags,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+static sljit_si emit_shift_with_flags(struct sljit_compiler *compiler,
+    sljit_ub mode, sljit_si set_flags,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     /* The CPU does not set flags if the shift count is 0. */
     if (src2 & SLJIT_IMM) {
@@ -1890,10 +1906,10 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     CHECK_ERROR();
     check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -1985,7 +2001,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
 {
     check_sljit_get_register_index(reg);
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
@@ -1996,8 +2012,8 @@
     return reg_map[reg];
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
-    void *instruction, int size)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_custom(struct sljit_compiler *compiler,
+    void *instruction, sljit_si size)
 {
     sljit_ub *buf;


@@ -2019,26 +2035,30 @@
#if (defined SLJIT_SSE2 && SLJIT_SSE2)

/* Alignment + 2 * 16 bytes. */
-static sljit_i sse2_data[3 + 4 + 4];
-static sljit_i *sse2_buffer;
+static sljit_si sse2_data[3 + (4 + 4) * 2];
+static sljit_si *sse2_buffer;

 static void init_compiler(void)
 {
-    sse2_buffer = (sljit_i*)(((sljit_uw)sse2_data + 15) & ~0xf);
-    sse2_buffer[0] = 0;
-    sse2_buffer[1] = 0x80000000;
-    sse2_buffer[4] = 0xffffffff;
-    sse2_buffer[5] = 0x7fffffff;
+    sse2_buffer = (sljit_si*)(((sljit_uw)sse2_data + 15) & ~0xf);
+    /* Single precision constants. */
+    sse2_buffer[0] = 0x80000000;
+    sse2_buffer[4] = 0x7fffffff;
+    /* Double precision constants. */
+    sse2_buffer[8] = 0;
+    sse2_buffer[9] = 0x80000000;
+    sse2_buffer[12] = 0xffffffff;
+    sse2_buffer[13] = 0x7fffffff;
 }


#endif

-SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_is_fpu_available(void)
 {
 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
 #if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2)
-    static int sse2_available = -1;
-    int features;
+    static sljit_si sse2_available = -1;
+    sljit_si features;


     if (sse2_available != -1)
         return sse2_available;
@@ -2079,47 +2099,47 @@


#if (defined SLJIT_SSE2 && SLJIT_SSE2)

-static int emit_sse2(struct sljit_compiler *compiler, sljit_ub opcode,
-    int xmm1, int xmm2, sljit_w xmm2w)
+static sljit_si emit_sse2(struct sljit_compiler *compiler, sljit_ub opcode,
+    sljit_si single, sljit_si xmm1, sljit_si xmm2, sljit_sw xmm2w)
 {
     sljit_ub *buf;


-    buf = emit_x86_instruction(compiler, 2 | EX86_PREF_F2 | EX86_SSE2, xmm1, 0, xmm2, xmm2w);
+    buf = emit_x86_instruction(compiler, 2 | (single ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2, xmm1, 0, xmm2, xmm2w);
     FAIL_IF(!buf);
     *buf++ = 0x0f;
     *buf = opcode;
     return SLJIT_SUCCESS;
 }


-static int emit_sse2_logic(struct sljit_compiler *compiler, sljit_ub opcode,
-    int xmm1, int xmm2, sljit_w xmm2w)
+static sljit_si emit_sse2_logic(struct sljit_compiler *compiler, sljit_ub opcode,
+    sljit_si pref66, sljit_si xmm1, sljit_si xmm2, sljit_sw xmm2w)
 {
     sljit_ub *buf;


-    buf = emit_x86_instruction(compiler, 2 | EX86_PREF_66 | EX86_SSE2, xmm1, 0, xmm2, xmm2w);
+    buf = emit_x86_instruction(compiler, 2 | (pref66 ? EX86_PREF_66 : 0) | EX86_SSE2, xmm1, 0, xmm2, xmm2w);
     FAIL_IF(!buf);
     *buf++ = 0x0f;
     *buf = opcode;
     return SLJIT_SUCCESS;
 }


-static SLJIT_INLINE int emit_sse2_load(struct sljit_compiler *compiler,
-    int dst, int src, sljit_w srcw)
+static SLJIT_INLINE sljit_si emit_sse2_load(struct sljit_compiler *compiler,
+    sljit_si single, sljit_si dst, sljit_si src, sljit_sw srcw)
 {
-    return emit_sse2(compiler, 0x10, dst, src, srcw);
+    return emit_sse2(compiler, 0x10, single, dst, src, srcw);
 }


-static SLJIT_INLINE int emit_sse2_store(struct sljit_compiler *compiler,
-    int dst, sljit_w dstw, int src)
+static SLJIT_INLINE sljit_si emit_sse2_store(struct sljit_compiler *compiler,
+    sljit_si single, sljit_si dst, sljit_sw dstw, sljit_si src)
 {
-    return emit_sse2(compiler, 0x11, src, dst, dstw);
+    return emit_sse2(compiler, 0x11, single, src, dst, dstw);
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
-    int dst_r;
+    sljit_si dst_r;


     CHECK_ERROR();
     check_sljit_emit_fop1(compiler, op, dst, dstw, src, srcw);
@@ -2128,57 +2148,57 @@
     compiler->mode32 = 1;
 #endif


-    if (GET_OPCODE(op) == SLJIT_FCMP) {
+    if (GET_OPCODE(op) == SLJIT_CMPD) {
         compiler->flags_saved = 0;
-        if (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4)
+        if (dst <= SLJIT_FLOAT_REG6)
             dst_r = dst;
         else {
             dst_r = TMP_FREG;
-            FAIL_IF(emit_sse2_load(compiler, dst_r, dst, dstw));
+            FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst_r, dst, dstw));
         }
-        return emit_sse2_logic(compiler, 0x2e, dst_r, src, srcw);
+        return emit_sse2_logic(compiler, 0x2e, !(op & SLJIT_SINGLE_OP), dst_r, src, srcw);
     }


-    if (op == SLJIT_FMOV) {
-        if (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4)
-            return emit_sse2_load(compiler, dst, src, srcw);
-        if (src >= SLJIT_FLOAT_REG1 && src <= SLJIT_FLOAT_REG4)
-            return emit_sse2_store(compiler, dst, dstw, src);
-        FAIL_IF(emit_sse2_load(compiler, TMP_FREG, src, srcw));
-        return emit_sse2_store(compiler, dst, dstw, TMP_FREG);
+    if (op == SLJIT_MOVD) {
+        if (dst <= SLJIT_FLOAT_REG6)
+            return emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst, src, srcw);
+        if (src <= SLJIT_FLOAT_REG6)
+            return emit_sse2_store(compiler, op & SLJIT_SINGLE_OP, dst, dstw, src);
+        FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, TMP_FREG, src, srcw));
+        return emit_sse2_store(compiler, op & SLJIT_SINGLE_OP, dst, dstw, TMP_FREG);
     }


-    if (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4) {
+    if (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG6) {
         dst_r = dst;
         if (dst != src)
-            FAIL_IF(emit_sse2_load(compiler, dst_r, src, srcw));
+            FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst_r, src, srcw));
     }
     else {
         dst_r = TMP_FREG;
-        FAIL_IF(emit_sse2_load(compiler, dst_r, src, srcw));
+        FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst_r, src, srcw));
     }


-    switch (op) {
-    case SLJIT_FNEG:
-        FAIL_IF(emit_sse2_logic(compiler, 0x57, dst_r, SLJIT_MEM0(), (sljit_w)sse2_buffer));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_NEGD:
+        FAIL_IF(emit_sse2_logic(compiler, 0x57, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer : sse2_buffer + 8)));
         break;


-    case SLJIT_FABS:
-        FAIL_IF(emit_sse2_logic(compiler, 0x54, dst_r, SLJIT_MEM0(), (sljit_w)(sse2_buffer + 4)));
+    case SLJIT_ABSD:
+        FAIL_IF(emit_sse2_logic(compiler, 0x54, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer + 4 : sse2_buffer + 12)));
         break;
     }


     if (dst_r == TMP_FREG)
-        return emit_sse2_store(compiler, dst, dstw, TMP_FREG);
+        return emit_sse2_store(compiler, op & SLJIT_SINGLE_OP, dst, dstw, TMP_FREG);
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
-    int dst_r;
+    sljit_si dst_r;


     CHECK_ERROR();
     check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);
@@ -2187,55 +2207,55 @@
     compiler->mode32 = 1;
 #endif


-    if (dst >= SLJIT_FLOAT_REG1 && dst <= SLJIT_FLOAT_REG4) {
+    if (dst <= SLJIT_FLOAT_REG6) {
         dst_r = dst;
         if (dst == src1)
             ; /* Do nothing here. */
-        else if (dst == src2 && (op == SLJIT_FADD || op == SLJIT_FMUL)) {
+        else if (dst == src2 && (op == SLJIT_ADDD || op == SLJIT_MULD)) {
             /* Swap arguments. */
             src2 = src1;
             src2w = src1w;
         }
         else if (dst != src2)
-            FAIL_IF(emit_sse2_load(compiler, dst_r, src1, src1w));
+            FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst_r, src1, src1w));
         else {
             dst_r = TMP_FREG;
-            FAIL_IF(emit_sse2_load(compiler, TMP_FREG, src1, src1w));
+            FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, TMP_FREG, src1, src1w));
         }
     }
     else {
         dst_r = TMP_FREG;
-        FAIL_IF(emit_sse2_load(compiler, TMP_FREG, src1, src1w));
+        FAIL_IF(emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, TMP_FREG, src1, src1w));
     }


-    switch (op) {
-    case SLJIT_FADD:
-        FAIL_IF(emit_sse2(compiler, 0x58, dst_r, src2, src2w));
+    switch (GET_OPCODE(op)) {
+    case SLJIT_ADDD:
+        FAIL_IF(emit_sse2(compiler, 0x58, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
         break;


-    case SLJIT_FSUB:
-        FAIL_IF(emit_sse2(compiler, 0x5c, dst_r, src2, src2w));
+    case SLJIT_SUBD:
+        FAIL_IF(emit_sse2(compiler, 0x5c, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
         break;


-    case SLJIT_FMUL:
-        FAIL_IF(emit_sse2(compiler, 0x59, dst_r, src2, src2w));
+    case SLJIT_MULD:
+        FAIL_IF(emit_sse2(compiler, 0x59, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
         break;


-    case SLJIT_FDIV:
-        FAIL_IF(emit_sse2(compiler, 0x5e, dst_r, src2, src2w));
+    case SLJIT_DIVD:
+        FAIL_IF(emit_sse2(compiler, 0x5e, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
         break;
     }


     if (dst_r == TMP_FREG)
-        return emit_sse2_store(compiler, dst, dstw, TMP_FREG);
+        return emit_sse2_store(compiler, op & SLJIT_SINGLE_OP, dst, dstw, TMP_FREG);
     return SLJIT_SUCCESS;
 }


#else

-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop1(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop1(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src, sljit_sw srcw)
 {
     CHECK_ERROR();
     /* Should cause an assertion fail. */
@@ -2244,10 +2264,10 @@
     return SLJIT_ERR_UNSUPPORTED;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fop2(struct sljit_compiler *compiler, int op,
-    int dst, sljit_w dstw,
-    int src1, sljit_w src1w,
-    int src2, sljit_w src2w)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fop2(struct sljit_compiler *compiler, sljit_si op,
+    sljit_si dst, sljit_sw dstw,
+    sljit_si src1, sljit_sw src1w,
+    sljit_si src2, sljit_sw src2w)
 {
     CHECK_ERROR();
     /* Should cause an assertion fail. */
@@ -2291,7 +2311,7 @@
     return label;
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, int type)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_si type)
 {
     sljit_ub *buf;
     struct sljit_jump *jump;
@@ -2328,7 +2348,7 @@
     return jump;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_ijump(struct sljit_compiler *compiler, sljit_si type, sljit_si src, sljit_sw srcw)
 {
     sljit_ub *code;
     struct sljit_jump *jump;
@@ -2353,10 +2373,10 @@
             src = TMP_REGISTER;
         }
         if (src == SLJIT_MEM1(SLJIT_LOCALS_REG) && type >= SLJIT_CALL3)
-            srcw += sizeof(sljit_w);
+            srcw += sizeof(sljit_sw);
 #else
         if (src == SLJIT_MEM1(SLJIT_LOCALS_REG))
-            srcw += sizeof(sljit_w) * (type - SLJIT_CALL0);
+            srcw += sizeof(sljit_sw) * (type - SLJIT_CALL0);
 #endif
 #endif
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) && defined(_WIN64)
@@ -2400,14 +2420,14 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_cond_value(struct sljit_compiler *compiler, int op, int dst, sljit_w dstw, int type)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)
 {
     sljit_ub *buf;
     sljit_ub cond_set = 0;
-    int dst_save = dst;
-    sljit_w dstw_save = dstw;
+    sljit_si dst_save = dst;
+    sljit_sw dstw_save = dstw;
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    int reg;
+    sljit_si reg;
 #endif


     CHECK_ERROR();
@@ -2591,7 +2611,7 @@
     return SLJIT_SUCCESS;
 }


-SLJIT_API_FUNC_ATTRIBUTE int sljit_get_local_base(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w offset)
+SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
 {
     CHECK_ERROR();
     check_sljit_get_local_base(compiler, dst, dstw, offset);
@@ -2622,12 +2642,12 @@
     return emit_mov(compiler, dst, dstw, SLJIT_LOCALS_REG, 0);
 }


-SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, int dst, sljit_w dstw, sljit_w init_value)
+SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw init_value)
 {
     sljit_ub *buf;
     struct sljit_const *const_;
 #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
-    int reg;
+    sljit_si reg;
 #endif


     CHECK_ERROR_PTR();
@@ -2672,13 +2692,13 @@
 SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_addr)
 {
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
-    *(sljit_w*)addr = new_addr - (addr + 4);
+    *(sljit_sw*)addr = new_addr - (addr + 4);
 #else
     *(sljit_uw*)addr = new_addr;
 #endif
 }


-SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_w new_constant)
+SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant)
 {
-    *(sljit_w*)addr = new_constant;
+    *(sljit_sw*)addr = new_constant;
 }


Modified: code/trunk/sljit/sljitUtils.c
===================================================================
--- code/trunk/sljit/sljitUtils.c    2012-10-31 17:42:29 UTC (rev 1194)
+++ code/trunk/sljit/sljitUtils.c    2012-11-01 15:21:27 UTC (rev 1195)
@@ -163,11 +163,11 @@
 #include <fcntl.h>


/* Some old systems does not have MAP_ANON. */
-static int dev_zero = -1;
+static sljit_si dev_zero = -1;

#if (defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)

-static SLJIT_INLINE int open_dev_zero(void)
+static SLJIT_INLINE sljit_si open_dev_zero(void)
 {
     dev_zero = open("/dev/zero", O_RDWR);
     return dev_zero < 0;
@@ -179,7 +179,7 @@


static pthread_mutex_t dev_zero_mutex = PTHREAD_MUTEX_INITIALIZER;

-static SLJIT_INLINE int open_dev_zero(void)
+static SLJIT_INLINE sljit_si open_dev_zero(void)
 {
     pthread_mutex_lock(&dev_zero_mutex);
     dev_zero = open("/dev/zero", O_RDWR);
@@ -198,7 +198,7 @@
 #if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK)


/* Planning to make it even more clever in the future. */
-static sljit_w sljit_page_align = 0;
+static sljit_sw sljit_page_align = 0;

 SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_CALL sljit_allocate_stack(sljit_uw limit, sljit_uw max_limit)
 {
@@ -285,7 +285,7 @@
     SLJIT_FREE(stack);
 }


-SLJIT_API_FUNC_ATTRIBUTE sljit_w SLJIT_CALL sljit_stack_resize(struct sljit_stack* stack, sljit_uw new_limit)
+SLJIT_API_FUNC_ATTRIBUTE sljit_sw SLJIT_CALL sljit_stack_resize(struct sljit_stack* stack, sljit_uw new_limit)
 {
     sljit_uw aligned_old_limit;
     sljit_uw aligned_new_limit;