Home | History | Annotate | Line # | Download | only in test_src
sljitTest.c revision 1.2.2.3
      1  1.2.2.3    tls /*	$NetBSD: sljitTest.c,v 1.2.2.3 2014/08/20 00:04:25 tls Exp $	*/
      2  1.2.2.3    tls 
      3  1.2.2.2  alnsn /*
      4  1.2.2.2  alnsn  *    Stack-less Just-In-Time compiler
      5  1.2.2.2  alnsn  *
      6  1.2.2.2  alnsn  *    Copyright 2009-2010 Zoltan Herczeg (hzmester (at) freemail.hu). All rights reserved.
      7  1.2.2.2  alnsn  *
      8  1.2.2.2  alnsn  * Redistribution and use in source and binary forms, with or without modification, are
      9  1.2.2.2  alnsn  * permitted provided that the following conditions are met:
     10  1.2.2.2  alnsn  *
     11  1.2.2.2  alnsn  *   1. Redistributions of source code must retain the above copyright notice, this list of
     12  1.2.2.2  alnsn  *      conditions and the following disclaimer.
     13  1.2.2.2  alnsn  *
     14  1.2.2.2  alnsn  *   2. Redistributions in binary form must reproduce the above copyright notice, this list
     15  1.2.2.2  alnsn  *      of conditions and the following disclaimer in the documentation and/or other materials
     16  1.2.2.2  alnsn  *      provided with the distribution.
     17  1.2.2.2  alnsn  *
     18  1.2.2.2  alnsn  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
     19  1.2.2.2  alnsn  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  1.2.2.2  alnsn  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
     21  1.2.2.2  alnsn  * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  1.2.2.2  alnsn  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
     23  1.2.2.2  alnsn  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     24  1.2.2.2  alnsn  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     25  1.2.2.2  alnsn  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     26  1.2.2.2  alnsn  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  1.2.2.2  alnsn  */
     28  1.2.2.2  alnsn 
     29  1.2.2.3    tls /* Must be the first one. Must not depend on any other include. */
     30  1.2.2.2  alnsn #include "sljitLir.h"
     31  1.2.2.2  alnsn 
     32  1.2.2.2  alnsn #include <stdio.h>
     33  1.2.2.2  alnsn #include <stdlib.h>
     34  1.2.2.2  alnsn #include <string.h>
     35  1.2.2.2  alnsn 
     36  1.2.2.3    tls #if defined _WIN32 || defined _WIN64
     37  1.2.2.3    tls #define COLOR_RED
     38  1.2.2.3    tls #define COLOR_GREEN
     39  1.2.2.3    tls #define COLOR_ARCH
     40  1.2.2.3    tls #define COLOR_DEFAULT
     41  1.2.2.3    tls #else
     42  1.2.2.3    tls #define COLOR_RED "\33[31m"
     43  1.2.2.3    tls #define COLOR_GREEN "\33[32m"
     44  1.2.2.3    tls #define COLOR_ARCH "\33[33m"
     45  1.2.2.3    tls #define COLOR_DEFAULT "\33[0m"
     46  1.2.2.3    tls #endif
     47  1.2.2.3    tls 
     48  1.2.2.2  alnsn union executable_code {
     49  1.2.2.2  alnsn 	void* code;
     50  1.2.2.3    tls 	sljit_sw (SLJIT_CALL *func0)(void);
     51  1.2.2.3    tls 	sljit_sw (SLJIT_CALL *func1)(sljit_sw a);
     52  1.2.2.3    tls 	sljit_sw (SLJIT_CALL *func2)(sljit_sw a, sljit_sw b);
     53  1.2.2.3    tls 	sljit_sw (SLJIT_CALL *func3)(sljit_sw a, sljit_sw b, sljit_sw c);
     54  1.2.2.2  alnsn };
     55  1.2.2.2  alnsn typedef union executable_code executable_code;
     56  1.2.2.2  alnsn 
     57  1.2.2.3    tls static sljit_si successful_tests = 0;
     58  1.2.2.3    tls static sljit_si verbose = 0;
     59  1.2.2.3    tls static sljit_si silent = 0;
     60  1.2.2.2  alnsn 
     61  1.2.2.2  alnsn #define FAILED(cond, text) \
     62  1.2.2.2  alnsn 	if (SLJIT_UNLIKELY(cond)) { \
     63  1.2.2.2  alnsn 		printf(text); \
     64  1.2.2.2  alnsn 		return; \
     65  1.2.2.2  alnsn 	}
     66  1.2.2.2  alnsn 
     67  1.2.2.2  alnsn #define CHECK(compiler) \
     68  1.2.2.2  alnsn 	if (sljit_get_compiler_error(compiler) != SLJIT_ERR_COMPILED) { \
     69  1.2.2.2  alnsn 		printf("Compiler error: %d\n", sljit_get_compiler_error(compiler)); \
     70  1.2.2.2  alnsn 		sljit_free_compiler(compiler); \
     71  1.2.2.2  alnsn 		return; \
     72  1.2.2.2  alnsn 	}
     73  1.2.2.2  alnsn 
     74  1.2.2.3    tls static void cond_set(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_si type)
     75  1.2.2.2  alnsn {
     76  1.2.2.3    tls 	/* Testing both sljit_emit_op_flags and sljit_emit_jump. */
     77  1.2.2.2  alnsn 	struct sljit_jump* jump;
     78  1.2.2.2  alnsn 	struct sljit_label* label;
     79  1.2.2.2  alnsn 
     80  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, dst, dstw, SLJIT_UNUSED, 0, type);
     81  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, type);
     82  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_KEEP_FLAGS, dst, dstw, dst, dstw, SLJIT_IMM, 2);
     83  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
     84  1.2.2.2  alnsn 	sljit_set_label(jump, label);
     85  1.2.2.2  alnsn }
     86  1.2.2.2  alnsn 
     87  1.2.2.2  alnsn #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
     88  1.2.2.2  alnsn 
     89  1.2.2.2  alnsn #define MALLOC_EXEC(result, size) \
     90  1.2.2.2  alnsn 	result = SLJIT_MALLOC_EXEC(size); \
     91  1.2.2.2  alnsn 	if (!result) { \
     92  1.2.2.2  alnsn 		printf("Cannot allocate executable memory\n"); \
     93  1.2.2.2  alnsn 		return; \
     94  1.2.2.2  alnsn 	} \
     95  1.2.2.2  alnsn 	memset(result, 255, size);
     96  1.2.2.2  alnsn 
     97  1.2.2.2  alnsn static void test_exec_allocator(void)
     98  1.2.2.2  alnsn {
     99  1.2.2.2  alnsn 	/* This is not an sljit test. */
    100  1.2.2.2  alnsn 	void *ptr1;
    101  1.2.2.2  alnsn 	void *ptr2;
    102  1.2.2.2  alnsn 	void *ptr3;
    103  1.2.2.2  alnsn 
    104  1.2.2.3    tls 	if (verbose)
    105  1.2.2.3    tls 		printf("Run executable allocator test\n");
    106  1.2.2.3    tls 
    107  1.2.2.2  alnsn 	MALLOC_EXEC(ptr1, 32);
    108  1.2.2.2  alnsn 	MALLOC_EXEC(ptr2, 512);
    109  1.2.2.2  alnsn 	MALLOC_EXEC(ptr3, 512);
    110  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr2);
    111  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr3);
    112  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr1);
    113  1.2.2.2  alnsn 	MALLOC_EXEC(ptr1, 262104);
    114  1.2.2.2  alnsn 	MALLOC_EXEC(ptr2, 32000);
    115  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr1);
    116  1.2.2.2  alnsn 	MALLOC_EXEC(ptr1, 262104);
    117  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr1);
    118  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr2);
    119  1.2.2.2  alnsn 	MALLOC_EXEC(ptr1, 512);
    120  1.2.2.2  alnsn 	MALLOC_EXEC(ptr2, 512);
    121  1.2.2.2  alnsn 	MALLOC_EXEC(ptr3, 512);
    122  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr2);
    123  1.2.2.2  alnsn 	MALLOC_EXEC(ptr2, 512);
    124  1.2.2.3    tls #if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
    125  1.2.2.3    tls 	sljit_free_unused_memory_exec();
    126  1.2.2.3    tls #endif
    127  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr3);
    128  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr1);
    129  1.2.2.2  alnsn 	SLJIT_FREE_EXEC(ptr2);
    130  1.2.2.2  alnsn #if (defined SLJIT_UTIL_GLOBAL_LOCK && SLJIT_UTIL_GLOBAL_LOCK)
    131  1.2.2.2  alnsn 	/* Just call the global locks. */
    132  1.2.2.2  alnsn 	sljit_grab_lock();
    133  1.2.2.2  alnsn 	sljit_release_lock();
    134  1.2.2.2  alnsn #endif
    135  1.2.2.3    tls 
    136  1.2.2.3    tls #if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
    137  1.2.2.3    tls 	sljit_free_unused_memory_exec();
    138  1.2.2.3    tls #endif
    139  1.2.2.2  alnsn }
    140  1.2.2.2  alnsn 
    141  1.2.2.2  alnsn #undef MALLOC_EXEC
    142  1.2.2.2  alnsn 
    143  1.2.2.2  alnsn #endif /* !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) */
    144  1.2.2.2  alnsn 
    145  1.2.2.2  alnsn static void test1(void)
    146  1.2.2.2  alnsn {
    147  1.2.2.2  alnsn 	/* Enter and return from an sljit function. */
    148  1.2.2.2  alnsn 	executable_code code;
    149  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    150  1.2.2.2  alnsn 
    151  1.2.2.3    tls 	if (verbose)
    152  1.2.2.3    tls 		printf("Run test1\n");
    153  1.2.2.3    tls 
    154  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    155  1.2.2.2  alnsn 
    156  1.2.2.2  alnsn 	/* 3 arguments passed, 3 arguments used. */
    157  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 3, 3, 3, 0);
    158  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0);
    159  1.2.2.2  alnsn 
    160  1.2.2.2  alnsn 	SLJIT_ASSERT(sljit_get_generated_code_size(compiler) == 0);
    161  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    162  1.2.2.2  alnsn 	CHECK(compiler);
    163  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->error == SLJIT_ERR_COMPILED);
    164  1.2.2.2  alnsn 	SLJIT_ASSERT(sljit_get_generated_code_size(compiler) > 0);
    165  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    166  1.2.2.2  alnsn 
    167  1.2.2.2  alnsn 	FAILED(code.func3(3, -21, 86) != -21, "test1 case 1 failed\n");
    168  1.2.2.2  alnsn 	FAILED(code.func3(4789, 47890, 997) != 47890, "test1 case 2 failed\n");
    169  1.2.2.3    tls 
    170  1.2.2.2  alnsn 	sljit_free_code(code.code);
    171  1.2.2.2  alnsn 	successful_tests++;
    172  1.2.2.2  alnsn }
    173  1.2.2.2  alnsn 
    174  1.2.2.2  alnsn static void test2(void)
    175  1.2.2.2  alnsn {
    176  1.2.2.2  alnsn 	/* Test mov. */
    177  1.2.2.2  alnsn 	executable_code code;
    178  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    179  1.2.2.3    tls 	sljit_sw buf[8];
    180  1.2.2.3    tls 	static sljit_sw data[2] = { 0, -9876 };
    181  1.2.2.3    tls 
    182  1.2.2.3    tls 	if (verbose)
    183  1.2.2.3    tls 		printf("Run test2\n");
    184  1.2.2.2  alnsn 
    185  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    186  1.2.2.2  alnsn 
    187  1.2.2.2  alnsn 	buf[0] = 5678;
    188  1.2.2.2  alnsn 	buf[1] = 0;
    189  1.2.2.2  alnsn 	buf[2] = 0;
    190  1.2.2.2  alnsn 	buf[3] = 0;
    191  1.2.2.2  alnsn 	buf[4] = 0;
    192  1.2.2.2  alnsn 	buf[5] = 0;
    193  1.2.2.3    tls 	buf[6] = 0;
    194  1.2.2.3    tls 	buf[7] = 0;
    195  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 2, 0);
    196  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_UNUSED, 0, SLJIT_MEM0(), (sljit_sw)&buf);
    197  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 9999);
    198  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG1, 0);
    199  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
    200  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, sizeof(sljit_sw));
    201  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG2), 0);
    202  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 2);
    203  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SAVED_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG2), 0);
    204  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 3);
    205  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SAVED_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM0(), (sljit_sw)&buf);
    206  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
    207  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), (sljit_sw)&data);
    208  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 4 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
    209  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&buf - 0x12345678);
    210  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x12345678);
    211  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
    212  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3456);
    213  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)&buf - 0xff890 + 6 * sizeof(sljit_sw));
    214  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 0xff890, SLJIT_SCRATCH_REG1, 0);
    215  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)&buf + 0xff890 + 7 * sizeof(sljit_sw));
    216  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG2), -0xff890, SLJIT_SCRATCH_REG1, 0);
    217  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0);
    218  1.2.2.2  alnsn 
    219  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    220  1.2.2.2  alnsn 	CHECK(compiler);
    221  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    222  1.2.2.2  alnsn 
    223  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 9999, "test2 case 1 failed\n");
    224  1.2.2.2  alnsn 	FAILED(buf[1] != 9999, "test2 case 2 failed\n");
    225  1.2.2.2  alnsn 	FAILED(buf[2] != 9999, "test2 case 3 failed\n");
    226  1.2.2.2  alnsn 	FAILED(buf[3] != 5678, "test2 case 4 failed\n");
    227  1.2.2.2  alnsn 	FAILED(buf[4] != -9876, "test2 case 5 failed\n");
    228  1.2.2.2  alnsn 	FAILED(buf[5] != 5678, "test2 case 6 failed\n");
    229  1.2.2.3    tls 	FAILED(buf[6] != 3456, "test2 case 6 failed\n");
    230  1.2.2.3    tls 	FAILED(buf[7] != 3456, "test2 case 6 failed\n");
    231  1.2.2.3    tls 
    232  1.2.2.2  alnsn 	sljit_free_code(code.code);
    233  1.2.2.2  alnsn 	successful_tests++;
    234  1.2.2.2  alnsn }
    235  1.2.2.2  alnsn 
    236  1.2.2.2  alnsn static void test3(void)
    237  1.2.2.2  alnsn {
    238  1.2.2.2  alnsn 	/* Test not. */
    239  1.2.2.2  alnsn 	executable_code code;
    240  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    241  1.2.2.3    tls 	sljit_sw buf[5];
    242  1.2.2.3    tls 
    243  1.2.2.3    tls 	if (verbose)
    244  1.2.2.3    tls 		printf("Run test3\n");
    245  1.2.2.2  alnsn 
    246  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    247  1.2.2.2  alnsn 	buf[0] = 1234;
    248  1.2.2.2  alnsn 	buf[1] = 0;
    249  1.2.2.2  alnsn 	buf[2] = 9876;
    250  1.2.2.2  alnsn 	buf[3] = 0;
    251  1.2.2.2  alnsn 	buf[4] = 0x12345678;
    252  1.2.2.2  alnsn 
    253  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
    254  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_UNUSED, 0, SLJIT_MEM0(), (sljit_sw)&buf);
    255  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    256  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_MEM0(), (sljit_sw)&buf[1], SLJIT_MEM0(), (sljit_sw)&buf[1]);
    257  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_RETURN_REG, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    258  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2);
    259  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)&buf[4] - 0xff0000 - 0x20);
    260  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, (sljit_sw)&buf[4] - 0xff0000);
    261  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 0xff0000 + 0x20, SLJIT_MEM1(SLJIT_SCRATCH_REG3), 0xff0000);
    262  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    263  1.2.2.2  alnsn 
    264  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    265  1.2.2.2  alnsn 	CHECK(compiler);
    266  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    267  1.2.2.2  alnsn 
    268  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != ~1234, "test3 case 1 failed\n");
    269  1.2.2.2  alnsn 	FAILED(buf[1] != ~1234, "test3 case 2 failed\n");
    270  1.2.2.2  alnsn 	FAILED(buf[3] != ~9876, "test3 case 3 failed\n");
    271  1.2.2.2  alnsn 	FAILED(buf[4] != ~0x12345678, "test3 case 4 failed\n");
    272  1.2.2.2  alnsn 
    273  1.2.2.2  alnsn 	sljit_free_code(code.code);
    274  1.2.2.2  alnsn 	successful_tests++;
    275  1.2.2.2  alnsn }
    276  1.2.2.2  alnsn 
    277  1.2.2.2  alnsn static void test4(void)
    278  1.2.2.2  alnsn {
    279  1.2.2.2  alnsn 	/* Test neg. */
    280  1.2.2.2  alnsn 	executable_code code;
    281  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    282  1.2.2.3    tls 	sljit_sw buf[4];
    283  1.2.2.3    tls 
    284  1.2.2.3    tls 	if (verbose)
    285  1.2.2.3    tls 		printf("Run test4\n");
    286  1.2.2.2  alnsn 
    287  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    288  1.2.2.2  alnsn 	buf[0] = 0;
    289  1.2.2.2  alnsn 	buf[1] = 1234;
    290  1.2.2.2  alnsn 	buf[2] = 0;
    291  1.2.2.2  alnsn 	buf[3] = 0;
    292  1.2.2.2  alnsn 
    293  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 2, 0);
    294  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    295  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SAVED_REG2, 0);
    296  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_MEM0(), (sljit_sw)&buf[0], SLJIT_MEM0(), (sljit_sw)&buf[1]);
    297  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_RETURN_REG, 0, SLJIT_SAVED_REG2, 0);
    298  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_IMM, 299);
    299  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    300  1.2.2.2  alnsn 
    301  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    302  1.2.2.2  alnsn 	CHECK(compiler);
    303  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    304  1.2.2.2  alnsn 
    305  1.2.2.3    tls 	FAILED(code.func2((sljit_sw)&buf, 4567) != -4567, "test4 case 1 failed\n");
    306  1.2.2.2  alnsn 	FAILED(buf[0] != -1234, "test4 case 2 failed\n");
    307  1.2.2.2  alnsn 	FAILED(buf[2] != -4567, "test4 case 3 failed\n");
    308  1.2.2.2  alnsn 	FAILED(buf[3] != -299, "test4 case 4 failed\n");
    309  1.2.2.2  alnsn 
    310  1.2.2.2  alnsn 	sljit_free_code(code.code);
    311  1.2.2.2  alnsn 	successful_tests++;
    312  1.2.2.2  alnsn }
    313  1.2.2.2  alnsn 
    314  1.2.2.2  alnsn static void test5(void)
    315  1.2.2.2  alnsn {
    316  1.2.2.2  alnsn 	/* Test add. */
    317  1.2.2.2  alnsn 	executable_code code;
    318  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    319  1.2.2.3    tls 	sljit_sw buf[9];
    320  1.2.2.3    tls 
    321  1.2.2.3    tls 	if (verbose)
    322  1.2.2.3    tls 		printf("Run test5\n");
    323  1.2.2.2  alnsn 
    324  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    325  1.2.2.2  alnsn 	buf[0] = 100;
    326  1.2.2.2  alnsn 	buf[1] = 200;
    327  1.2.2.2  alnsn 	buf[2] = 300;
    328  1.2.2.2  alnsn 	buf[3] = 0;
    329  1.2.2.2  alnsn 	buf[4] = 0;
    330  1.2.2.2  alnsn 	buf[5] = 0;
    331  1.2.2.2  alnsn 	buf[6] = 0;
    332  1.2.2.2  alnsn 	buf[7] = 0;
    333  1.2.2.2  alnsn 	buf[8] = 313;
    334  1.2.2.2  alnsn 
    335  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 2, 0);
    336  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_UNUSED, 0, SLJIT_IMM, 16, SLJIT_IMM, 16);
    337  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_UNUSED, 0, SLJIT_IMM, 255, SLJIT_IMM, 255);
    338  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_UNUSED, 0, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0);
    339  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
    340  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 50);
    341  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 1, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 1, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 0);
    342  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sw) + 2);
    343  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 50);
    344  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    345  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
    346  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4, SLJIT_SCRATCH_REG1, 0);
    347  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 50, SLJIT_SCRATCH_REG2, 0);
    348  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_IMM, 50, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw));
    349  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
    350  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw));
    351  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw));
    352  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
    353  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x1e7d39f2);
    354  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x23de7c06);
    355  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_IMM, 0x3d72e452, SLJIT_SCRATCH_REG2, 0);
    356  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_IMM, -43, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw));
    357  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1000, SLJIT_SCRATCH_REG1, 0);
    358  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1430);
    359  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -99, SLJIT_SCRATCH_REG1, 0);
    360  1.2.2.2  alnsn 
    361  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0);
    362  1.2.2.2  alnsn 
    363  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    364  1.2.2.2  alnsn 	CHECK(compiler);
    365  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    366  1.2.2.2  alnsn 
    367  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 2437 + 2 * sizeof(sljit_sw), "test5 case 1 failed\n");
    368  1.2.2.3    tls 	FAILED(buf[0] != 202 + 2 * sizeof(sljit_sw), "test5 case 2 failed\n");
    369  1.2.2.2  alnsn 	FAILED(buf[2] != 500, "test5 case 3 failed\n");
    370  1.2.2.2  alnsn 	FAILED(buf[3] != 400, "test5 case 4 failed\n");
    371  1.2.2.2  alnsn 	FAILED(buf[4] != 200, "test5 case 5 failed\n");
    372  1.2.2.2  alnsn 	FAILED(buf[5] != 250, "test5 case 6 failed\n");
    373  1.2.2.2  alnsn 	FAILED(buf[6] != 0x425bb5f8, "test5 case 7 failed\n");
    374  1.2.2.2  alnsn 	FAILED(buf[7] != 0x5bf01e44, "test5 case 8 failed\n");
    375  1.2.2.2  alnsn 	FAILED(buf[8] != 270, "test5 case 9 failed\n");
    376  1.2.2.2  alnsn 
    377  1.2.2.2  alnsn 	sljit_free_code(code.code);
    378  1.2.2.2  alnsn 	successful_tests++;
    379  1.2.2.2  alnsn }
    380  1.2.2.2  alnsn 
    381  1.2.2.2  alnsn static void test6(void)
    382  1.2.2.2  alnsn {
    383  1.2.2.2  alnsn 	/* Test addc, sub, subc. */
    384  1.2.2.2  alnsn 	executable_code code;
    385  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    386  1.2.2.3    tls 	sljit_sw buf[10];
    387  1.2.2.3    tls 
    388  1.2.2.3    tls 	if (verbose)
    389  1.2.2.3    tls 		printf("Run test6\n");
    390  1.2.2.2  alnsn 
    391  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    392  1.2.2.2  alnsn 	buf[0] = 0;
    393  1.2.2.2  alnsn 	buf[1] = 0;
    394  1.2.2.2  alnsn 	buf[2] = 0;
    395  1.2.2.2  alnsn 	buf[3] = 0;
    396  1.2.2.2  alnsn 	buf[4] = 0;
    397  1.2.2.2  alnsn 	buf[5] = 0;
    398  1.2.2.2  alnsn 	buf[6] = 0;
    399  1.2.2.2  alnsn 	buf[7] = 0;
    400  1.2.2.2  alnsn 	buf[8] = 0;
    401  1.2.2.2  alnsn 	buf[9] = 0;
    402  1.2.2.2  alnsn 
    403  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
    404  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
    405  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_C, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
    406  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADDC, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 0, SLJIT_IMM, 0);
    407  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_C, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
    408  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_IMM, 4);
    409  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 100);
    410  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 50);
    411  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_C, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 6000);
    412  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_IMM, 10);
    413  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_IMM, 5);
    414  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 100);
    415  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2);
    416  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG1, 0);
    417  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5000);
    418  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG1, 0);
    419  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
    420  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SCRATCH_REG2, 0);
    421  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5000);
    422  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 6000, SLJIT_SCRATCH_REG1, 0);
    423  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_SCRATCH_REG1, 0);
    424  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 100);
    425  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 32768);
    426  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_SCRATCH_REG2, 0);
    427  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -32767);
    428  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 8, SLJIT_SCRATCH_REG2, 0);
    429  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x52cd3bf4);
    430  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 9, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x3da297c6);
    431  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, 10);
    432  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_C, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 5);
    433  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUBC, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 2);
    434  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, -2220);
    435  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    436  1.2.2.2  alnsn 
    437  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    438  1.2.2.2  alnsn 	CHECK(compiler);
    439  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    440  1.2.2.2  alnsn 
    441  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 2223, "test6 case 1 failed\n");
    442  1.2.2.2  alnsn 	FAILED(buf[0] != 1, "test6 case 2 failed\n");
    443  1.2.2.2  alnsn 	FAILED(buf[1] != 5, "test6 case 3 failed\n");
    444  1.2.2.2  alnsn 	FAILED(buf[2] != 50, "test6 case 4 failed\n");
    445  1.2.2.2  alnsn 	FAILED(buf[3] != 4, "test6 case 5 failed\n");
    446  1.2.2.2  alnsn 	FAILED(buf[4] != 50, "test6 case 6 failed\n");
    447  1.2.2.2  alnsn 	FAILED(buf[5] != 50, "test6 case 7 failed\n");
    448  1.2.2.2  alnsn 	FAILED(buf[6] != 1000, "test6 case 8 failed\n");
    449  1.2.2.2  alnsn 	FAILED(buf[7] != 100 - 32768, "test6 case 9 failed\n");
    450  1.2.2.2  alnsn 	FAILED(buf[8] != 100 + 32767, "test6 case 10 failed\n");
    451  1.2.2.2  alnsn 	FAILED(buf[9] != 0x152aa42e, "test6 case 11 failed\n");
    452  1.2.2.2  alnsn 
    453  1.2.2.2  alnsn 	sljit_free_code(code.code);
    454  1.2.2.2  alnsn 	successful_tests++;
    455  1.2.2.2  alnsn }
    456  1.2.2.2  alnsn 
    457  1.2.2.2  alnsn static void test7(void)
    458  1.2.2.2  alnsn {
    459  1.2.2.2  alnsn 	/* Test logical operators. */
    460  1.2.2.2  alnsn 	executable_code code;
    461  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    462  1.2.2.3    tls 	sljit_sw buf[8];
    463  1.2.2.3    tls 
    464  1.2.2.3    tls 	if (verbose)
    465  1.2.2.3    tls 		printf("Run test7\n");
    466  1.2.2.2  alnsn 
    467  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    468  1.2.2.2  alnsn 	buf[0] = 0xff80;
    469  1.2.2.2  alnsn 	buf[1] = 0x0f808080;
    470  1.2.2.2  alnsn 	buf[2] = 0;
    471  1.2.2.2  alnsn 	buf[3] = 0xaaaaaa;
    472  1.2.2.2  alnsn 	buf[4] = 0;
    473  1.2.2.2  alnsn 	buf[5] = 0x4040;
    474  1.2.2.2  alnsn 	buf[6] = 0;
    475  1.2.2.2  alnsn 	buf[7] = 0xc43a7f95;
    476  1.2.2.2  alnsn 
    477  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
    478  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xf0C000);
    479  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x308f);
    480  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_XOR, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw));
    481  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_IMM, 0xf0f0f0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3);
    482  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xC0F0);
    483  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_XOR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5);
    484  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xff0000);
    485  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG1, 0);
    486  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 0xC0F0);
    487  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5);
    488  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 0xff0000);
    489  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_XOR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_IMM, 0xFFFFFF, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw));
    490  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_IMM, 0xa56c82c0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6);
    491  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7);
    492  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_XOR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_IMM, 0xff00ff00, SLJIT_SCRATCH_REG1, 0);
    493  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xff00ff00);
    494  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x0f);
    495  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0x888888, SLJIT_SCRATCH_REG2, 0);
    496  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    497  1.2.2.2  alnsn 
    498  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    499  1.2.2.2  alnsn 	CHECK(compiler);
    500  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    501  1.2.2.2  alnsn 
    502  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 0x8808, "test7 case 1 failed\n");
    503  1.2.2.2  alnsn 	FAILED(buf[0] != 0x0F807F00, "test7 case 2 failed\n");
    504  1.2.2.2  alnsn 	FAILED(buf[1] != 0x0F7F7F7F, "test7 case 3 failed\n");
    505  1.2.2.2  alnsn 	FAILED(buf[2] != 0x00F0F08F, "test7 case 4 failed\n");
    506  1.2.2.2  alnsn 	FAILED(buf[3] != 0x00A0A0A0, "test7 case 5 failed\n");
    507  1.2.2.2  alnsn 	FAILED(buf[4] != 0x00FF80B0, "test7 case 6 failed\n");
    508  1.2.2.2  alnsn 	FAILED(buf[5] != 0x00FF4040, "test7 case 7 failed\n");
    509  1.2.2.2  alnsn 	FAILED(buf[6] != 0xa56c82c0, "test7 case 8 failed\n");
    510  1.2.2.2  alnsn 	FAILED(buf[7] != 0x3b3a8095, "test7 case 9 failed\n");
    511  1.2.2.2  alnsn 
    512  1.2.2.2  alnsn 	sljit_free_code(code.code);
    513  1.2.2.2  alnsn 	successful_tests++;
    514  1.2.2.2  alnsn }
    515  1.2.2.2  alnsn 
    516  1.2.2.2  alnsn static void test8(void)
    517  1.2.2.2  alnsn {
    518  1.2.2.2  alnsn 	/* Test flags (neg, cmp, test). */
    519  1.2.2.2  alnsn 	executable_code code;
    520  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    521  1.2.2.3    tls 	sljit_sw buf[13];
    522  1.2.2.3    tls 
    523  1.2.2.3    tls 	if (verbose)
    524  1.2.2.3    tls 		printf("Run test8\n");
    525  1.2.2.2  alnsn 
    526  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    527  1.2.2.2  alnsn 	buf[0] = 100;
    528  1.2.2.2  alnsn 	buf[1] = 3;
    529  1.2.2.2  alnsn 	buf[2] = 3;
    530  1.2.2.2  alnsn 	buf[3] = 3;
    531  1.2.2.2  alnsn 	buf[4] = 3;
    532  1.2.2.2  alnsn 	buf[5] = 3;
    533  1.2.2.2  alnsn 	buf[6] = 3;
    534  1.2.2.2  alnsn 	buf[7] = 3;
    535  1.2.2.2  alnsn 	buf[8] = 3;
    536  1.2.2.2  alnsn 	buf[9] = 3;
    537  1.2.2.3    tls 	buf[10] = 3;
    538  1.2.2.3    tls 	buf[11] = 3;
    539  1.2.2.3    tls 	buf[12] = 3;
    540  1.2.2.2  alnsn 
    541  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 2, 0);
    542  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 20);
    543  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 10);
    544  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_IMM, 6, SLJIT_IMM, 5);
    545  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_NOT_EQUAL);
    546  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
    547  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3000);
    548  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_UNUSED, 0, SLJIT_C_GREATER);
    549  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_SAVED_REG2, 0);
    550  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_UNUSED, 0, SLJIT_C_LESS);
    551  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG3, 0);
    552  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -15);
    553  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_UNUSED, 0, SLJIT_C_SIG_GREATER);
    554  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SCRATCH_REG3, 0);
    555  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
    556  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
    557  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NEG | SLJIT_SET_E | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_IMM, (sljit_sw)1 << ((sizeof(sljit_sw) << 3) - 1));
    558  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_UNUSED, 0, SLJIT_C_OVERFLOW);
    559  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
    560  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT | SLJIT_SET_E, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    561  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_UNUSED, 0, SLJIT_C_ZERO);
    562  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0);
    563  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 8, SLJIT_UNUSED, 0, SLJIT_C_ZERO);
    564  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_IMM, 0xffff, SLJIT_SCRATCH_REG1, 0);
    565  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xffff);
    566  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 9, SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
    567  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_IMM, 0xffff, SLJIT_SCRATCH_REG2, 0);
    568  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0xffff);
    569  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG2, 0);
    570  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    571  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    572  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 0x1);
    573  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 10, SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
    574  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)1 << ((sizeof(sljit_sw) << 3) - 1));
    575  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
    576  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    577  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 11, SLJIT_UNUSED, 0, SLJIT_C_OVERFLOW);
    578  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    579  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 12, SLJIT_UNUSED, 0, SLJIT_C_OVERFLOW);
    580  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
    581  1.2.2.2  alnsn 
    582  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    583  1.2.2.2  alnsn 	CHECK(compiler);
    584  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    585  1.2.2.2  alnsn 
    586  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
    587  1.2.2.2  alnsn 	FAILED(buf[1] != 1, "test8 case 1 failed\n");
    588  1.2.2.2  alnsn 	FAILED(buf[2] != 0, "test8 case 2 failed\n");
    589  1.2.2.2  alnsn 	FAILED(buf[3] != 0, "test8 case 3 failed\n");
    590  1.2.2.2  alnsn 	FAILED(buf[4] != 1, "test8 case 4 failed\n");
    591  1.2.2.2  alnsn 	FAILED(buf[5] != 1, "test8 case 5 failed\n");
    592  1.2.2.2  alnsn 	FAILED(buf[6] != 1, "test8 case 6 failed\n");
    593  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test8 case 7 failed\n");
    594  1.2.2.2  alnsn 	FAILED(buf[8] != 0, "test8 case 8 failed\n");
    595  1.2.2.2  alnsn 	FAILED(buf[9] != 1, "test8 case 9 failed\n");
    596  1.2.2.2  alnsn 	FAILED(buf[10] != 0, "test8 case 10 failed\n");
    597  1.2.2.3    tls 	FAILED(buf[11] != 1, "test8 case 11 failed\n");
    598  1.2.2.3    tls 	FAILED(buf[12] != 0, "test8 case 12 failed\n");
    599  1.2.2.2  alnsn 
    600  1.2.2.2  alnsn 	sljit_free_code(code.code);
    601  1.2.2.2  alnsn 	successful_tests++;
    602  1.2.2.2  alnsn }
    603  1.2.2.2  alnsn 
    604  1.2.2.2  alnsn static void test9(void)
    605  1.2.2.2  alnsn {
    606  1.2.2.2  alnsn 	/* Test shift. */
    607  1.2.2.2  alnsn 	executable_code code;
    608  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    609  1.2.2.3    tls 	sljit_sw buf[13];
    610  1.2.2.3    tls 
    611  1.2.2.3    tls 	if (verbose)
    612  1.2.2.3    tls 		printf("Run test9\n");
    613  1.2.2.2  alnsn 
    614  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    615  1.2.2.2  alnsn 	buf[0] = 0;
    616  1.2.2.2  alnsn 	buf[1] = 0;
    617  1.2.2.2  alnsn 	buf[2] = 0;
    618  1.2.2.2  alnsn 	buf[3] = 0;
    619  1.2.2.2  alnsn 	buf[4] = 1 << 10;
    620  1.2.2.2  alnsn 	buf[5] = 0;
    621  1.2.2.2  alnsn 	buf[6] = 0;
    622  1.2.2.2  alnsn 	buf[7] = 0;
    623  1.2.2.2  alnsn 	buf[8] = 0;
    624  1.2.2.2  alnsn 	buf[9] = 3;
    625  1.2.2.2  alnsn 	buf[10] = 0;
    626  1.2.2.2  alnsn 	buf[11] = 0;
    627  1.2.2.2  alnsn 	buf[12] = 0;
    628  1.2.2.2  alnsn 
    629  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 2, 0);
    630  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xf);
    631  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3);
    632  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
    633  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
    634  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
    635  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
    636  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
    637  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -64);
    638  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 2);
    639  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
    640  1.2.2.2  alnsn 
    641  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 0xff);
    642  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
    643  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_PREF_SHIFT_REG, 0, SLJIT_PREF_SHIFT_REG, 0, SLJIT_SCRATCH_REG1, 0);
    644  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_PREF_SHIFT_REG, 0);
    645  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 0xff);
    646  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
    647  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG1, 0);
    648  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_PREF_SHIFT_REG, 0, SLJIT_SCRATCH_REG1, 0);
    649  1.2.2.2  alnsn 
    650  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 0xf);
    651  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
    652  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    653  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_SAVED_REG2, 0);
    654  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    655  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_SCRATCH_REG1, 0);
    656  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 0xf00);
    657  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
    658  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG1, 0);
    659  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 8, SLJIT_SCRATCH_REG2, 0);
    660  1.2.2.3    tls 
    661  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)buf);
    662  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 9);
    663  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG2), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG2), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG2), SLJIT_WORD_SHIFT);
    664  1.2.2.2  alnsn 
    665  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 4);
    666  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 2, SLJIT_PREF_SHIFT_REG, 0);
    667  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 10, SLJIT_PREF_SHIFT_REG, 0);
    668  1.2.2.2  alnsn 
    669  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xa9);
    670  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
    671  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x7d00);
    672  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ILSHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 32);
    673  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
    674  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
    675  1.2.2.2  alnsn #endif
    676  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    677  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xe30000);
    678  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
    679  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xffc0);
    680  1.2.2.2  alnsn #else
    681  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xffe0);
    682  1.2.2.2  alnsn #endif
    683  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    684  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x25000000);
    685  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xfffe1);
    686  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
    687  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
    688  1.2.2.2  alnsn #endif
    689  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 11, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    690  1.2.2.2  alnsn 
    691  1.2.2.3    tls 	SLJIT_ASSERT(SLJIT_SCRATCH_REG3 == SLJIT_PREF_SHIFT_REG);
    692  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 0);
    693  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x5c);
    694  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
    695  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xf600);
    696  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ILSHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
    697  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
    698  1.2.2.3    tls 	/* Alternative form of uint32 type cast. */
    699  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xffffffff);
    700  1.2.2.2  alnsn #endif
    701  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    702  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x630000);
    703  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
    704  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 12, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
    705  1.2.2.2  alnsn 
    706  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
    707  1.2.2.2  alnsn 
    708  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    709  1.2.2.2  alnsn 	CHECK(compiler);
    710  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    711  1.2.2.2  alnsn 
    712  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
    713  1.2.2.2  alnsn 	FAILED(buf[0] != 0x3c, "test9 case 1 failed\n");
    714  1.2.2.2  alnsn 	FAILED(buf[1] != 0xf0, "test9 case 2 failed\n");
    715  1.2.2.2  alnsn 	FAILED(buf[2] != -16, "test9 case 3 failed\n");
    716  1.2.2.2  alnsn 	FAILED(buf[3] != 0xff0, "test9 case 4 failed\n");
    717  1.2.2.2  alnsn 	FAILED(buf[4] != 4, "test9 case 5 failed\n");
    718  1.2.2.2  alnsn 	FAILED(buf[5] != 0xff00, "test9 case 6 failed\n");
    719  1.2.2.2  alnsn 	FAILED(buf[6] != 0x3c, "test9 case 7 failed\n");
    720  1.2.2.2  alnsn 	FAILED(buf[7] != 0xf0, "test9 case 8 failed\n");
    721  1.2.2.2  alnsn 	FAILED(buf[8] != 0xf0, "test9 case 9 failed\n");
    722  1.2.2.2  alnsn 	FAILED(buf[9] != 0x18, "test9 case 10 failed\n");
    723  1.2.2.2  alnsn 	FAILED(buf[10] != 32, "test9 case 11 failed\n");
    724  1.2.2.2  alnsn 	FAILED(buf[11] != 0x4ae37da9, "test9 case 12 failed\n");
    725  1.2.2.2  alnsn 	FAILED(buf[12] != 0x63f65c, "test9 case 13 failed\n");
    726  1.2.2.2  alnsn 
    727  1.2.2.2  alnsn 	sljit_free_code(code.code);
    728  1.2.2.2  alnsn 	successful_tests++;
    729  1.2.2.2  alnsn }
    730  1.2.2.2  alnsn 
    731  1.2.2.2  alnsn static void test10(void)
    732  1.2.2.2  alnsn {
    733  1.2.2.2  alnsn 	/* Test multiplications. */
    734  1.2.2.2  alnsn 	executable_code code;
    735  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    736  1.2.2.3    tls 	sljit_sw buf[6];
    737  1.2.2.3    tls 
    738  1.2.2.3    tls 	if (verbose)
    739  1.2.2.3    tls 		printf("Run test10\n");
    740  1.2.2.2  alnsn 
    741  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    742  1.2.2.2  alnsn 	buf[0] = 3;
    743  1.2.2.2  alnsn 	buf[1] = 0;
    744  1.2.2.2  alnsn 	buf[2] = 0;
    745  1.2.2.2  alnsn 	buf[3] = 6;
    746  1.2.2.2  alnsn 	buf[4] = -10;
    747  1.2.2.2  alnsn 	buf[5] = 0;
    748  1.2.2.2  alnsn 
    749  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
    750  1.2.2.2  alnsn 
    751  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
    752  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
    753  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
    754  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 7);
    755  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 8);
    756  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
    757  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -3, SLJIT_IMM, -4);
    758  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SCRATCH_REG1, 0);
    759  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -2);
    760  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_SCRATCH_REG1, 0);
    761  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sw) / 2);
    762  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)&buf[3]);
    763  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 1, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 1, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 1);
    764  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 9);
    765  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
    766  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SCRATCH_REG1, 0);
    767  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 11, SLJIT_IMM, 10);
    768  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    769  1.2.2.2  alnsn 
    770  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    771  1.2.2.2  alnsn 	CHECK(compiler);
    772  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    773  1.2.2.2  alnsn 
    774  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 110, "test10 case 1 failed\n");
    775  1.2.2.2  alnsn 	FAILED(buf[0] != 15, "test10 case 2 failed\n");
    776  1.2.2.2  alnsn 	FAILED(buf[1] != 56, "test10 case 3 failed\n");
    777  1.2.2.2  alnsn 	FAILED(buf[2] != 12, "test10 case 4 failed\n");
    778  1.2.2.2  alnsn 	FAILED(buf[3] != -12, "test10 case 5 failed\n");
    779  1.2.2.2  alnsn 	FAILED(buf[4] != 100, "test10 case 6 failed\n");
    780  1.2.2.2  alnsn 	FAILED(buf[5] != 81, "test10 case 7 failed\n");
    781  1.2.2.2  alnsn 
    782  1.2.2.2  alnsn 	sljit_free_code(code.code);
    783  1.2.2.2  alnsn 	successful_tests++;
    784  1.2.2.2  alnsn }
    785  1.2.2.2  alnsn 
    786  1.2.2.2  alnsn static void test11(void)
    787  1.2.2.2  alnsn {
    788  1.2.2.2  alnsn 	/* Test rewritable constants. */
    789  1.2.2.2  alnsn 	executable_code code;
    790  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    791  1.2.2.2  alnsn 	struct sljit_const* const1;
    792  1.2.2.2  alnsn 	struct sljit_const* const2;
    793  1.2.2.2  alnsn 	struct sljit_const* const3;
    794  1.2.2.2  alnsn 	struct sljit_const* const4;
    795  1.2.2.2  alnsn 	void* value;
    796  1.2.2.2  alnsn 	sljit_uw const1_addr;
    797  1.2.2.2  alnsn 	sljit_uw const2_addr;
    798  1.2.2.2  alnsn 	sljit_uw const3_addr;
    799  1.2.2.2  alnsn 	sljit_uw const4_addr;
    800  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
    801  1.2.2.3    tls 	sljit_sw word_value1 = SLJIT_W(0xaaaaaaaaaaaaaaaa);
    802  1.2.2.3    tls 	sljit_sw word_value2 = SLJIT_W(0xfee1deadfbadf00d);
    803  1.2.2.2  alnsn #else
    804  1.2.2.3    tls 	sljit_sw word_value1 = 0xaaaaaaaal;
    805  1.2.2.3    tls 	sljit_sw word_value2 = 0xfbadf00dl;
    806  1.2.2.2  alnsn #endif
    807  1.2.2.3    tls 	sljit_sw buf[3];
    808  1.2.2.3    tls 
    809  1.2.2.3    tls 	if (verbose)
    810  1.2.2.3    tls 		printf("Run test11\n");
    811  1.2.2.2  alnsn 
    812  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    813  1.2.2.2  alnsn 	buf[0] = 0;
    814  1.2.2.2  alnsn 	buf[1] = 0;
    815  1.2.2.2  alnsn 	buf[2] = 0;
    816  1.2.2.2  alnsn 
    817  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
    818  1.2.2.2  alnsn 
    819  1.2.2.3    tls 	const1 = sljit_emit_const(compiler, SLJIT_MEM0(), (sljit_sw)&buf[0], -0x81b9);
    820  1.2.2.2  alnsn 	SLJIT_ASSERT(!sljit_alloc_memory(compiler, 0));
    821  1.2.2.3    tls 	SLJIT_ASSERT(!sljit_alloc_memory(compiler, 16 * sizeof(sljit_sw) + 1));
    822  1.2.2.3    tls 	value = sljit_alloc_memory(compiler, 16 * sizeof(sljit_sw));
    823  1.2.2.3    tls 	SLJIT_ASSERT(!((sljit_sw)value & (sizeof(sljit_sw) - 1)));
    824  1.2.2.3    tls 	memset(value, 255, 16 * sizeof(sljit_sw));
    825  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
    826  1.2.2.3    tls 	const2 = sljit_emit_const(compiler, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT - 1, -65535);
    827  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&buf[0] + 2 * sizeof(sljit_sw) - 2);
    828  1.2.2.3    tls 	const3 = sljit_emit_const(compiler, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0, word_value1);
    829  1.2.2.2  alnsn 	value = sljit_alloc_memory(compiler, 17);
    830  1.2.2.3    tls 	SLJIT_ASSERT(!((sljit_sw)value & (sizeof(sljit_sw) - 1)));
    831  1.2.2.2  alnsn 	memset(value, 255, 16);
    832  1.2.2.2  alnsn 	const4 = sljit_emit_const(compiler, SLJIT_RETURN_REG, 0, 0xf7afcdb7);
    833  1.2.2.2  alnsn 
    834  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
    835  1.2.2.2  alnsn 
    836  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    837  1.2.2.2  alnsn 	CHECK(compiler);
    838  1.2.2.2  alnsn 	const1_addr = sljit_get_const_addr(const1);
    839  1.2.2.2  alnsn 	const2_addr = sljit_get_const_addr(const2);
    840  1.2.2.2  alnsn 	const3_addr = sljit_get_const_addr(const3);
    841  1.2.2.2  alnsn 	const4_addr = sljit_get_const_addr(const4);
    842  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    843  1.2.2.2  alnsn 
    844  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 0xf7afcdb7, "test11 case 1 failed\n");
    845  1.2.2.2  alnsn 	FAILED(buf[0] != -0x81b9, "test11 case 2 failed\n");
    846  1.2.2.2  alnsn 	FAILED(buf[1] != -65535, "test11 case 3 failed\n");
    847  1.2.2.2  alnsn 	FAILED(buf[2] != word_value1, "test11 case 4 failed\n");
    848  1.2.2.2  alnsn 
    849  1.2.2.2  alnsn 	sljit_set_const(const1_addr, -1);
    850  1.2.2.2  alnsn 	sljit_set_const(const2_addr, word_value2);
    851  1.2.2.2  alnsn 	sljit_set_const(const3_addr, 0xbab0fea1);
    852  1.2.2.2  alnsn 	sljit_set_const(const4_addr, -60089);
    853  1.2.2.2  alnsn 
    854  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != -60089, "test11 case 5 failed\n");
    855  1.2.2.2  alnsn 	FAILED(buf[0] != -1, "test11 case 6 failed\n");
    856  1.2.2.2  alnsn 	FAILED(buf[1] != word_value2, "test11 case 7 failed\n");
    857  1.2.2.2  alnsn 	FAILED(buf[2] != 0xbab0fea1, "test11 case 8 failed\n");
    858  1.2.2.2  alnsn 
    859  1.2.2.2  alnsn 	sljit_free_code(code.code);
    860  1.2.2.2  alnsn 	successful_tests++;
    861  1.2.2.2  alnsn }
    862  1.2.2.2  alnsn 
    863  1.2.2.2  alnsn static void test12(void)
    864  1.2.2.2  alnsn {
    865  1.2.2.2  alnsn 	/* Test rewriteable jumps. */
    866  1.2.2.2  alnsn 	executable_code code;
    867  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    868  1.2.2.2  alnsn 	struct sljit_label *label1;
    869  1.2.2.2  alnsn 	struct sljit_label *label2;
    870  1.2.2.2  alnsn 	struct sljit_label *label3;
    871  1.2.2.2  alnsn 	struct sljit_jump *jump1;
    872  1.2.2.2  alnsn 	struct sljit_jump *jump2;
    873  1.2.2.2  alnsn 	struct sljit_jump *jump3;
    874  1.2.2.2  alnsn 	void* value;
    875  1.2.2.2  alnsn 	sljit_uw jump1_addr;
    876  1.2.2.2  alnsn 	sljit_uw label1_addr;
    877  1.2.2.2  alnsn 	sljit_uw label2_addr;
    878  1.2.2.3    tls 	sljit_sw buf[1];
    879  1.2.2.3    tls 
    880  1.2.2.3    tls 	if (verbose)
    881  1.2.2.3    tls 		printf("Run test12\n");
    882  1.2.2.2  alnsn 
    883  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    884  1.2.2.2  alnsn 	buf[0] = 0;
    885  1.2.2.2  alnsn 
    886  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 2, 0);
    887  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S, SLJIT_UNUSED, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 10);
    888  1.2.2.2  alnsn 	jump1 = sljit_emit_jump(compiler, SLJIT_REWRITABLE_JUMP | SLJIT_C_SIG_GREATER);
    889  1.2.2.2  alnsn 	/* Default handler. */
    890  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 5);
    891  1.2.2.2  alnsn 	jump2 = sljit_emit_jump(compiler, SLJIT_JUMP);
    892  1.2.2.2  alnsn 	value = sljit_alloc_memory(compiler, 15);
    893  1.2.2.3    tls 	SLJIT_ASSERT(!((sljit_sw)value & (sizeof(sljit_sw) - 1)));
    894  1.2.2.2  alnsn 	memset(value, 255, 15);
    895  1.2.2.2  alnsn 	/* Handler 1. */
    896  1.2.2.2  alnsn 	label1 = sljit_emit_label(compiler);
    897  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 6);
    898  1.2.2.2  alnsn 	jump3 = sljit_emit_jump(compiler, SLJIT_JUMP);
    899  1.2.2.2  alnsn 	/* Handler 2. */
    900  1.2.2.2  alnsn 	label2 = sljit_emit_label(compiler);
    901  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 7);
    902  1.2.2.2  alnsn 	/* Exit. */
    903  1.2.2.2  alnsn 	label3 = sljit_emit_label(compiler);
    904  1.2.2.2  alnsn 	sljit_set_label(jump2, label3);
    905  1.2.2.2  alnsn 	sljit_set_label(jump3, label3);
    906  1.2.2.2  alnsn 	/* By default, set to handler 1. */
    907  1.2.2.2  alnsn 	sljit_set_label(jump1, label1);
    908  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
    909  1.2.2.2  alnsn 
    910  1.2.2.2  alnsn 	value = sljit_alloc_memory(compiler, 8);
    911  1.2.2.3    tls 	SLJIT_ASSERT(!((sljit_sw)value & (sizeof(sljit_sw) - 1)));
    912  1.2.2.2  alnsn 	memset(value, 255, 8);
    913  1.2.2.2  alnsn 
    914  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
    915  1.2.2.2  alnsn 	CHECK(compiler);
    916  1.2.2.2  alnsn 	jump1_addr = sljit_get_jump_addr(jump1);
    917  1.2.2.2  alnsn 	label1_addr = sljit_get_label_addr(label1);
    918  1.2.2.2  alnsn 	label2_addr = sljit_get_label_addr(label2);
    919  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
    920  1.2.2.2  alnsn 
    921  1.2.2.3    tls 	code.func2((sljit_sw)&buf, 4);
    922  1.2.2.2  alnsn 	FAILED(buf[0] != 5, "test12 case 1 failed\n");
    923  1.2.2.2  alnsn 
    924  1.2.2.3    tls 	code.func2((sljit_sw)&buf, 11);
    925  1.2.2.2  alnsn 	FAILED(buf[0] != 6, "test12 case 2 failed\n");
    926  1.2.2.2  alnsn 
    927  1.2.2.2  alnsn 	sljit_set_jump_addr(jump1_addr, label2_addr);
    928  1.2.2.3    tls 	code.func2((sljit_sw)&buf, 12);
    929  1.2.2.2  alnsn 	FAILED(buf[0] != 7, "test12 case 3 failed\n");
    930  1.2.2.2  alnsn 
    931  1.2.2.2  alnsn 	sljit_set_jump_addr(jump1_addr, label1_addr);
    932  1.2.2.3    tls 	code.func2((sljit_sw)&buf, 13);
    933  1.2.2.2  alnsn 	FAILED(buf[0] != 6, "test12 case 4 failed\n");
    934  1.2.2.2  alnsn 
    935  1.2.2.2  alnsn 	sljit_free_code(code.code);
    936  1.2.2.2  alnsn 	successful_tests++;
    937  1.2.2.2  alnsn }
    938  1.2.2.2  alnsn 
    939  1.2.2.2  alnsn static void test13(void)
    940  1.2.2.2  alnsn {
    941  1.2.2.2  alnsn 	/* Test fpu monadic functions. */
    942  1.2.2.2  alnsn 	executable_code code;
    943  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
    944  1.2.2.3    tls 	sljit_d buf[7];
    945  1.2.2.3    tls 	sljit_sw buf2[6];
    946  1.2.2.3    tls 
    947  1.2.2.3    tls 	if (verbose)
    948  1.2.2.3    tls 		printf("Run test13\n");
    949  1.2.2.2  alnsn 
    950  1.2.2.2  alnsn 	if (!sljit_is_fpu_available()) {
    951  1.2.2.2  alnsn 		printf("no fpu available, test13 skipped\n");
    952  1.2.2.2  alnsn 		successful_tests++;
    953  1.2.2.2  alnsn 		if (compiler)
    954  1.2.2.2  alnsn 			sljit_free_compiler(compiler);
    955  1.2.2.2  alnsn 		return;
    956  1.2.2.2  alnsn 	}
    957  1.2.2.2  alnsn 
    958  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
    959  1.2.2.2  alnsn 	buf[0] = 7.75;
    960  1.2.2.2  alnsn 	buf[1] = -4.5;
    961  1.2.2.2  alnsn 	buf[2] = 0.0;
    962  1.2.2.2  alnsn 	buf[3] = 0.0;
    963  1.2.2.2  alnsn 	buf[4] = 0.0;
    964  1.2.2.2  alnsn 	buf[5] = 0.0;
    965  1.2.2.2  alnsn 	buf[6] = 0.0;
    966  1.2.2.2  alnsn 
    967  1.2.2.2  alnsn 	buf2[0] = 10;
    968  1.2.2.2  alnsn 	buf2[1] = 10;
    969  1.2.2.2  alnsn 	buf2[2] = 10;
    970  1.2.2.2  alnsn 	buf2[3] = 10;
    971  1.2.2.2  alnsn 	buf2[4] = 10;
    972  1.2.2.2  alnsn 	buf2[5] = 10;
    973  1.2.2.2  alnsn 
    974  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 2, 0);
    975  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM0(), (sljit_sw)&buf[2], SLJIT_MEM0(), (sljit_sw)&buf[1]);
    976  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSD, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_d), SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d));
    977  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG1, 0, SLJIT_MEM0(), (sljit_sw)&buf[0]);
    978  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2 * sizeof(sljit_d));
    979  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 0);
    980  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_NEGD, SLJIT_FLOAT_REG3, 0, SLJIT_FLOAT_REG1, 0);
    981  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG4, 0, SLJIT_FLOAT_REG3, 0);
    982  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM0(), (sljit_sw)&buf[4], SLJIT_FLOAT_REG4, 0);
    983  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSD, SLJIT_FLOAT_REG5, 0, SLJIT_FLOAT_REG2, 0);
    984  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_d), SLJIT_FLOAT_REG5, 0);
    985  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_NEGD, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_d), SLJIT_FLOAT_REG5, 0);
    986  1.2.2.3    tls 
    987  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG6, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
    988  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_S, SLJIT_FLOAT_REG6, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d));
    989  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_UNUSED, 0, SLJIT_C_FLOAT_GREATER);
    990  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_S, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d), SLJIT_FLOAT_REG6, 0);
    991  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_FLOAT_GREATER);
    992  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG6, 0);
    993  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_E | SLJIT_SET_S, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG2, 0);
    994  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 2 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_FLOAT_EQUAL);
    995  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_FLOAT_LESS);
    996  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_E, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d));
    997  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 4 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_FLOAT_EQUAL);
    998  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 5 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_FLOAT_NOT_EQUAL);
    999  1.2.2.2  alnsn 
   1000  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1001  1.2.2.2  alnsn 
   1002  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1003  1.2.2.2  alnsn 	CHECK(compiler);
   1004  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1005  1.2.2.2  alnsn 
   1006  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&buf2);
   1007  1.2.2.2  alnsn 	FAILED(buf[2] != -4.5, "test13 case 1 failed\n");
   1008  1.2.2.2  alnsn 	FAILED(buf[3] != 4.5, "test13 case 2 failed\n");
   1009  1.2.2.2  alnsn 	FAILED(buf[4] != -7.75, "test13 case 3 failed\n");
   1010  1.2.2.2  alnsn 	FAILED(buf[5] != 4.5, "test13 case 4 failed\n");
   1011  1.2.2.2  alnsn 	FAILED(buf[6] != -4.5, "test13 case 5 failed\n");
   1012  1.2.2.2  alnsn 
   1013  1.2.2.2  alnsn 	FAILED(buf2[0] != 1, "test13 case 6 failed\n");
   1014  1.2.2.2  alnsn 	FAILED(buf2[1] != 0, "test13 case 7 failed\n");
   1015  1.2.2.2  alnsn 	FAILED(buf2[2] != 1, "test13 case 8 failed\n");
   1016  1.2.2.2  alnsn 	FAILED(buf2[3] != 0, "test13 case 9 failed\n");
   1017  1.2.2.2  alnsn 	FAILED(buf2[4] != 0, "test13 case 10 failed\n");
   1018  1.2.2.2  alnsn 	FAILED(buf2[5] != 1, "test13 case 11 failed\n");
   1019  1.2.2.2  alnsn 
   1020  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1021  1.2.2.2  alnsn 	successful_tests++;
   1022  1.2.2.2  alnsn }
   1023  1.2.2.2  alnsn 
   1024  1.2.2.2  alnsn static void test14(void)
   1025  1.2.2.2  alnsn {
   1026  1.2.2.2  alnsn 	/* Test fpu diadic functions. */
   1027  1.2.2.2  alnsn 	executable_code code;
   1028  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1029  1.2.2.3    tls 	sljit_d buf[15];
   1030  1.2.2.3    tls 
   1031  1.2.2.3    tls 	if (verbose)
   1032  1.2.2.3    tls 		printf("Run test14\n");
   1033  1.2.2.2  alnsn 
   1034  1.2.2.2  alnsn 	if (!sljit_is_fpu_available()) {
   1035  1.2.2.2  alnsn 		printf("no fpu available, test14 skipped\n");
   1036  1.2.2.2  alnsn 		successful_tests++;
   1037  1.2.2.2  alnsn 		if (compiler)
   1038  1.2.2.2  alnsn 			sljit_free_compiler(compiler);
   1039  1.2.2.2  alnsn 		return;
   1040  1.2.2.2  alnsn 	}
   1041  1.2.2.2  alnsn 	buf[0] = 7.25;
   1042  1.2.2.2  alnsn 	buf[1] = 3.5;
   1043  1.2.2.2  alnsn 	buf[2] = 1.75;
   1044  1.2.2.2  alnsn 	buf[3] = 0.0;
   1045  1.2.2.2  alnsn 	buf[4] = 0.0;
   1046  1.2.2.2  alnsn 	buf[5] = 0.0;
   1047  1.2.2.2  alnsn 	buf[6] = 0.0;
   1048  1.2.2.2  alnsn 	buf[7] = 0.0;
   1049  1.2.2.2  alnsn 	buf[8] = 0.0;
   1050  1.2.2.2  alnsn 	buf[9] = 0.0;
   1051  1.2.2.2  alnsn 	buf[10] = 0.0;
   1052  1.2.2.2  alnsn 	buf[11] = 0.0;
   1053  1.2.2.2  alnsn 	buf[12] = 8.0;
   1054  1.2.2.2  alnsn 	buf[13] = 4.0;
   1055  1.2.2.2  alnsn 	buf[14] = 0.0;
   1056  1.2.2.2  alnsn 
   1057  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1058  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
   1059  1.2.2.2  alnsn 
   1060  1.2.2.2  alnsn 	/* ADD */
   1061  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_d));
   1062  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d));
   1063  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 2);
   1064  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_ADDD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 3, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   1065  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_ADDD, SLJIT_FLOAT_REG1, 0, SLJIT_FLOAT_REG1, 0, SLJIT_FLOAT_REG2, 0);
   1066  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_ADDD, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG1, 0, SLJIT_FLOAT_REG2, 0);
   1067  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 4, SLJIT_FLOAT_REG1, 0);
   1068  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 5, SLJIT_FLOAT_REG2, 0);
   1069  1.2.2.2  alnsn 
   1070  1.2.2.2  alnsn 	/* SUB */
   1071  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   1072  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG4, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 2);
   1073  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 2);
   1074  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_SUBD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 6, SLJIT_FLOAT_REG4, 0, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG2), SLJIT_DOUBLE_SHIFT);
   1075  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_SUBD, SLJIT_FLOAT_REG3, 0, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 2);
   1076  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_SUBD, SLJIT_FLOAT_REG4, 0, SLJIT_FLOAT_REG3, 0, SLJIT_FLOAT_REG4, 0);
   1077  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 7, SLJIT_FLOAT_REG3, 0);
   1078  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 8, SLJIT_FLOAT_REG4, 0);
   1079  1.2.2.2  alnsn 
   1080  1.2.2.2  alnsn 	/* MUL */
   1081  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
   1082  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_MULD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 9, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG2), SLJIT_DOUBLE_SHIFT, SLJIT_FLOAT_REG2, 0);
   1083  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_MULD, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG3, 0);
   1084  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_MULD, SLJIT_FLOAT_REG6, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 2, SLJIT_FLOAT_REG3, 0);
   1085  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 10, SLJIT_FLOAT_REG2, 0);
   1086  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 11, SLJIT_FLOAT_REG6, 0);
   1087  1.2.2.2  alnsn 
   1088  1.2.2.2  alnsn 	/* DIV */
   1089  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG6, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 12);
   1090  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 13);
   1091  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG5, 0, SLJIT_FLOAT_REG6, 0);
   1092  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_DIVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 12, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 12, SLJIT_FLOAT_REG2, 0);
   1093  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_DIVD, SLJIT_FLOAT_REG6, 0, SLJIT_FLOAT_REG6, 0, SLJIT_FLOAT_REG2, 0);
   1094  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_DIVD, SLJIT_FLOAT_REG5, 0, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG5, 0);
   1095  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 13, SLJIT_FLOAT_REG6, 0);
   1096  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d) * 14, SLJIT_FLOAT_REG5, 0);
   1097  1.2.2.2  alnsn 
   1098  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1099  1.2.2.2  alnsn 
   1100  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1101  1.2.2.2  alnsn 	CHECK(compiler);
   1102  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1103  1.2.2.2  alnsn 
   1104  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   1105  1.2.2.2  alnsn 	FAILED(buf[3] != 10.75, "test14 case 1 failed\n");
   1106  1.2.2.2  alnsn 	FAILED(buf[4] != 5.25, "test14 case 2 failed\n");
   1107  1.2.2.2  alnsn 	FAILED(buf[5] != 7.0, "test14 case 3 failed\n");
   1108  1.2.2.2  alnsn 	FAILED(buf[6] != 0.0, "test14 case 4 failed\n");
   1109  1.2.2.2  alnsn 	FAILED(buf[7] != 5.5, "test14 case 5 failed\n");
   1110  1.2.2.2  alnsn 	FAILED(buf[8] != 3.75, "test14 case 6 failed\n");
   1111  1.2.2.2  alnsn 	FAILED(buf[9] != 24.5, "test14 case 7 failed\n");
   1112  1.2.2.2  alnsn 	FAILED(buf[10] != 38.5, "test14 case 8 failed\n");
   1113  1.2.2.2  alnsn 	FAILED(buf[11] != 9.625, "test14 case 9 failed\n");
   1114  1.2.2.2  alnsn 	FAILED(buf[12] != 2.0, "test14 case 10 failed\n");
   1115  1.2.2.2  alnsn 	FAILED(buf[13] != 2.0, "test14 case 11 failed\n");
   1116  1.2.2.3    tls 	FAILED(buf[14] != 0.5, "test14 case 12 failed\n");
   1117  1.2.2.2  alnsn 
   1118  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1119  1.2.2.2  alnsn 	successful_tests++;
   1120  1.2.2.2  alnsn }
   1121  1.2.2.2  alnsn 
   1122  1.2.2.3    tls static sljit_sw SLJIT_CALL func(sljit_sw a, sljit_sw b, sljit_sw c)
   1123  1.2.2.2  alnsn {
   1124  1.2.2.2  alnsn 	return a + b + c + 5;
   1125  1.2.2.2  alnsn }
   1126  1.2.2.2  alnsn 
   1127  1.2.2.2  alnsn static void test15(void)
   1128  1.2.2.2  alnsn {
   1129  1.2.2.2  alnsn 	/* Test function call. */
   1130  1.2.2.2  alnsn 	executable_code code;
   1131  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1132  1.2.2.2  alnsn 	struct sljit_jump* jump;
   1133  1.2.2.3    tls 	sljit_sw buf[7];
   1134  1.2.2.3    tls 
   1135  1.2.2.3    tls 	if (verbose)
   1136  1.2.2.3    tls 		printf("Run test15\n");
   1137  1.2.2.2  alnsn 
   1138  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1139  1.2.2.2  alnsn 	buf[0] = 0;
   1140  1.2.2.2  alnsn 	buf[1] = 0;
   1141  1.2.2.2  alnsn 	buf[2] = 0;
   1142  1.2.2.2  alnsn 	buf[3] = 0;
   1143  1.2.2.2  alnsn 	buf[4] = 0;
   1144  1.2.2.2  alnsn 	buf[5] = 0;
   1145  1.2.2.2  alnsn 	buf[6] = SLJIT_FUNC_OFFSET(func);
   1146  1.2.2.2  alnsn 
   1147  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 4, 1, 0);
   1148  1.2.2.2  alnsn 
   1149  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   1150  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 7);
   1151  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -3);
   1152  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(func));
   1153  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_RETURN_REG, 0);
   1154  1.2.2.2  alnsn 
   1155  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -5);
   1156  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -10);
   1157  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 2);
   1158  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_CALL3 | SLJIT_REWRITABLE_JUMP);
   1159  1.2.2.3    tls 	sljit_set_target(jump, (sljit_sw)-1);
   1160  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1161  1.2.2.2  alnsn 
   1162  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_FUNC_OFFSET(func));
   1163  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 40);
   1164  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -3);
   1165  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_SCRATCH_REG1, 0);
   1166  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1167  1.2.2.3    tls 
   1168  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -60);
   1169  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_FUNC_OFFSET(func));
   1170  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -30);
   1171  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_SCRATCH_REG2, 0);
   1172  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1173  1.2.2.3    tls 
   1174  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 10);
   1175  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 16);
   1176  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, SLJIT_FUNC_OFFSET(func));
   1177  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_SCRATCH_REG3, 0);
   1178  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1179  1.2.2.3    tls 
   1180  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 100);
   1181  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 110);
   1182  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 120);
   1183  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, SLJIT_FUNC_OFFSET(func));
   1184  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_TEMPORARY_EREG1, 0);
   1185  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1186  1.2.2.2  alnsn 
   1187  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -10);
   1188  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -16);
   1189  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 6);
   1190  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw));
   1191  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_RETURN_REG, 0);
   1192  1.2.2.2  alnsn 
   1193  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   1194  1.2.2.2  alnsn 
   1195  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1196  1.2.2.2  alnsn 	CHECK(compiler);
   1197  1.2.2.2  alnsn 	sljit_set_jump_addr(sljit_get_jump_addr(jump), SLJIT_FUNC_OFFSET(func));
   1198  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1199  1.2.2.2  alnsn 
   1200  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != -15, "test15 case 1 failed\n");
   1201  1.2.2.2  alnsn 	FAILED(buf[0] != 14, "test15 case 2 failed\n");
   1202  1.2.2.2  alnsn 	FAILED(buf[1] != -8, "test15 case 3 failed\n");
   1203  1.2.2.2  alnsn 	FAILED(buf[2] != SLJIT_FUNC_OFFSET(func) + 42, "test15 case 4 failed\n");
   1204  1.2.2.2  alnsn 	FAILED(buf[3] != SLJIT_FUNC_OFFSET(func) - 85, "test15 case 5 failed\n");
   1205  1.2.2.2  alnsn 	FAILED(buf[4] != SLJIT_FUNC_OFFSET(func) + 31, "test15 case 6 failed\n");
   1206  1.2.2.2  alnsn 	FAILED(buf[5] != 335, "test15 case 7 failed\n");
   1207  1.2.2.2  alnsn 	FAILED(buf[6] != -15, "test15 case 8 failed\n");
   1208  1.2.2.2  alnsn 
   1209  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1210  1.2.2.2  alnsn 	successful_tests++;
   1211  1.2.2.2  alnsn }
   1212  1.2.2.2  alnsn 
   1213  1.2.2.2  alnsn static void test16(void)
   1214  1.2.2.2  alnsn {
   1215  1.2.2.2  alnsn 	/* Ackermann benchmark. */
   1216  1.2.2.2  alnsn 	executable_code code;
   1217  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1218  1.2.2.2  alnsn 	struct sljit_label *entry;
   1219  1.2.2.2  alnsn 	struct sljit_label *label;
   1220  1.2.2.2  alnsn 	struct sljit_jump *jump;
   1221  1.2.2.2  alnsn 	struct sljit_jump *jump1;
   1222  1.2.2.2  alnsn 	struct sljit_jump *jump2;
   1223  1.2.2.2  alnsn 
   1224  1.2.2.3    tls 	if (verbose)
   1225  1.2.2.3    tls 		printf("Run test16\n");
   1226  1.2.2.3    tls 
   1227  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1228  1.2.2.2  alnsn 
   1229  1.2.2.2  alnsn 	entry = sljit_emit_label(compiler);
   1230  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 2, 0);
   1231  1.2.2.2  alnsn 	/* If x == 0. */
   1232  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 0);
   1233  1.2.2.2  alnsn 	jump1 = sljit_emit_jump(compiler, SLJIT_C_EQUAL);
   1234  1.2.2.2  alnsn 	/* If y == 0. */
   1235  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 0);
   1236  1.2.2.2  alnsn 	jump2 = sljit_emit_jump(compiler, SLJIT_C_EQUAL);
   1237  1.2.2.2  alnsn 
   1238  1.2.2.2  alnsn 	/* Ack(x,y-1). */
   1239  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0);
   1240  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 1);
   1241  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_CALL2);
   1242  1.2.2.2  alnsn 	sljit_set_label(jump, entry);
   1243  1.2.2.2  alnsn 
   1244  1.2.2.2  alnsn 	/* Returns with Ack(x-1, Ack(x,y-1)). */
   1245  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_RETURN_REG, 0);
   1246  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 1);
   1247  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_CALL2);
   1248  1.2.2.2  alnsn 	sljit_set_label(jump, entry);
   1249  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   1250  1.2.2.2  alnsn 
   1251  1.2.2.2  alnsn 	/* Returns with y+1. */
   1252  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   1253  1.2.2.2  alnsn 	sljit_set_label(jump1, label);
   1254  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1, SLJIT_SAVED_REG2, 0);
   1255  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   1256  1.2.2.2  alnsn 
   1257  1.2.2.2  alnsn 	/* Returns with Ack(x-1,1) */
   1258  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   1259  1.2.2.2  alnsn 	sljit_set_label(jump2, label);
   1260  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 1);
   1261  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
   1262  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_CALL2);
   1263  1.2.2.2  alnsn 	sljit_set_label(jump, entry);
   1264  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   1265  1.2.2.2  alnsn 
   1266  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1267  1.2.2.2  alnsn 	CHECK(compiler);
   1268  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1269  1.2.2.2  alnsn 
   1270  1.2.2.2  alnsn 	FAILED(code.func2(3, 3) != 61, "test16 case 1 failed\n");
   1271  1.2.2.2  alnsn 	/* For benchmarking. */
   1272  1.2.2.2  alnsn 	/* FAILED(code.func2(3, 11) != 16381, "test16 case 1 failed\n"); */
   1273  1.2.2.2  alnsn 
   1274  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1275  1.2.2.2  alnsn 	successful_tests++;
   1276  1.2.2.2  alnsn }
   1277  1.2.2.2  alnsn 
   1278  1.2.2.2  alnsn static void test17(void)
   1279  1.2.2.2  alnsn {
   1280  1.2.2.2  alnsn 	/* Test arm constant pool. */
   1281  1.2.2.2  alnsn 	executable_code code;
   1282  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1283  1.2.2.3    tls 	sljit_si i;
   1284  1.2.2.3    tls 	sljit_sw buf[5];
   1285  1.2.2.3    tls 
   1286  1.2.2.3    tls 	if (verbose)
   1287  1.2.2.3    tls 		printf("Run test17\n");
   1288  1.2.2.2  alnsn 
   1289  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1290  1.2.2.2  alnsn 	buf[0] = 0;
   1291  1.2.2.2  alnsn 	buf[1] = 0;
   1292  1.2.2.2  alnsn 	buf[2] = 0;
   1293  1.2.2.2  alnsn 	buf[3] = 0;
   1294  1.2.2.2  alnsn 	buf[4] = 0;
   1295  1.2.2.2  alnsn 
   1296  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
   1297  1.2.2.2  alnsn 	for (i = 0; i <= 0xfff; i++) {
   1298  1.2.2.3    tls 		sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x81818000 | i);
   1299  1.2.2.3    tls 		sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x81818000 | i);
   1300  1.2.2.2  alnsn 		if ((i & 0x3ff) == 0)
   1301  1.2.2.3    tls 			sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), (i >> 10) * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1302  1.2.2.2  alnsn 	}
   1303  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1304  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1305  1.2.2.2  alnsn 
   1306  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1307  1.2.2.2  alnsn 	CHECK(compiler);
   1308  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1309  1.2.2.2  alnsn 
   1310  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   1311  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[0] != 0x81818000, "test17 case 1 failed\n");
   1312  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[1] != 0x81818400, "test17 case 2 failed\n");
   1313  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[2] != 0x81818800, "test17 case 3 failed\n");
   1314  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[3] != 0x81818c00, "test17 case 4 failed\n");
   1315  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[4] != 0x81818fff, "test17 case 5 failed\n");
   1316  1.2.2.2  alnsn 
   1317  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1318  1.2.2.2  alnsn 	successful_tests++;
   1319  1.2.2.2  alnsn }
   1320  1.2.2.2  alnsn 
   1321  1.2.2.2  alnsn static void test18(void)
   1322  1.2.2.2  alnsn {
   1323  1.2.2.2  alnsn 	/* Test 64 bit. */
   1324  1.2.2.2  alnsn 	executable_code code;
   1325  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1326  1.2.2.3    tls 	sljit_sw buf[11];
   1327  1.2.2.3    tls 
   1328  1.2.2.3    tls 	if (verbose)
   1329  1.2.2.3    tls 		printf("Run test18\n");
   1330  1.2.2.2  alnsn 
   1331  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1332  1.2.2.2  alnsn 	buf[0] = 0;
   1333  1.2.2.2  alnsn 	buf[1] = 0;
   1334  1.2.2.2  alnsn 	buf[2] = 0;
   1335  1.2.2.2  alnsn 	buf[3] = 0;
   1336  1.2.2.2  alnsn 	buf[4] = 0;
   1337  1.2.2.2  alnsn 	buf[5] = 100;
   1338  1.2.2.2  alnsn 	buf[6] = 100;
   1339  1.2.2.2  alnsn 	buf[7] = 100;
   1340  1.2.2.2  alnsn 	buf[8] = 100;
   1341  1.2.2.2  alnsn 	buf[9] = 0;
   1342  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE) && (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN)
   1343  1.2.2.2  alnsn 	buf[10] = SLJIT_W(1) << 32;
   1344  1.2.2.2  alnsn #else
   1345  1.2.2.2  alnsn 	buf[10] = 1;
   1346  1.2.2.2  alnsn #endif
   1347  1.2.2.2  alnsn 
   1348  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 2, 0);
   1349  1.2.2.2  alnsn 
   1350  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1351  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, SLJIT_W(0x1122334455667788));
   1352  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x1122334455667788));
   1353  1.2.2.2  alnsn 
   1354  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(1000000000000));
   1355  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(1000000000000));
   1356  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_IMM, SLJIT_W(5000000000000), SLJIT_SCRATCH_REG1, 0);
   1357  1.2.2.3    tls 
   1358  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x1108080808));
   1359  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IADD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x1120202020));
   1360  1.2.2.3    tls 
   1361  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x1108080808));
   1362  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x1120202020));
   1363  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   1364  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SAVED_REG2, 0);
   1365  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   1366  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IAND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x1120202020));
   1367  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   1368  1.2.2.3    tls 
   1369  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x1108080808));
   1370  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x2208080808));
   1371  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_UNUSED, 0, SLJIT_C_LESS);
   1372  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   1373  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IAND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x1104040404));
   1374  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 8, SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
   1375  1.2.2.2  alnsn 
   1376  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
   1377  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISHL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 9, SLJIT_IMM, SLJIT_W(0xffff0000), SLJIT_SCRATCH_REG1, 0);
   1378  1.2.2.2  alnsn 
   1379  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IMUL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 10, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 10, SLJIT_IMM, -1);
   1380  1.2.2.2  alnsn #else
   1381  1.2.2.2  alnsn 	/* 32 bit operations. */
   1382  1.2.2.2  alnsn 
   1383  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 0x11223344);
   1384  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IADD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_IMM, 0x44332211);
   1385  1.2.2.2  alnsn 
   1386  1.2.2.2  alnsn #endif
   1387  1.2.2.2  alnsn 
   1388  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1389  1.2.2.2  alnsn 
   1390  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1391  1.2.2.2  alnsn 	CHECK(compiler);
   1392  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1393  1.2.2.2  alnsn 
   1394  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   1395  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1396  1.2.2.2  alnsn 	FAILED(buf[0] != SLJIT_W(0x1122334455667788), "test18 case 1 failed\n");
   1397  1.2.2.2  alnsn #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
   1398  1.2.2.2  alnsn 	FAILED(buf[1] != 0x55667788, "test18 case 2 failed\n");
   1399  1.2.2.2  alnsn #else
   1400  1.2.2.2  alnsn 	FAILED(buf[1] != SLJIT_W(0x5566778800000000), "test18 case 2 failed\n");
   1401  1.2.2.2  alnsn #endif
   1402  1.2.2.2  alnsn 	FAILED(buf[2] != SLJIT_W(2000000000000), "test18 case 3 failed\n");
   1403  1.2.2.2  alnsn 	FAILED(buf[3] != SLJIT_W(4000000000000), "test18 case 4 failed\n");
   1404  1.2.2.2  alnsn #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
   1405  1.2.2.2  alnsn 	FAILED(buf[4] != 0x28282828, "test18 case 5 failed\n");
   1406  1.2.2.2  alnsn #else
   1407  1.2.2.2  alnsn 	FAILED(buf[4] != SLJIT_W(0x2828282800000000), "test18 case 5 failed\n");
   1408  1.2.2.2  alnsn #endif
   1409  1.2.2.2  alnsn 	FAILED(buf[5] != 0, "test18 case 6 failed\n");
   1410  1.2.2.2  alnsn 	FAILED(buf[6] != 1, "test18 case 7 failed\n");
   1411  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test18 case 8 failed\n");
   1412  1.2.2.2  alnsn 	FAILED(buf[8] != 0, "test18 case 9 failed\n");
   1413  1.2.2.2  alnsn #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
   1414  1.2.2.2  alnsn 	FAILED(buf[9] != 0xfff00000, "test18 case 10 failed\n");
   1415  1.2.2.2  alnsn 	FAILED(buf[10] != 0xffffffff, "test18 case 11 failed\n");
   1416  1.2.2.2  alnsn #else
   1417  1.2.2.2  alnsn 	FAILED(buf[9] != SLJIT_W(0xfff0000000000000), "test18 case 10 failed\n");
   1418  1.2.2.2  alnsn 	FAILED(buf[10] != SLJIT_W(0xffffffff00000000), "test18 case 11 failed\n");
   1419  1.2.2.2  alnsn #endif
   1420  1.2.2.2  alnsn #else
   1421  1.2.2.2  alnsn 	FAILED(buf[0] != 0x11223344, "test18 case 1 failed\n");
   1422  1.2.2.2  alnsn 	FAILED(buf[1] != 0x44332211, "test18 case 2 failed\n");
   1423  1.2.2.2  alnsn #endif
   1424  1.2.2.2  alnsn 
   1425  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1426  1.2.2.2  alnsn 	successful_tests++;
   1427  1.2.2.2  alnsn }
   1428  1.2.2.2  alnsn 
   1429  1.2.2.2  alnsn static void test19(void)
   1430  1.2.2.2  alnsn {
   1431  1.2.2.2  alnsn 	/* Test arm partial instruction caching. */
   1432  1.2.2.2  alnsn 	executable_code code;
   1433  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1434  1.2.2.3    tls 	sljit_sw buf[10];
   1435  1.2.2.3    tls 
   1436  1.2.2.3    tls 	if (verbose)
   1437  1.2.2.3    tls 		printf("Run test19\n");
   1438  1.2.2.2  alnsn 
   1439  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1440  1.2.2.2  alnsn 	buf[0] = 6;
   1441  1.2.2.2  alnsn 	buf[1] = 4;
   1442  1.2.2.2  alnsn 	buf[2] = 0;
   1443  1.2.2.2  alnsn 	buf[3] = 0;
   1444  1.2.2.2  alnsn 	buf[4] = 0;
   1445  1.2.2.2  alnsn 	buf[5] = 0;
   1446  1.2.2.2  alnsn 	buf[6] = 2;
   1447  1.2.2.2  alnsn 	buf[7] = 0;
   1448  1.2.2.2  alnsn 
   1449  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
   1450  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw));
   1451  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1452  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg == 0);
   1453  1.2.2.2  alnsn #endif
   1454  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM0(), (sljit_sw)&buf[2], SLJIT_MEM0(), (sljit_sw)&buf[1], SLJIT_MEM0(), (sljit_sw)&buf[0]);
   1455  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1456  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1457  1.2.2.2  alnsn #endif
   1458  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   1459  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, sizeof(sljit_sw));
   1460  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_MEM1(SLJIT_SCRATCH_REG1), (sljit_sw)&buf[0], SLJIT_MEM1(SLJIT_SCRATCH_REG2), (sljit_sw)&buf[0]);
   1461  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1462  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1463  1.2.2.2  alnsn #endif
   1464  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_MEM0(), (sljit_sw)&buf[0], SLJIT_IMM, 2);
   1465  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1466  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1467  1.2.2.2  alnsn #endif
   1468  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_MEM1(SLJIT_SCRATCH_REG1), (sljit_sw)&buf[0] + 4 * sizeof(sljit_sw));
   1469  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1470  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1471  1.2.2.2  alnsn #endif
   1472  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_IMM, 10);
   1473  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 7);
   1474  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SCRATCH_REG2), (sljit_sw)&buf[5], SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM1(SLJIT_SCRATCH_REG2), (sljit_sw)&buf[5]);
   1475  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1476  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1477  1.2.2.2  alnsn #endif
   1478  1.2.2.2  alnsn 
   1479  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1480  1.2.2.2  alnsn 
   1481  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1482  1.2.2.2  alnsn 	CHECK(compiler);
   1483  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1484  1.2.2.2  alnsn 
   1485  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   1486  1.2.2.2  alnsn 	FAILED(buf[0] != 10, "test19 case 1 failed\n");
   1487  1.2.2.2  alnsn 	FAILED(buf[1] != 4, "test19 case 2 failed\n");
   1488  1.2.2.2  alnsn 	FAILED(buf[2] != 14, "test19 case 3 failed\n");
   1489  1.2.2.2  alnsn 	FAILED(buf[3] != 14, "test19 case 4 failed\n");
   1490  1.2.2.2  alnsn 	FAILED(buf[4] != 8, "test19 case 5 failed\n");
   1491  1.2.2.2  alnsn 	FAILED(buf[5] != 6, "test19 case 6 failed\n");
   1492  1.2.2.2  alnsn 	FAILED(buf[6] != 12, "test19 case 7 failed\n");
   1493  1.2.2.2  alnsn 	FAILED(buf[7] != 10, "test19 case 8 failed\n");
   1494  1.2.2.2  alnsn 
   1495  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1496  1.2.2.2  alnsn 	successful_tests++;
   1497  1.2.2.2  alnsn }
   1498  1.2.2.2  alnsn 
   1499  1.2.2.2  alnsn static void test20(void)
   1500  1.2.2.2  alnsn {
   1501  1.2.2.2  alnsn 	/* Test stack. */
   1502  1.2.2.2  alnsn 	executable_code code;
   1503  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1504  1.2.2.2  alnsn 	struct sljit_jump* jump;
   1505  1.2.2.2  alnsn 	struct sljit_label* label;
   1506  1.2.2.3    tls 	sljit_sw buf[6];
   1507  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1508  1.2.2.3    tls 	sljit_sw offset_value = SLJIT_W(0x1234567812345678);
   1509  1.2.2.2  alnsn #else
   1510  1.2.2.3    tls 	sljit_sw offset_value = SLJIT_W(0x12345678);
   1511  1.2.2.2  alnsn #endif
   1512  1.2.2.2  alnsn 
   1513  1.2.2.3    tls 	if (verbose)
   1514  1.2.2.3    tls 		printf("Run test20\n");
   1515  1.2.2.3    tls 
   1516  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1517  1.2.2.2  alnsn 	buf[0] = 5;
   1518  1.2.2.2  alnsn 	buf[1] = 12;
   1519  1.2.2.2  alnsn 	buf[2] = 0;
   1520  1.2.2.2  alnsn 	buf[3] = 0;
   1521  1.2.2.2  alnsn 	buf[4] = 111;
   1522  1.2.2.2  alnsn 	buf[5] = -12345;
   1523  1.2.2.2  alnsn 
   1524  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 5, 5, 4 * sizeof(sljit_sw));
   1525  1.2.2.2  alnsn 
   1526  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_uw), SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   1527  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw));
   1528  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, -1);
   1529  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, -1);
   1530  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, -1);
   1531  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG2, 0, SLJIT_IMM, -1);
   1532  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_uw), SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_uw));
   1533  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_uw), SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_uw), SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   1534  1.2.2.3    tls 	sljit_get_local_base(compiler, SLJIT_SCRATCH_REG1, 0, -offset_value);
   1535  1.2.2.2  alnsn 	sljit_get_local_base(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, -0x1234);
   1536  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   1537  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_uw), SLJIT_MEM1(SLJIT_SCRATCH_REG1), offset_value, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 0x1234 + sizeof(sljit_sw));
   1538  1.2.2.2  alnsn 
   1539  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_uw));
   1540  1.2.2.2  alnsn 	/* Dummy last instructions. */
   1541  1.2.2.3    tls 	sljit_emit_const(compiler, SLJIT_SCRATCH_REG1, 0, -9);
   1542  1.2.2.2  alnsn 	sljit_emit_label(compiler);
   1543  1.2.2.2  alnsn 
   1544  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1545  1.2.2.2  alnsn 	CHECK(compiler);
   1546  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1547  1.2.2.2  alnsn 
   1548  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != -12345, "test20 case 1 failed\n")
   1549  1.2.2.2  alnsn 
   1550  1.2.2.2  alnsn 	FAILED(buf[2] != 60, "test20 case 2 failed\n");
   1551  1.2.2.2  alnsn 	FAILED(buf[3] != 17, "test20 case 3 failed\n");
   1552  1.2.2.2  alnsn 	FAILED(buf[4] != 7, "test20 case 4 failed\n");
   1553  1.2.2.3    tls 
   1554  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1555  1.2.2.2  alnsn 
   1556  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   1557  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 0, 3, 0, SLJIT_MAX_LOCAL_SIZE);
   1558  1.2.2.2  alnsn 
   1559  1.2.2.3    tls 	sljit_get_local_base(compiler, SLJIT_SCRATCH_REG1, 0, SLJIT_MAX_LOCAL_SIZE - sizeof(sljit_sw));
   1560  1.2.2.3    tls 	sljit_get_local_base(compiler, SLJIT_SCRATCH_REG2, 0, -(sljit_sw)sizeof(sljit_sw));
   1561  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -1);
   1562  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   1563  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(sljit_sw), SLJIT_SCRATCH_REG3, 0);
   1564  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
   1565  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_C_NOT_EQUAL);
   1566  1.2.2.2  alnsn 	sljit_set_label(jump, label);
   1567  1.2.2.2  alnsn 
   1568  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1569  1.2.2.2  alnsn 
   1570  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1571  1.2.2.2  alnsn 	CHECK(compiler);
   1572  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1573  1.2.2.2  alnsn 
   1574  1.2.2.2  alnsn 	/* Just survive this code. */
   1575  1.2.2.2  alnsn 	code.func0();
   1576  1.2.2.2  alnsn 
   1577  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1578  1.2.2.2  alnsn 	successful_tests++;
   1579  1.2.2.2  alnsn }
   1580  1.2.2.2  alnsn 
   1581  1.2.2.2  alnsn static void test21(void)
   1582  1.2.2.2  alnsn {
   1583  1.2.2.2  alnsn 	/* Test fake enter. The parts of the jit code can be separated in the memory. */
   1584  1.2.2.2  alnsn 	executable_code code1;
   1585  1.2.2.2  alnsn 	executable_code code2;
   1586  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1587  1.2.2.2  alnsn 	struct sljit_jump* jump;
   1588  1.2.2.2  alnsn 	sljit_uw addr;
   1589  1.2.2.3    tls 	sljit_sw buf[4];
   1590  1.2.2.3    tls 
   1591  1.2.2.3    tls 	if (verbose)
   1592  1.2.2.3    tls 		printf("Run test21\n");
   1593  1.2.2.2  alnsn 
   1594  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1595  1.2.2.2  alnsn 	buf[0] = 9;
   1596  1.2.2.2  alnsn 	buf[1] = -6;
   1597  1.2.2.2  alnsn 	buf[2] = 0;
   1598  1.2.2.2  alnsn 	buf[3] = 0;
   1599  1.2.2.2  alnsn 
   1600  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 3, 2, 2 * sizeof(sljit_sw));
   1601  1.2.2.2  alnsn 
   1602  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_IMM, 10);
   1603  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   1604  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_JUMP | SLJIT_REWRITABLE_JUMP);
   1605  1.2.2.2  alnsn 	sljit_set_target(jump, 0);
   1606  1.2.2.2  alnsn 
   1607  1.2.2.2  alnsn 	code1.code = sljit_generate_code(compiler);
   1608  1.2.2.2  alnsn 	CHECK(compiler);
   1609  1.2.2.2  alnsn 	addr = sljit_get_jump_addr(jump);
   1610  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1611  1.2.2.2  alnsn 
   1612  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   1613  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1614  1.2.2.2  alnsn 
   1615  1.2.2.2  alnsn 	/* Other part of the jit code. */
   1616  1.2.2.3    tls 	sljit_set_context(compiler, 1, 3, 2, 2 * sizeof(sljit_sw));
   1617  1.2.2.2  alnsn 
   1618  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   1619  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   1620  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_sw));
   1621  1.2.2.2  alnsn 
   1622  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   1623  1.2.2.2  alnsn 
   1624  1.2.2.2  alnsn 	code2.code = sljit_generate_code(compiler);
   1625  1.2.2.2  alnsn 	CHECK(compiler);
   1626  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1627  1.2.2.2  alnsn 
   1628  1.2.2.2  alnsn 	sljit_set_jump_addr(addr, SLJIT_FUNC_OFFSET(code2.code));
   1629  1.2.2.2  alnsn 
   1630  1.2.2.3    tls 	FAILED(code1.func1((sljit_sw)&buf) != 19, "test21 case 1 failed\n");
   1631  1.2.2.2  alnsn 	FAILED(buf[2] != -16, "test21 case 2 failed\n");
   1632  1.2.2.2  alnsn 	FAILED(buf[3] != 100, "test21 case 3 failed\n");
   1633  1.2.2.2  alnsn 
   1634  1.2.2.2  alnsn 	sljit_free_code(code1.code);
   1635  1.2.2.2  alnsn 	sljit_free_code(code2.code);
   1636  1.2.2.2  alnsn 	successful_tests++;
   1637  1.2.2.2  alnsn }
   1638  1.2.2.2  alnsn 
   1639  1.2.2.2  alnsn static void test22(void)
   1640  1.2.2.2  alnsn {
   1641  1.2.2.2  alnsn 	/* Test simple byte and half-int data transfers. */
   1642  1.2.2.2  alnsn 	executable_code code;
   1643  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1644  1.2.2.3    tls 	sljit_sw buf[9];
   1645  1.2.2.3    tls 	sljit_sh sbuf[7];
   1646  1.2.2.3    tls 	sljit_sb bbuf[5];
   1647  1.2.2.3    tls 
   1648  1.2.2.3    tls 	if (verbose)
   1649  1.2.2.3    tls 		printf("Run test22\n");
   1650  1.2.2.2  alnsn 
   1651  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1652  1.2.2.2  alnsn 	buf[0] = 5;
   1653  1.2.2.2  alnsn 	buf[1] = 0;
   1654  1.2.2.2  alnsn 	buf[2] = 0;
   1655  1.2.2.2  alnsn 	buf[3] = 0;
   1656  1.2.2.2  alnsn 	buf[4] = 0;
   1657  1.2.2.2  alnsn 	buf[5] = 0;
   1658  1.2.2.2  alnsn 	buf[6] = 0;
   1659  1.2.2.2  alnsn 	buf[7] = 0;
   1660  1.2.2.2  alnsn 	buf[8] = 0;
   1661  1.2.2.2  alnsn 
   1662  1.2.2.2  alnsn 	sbuf[0] = 0;
   1663  1.2.2.2  alnsn 	sbuf[1] = 0;
   1664  1.2.2.2  alnsn 	sbuf[2] = -9;
   1665  1.2.2.2  alnsn 	sbuf[3] = 0;
   1666  1.2.2.2  alnsn 	sbuf[4] = 0;
   1667  1.2.2.2  alnsn 	sbuf[5] = 0;
   1668  1.2.2.2  alnsn 	sbuf[6] = 0;
   1669  1.2.2.2  alnsn 
   1670  1.2.2.2  alnsn 	bbuf[0] = 0;
   1671  1.2.2.2  alnsn 	bbuf[1] = 0;
   1672  1.2.2.2  alnsn 	bbuf[2] = -56;
   1673  1.2.2.2  alnsn 	bbuf[3] = 0;
   1674  1.2.2.2  alnsn 	bbuf[4] = 0;
   1675  1.2.2.2  alnsn 
   1676  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 3, 3, 3, 0);
   1677  1.2.2.2  alnsn 
   1678  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
   1679  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG1, 0);
   1680  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(sljit_sw), SLJIT_IMM, -13);
   1681  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw));
   1682  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(sljit_sw), SLJIT_SCRATCH_REG3, 0);
   1683  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw));
   1684  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   1685  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_SCRATCH_REG2, 0);
   1686  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
   1687  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 0, SLJIT_SCRATCH_REG2, 0);
   1688  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   1689  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_SCRATCH_REG2, 0);
   1690  1.2.2.2  alnsn 
   1691  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, -13);
   1692  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UH, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sh), SLJIT_IMM, 0x1234);
   1693  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SH, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sh));
   1694  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1695  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sh), SLJIT_MEM1(SLJIT_SAVED_REG2), -(sljit_sw)sizeof(sljit_sh));
   1696  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xff0000 + 8000);
   1697  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 2);
   1698  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG2), 1, SLJIT_SCRATCH_REG1, 0);
   1699  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 3);
   1700  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SH, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG2), 1, SLJIT_SCRATCH_REG1, 0);
   1701  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, -9317);
   1702  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 5 * sizeof(sljit_sh));
   1703  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -5);
   1704  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 1);
   1705  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sh), SLJIT_SCRATCH_REG2, 0);
   1706  1.2.2.2  alnsn 
   1707  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_MEM1(SLJIT_SAVED_REG3), 0, SLJIT_IMM, -45);
   1708  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_sb), SLJIT_IMM, 0x12);
   1709  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2 * sizeof(sljit_sb));
   1710  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SB, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_sb));
   1711  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_SAVED_REG2, 0, SLJIT_SCRATCH_REG2, 0);
   1712  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0);
   1713  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG2, 0);
   1714  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_SCRATCH_REG3, 0);
   1715  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_sb), SLJIT_SAVED_REG2, 0);
   1716  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_MEM2(SLJIT_SAVED_REG3, SLJIT_SCRATCH_REG1), 0, SLJIT_SCRATCH_REG1, 0);
   1717  1.2.2.2  alnsn 
   1718  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1719  1.2.2.2  alnsn 
   1720  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1721  1.2.2.2  alnsn 	CHECK(compiler);
   1722  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1723  1.2.2.2  alnsn 
   1724  1.2.2.3    tls 	code.func3((sljit_sw)&buf, (sljit_sw)&sbuf, (sljit_sw)&bbuf);
   1725  1.2.2.2  alnsn 	FAILED(buf[1] != -13, "test22 case 1 failed\n");
   1726  1.2.2.2  alnsn 	FAILED(buf[2] != 5, "test22 case 2 failed\n");
   1727  1.2.2.2  alnsn 	FAILED(buf[3] != -13, "test22 case 3 failed\n");
   1728  1.2.2.3    tls 	FAILED(buf[4] != (sljit_sw)&buf[3], "test22 case 4 failed\n");
   1729  1.2.2.3    tls 	FAILED(buf[5] != (sljit_sw)&buf[4], "test22 case 5 failed\n");
   1730  1.2.2.3    tls 	FAILED(buf[6] != (sljit_sw)&buf[4], "test22 case 6 failed\n");
   1731  1.2.2.2  alnsn 	FAILED(buf[7] != -9, "test22 case 7 failed\n");
   1732  1.2.2.2  alnsn 	FAILED(buf[8] != -56, "test22 case 8 failed\n");
   1733  1.2.2.2  alnsn 
   1734  1.2.2.2  alnsn 	FAILED(sbuf[0] != -13, "test22 case 9 failed\n");
   1735  1.2.2.2  alnsn 	FAILED(sbuf[1] != 0x1234, "test22 case 10 failed\n");
   1736  1.2.2.2  alnsn 	FAILED(sbuf[3] != 0x1234, "test22 case 11 failed\n");
   1737  1.2.2.2  alnsn 	FAILED(sbuf[4] != 8000, "test22 case 12 failed\n");
   1738  1.2.2.2  alnsn 	FAILED(sbuf[5] != -9317, "test22 case 13 failed\n");
   1739  1.2.2.2  alnsn 	FAILED(sbuf[6] != -9317, "test22 case 14 failed\n");
   1740  1.2.2.2  alnsn 
   1741  1.2.2.2  alnsn 	FAILED(bbuf[0] != -45, "test22 case 15 failed\n");
   1742  1.2.2.2  alnsn 	FAILED(bbuf[1] != 0x12, "test22 case 16 failed\n");
   1743  1.2.2.2  alnsn 	FAILED(bbuf[3] != -56, "test22 case 17 failed\n");
   1744  1.2.2.2  alnsn 	FAILED(bbuf[4] != 2, "test22 case 18 failed\n");
   1745  1.2.2.2  alnsn 
   1746  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1747  1.2.2.2  alnsn 	successful_tests++;
   1748  1.2.2.2  alnsn }
   1749  1.2.2.2  alnsn 
   1750  1.2.2.2  alnsn static void test23(void)
   1751  1.2.2.2  alnsn {
   1752  1.2.2.2  alnsn 	/* Test 32 bit / 64 bit signed / unsigned int transfer and conversion.
   1753  1.2.2.2  alnsn 	   This test has do real things on 64 bit systems, but works on 32 bit systems as well. */
   1754  1.2.2.2  alnsn 	executable_code code;
   1755  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1756  1.2.2.3    tls 	sljit_sw buf[9];
   1757  1.2.2.3    tls 	sljit_si ibuf[5];
   1758  1.2.2.2  alnsn 	union {
   1759  1.2.2.3    tls 		sljit_si asint;
   1760  1.2.2.2  alnsn 		sljit_ub asbytes[4];
   1761  1.2.2.2  alnsn 	} u;
   1762  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1763  1.2.2.3    tls 	sljit_sw garbage = SLJIT_W(0x1234567812345678);
   1764  1.2.2.2  alnsn #else
   1765  1.2.2.3    tls 	sljit_sw garbage = 0x12345678;
   1766  1.2.2.2  alnsn #endif
   1767  1.2.2.2  alnsn 
   1768  1.2.2.3    tls 	if (verbose)
   1769  1.2.2.3    tls 		printf("Run test23\n");
   1770  1.2.2.3    tls 
   1771  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1772  1.2.2.2  alnsn 	buf[0] = 0;
   1773  1.2.2.2  alnsn 	buf[1] = 0;
   1774  1.2.2.2  alnsn 	buf[2] = 0;
   1775  1.2.2.2  alnsn 	buf[3] = 0;
   1776  1.2.2.2  alnsn 	buf[4] = 0;
   1777  1.2.2.2  alnsn 	buf[5] = 0;
   1778  1.2.2.2  alnsn 	buf[6] = 0;
   1779  1.2.2.2  alnsn 	buf[7] = 0;
   1780  1.2.2.2  alnsn 	buf[8] = 0;
   1781  1.2.2.2  alnsn 
   1782  1.2.2.2  alnsn 	ibuf[0] = 0;
   1783  1.2.2.2  alnsn 	ibuf[1] = 0;
   1784  1.2.2.2  alnsn 	ibuf[2] = -5791;
   1785  1.2.2.2  alnsn 	ibuf[3] = 43579;
   1786  1.2.2.2  alnsn 	ibuf[4] = 658923;
   1787  1.2.2.2  alnsn 
   1788  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 3, 0);
   1789  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, 34567);
   1790  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   1791  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SI, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), 2, SLJIT_IMM, -7654);
   1792  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, garbage);
   1793  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si));
   1794  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
   1795  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, garbage);
   1796  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si));
   1797  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1798  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, garbage);
   1799  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si));
   1800  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   1801  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1802  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x0f00f00);
   1803  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 0x7777);
   1804  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), 0x7777 + 2 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1805  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 0x7777);
   1806  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), -0x7777 + (sljit_sw)sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1807  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 16 - sizeof(sljit_sw));
   1808  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
   1809  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 16);
   1810  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG2), 1, SLJIT_SCRATCH_REG1, 0);
   1811  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0, SLJIT_IMM, 64, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0);
   1812  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   1813  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG1), (sljit_sw)&buf[6], SLJIT_MEM0(), (sljit_sw)&buf[6]);
   1814  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0, SLJIT_IMM, 0x123456);
   1815  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_SAVED_REG1, 0);
   1816  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, sizeof(sljit_sw));
   1817  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 100000 * sizeof(sljit_sw));
   1818  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), 100001 * sizeof(sljit_sw), SLJIT_SAVED_REG1, 0);
   1819  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, sizeof(sljit_sw));
   1820  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SI, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si), SLJIT_IMM, 0x12345678);
   1821  1.2.2.2  alnsn 
   1822  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x2bd700 | 243);
   1823  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV_SB, SLJIT_SCRATCH_REG2, 0);
   1824  1.2.2.2  alnsn 
   1825  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1826  1.2.2.2  alnsn 	CHECK(compiler);
   1827  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1828  1.2.2.2  alnsn 
   1829  1.2.2.3    tls 	FAILED(code.func2((sljit_sw)&buf, (sljit_sw)&ibuf) != -13, "test23 case 1 failed\n");
   1830  1.2.2.2  alnsn 	FAILED(buf[0] != -5791, "test23 case 2 failed\n");
   1831  1.2.2.2  alnsn 	FAILED(buf[1] != 43579, "test23 case 3 failed\n");
   1832  1.2.2.2  alnsn 	FAILED(buf[2] != 658923, "test23 case 4 failed\n");
   1833  1.2.2.2  alnsn 	FAILED(buf[3] != 0x0f00f00, "test23 case 5 failed\n");
   1834  1.2.2.2  alnsn 	FAILED(buf[4] != 0x0f00f00, "test23 case 6 failed\n");
   1835  1.2.2.2  alnsn 	FAILED(buf[5] != 80, "test23 case 7 failed\n");
   1836  1.2.2.2  alnsn 	FAILED(buf[6] != 0x123456, "test23 case 8 failed\n");
   1837  1.2.2.3    tls 	FAILED(buf[7] != (sljit_sw)&buf[5], "test23 case 9 failed\n");
   1838  1.2.2.3    tls 	FAILED(buf[8] != (sljit_sw)&buf[8] - 100000 * sizeof(sljit_sw), "test23 case 10 failed\n");
   1839  1.2.2.2  alnsn 
   1840  1.2.2.2  alnsn 	FAILED(ibuf[0] != 34567, "test23 case 11 failed\n");
   1841  1.2.2.2  alnsn 	FAILED(ibuf[1] != -7654, "test23 case 12 failed\n");
   1842  1.2.2.2  alnsn 	u.asint = ibuf[4];
   1843  1.2.2.2  alnsn #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
   1844  1.2.2.2  alnsn 	FAILED(u.asbytes[0] != 0x78, "test23 case 13 failed\n");
   1845  1.2.2.2  alnsn 	FAILED(u.asbytes[1] != 0x56, "test23 case 14 failed\n");
   1846  1.2.2.2  alnsn 	FAILED(u.asbytes[2] != 0x34, "test23 case 15 failed\n");
   1847  1.2.2.2  alnsn 	FAILED(u.asbytes[3] != 0x12, "test23 case 16 failed\n");
   1848  1.2.2.2  alnsn #else
   1849  1.2.2.2  alnsn 	FAILED(u.asbytes[0] != 0x12, "test23 case 13 failed\n");
   1850  1.2.2.2  alnsn 	FAILED(u.asbytes[1] != 0x34, "test23 case 14 failed\n");
   1851  1.2.2.2  alnsn 	FAILED(u.asbytes[2] != 0x56, "test23 case 15 failed\n");
   1852  1.2.2.2  alnsn 	FAILED(u.asbytes[3] != 0x78, "test23 case 16 failed\n");
   1853  1.2.2.2  alnsn #endif
   1854  1.2.2.2  alnsn 
   1855  1.2.2.2  alnsn 	sljit_free_code(code.code);
   1856  1.2.2.2  alnsn 	successful_tests++;
   1857  1.2.2.2  alnsn }
   1858  1.2.2.2  alnsn 
   1859  1.2.2.2  alnsn static void test24(void)
   1860  1.2.2.2  alnsn {
   1861  1.2.2.2  alnsn 	/* Some complicated addressing modes. */
   1862  1.2.2.2  alnsn 	executable_code code;
   1863  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   1864  1.2.2.3    tls 	sljit_sw buf[9];
   1865  1.2.2.3    tls 	sljit_sh sbuf[5];
   1866  1.2.2.3    tls 	sljit_sb bbuf[7];
   1867  1.2.2.3    tls 
   1868  1.2.2.3    tls 	if (verbose)
   1869  1.2.2.3    tls 		printf("Run test24\n");
   1870  1.2.2.2  alnsn 
   1871  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   1872  1.2.2.2  alnsn 
   1873  1.2.2.2  alnsn 	buf[0] = 100567;
   1874  1.2.2.2  alnsn 	buf[1] = 75799;
   1875  1.2.2.2  alnsn 	buf[2] = 0;
   1876  1.2.2.2  alnsn 	buf[3] = -8;
   1877  1.2.2.2  alnsn 	buf[4] = -50;
   1878  1.2.2.2  alnsn 	buf[5] = 0;
   1879  1.2.2.3    tls 	buf[6] = 0;
   1880  1.2.2.3    tls 	buf[7] = 0;
   1881  1.2.2.3    tls 	buf[8] = 0;
   1882  1.2.2.2  alnsn 
   1883  1.2.2.2  alnsn 	sbuf[0] = 30000;
   1884  1.2.2.2  alnsn 	sbuf[1] = 0;
   1885  1.2.2.2  alnsn 	sbuf[2] = 0;
   1886  1.2.2.2  alnsn 	sbuf[3] = -12345;
   1887  1.2.2.2  alnsn 	sbuf[4] = 0;
   1888  1.2.2.2  alnsn 
   1889  1.2.2.2  alnsn 	bbuf[0] = -128;
   1890  1.2.2.2  alnsn 	bbuf[1] = 0;
   1891  1.2.2.2  alnsn 	bbuf[2] = 0;
   1892  1.2.2.2  alnsn 	bbuf[3] = 99;
   1893  1.2.2.3    tls 	bbuf[4] = 0;
   1894  1.2.2.3    tls 	bbuf[5] = 0;
   1895  1.2.2.3    tls 	bbuf[6] = 0;
   1896  1.2.2.2  alnsn 
   1897  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 3, 3, 3, 0);
   1898  1.2.2.2  alnsn 
   1899  1.2.2.2  alnsn 	/* Nothing should be updated. */
   1900  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SH, SLJIT_MEM0(), (sljit_sw)&sbuf[1], SLJIT_MEM0(), (sljit_sw)&sbuf[0]);
   1901  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1902  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1903  1.2.2.2  alnsn #endif
   1904  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SB, SLJIT_MEM0(), (sljit_sw)&bbuf[1], SLJIT_MEM0(), (sljit_sw)&bbuf[0]);
   1905  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1906  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1907  1.2.2.2  alnsn #endif
   1908  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   1909  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), 1, SLJIT_MEM0(), (sljit_sw)&sbuf[3]);
   1910  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1911  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1912  1.2.2.2  alnsn #endif
   1913  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&buf[0]);
   1914  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, sizeof(sljit_sw));
   1915  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 2);
   1916  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG3), SLJIT_WORD_SHIFT, SLJIT_MEM0(), (sljit_sw)&buf[0], SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), 0);
   1917  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1918  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1919  1.2.2.2  alnsn #endif
   1920  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_sb));
   1921  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, sizeof(sljit_sb));
   1922  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SCRATCH_REG1), (sljit_sw)&bbuf[1], SLJIT_MEM1(SLJIT_SCRATCH_REG2), (sljit_sw)&bbuf[0]);
   1923  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1924  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1925  1.2.2.2  alnsn #endif
   1926  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 2 * sizeof(sljit_sb));
   1927  1.2.2.2  alnsn 
   1928  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, sizeof(sljit_sh));
   1929  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_MEM1(SLJIT_SCRATCH_REG2), (sljit_sw)&sbuf[3], SLJIT_SCRATCH_REG2, 0);
   1930  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
   1931  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg == 0);
   1932  1.2.2.2  alnsn #endif
   1933  1.2.2.2  alnsn 
   1934  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3);
   1935  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT);
   1936  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
   1937  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1938  1.2.2.2  alnsn #endif
   1939  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
   1940  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG1, 0);
   1941  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT);
   1942  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
   1943  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1944  1.2.2.2  alnsn #endif
   1945  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0);
   1946  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
   1947  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 4);
   1948  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM2(SLJIT_SCRATCH_REG2, SLJIT_SCRATCH_REG3), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG3), SLJIT_WORD_SHIFT);
   1949  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
   1950  1.2.2.2  alnsn 	SLJIT_ASSERT(compiler->cache_arg > 0);
   1951  1.2.2.2  alnsn #endif
   1952  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   1953  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   1954  1.2.2.3    tls 
   1955  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&buf - 0x7fff8000 + 6 * sizeof(sljit_sw));
   1956  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 952467);
   1957  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x7fff8000, SLJIT_SCRATCH_REG2, 0);
   1958  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x7fff8000 + sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x7fff8000);
   1959  1.2.2.3    tls 
   1960  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&buf + 0x7fff7fff + 6 * sizeof(sljit_sw));
   1961  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x7fff7fff + 2 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x7fff7fff + sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x7fff7fff);
   1962  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&bbuf - 0x7fff7ffe + 3 * sizeof(sljit_sb));
   1963  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x7fff7fff, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x7fff7ffe);
   1964  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&bbuf + 0x7fff7fff + 5 * sizeof(sljit_sb));
   1965  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x7fff7fff, SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x7fff8000);
   1966  1.2.2.3    tls #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1967  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (sljit_sw)&bbuf - SLJIT_W(0x123456123456));
   1968  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)&bbuf - SLJIT_W(0x123456123456));
   1969  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_MEM1(SLJIT_SCRATCH_REG1), SLJIT_W(0x123456123456) + 6 * sizeof(sljit_sb), SLJIT_MEM1(SLJIT_SCRATCH_REG2), SLJIT_W(0x123456123456));
   1970  1.2.2.3    tls #endif
   1971  1.2.2.2  alnsn 
   1972  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   1973  1.2.2.2  alnsn 
   1974  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   1975  1.2.2.2  alnsn 	CHECK(compiler);
   1976  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   1977  1.2.2.2  alnsn 
   1978  1.2.2.3    tls 	code.func3((sljit_sw)&buf, (sljit_sw)&sbuf, (sljit_sw)&bbuf);
   1979  1.2.2.2  alnsn 	FAILED(buf[2] != 176366, "test24 case 1 failed\n");
   1980  1.2.2.2  alnsn 	FAILED(buf[3] != 64, "test24 case 2 failed\n");
   1981  1.2.2.2  alnsn 	FAILED(buf[4] != -100, "test24 case 3 failed\n");
   1982  1.2.2.3    tls 	FAILED(buf[5] != -100 + (sljit_sw)&buf[5] + (sljit_sw)&buf[4], "test24 case 4 failed\n");
   1983  1.2.2.3    tls 	FAILED(buf[6] != 952467, "test24 case 5 failed\n");
   1984  1.2.2.3    tls 	FAILED(buf[7] != 952467, "test24 case 6 failed\n");
   1985  1.2.2.3    tls 	FAILED(buf[8] != 952467 * 2, "test24 case 7 failed\n");
   1986  1.2.2.3    tls 
   1987  1.2.2.3    tls 	FAILED(sbuf[1] != 30000, "test24 case 8 failed\n");
   1988  1.2.2.3    tls 	FAILED(sbuf[2] != -12345, "test24 case 9 failed\n");
   1989  1.2.2.3    tls 	FAILED(sbuf[4] != sizeof(sljit_sh), "test24 case 10 failed\n");
   1990  1.2.2.3    tls 
   1991  1.2.2.3    tls 	FAILED(bbuf[1] != -128, "test24 case 11 failed\n");
   1992  1.2.2.3    tls 	FAILED(bbuf[2] != 99, "test24 case 12 failed\n");
   1993  1.2.2.3    tls 	FAILED(bbuf[4] != 99, "test24 case 13 failed\n");
   1994  1.2.2.3    tls 	FAILED(bbuf[5] != 99, "test24 case 14 failed\n");
   1995  1.2.2.3    tls #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   1996  1.2.2.3    tls 	FAILED(bbuf[6] != -128, "test24 case 15 failed\n");
   1997  1.2.2.3    tls #endif
   1998  1.2.2.2  alnsn 
   1999  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2000  1.2.2.2  alnsn 	successful_tests++;
   2001  1.2.2.2  alnsn }
   2002  1.2.2.2  alnsn 
   2003  1.2.2.2  alnsn static void test25(void)
   2004  1.2.2.2  alnsn {
   2005  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2006  1.2.2.2  alnsn 	/* 64 bit loads. */
   2007  1.2.2.2  alnsn 	executable_code code;
   2008  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2009  1.2.2.3    tls 	sljit_sw buf[14];
   2010  1.2.2.3    tls 
   2011  1.2.2.3    tls 	if (verbose)
   2012  1.2.2.3    tls 		printf("Run test25\n");
   2013  1.2.2.2  alnsn 
   2014  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2015  1.2.2.2  alnsn 	buf[0] = 7;
   2016  1.2.2.2  alnsn 	buf[1] = 0;
   2017  1.2.2.2  alnsn 	buf[2] = 0;
   2018  1.2.2.2  alnsn 	buf[3] = 0;
   2019  1.2.2.2  alnsn 	buf[4] = 0;
   2020  1.2.2.2  alnsn 	buf[5] = 0;
   2021  1.2.2.2  alnsn 	buf[6] = 0;
   2022  1.2.2.2  alnsn 	buf[7] = 0;
   2023  1.2.2.2  alnsn 	buf[8] = 0;
   2024  1.2.2.2  alnsn 	buf[9] = 0;
   2025  1.2.2.2  alnsn 	buf[10] = 0;
   2026  1.2.2.2  alnsn 	buf[11] = 0;
   2027  1.2.2.2  alnsn 	buf[12] = 0;
   2028  1.2.2.2  alnsn 	buf[13] = 0;
   2029  1.2.2.2  alnsn 
   2030  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 1, 0);
   2031  1.2.2.2  alnsn 
   2032  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 0);
   2033  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 1 * sizeof(sljit_sw), SLJIT_IMM, 0x7fff);
   2034  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_IMM, -0x8000);
   2035  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_IMM, 0x7fffffff);
   2036  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(-0x80000000));
   2037  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x1234567887654321));
   2038  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0xff80000000));
   2039  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x3ff0000000));
   2040  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0xfffffff800100000));
   2041  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0xfffffff80010f000));
   2042  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x07fff00000008001));
   2043  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x07fff00080010000));
   2044  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 12 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x07fff00080018001));
   2045  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 13 * sizeof(sljit_sw), SLJIT_IMM, SLJIT_W(0x07fff00ffff00000));
   2046  1.2.2.2  alnsn 
   2047  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2048  1.2.2.2  alnsn 
   2049  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2050  1.2.2.2  alnsn 	CHECK(compiler);
   2051  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2052  1.2.2.2  alnsn 
   2053  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2054  1.2.2.2  alnsn 	FAILED(buf[0] != 0, "test25 case 1 failed\n");
   2055  1.2.2.2  alnsn 	FAILED(buf[1] != 0x7fff, "test25 case 2 failed\n");
   2056  1.2.2.2  alnsn 	FAILED(buf[2] != -0x8000, "test25 case 3 failed\n");
   2057  1.2.2.2  alnsn 	FAILED(buf[3] != 0x7fffffff, "test25 case 4 failed\n");
   2058  1.2.2.2  alnsn 	FAILED(buf[4] != SLJIT_W(-0x80000000), "test25 case 5 failed\n");
   2059  1.2.2.2  alnsn 	FAILED(buf[5] != SLJIT_W(0x1234567887654321), "test25 case 6 failed\n");
   2060  1.2.2.2  alnsn 	FAILED(buf[6] != SLJIT_W(0xff80000000), "test25 case 7 failed\n");
   2061  1.2.2.2  alnsn 	FAILED(buf[7] != SLJIT_W(0x3ff0000000), "test25 case 8 failed\n");
   2062  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[8] != SLJIT_W(0xfffffff800100000), "test25 case 9 failed\n");
   2063  1.2.2.2  alnsn 	FAILED((sljit_uw)buf[9] != SLJIT_W(0xfffffff80010f000), "test25 case 10 failed\n");
   2064  1.2.2.2  alnsn 	FAILED(buf[10] != SLJIT_W(0x07fff00000008001), "test25 case 11 failed\n");
   2065  1.2.2.2  alnsn 	FAILED(buf[11] != SLJIT_W(0x07fff00080010000), "test25 case 12 failed\n");
   2066  1.2.2.2  alnsn 	FAILED(buf[12] != SLJIT_W(0x07fff00080018001), "test25 case 13 failed\n");
   2067  1.2.2.2  alnsn 	FAILED(buf[13] != SLJIT_W(0x07fff00ffff00000), "test25 case 14 failed\n");
   2068  1.2.2.2  alnsn 
   2069  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2070  1.2.2.2  alnsn #endif
   2071  1.2.2.2  alnsn 	successful_tests++;
   2072  1.2.2.2  alnsn }
   2073  1.2.2.2  alnsn 
   2074  1.2.2.2  alnsn static void test26(void)
   2075  1.2.2.2  alnsn {
   2076  1.2.2.2  alnsn 	/* Aligned access without aligned offsets. */
   2077  1.2.2.2  alnsn 	executable_code code;
   2078  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2079  1.2.2.3    tls 	sljit_sw buf[4];
   2080  1.2.2.3    tls 	sljit_si ibuf[4];
   2081  1.2.2.3    tls 	sljit_d dbuf[4];
   2082  1.2.2.3    tls 
   2083  1.2.2.3    tls 	if (verbose)
   2084  1.2.2.3    tls 		printf("Run test26\n");
   2085  1.2.2.2  alnsn 
   2086  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2087  1.2.2.2  alnsn 
   2088  1.2.2.2  alnsn 	buf[0] = -2789;
   2089  1.2.2.2  alnsn 	buf[1] = 0;
   2090  1.2.2.2  alnsn 	buf[2] = 4;
   2091  1.2.2.2  alnsn 	buf[3] = -4;
   2092  1.2.2.2  alnsn 
   2093  1.2.2.2  alnsn 	ibuf[0] = -689;
   2094  1.2.2.2  alnsn 	ibuf[1] = 0;
   2095  1.2.2.2  alnsn 	ibuf[2] = -6;
   2096  1.2.2.2  alnsn 	ibuf[3] = 3;
   2097  1.2.2.2  alnsn 
   2098  1.2.2.2  alnsn 	dbuf[0] = 5.75;
   2099  1.2.2.2  alnsn 	dbuf[1] = 0.0;
   2100  1.2.2.2  alnsn 	dbuf[2] = 0.0;
   2101  1.2.2.2  alnsn 	dbuf[3] = -4.0;
   2102  1.2.2.2  alnsn 
   2103  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 3, 3, 3, 0);
   2104  1.2.2.2  alnsn 
   2105  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 3);
   2106  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 1);
   2107  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), -3);
   2108  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si) - 1, SLJIT_SCRATCH_REG1, 0);
   2109  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), -1);
   2110  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) - 3, SLJIT_SCRATCH_REG1, 0);
   2111  1.2.2.3    tls 
   2112  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 100);
   2113  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw) * 2 - 103, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2 - 3, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 3 - 3);
   2114  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 100);
   2115  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IMUL, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_si) * 2 - 101, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si) * 2 - 1, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si) * 3 - 1);
   2116  1.2.2.2  alnsn 
   2117  1.2.2.2  alnsn 	if (sljit_is_fpu_available()) {
   2118  1.2.2.2  alnsn 		sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG3, 0, SLJIT_SAVED_REG3, 0, SLJIT_IMM, 3);
   2119  1.2.2.3    tls 		sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_d) - 3, SLJIT_MEM1(SLJIT_SAVED_REG3), -3);
   2120  1.2.2.3    tls 		sljit_emit_fop2(compiler, SLJIT_ADDD, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_d) * 2 - 3, SLJIT_MEM1(SLJIT_SAVED_REG3), -3, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_d) - 3);
   2121  1.2.2.3    tls 		sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG3, 0, SLJIT_IMM, 2);
   2122  1.2.2.3    tls 		sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sizeof(sljit_d) * 3 - 4) >> 1);
   2123  1.2.2.3    tls 		sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG3, 0, SLJIT_IMM, 1);
   2124  1.2.2.3    tls 		sljit_emit_fop2(compiler, SLJIT_DIVD, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_d) * 3 - 5, SLJIT_MEM1(SLJIT_SAVED_REG3), sizeof(sljit_d) * 2 - 3, SLJIT_MEM2(SLJIT_SCRATCH_REG3, SLJIT_SCRATCH_REG2), 1);
   2125  1.2.2.2  alnsn 	}
   2126  1.2.2.2  alnsn 
   2127  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2128  1.2.2.2  alnsn 
   2129  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2130  1.2.2.2  alnsn 	CHECK(compiler);
   2131  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2132  1.2.2.2  alnsn 
   2133  1.2.2.3    tls 	code.func3((sljit_sw)&buf, (sljit_sw)&ibuf, (sljit_sw)&dbuf);
   2134  1.2.2.2  alnsn 
   2135  1.2.2.2  alnsn 	FAILED(buf[1] != -689, "test26 case 1 failed\n");
   2136  1.2.2.2  alnsn 	FAILED(buf[2] != -16, "test26 case 2 failed\n");
   2137  1.2.2.2  alnsn 	FAILED(ibuf[1] != -2789, "test26 case 3 failed\n");
   2138  1.2.2.2  alnsn 	FAILED(ibuf[2] != -18, "test26 case 4 failed\n");
   2139  1.2.2.2  alnsn 
   2140  1.2.2.2  alnsn 	if (sljit_is_fpu_available()) {
   2141  1.2.2.2  alnsn 		FAILED(dbuf[1] != 5.75, "test26 case 5 failed\n");
   2142  1.2.2.2  alnsn 		FAILED(dbuf[2] != 11.5, "test26 case 6 failed\n");
   2143  1.2.2.2  alnsn 		FAILED(dbuf[3] != -2.875, "test26 case 7 failed\n");
   2144  1.2.2.2  alnsn 	}
   2145  1.2.2.2  alnsn 
   2146  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2147  1.2.2.2  alnsn 	successful_tests++;
   2148  1.2.2.2  alnsn }
   2149  1.2.2.2  alnsn 
   2150  1.2.2.2  alnsn static void test27(void)
   2151  1.2.2.2  alnsn {
   2152  1.2.2.2  alnsn #define SET_NEXT_BYTE(type) \
   2153  1.2.2.3    tls 		cond_set(compiler, SLJIT_SCRATCH_REG3, 0, type); \
   2154  1.2.2.3    tls 		sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_SCRATCH_REG3, 0);
   2155  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2156  1.2.2.2  alnsn #define RESULT(i) i
   2157  1.2.2.2  alnsn #else
   2158  1.2.2.2  alnsn #define RESULT(i) (3 - i)
   2159  1.2.2.2  alnsn #endif
   2160  1.2.2.2  alnsn 
   2161  1.2.2.2  alnsn 	/* Playing with conditional flags. */
   2162  1.2.2.2  alnsn 	executable_code code;
   2163  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2164  1.2.2.3    tls 	sljit_sb buf[37];
   2165  1.2.2.3    tls 	sljit_si i;
   2166  1.2.2.3    tls 
   2167  1.2.2.3    tls 	if (verbose)
   2168  1.2.2.3    tls 		printf("Run test27\n");
   2169  1.2.2.2  alnsn 
   2170  1.2.2.2  alnsn 	for (i = 0; i < 37; ++i)
   2171  1.2.2.2  alnsn 		buf[i] = 10;
   2172  1.2.2.2  alnsn 
   2173  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2174  1.2.2.2  alnsn 
   2175  1.2.2.2  alnsn 	/* 3 arguments passed, 3 arguments used. */
   2176  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 3, 0);
   2177  1.2.2.2  alnsn 
   2178  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 1);
   2179  1.2.2.2  alnsn 
   2180  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x1001);
   2181  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 20);
   2182  1.2.2.2  alnsn 	/* 0x100100000 on 64 bit machines, 0x100000 on 32 bit machines. */
   2183  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x800000);
   2184  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2185  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_NOP); /* Nop should keep the flags. */
   2186  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER);
   2187  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2188  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2189  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI | SLJIT_INT_OP, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0);
   2190  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2191  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_NOP); /* Nop should keep the flags. */
   2192  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER);
   2193  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2194  1.2.2.2  alnsn 
   2195  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x1000);
   2196  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 20);
   2197  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x10);
   2198  1.2.2.2  alnsn 	/* 0x100000010 on 64 bit machines, 0x10 on 32 bit machines. */
   2199  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x80);
   2200  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER);
   2201  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2202  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2203  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x80);
   2204  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER);
   2205  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2206  1.2.2.2  alnsn 
   2207  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2208  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2209  1.2.2.2  alnsn 	/* 0xff..ff on all machines. */
   2210  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2211  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS_EQUAL);
   2212  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER_EQUAL);
   2213  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -1);
   2214  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_SIG_GREATER);
   2215  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_SIG_LESS);
   2216  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
   2217  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_EQUAL);
   2218  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_EQUAL);
   2219  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_O | SLJIT_SET_U, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -2);
   2220  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_OVERFLOW);
   2221  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_OVERFLOW);
   2222  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_GREATER_EQUAL);
   2223  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS_EQUAL);
   2224  1.2.2.2  alnsn 
   2225  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x80000000);
   2226  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 16);
   2227  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 16);
   2228  1.2.2.2  alnsn 	/* 0x80..0 on 64 bit machines, 0 on 32 bit machines. */
   2229  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0xffffffff);
   2230  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2231  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_OVERFLOW);
   2232  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_OVERFLOW);
   2233  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2234  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0);
   2235  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISUB | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2236  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_OVERFLOW);
   2237  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_OVERFLOW);
   2238  1.2.2.2  alnsn 
   2239  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2240  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2241  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2242  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 6, SLJIT_SCRATCH_REG1, 0);
   2243  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_SCRATCH_REG1, 0);
   2244  1.2.2.3    tls 
   2245  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
   2246  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2247  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2248  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 9);
   2249  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_SCRATCH_REG1, 0);
   2250  1.2.2.3    tls 
   2251  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2252  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, (8 * sizeof(sljit_sw)) - 1);
   2253  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2254  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_EQUAL);
   2255  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2256  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_EQUAL);
   2257  1.2.2.2  alnsn 
   2258  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2259  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2260  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_EQUAL);
   2261  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2262  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xffffc0);
   2263  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_EQUAL);
   2264  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 0);
   2265  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2266  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
   2267  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_EQUAL);
   2268  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_PREF_SHIFT_REG, 0, SLJIT_IMM, 0);
   2269  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2270  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_LSHR | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_PREF_SHIFT_REG, 0);
   2271  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_NOT_EQUAL);
   2272  1.2.2.2  alnsn 
   2273  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2274  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
   2275  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2276  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 1, SLJIT_SCRATCH_REG1, 0);
   2277  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_SCRATCH_REG3, 0);
   2278  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC | SLJIT_SET_C, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2279  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUBC, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 1, SLJIT_SCRATCH_REG1, 0);
   2280  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_SCRATCH_REG3, 0);
   2281  1.2.2.2  alnsn 
   2282  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -34);
   2283  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x1234);
   2284  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2285  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_SIG_LESS);
   2286  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2287  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x12300000000) - 43);
   2288  1.2.2.2  alnsn #else
   2289  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -43);
   2290  1.2.2.2  alnsn #endif
   2291  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -96);
   2292  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISUB | SLJIT_SET_S | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2293  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_LESS);
   2294  1.2.2.2  alnsn 	SET_NEXT_BYTE(SLJIT_C_SIG_GREATER);
   2295  1.2.2.2  alnsn 
   2296  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2297  1.2.2.2  alnsn 
   2298  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2299  1.2.2.2  alnsn 	CHECK(compiler);
   2300  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2301  1.2.2.2  alnsn 
   2302  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2303  1.2.2.2  alnsn 
   2304  1.2.2.2  alnsn 	FAILED(buf[0] != RESULT(1), "test27 case 1 failed\n");
   2305  1.2.2.2  alnsn 	FAILED(buf[1] != RESULT(2), "test27 case 2 failed\n");
   2306  1.2.2.2  alnsn 	FAILED(buf[2] != 2, "test27 case 3 failed\n");
   2307  1.2.2.2  alnsn 	FAILED(buf[3] != 1, "test27 case 4 failed\n");
   2308  1.2.2.2  alnsn 	FAILED(buf[4] != RESULT(1), "test27 case 5 failed\n");
   2309  1.2.2.2  alnsn 	FAILED(buf[5] != RESULT(2), "test27 case 6 failed\n");
   2310  1.2.2.2  alnsn 	FAILED(buf[6] != 2, "test27 case 7 failed\n");
   2311  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test27 case 8 failed\n");
   2312  1.2.2.2  alnsn 
   2313  1.2.2.2  alnsn 	FAILED(buf[8] != 2, "test27 case 9 failed\n");
   2314  1.2.2.2  alnsn 	FAILED(buf[9] != 1, "test27 case 10 failed\n");
   2315  1.2.2.2  alnsn 	FAILED(buf[10] != 2, "test27 case 11 failed\n");
   2316  1.2.2.2  alnsn 	FAILED(buf[11] != 1, "test27 case 12 failed\n");
   2317  1.2.2.2  alnsn 	FAILED(buf[12] != 1, "test27 case 13 failed\n");
   2318  1.2.2.2  alnsn 	FAILED(buf[13] != 2, "test27 case 14 failed\n");
   2319  1.2.2.2  alnsn 	FAILED(buf[14] != 2, "test27 case 15 failed\n");
   2320  1.2.2.2  alnsn 	FAILED(buf[15] != 1, "test27 case 16 failed\n");
   2321  1.2.2.2  alnsn 	FAILED(buf[16] != 1, "test27 case 17 failed\n");
   2322  1.2.2.2  alnsn 	FAILED(buf[17] != 2, "test27 case 18 failed\n");
   2323  1.2.2.2  alnsn 
   2324  1.2.2.2  alnsn 	FAILED(buf[18] != RESULT(1), "test27 case 19 failed\n");
   2325  1.2.2.2  alnsn 	FAILED(buf[19] != RESULT(2), "test27 case 20 failed\n");
   2326  1.2.2.2  alnsn 	FAILED(buf[20] != 2, "test27 case 21 failed\n");
   2327  1.2.2.2  alnsn 	FAILED(buf[21] != 1, "test27 case 22 failed\n");
   2328  1.2.2.2  alnsn 
   2329  1.2.2.2  alnsn 	FAILED(buf[22] != 5, "test27 case 23 failed\n");
   2330  1.2.2.2  alnsn 	FAILED(buf[23] != 9, "test27 case 24 failed\n");
   2331  1.2.2.2  alnsn 
   2332  1.2.2.2  alnsn 	FAILED(buf[24] != 2, "test27 case 25 failed\n");
   2333  1.2.2.2  alnsn 	FAILED(buf[25] != 1, "test27 case 26 failed\n");
   2334  1.2.2.2  alnsn 
   2335  1.2.2.2  alnsn 	FAILED(buf[26] != 1, "test27 case 27 failed\n");
   2336  1.2.2.2  alnsn 	FAILED(buf[27] != 1, "test27 case 28 failed\n");
   2337  1.2.2.2  alnsn 	FAILED(buf[28] != 1, "test27 case 29 failed\n");
   2338  1.2.2.2  alnsn 	FAILED(buf[29] != 1, "test27 case 30 failed\n");
   2339  1.2.2.2  alnsn 
   2340  1.2.2.2  alnsn 	FAILED(buf[30] != 1, "test27 case 31 failed\n");
   2341  1.2.2.2  alnsn 	FAILED(buf[31] != 0, "test27 case 32 failed\n");
   2342  1.2.2.2  alnsn 
   2343  1.2.2.2  alnsn 	FAILED(buf[32] != 2, "test27 case 33 failed\n");
   2344  1.2.2.2  alnsn 	FAILED(buf[33] != 1, "test27 case 34 failed\n");
   2345  1.2.2.2  alnsn 	FAILED(buf[34] != 2, "test27 case 35 failed\n");
   2346  1.2.2.2  alnsn 	FAILED(buf[35] != 1, "test27 case 36 failed\n");
   2347  1.2.2.2  alnsn 	FAILED(buf[36] != 10, "test27 case 37 failed\n");
   2348  1.2.2.3    tls 
   2349  1.2.2.3    tls 	sljit_free_code(code.code);
   2350  1.2.2.2  alnsn 	successful_tests++;
   2351  1.2.2.2  alnsn #undef SET_NEXT_BYTE
   2352  1.2.2.2  alnsn #undef RESULT
   2353  1.2.2.2  alnsn }
   2354  1.2.2.2  alnsn 
   2355  1.2.2.2  alnsn static void test28(void)
   2356  1.2.2.2  alnsn {
   2357  1.2.2.2  alnsn 	/* Test mov. */
   2358  1.2.2.2  alnsn 	executable_code code;
   2359  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2360  1.2.2.2  alnsn 	struct sljit_const* const1;
   2361  1.2.2.2  alnsn 	struct sljit_label* label;
   2362  1.2.2.2  alnsn 	sljit_uw label_addr;
   2363  1.2.2.3    tls 	sljit_sw buf[5];
   2364  1.2.2.3    tls 
   2365  1.2.2.3    tls 	if (verbose)
   2366  1.2.2.3    tls 		printf("Run test28\n");
   2367  1.2.2.2  alnsn 
   2368  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2369  1.2.2.2  alnsn 
   2370  1.2.2.2  alnsn 	buf[0] = -36;
   2371  1.2.2.2  alnsn 	buf[1] = 8;
   2372  1.2.2.2  alnsn 	buf[2] = 0;
   2373  1.2.2.2  alnsn 	buf[3] = 10;
   2374  1.2.2.2  alnsn 	buf[4] = 0;
   2375  1.2.2.2  alnsn 
   2376  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2377  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 5, 5, 0);
   2378  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, -234);
   2379  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw));
   2380  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_SAVED_EREG1, 0, SLJIT_TEMPORARY_EREG1, 0, SLJIT_TEMPORARY_EREG2, 0);
   2381  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SAVED_EREG1, 0);
   2382  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 0);
   2383  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SAVED_EREG1, 0, SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
   2384  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_SAVED_EREG1, 0);
   2385  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw));
   2386  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_EREG2, 0, SLJIT_SAVED_EREG2, 0, SLJIT_TEMPORARY_EREG2, 0);
   2387  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_SAVED_EREG2, 0);
   2388  1.2.2.2  alnsn 	const1 = sljit_emit_const(compiler, SLJIT_SAVED_EREG1, 0, 0);
   2389  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_JUMP, SLJIT_SAVED_EREG1, 0);
   2390  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_EREG1, 0, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 100);
   2391  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   2392  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_SAVED_EREG1, 0);
   2393  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG2, 0);
   2394  1.2.2.2  alnsn 
   2395  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2396  1.2.2.2  alnsn 	CHECK(compiler);
   2397  1.2.2.2  alnsn 	label_addr = sljit_get_label_addr(label);
   2398  1.2.2.2  alnsn 	sljit_set_const(sljit_get_const_addr(const1), label_addr);
   2399  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2400  1.2.2.2  alnsn 
   2401  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 8, "test28 case 1 failed\n");
   2402  1.2.2.2  alnsn 	FAILED(buf[1] != -1872, "test28 case 2 failed\n");
   2403  1.2.2.2  alnsn 	FAILED(buf[2] != 1, "test28 case 3 failed\n");
   2404  1.2.2.2  alnsn 	FAILED(buf[3] != 2, "test28 case 4 failed\n");
   2405  1.2.2.2  alnsn 	FAILED(buf[4] != label_addr, "test28 case 5 failed\n");
   2406  1.2.2.2  alnsn 
   2407  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2408  1.2.2.2  alnsn 	successful_tests++;
   2409  1.2.2.2  alnsn }
   2410  1.2.2.2  alnsn 
   2411  1.2.2.2  alnsn static void test29(void)
   2412  1.2.2.2  alnsn {
   2413  1.2.2.2  alnsn 	/* Test signed/unsigned bytes and halfs. */
   2414  1.2.2.2  alnsn 	executable_code code;
   2415  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2416  1.2.2.3    tls 	sljit_sw buf[25];
   2417  1.2.2.3    tls 
   2418  1.2.2.3    tls 	if (verbose)
   2419  1.2.2.3    tls 		printf("Run test29\n");
   2420  1.2.2.2  alnsn 
   2421  1.2.2.2  alnsn 	buf[0] = 0;
   2422  1.2.2.2  alnsn 	buf[1] = 0;
   2423  1.2.2.2  alnsn 	buf[2] = 0;
   2424  1.2.2.2  alnsn 	buf[3] = 0;
   2425  1.2.2.2  alnsn 	buf[4] = 0;
   2426  1.2.2.2  alnsn 	buf[5] = 0;
   2427  1.2.2.2  alnsn 	buf[6] = 0;
   2428  1.2.2.2  alnsn 	buf[7] = 0;
   2429  1.2.2.2  alnsn 	buf[8] = 0;
   2430  1.2.2.2  alnsn 	buf[9] = 0;
   2431  1.2.2.2  alnsn 	buf[10] = 0;
   2432  1.2.2.2  alnsn 	buf[11] = 0;
   2433  1.2.2.2  alnsn 	buf[12] = 0;
   2434  1.2.2.2  alnsn 	buf[13] = 0;
   2435  1.2.2.2  alnsn 	buf[14] = 0;
   2436  1.2.2.2  alnsn 	buf[15] = 0;
   2437  1.2.2.2  alnsn 	buf[16] = 0;
   2438  1.2.2.2  alnsn 	buf[17] = 0;
   2439  1.2.2.2  alnsn 	buf[18] = 0;
   2440  1.2.2.2  alnsn 	buf[19] = 0;
   2441  1.2.2.2  alnsn 	buf[20] = 0;
   2442  1.2.2.2  alnsn 	buf[21] = 0;
   2443  1.2.2.2  alnsn 	buf[22] = 0;
   2444  1.2.2.2  alnsn 	buf[23] = 0;
   2445  1.2.2.2  alnsn 	buf[24] = 0;
   2446  1.2.2.2  alnsn 
   2447  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2448  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 5, 5, 0);
   2449  1.2.2.2  alnsn 
   2450  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -187);
   2451  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
   2452  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SB, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -605);
   2453  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2454  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -56);
   2455  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2456  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, 0xcde5);
   2457  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2458  1.2.2.2  alnsn 
   2459  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -45896);
   2460  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2461  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SH, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1472797);
   2462  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2463  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -12890);
   2464  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2465  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UH, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, 0x9cb0a6);
   2466  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2467  1.2.2.2  alnsn 
   2468  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2469  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-3580429715));
   2470  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2471  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-100722768662));
   2472  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2473  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-1457052677972));
   2474  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2475  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UI, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, SLJIT_W(0xcef97a70b5));
   2476  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2477  1.2.2.2  alnsn #else
   2478  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 4 * sizeof(sljit_uw));
   2479  1.2.2.2  alnsn #endif
   2480  1.2.2.2  alnsn 
   2481  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -187);
   2482  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2483  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2484  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, -605);
   2485  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SB, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG3, 0);
   2486  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2487  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -56);
   2488  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG3, 0);
   2489  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2490  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, 0xcde5);
   2491  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_TEMPORARY_EREG2, 0, SLJIT_TEMPORARY_EREG1, 0);
   2492  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2493  1.2.2.2  alnsn 
   2494  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -45896);
   2495  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SH, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2496  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2497  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, -1472797);
   2498  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SH, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG3, 0);
   2499  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2500  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -12890);
   2501  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UH, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG3, 0);
   2502  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2503  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, 0x9cb0a6);
   2504  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UH, SLJIT_TEMPORARY_EREG2, 0, SLJIT_TEMPORARY_EREG1, 0);
   2505  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2506  1.2.2.2  alnsn 
   2507  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2508  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(-3580429715));
   2509  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2510  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2511  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, SLJIT_W(-100722768662));
   2512  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG3, 0);
   2513  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2514  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, SLJIT_W(-1457052677972));
   2515  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG3, 0);
   2516  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SCRATCH_REG1, 0);
   2517  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, SLJIT_W(0xcef97a70b5));
   2518  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU_UI, SLJIT_TEMPORARY_EREG2, 0, SLJIT_TEMPORARY_EREG1, 0);
   2519  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_TEMPORARY_EREG2, 0);
   2520  1.2.2.2  alnsn #else
   2521  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 4 * sizeof(sljit_uw));
   2522  1.2.2.2  alnsn #endif
   2523  1.2.2.2  alnsn 
   2524  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, 0x9faa5);
   2525  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV_SB, SLJIT_SAVED_REG3, 0, SLJIT_SAVED_REG3, 0);
   2526  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_uw), SLJIT_SAVED_REG3, 0);
   2527  1.2.2.2  alnsn 
   2528  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2529  1.2.2.2  alnsn 
   2530  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2531  1.2.2.2  alnsn 	CHECK(compiler);
   2532  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2533  1.2.2.2  alnsn 
   2534  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2535  1.2.2.2  alnsn 	FAILED(buf[0] != 69, "test29 case 1 failed\n");
   2536  1.2.2.2  alnsn 	FAILED(buf[1] != -93, "test29 case 2 failed\n");
   2537  1.2.2.2  alnsn 	FAILED(buf[2] != 200, "test29 case 3 failed\n");
   2538  1.2.2.2  alnsn 	FAILED(buf[3] != 0xe5, "test29 case 4 failed\n");
   2539  1.2.2.2  alnsn 	FAILED(buf[4] != 19640, "test29 case 5 failed\n");
   2540  1.2.2.2  alnsn 	FAILED(buf[5] != -31005, "test29 case 6 failed\n");
   2541  1.2.2.2  alnsn 	FAILED(buf[6] != 52646, "test29 case 7 failed\n");
   2542  1.2.2.2  alnsn 	FAILED(buf[7] != 0xb0a6, "test29 case 8 failed\n");
   2543  1.2.2.2  alnsn 
   2544  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2545  1.2.2.2  alnsn 	FAILED(buf[8] != SLJIT_W(714537581), "test29 case 9 failed\n");
   2546  1.2.2.2  alnsn 	FAILED(buf[9] != SLJIT_W(-1938520854), "test29 case 10 failed\n");
   2547  1.2.2.2  alnsn 	FAILED(buf[10] != SLJIT_W(3236202668), "test29 case 11 failed\n");
   2548  1.2.2.2  alnsn 	FAILED(buf[11] != SLJIT_W(0xf97a70b5), "test29 case 12 failed\n");
   2549  1.2.2.2  alnsn #endif
   2550  1.2.2.2  alnsn 
   2551  1.2.2.2  alnsn 	FAILED(buf[12] != 69, "test29 case 13 failed\n");
   2552  1.2.2.2  alnsn 	FAILED(buf[13] != -93, "test29 case 14 failed\n");
   2553  1.2.2.2  alnsn 	FAILED(buf[14] != 200, "test29 case 15 failed\n");
   2554  1.2.2.2  alnsn 	FAILED(buf[15] != 0xe5, "test29 case 16 failed\n");
   2555  1.2.2.2  alnsn 	FAILED(buf[16] != 19640, "test29 case 17 failed\n");
   2556  1.2.2.2  alnsn 	FAILED(buf[17] != -31005, "test29 case 18 failed\n");
   2557  1.2.2.2  alnsn 	FAILED(buf[18] != 52646, "test29 case 19 failed\n");
   2558  1.2.2.2  alnsn 	FAILED(buf[19] != 0xb0a6, "test29 case 20 failed\n");
   2559  1.2.2.2  alnsn 
   2560  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2561  1.2.2.2  alnsn 	FAILED(buf[20] != SLJIT_W(714537581), "test29 case 21 failed\n");
   2562  1.2.2.2  alnsn 	FAILED(buf[21] != SLJIT_W(-1938520854), "test29 case 22 failed\n");
   2563  1.2.2.2  alnsn 	FAILED(buf[22] != SLJIT_W(3236202668), "test29 case 23 failed\n");
   2564  1.2.2.2  alnsn 	FAILED(buf[23] != SLJIT_W(0xf97a70b5), "test29 case 24 failed\n");
   2565  1.2.2.2  alnsn #endif
   2566  1.2.2.2  alnsn 
   2567  1.2.2.2  alnsn 	FAILED(buf[24] != -91, "test29 case 25 failed\n");
   2568  1.2.2.2  alnsn 
   2569  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2570  1.2.2.2  alnsn 	successful_tests++;
   2571  1.2.2.2  alnsn }
   2572  1.2.2.2  alnsn 
   2573  1.2.2.2  alnsn static void test30(void)
   2574  1.2.2.2  alnsn {
   2575  1.2.2.2  alnsn 	/* Test unused results. */
   2576  1.2.2.2  alnsn 	executable_code code;
   2577  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2578  1.2.2.3    tls 	sljit_sw buf[1];
   2579  1.2.2.2  alnsn 
   2580  1.2.2.3    tls 	if (verbose)
   2581  1.2.2.3    tls 		printf("Run test30\n");
   2582  1.2.2.2  alnsn 
   2583  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2584  1.2.2.3    tls 	buf[0] = 0;
   2585  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 5, 5, 0);
   2586  1.2.2.2  alnsn 
   2587  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2588  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
   2589  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 1);
   2590  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, 1);
   2591  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, 1);
   2592  1.2.2.3    tls #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2593  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SAVED_REG2, 0, SLJIT_IMM, SLJIT_W(-0x123ffffffff));
   2594  1.2.2.3    tls #else
   2595  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 1);
   2596  1.2.2.3    tls #endif
   2597  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, 1);
   2598  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 1);
   2599  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG2, 0, SLJIT_IMM, 1);
   2600  1.2.2.2  alnsn 
   2601  1.2.2.2  alnsn 	/* Some calculations with unused results. */
   2602  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0);
   2603  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_NOT, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0);
   2604  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_NEG, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   2605  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   2606  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ISUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   2607  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_MUL, SLJIT_UNUSED, 0, SLJIT_SAVED_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   2608  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SAVED_EREG1, 0, SLJIT_SCRATCH_REG3, 0);
   2609  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_LSHR | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 5);
   2610  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_AND, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 0xff);
   2611  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_INOT | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SAVED_REG2, 0);
   2612  1.2.2.2  alnsn 
   2613  1.2.2.2  alnsn 	/* Testing that any change happens. */
   2614  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   2615  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG3, 0);
   2616  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_TEMPORARY_EREG1, 0);
   2617  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_TEMPORARY_EREG2, 0);
   2618  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0);
   2619  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG2, 0);
   2620  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG3, 0);
   2621  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_EREG1, 0);
   2622  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_EREG2, 0);
   2623  1.2.2.2  alnsn 
   2624  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2625  1.2.2.2  alnsn 
   2626  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2627  1.2.2.2  alnsn 	CHECK(compiler);
   2628  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2629  1.2.2.2  alnsn 
   2630  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2631  1.2.2.2  alnsn 	FAILED(buf[0] != 9, "test30 case 1 failed\n");
   2632  1.2.2.3    tls 
   2633  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2634  1.2.2.2  alnsn 	successful_tests++;
   2635  1.2.2.2  alnsn }
   2636  1.2.2.2  alnsn 
   2637  1.2.2.2  alnsn static void test31(void)
   2638  1.2.2.2  alnsn {
   2639  1.2.2.2  alnsn 	/* Integer mul and set flags. */
   2640  1.2.2.2  alnsn 	executable_code code;
   2641  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2642  1.2.2.3    tls 	sljit_sw buf[12];
   2643  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2644  1.2.2.3    tls 	sljit_sw big_word = SLJIT_W(0x7fffffff00000000);
   2645  1.2.2.3    tls 	sljit_sw big_word2 = SLJIT_W(0x7fffffff00000012);
   2646  1.2.2.2  alnsn #else
   2647  1.2.2.3    tls 	sljit_sw big_word = 0x7fffffff;
   2648  1.2.2.3    tls 	sljit_sw big_word2 = 0x00000012;
   2649  1.2.2.2  alnsn #endif
   2650  1.2.2.2  alnsn 
   2651  1.2.2.3    tls 	if (verbose)
   2652  1.2.2.3    tls 		printf("Run test31\n");
   2653  1.2.2.3    tls 
   2654  1.2.2.2  alnsn 	buf[0] = 3;
   2655  1.2.2.2  alnsn 	buf[1] = 3;
   2656  1.2.2.2  alnsn 	buf[2] = 3;
   2657  1.2.2.2  alnsn 	buf[3] = 3;
   2658  1.2.2.2  alnsn 	buf[4] = 3;
   2659  1.2.2.2  alnsn 	buf[5] = 3;
   2660  1.2.2.2  alnsn 	buf[6] = 3;
   2661  1.2.2.2  alnsn 	buf[7] = 3;
   2662  1.2.2.2  alnsn 	buf[8] = 3;
   2663  1.2.2.2  alnsn 	buf[9] = 3;
   2664  1.2.2.2  alnsn 	buf[10] = 3;
   2665  1.2.2.2  alnsn 	buf[11] = 3;
   2666  1.2.2.2  alnsn 
   2667  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2668  1.2.2.2  alnsn 
   2669  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 5, 0);
   2670  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   2671  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -45);
   2672  1.2.2.2  alnsn 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_C_MUL_NOT_OVERFLOW);
   2673  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_C_MUL_OVERFLOW);
   2674  1.2.2.2  alnsn 
   2675  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, big_word);
   2676  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL | SLJIT_SET_O, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG3, 0, SLJIT_IMM, -2);
   2677  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 33); /* Should not change flags. */
   2678  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0); /* Should not change flags. */
   2679  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_C_MUL_OVERFLOW);
   2680  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_C_MUL_NOT_OVERFLOW);
   2681  1.2.2.3    tls 
   2682  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 0x3f6b0);
   2683  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SAVED_EREG2, 0, SLJIT_IMM, 0x2a783);
   2684  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IMUL | SLJIT_SET_O, SLJIT_SCRATCH_REG2, 0, SLJIT_SAVED_EREG1, 0, SLJIT_SAVED_EREG2, 0);
   2685  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_C_MUL_OVERFLOW);
   2686  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   2687  1.2.2.3    tls 
   2688  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, big_word2);
   2689  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG2, 0);
   2690  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IMUL | SLJIT_SET_O, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 23);
   2691  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_C_MUL_OVERFLOW);
   2692  1.2.2.3    tls 
   2693  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_IMUL | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -23);
   2694  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_C_MUL_NOT_OVERFLOW);
   2695  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL | SLJIT_SET_O, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -23);
   2696  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_C_MUL_NOT_OVERFLOW);
   2697  1.2.2.3    tls 
   2698  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 67);
   2699  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_MUL | SLJIT_SET_O, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -23);
   2700  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   2701  1.2.2.2  alnsn 
   2702  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2703  1.2.2.2  alnsn 
   2704  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2705  1.2.2.2  alnsn 	CHECK(compiler);
   2706  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2707  1.2.2.2  alnsn 
   2708  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2709  1.2.2.2  alnsn 
   2710  1.2.2.2  alnsn 	FAILED(buf[0] != 1, "test31 case 1 failed\n");
   2711  1.2.2.2  alnsn 	FAILED(buf[1] != 2, "test31 case 2 failed\n");
   2712  1.2.2.2  alnsn /* Qemu issues for 64 bit muls. */
   2713  1.2.2.2  alnsn #if !(defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2714  1.2.2.2  alnsn 	FAILED(buf[2] != 1, "test31 case 3 failed\n");
   2715  1.2.2.2  alnsn 	FAILED(buf[3] != 2, "test31 case 4 failed\n");
   2716  1.2.2.2  alnsn #endif
   2717  1.2.2.2  alnsn 	FAILED(buf[4] != 1, "test31 case 5 failed\n");
   2718  1.2.2.2  alnsn 	FAILED((buf[5] & 0xffffffff) != 0x85540c10, "test31 case 6 failed\n");
   2719  1.2.2.2  alnsn 	FAILED(buf[6] != 2, "test31 case 7 failed\n");
   2720  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test31 case 8 failed\n");
   2721  1.2.2.2  alnsn #if !(defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2722  1.2.2.2  alnsn 	FAILED(buf[8] != 1, "test31 case 9 failed\n");
   2723  1.2.2.2  alnsn #endif
   2724  1.2.2.2  alnsn 	FAILED(buf[9] != -1541, "test31 case 10 failed\n");
   2725  1.2.2.3    tls 
   2726  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2727  1.2.2.2  alnsn 	successful_tests++;
   2728  1.2.2.2  alnsn }
   2729  1.2.2.2  alnsn 
   2730  1.2.2.2  alnsn static void test32(void)
   2731  1.2.2.2  alnsn {
   2732  1.2.2.2  alnsn 	/* Floating point set flags. */
   2733  1.2.2.2  alnsn 	executable_code code;
   2734  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2735  1.2.2.2  alnsn 
   2736  1.2.2.3    tls 	sljit_sw buf[16];
   2737  1.2.2.2  alnsn 	union {
   2738  1.2.2.3    tls 		sljit_d value;
   2739  1.2.2.2  alnsn 		struct {
   2740  1.2.2.3    tls 			sljit_si value1;
   2741  1.2.2.3    tls 			sljit_si value2;
   2742  1.2.2.2  alnsn 		} u;
   2743  1.2.2.2  alnsn 	} dbuf[4];
   2744  1.2.2.2  alnsn 
   2745  1.2.2.3    tls 	if (verbose)
   2746  1.2.2.3    tls 		printf("Run test32\n");
   2747  1.2.2.3    tls 
   2748  1.2.2.2  alnsn 	buf[0] = 5;
   2749  1.2.2.2  alnsn 	buf[1] = 5;
   2750  1.2.2.2  alnsn 	buf[2] = 5;
   2751  1.2.2.2  alnsn 	buf[3] = 5;
   2752  1.2.2.2  alnsn 	buf[4] = 5;
   2753  1.2.2.2  alnsn 	buf[5] = 5;
   2754  1.2.2.2  alnsn 	buf[6] = 5;
   2755  1.2.2.2  alnsn 	buf[7] = 5;
   2756  1.2.2.2  alnsn 	buf[8] = 5;
   2757  1.2.2.2  alnsn 	buf[9] = 5;
   2758  1.2.2.2  alnsn 	buf[10] = 5;
   2759  1.2.2.2  alnsn 	buf[11] = 5;
   2760  1.2.2.2  alnsn 	buf[12] = 5;
   2761  1.2.2.2  alnsn 	buf[13] = 5;
   2762  1.2.2.2  alnsn 	buf[14] = 5;
   2763  1.2.2.2  alnsn 	buf[15] = 5;
   2764  1.2.2.2  alnsn 
   2765  1.2.2.2  alnsn 	/* Two NaNs */
   2766  1.2.2.2  alnsn 	dbuf[0].u.value1 = 0x7fffffff;
   2767  1.2.2.2  alnsn 	dbuf[0].u.value2 = 0x7fffffff;
   2768  1.2.2.2  alnsn 	dbuf[1].u.value1 = 0x7fffffff;
   2769  1.2.2.2  alnsn 	dbuf[1].u.value2 = 0x7fffffff;
   2770  1.2.2.2  alnsn 	dbuf[2].value = -13.0;
   2771  1.2.2.2  alnsn 	dbuf[3].value = 27.0;
   2772  1.2.2.2  alnsn 
   2773  1.2.2.2  alnsn 	if (!sljit_is_fpu_available()) {
   2774  1.2.2.2  alnsn 		printf("no fpu available, test32 skipped\n");
   2775  1.2.2.2  alnsn 		successful_tests++;
   2776  1.2.2.2  alnsn 		if (compiler)
   2777  1.2.2.2  alnsn 			sljit_free_compiler(compiler);
   2778  1.2.2.2  alnsn 		return;
   2779  1.2.2.2  alnsn 	}
   2780  1.2.2.2  alnsn 
   2781  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2782  1.2.2.3    tls 	SLJIT_ASSERT(sizeof(sljit_d) == 8 && sizeof(sljit_si) == 4 && sizeof(dbuf[0]) == 8);
   2783  1.2.2.2  alnsn 
   2784  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 1, 2, 0);
   2785  1.2.2.2  alnsn 
   2786  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 0);
   2787  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_d), SLJIT_FLOAT_REG1, 0);
   2788  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 2 * sizeof(sljit_d));
   2789  1.2.2.2  alnsn 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_C_FLOAT_UNORDERED);
   2790  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_C_FLOAT_ORDERED);
   2791  1.2.2.2  alnsn 
   2792  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_d));
   2793  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_E | SLJIT_SET_S, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG3, 0);
   2794  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_C_FLOAT_UNORDERED);
   2795  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_C_FLOAT_ORDERED);
   2796  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_C_FLOAT_LESS);
   2797  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_C_FLOAT_GREATER_EQUAL);
   2798  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_C_FLOAT_GREATER);
   2799  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_C_FLOAT_LESS_EQUAL);
   2800  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_C_FLOAT_EQUAL);
   2801  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_C_FLOAT_NOT_EQUAL);
   2802  1.2.2.3    tls 
   2803  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_E, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_d));
   2804  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_ADDD, SLJIT_FLOAT_REG4, 0, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_d));
   2805  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw), SLJIT_C_FLOAT_UNORDERED);
   2806  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_sw), SLJIT_C_FLOAT_EQUAL);
   2807  1.2.2.3    tls 
   2808  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_S, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_d), SLJIT_FLOAT_REG1, 0);
   2809  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 12 * sizeof(sljit_sw), SLJIT_C_FLOAT_ORDERED);
   2810  1.2.2.3    tls 
   2811  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPD | SLJIT_SET_S, SLJIT_FLOAT_REG4, 0, SLJIT_FLOAT_REG3, 0);
   2812  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 0);
   2813  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 13 * sizeof(sljit_sw), SLJIT_C_FLOAT_UNORDERED);
   2814  1.2.2.2  alnsn 
   2815  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2816  1.2.2.2  alnsn 
   2817  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2818  1.2.2.2  alnsn 	CHECK(compiler);
   2819  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2820  1.2.2.2  alnsn 
   2821  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&dbuf);
   2822  1.2.2.2  alnsn 
   2823  1.2.2.2  alnsn 	FAILED(buf[0] != 1, "test32 case 1 failed\n");
   2824  1.2.2.2  alnsn 	FAILED(buf[1] != 2, "test32 case 2 failed\n");
   2825  1.2.2.2  alnsn 	FAILED(buf[2] != 2, "test32 case 3 failed\n");
   2826  1.2.2.2  alnsn 	FAILED(buf[3] != 1, "test32 case 4 failed\n");
   2827  1.2.2.2  alnsn 	FAILED(buf[4] != 1, "test32 case 5 failed\n");
   2828  1.2.2.2  alnsn 	FAILED(buf[5] != 2, "test32 case 6 failed\n");
   2829  1.2.2.2  alnsn 	FAILED(buf[6] != 2, "test32 case 7 failed\n");
   2830  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test32 case 8 failed\n");
   2831  1.2.2.2  alnsn 	FAILED(buf[8] != 2, "test32 case 9 failed\n");
   2832  1.2.2.2  alnsn 	FAILED(buf[9] != 1, "test32 case 10 failed\n");
   2833  1.2.2.2  alnsn 	FAILED(buf[10] != 2, "test32 case 11 failed\n");
   2834  1.2.2.2  alnsn 	FAILED(buf[11] != 1, "test32 case 12 failed\n");
   2835  1.2.2.2  alnsn 	FAILED(buf[12] != 2, "test32 case 13 failed\n");
   2836  1.2.2.2  alnsn 	FAILED(buf[13] != 1, "test32 case 14 failed\n");
   2837  1.2.2.2  alnsn 
   2838  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2839  1.2.2.2  alnsn 	successful_tests++;
   2840  1.2.2.2  alnsn }
   2841  1.2.2.2  alnsn 
   2842  1.2.2.2  alnsn static void test33(void)
   2843  1.2.2.2  alnsn {
   2844  1.2.2.2  alnsn 	/* Test keep flags. */
   2845  1.2.2.2  alnsn 	executable_code code;
   2846  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   2847  1.2.2.3    tls 	sljit_sw buf[7];
   2848  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   2849  1.2.2.3    tls 	sljit_sw big_word = SLJIT_W(0x8000000000000003);
   2850  1.2.2.2  alnsn #else
   2851  1.2.2.3    tls 	sljit_sw big_word = 0x80000003;
   2852  1.2.2.2  alnsn #endif
   2853  1.2.2.2  alnsn 
   2854  1.2.2.3    tls 	if (verbose)
   2855  1.2.2.3    tls 		printf("Run test33\n");
   2856  1.2.2.3    tls 
   2857  1.2.2.2  alnsn 	buf[0] = 3;
   2858  1.2.2.2  alnsn 	buf[1] = 3;
   2859  1.2.2.2  alnsn 	buf[2] = 3;
   2860  1.2.2.2  alnsn 	buf[3] = 3;
   2861  1.2.2.2  alnsn 	buf[4] = 3;
   2862  1.2.2.2  alnsn 	buf[5] = 3;
   2863  1.2.2.2  alnsn 	buf[6] = 3;
   2864  1.2.2.2  alnsn 
   2865  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2866  1.2.2.2  alnsn 
   2867  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 3, 3, 0);
   2868  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, big_word);
   2869  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_E | SLJIT_SET_C, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, big_word);
   2870  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG2, 0);
   2871  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   2872  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_KEEP_FLAGS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   2873  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
   2874  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2875  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC | SLJIT_KEEP_FLAGS, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   2876  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 7);
   2877  1.2.2.3    tls 
   2878  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   2879  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   2880  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SHL | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw));
   2881  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
   2882  1.2.2.3    tls 
   2883  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_IMM, 0x124);
   2884  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   2885  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2886  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_KEEP_FLAGS, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   2887  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_C_NOT_EQUAL);
   2888  1.2.2.3    tls 
   2889  1.2.2.3    tls 	/* PowerPC specific test. */
   2890  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
   2891  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD | SLJIT_SET_C, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   2892  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x80);
   2893  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ASHR | SLJIT_KEEP_FLAGS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   2894  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   2895  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADDC, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   2896  1.2.2.2  alnsn 
   2897  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   2898  1.2.2.2  alnsn 
   2899  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   2900  1.2.2.2  alnsn 	CHECK(compiler);
   2901  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2902  1.2.2.2  alnsn 
   2903  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   2904  1.2.2.2  alnsn 
   2905  1.2.2.2  alnsn 	FAILED(buf[0] != 6, "test33 case 1 failed\n");
   2906  1.2.2.2  alnsn 	FAILED(buf[1] != 1, "test33 case 2 failed\n");
   2907  1.2.2.2  alnsn 	FAILED(buf[2] != 8, "test33 case 3 failed\n");
   2908  1.2.2.2  alnsn 	FAILED(buf[3] != 16, "test33 case 4 failed\n");
   2909  1.2.2.2  alnsn 	FAILED(buf[4] != 1, "test33 case 5 failed\n");
   2910  1.2.2.2  alnsn 	FAILED(buf[5] != 0x125, "test33 case 6 failed\n");
   2911  1.2.2.3    tls 	FAILED(buf[6] != 1, "test33 case 7 failed\n");
   2912  1.2.2.2  alnsn 
   2913  1.2.2.2  alnsn 	sljit_free_code(code.code);
   2914  1.2.2.2  alnsn 	successful_tests++;
   2915  1.2.2.2  alnsn }
   2916  1.2.2.2  alnsn 
   2917  1.2.2.2  alnsn static void test34(void)
   2918  1.2.2.2  alnsn {
   2919  1.2.2.2  alnsn 	/* Test fast calls. */
   2920  1.2.2.2  alnsn 	executable_code codeA;
   2921  1.2.2.2  alnsn 	executable_code codeB;
   2922  1.2.2.2  alnsn 	executable_code codeC;
   2923  1.2.2.2  alnsn 	executable_code codeD;
   2924  1.2.2.2  alnsn 	executable_code codeE;
   2925  1.2.2.2  alnsn 	executable_code codeF;
   2926  1.2.2.2  alnsn 	struct sljit_compiler* compiler;
   2927  1.2.2.2  alnsn 	struct sljit_jump *jump;
   2928  1.2.2.2  alnsn 	struct sljit_label* label;
   2929  1.2.2.2  alnsn 	sljit_uw addr;
   2930  1.2.2.3    tls 	sljit_p buf[2];
   2931  1.2.2.3    tls 
   2932  1.2.2.3    tls 	if (verbose)
   2933  1.2.2.3    tls 		printf("Run test34\n");
   2934  1.2.2.2  alnsn 
   2935  1.2.2.2  alnsn 	buf[0] = 0;
   2936  1.2.2.2  alnsn 	buf[1] = 0;
   2937  1.2.2.2  alnsn 
   2938  1.2.2.2  alnsn 	/* A */
   2939  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   2940  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2941  1.2.2.3    tls 	sljit_set_context(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   2942  1.2.2.2  alnsn 
   2943  1.2.2.3    tls 	sljit_emit_fast_enter(compiler, SLJIT_SCRATCH_REG2, 0);
   2944  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
   2945  1.2.2.3    tls 	sljit_emit_fast_return(compiler, SLJIT_SCRATCH_REG2, 0);
   2946  1.2.2.2  alnsn 
   2947  1.2.2.2  alnsn 	codeA.code = sljit_generate_code(compiler);
   2948  1.2.2.2  alnsn 	CHECK(compiler);
   2949  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2950  1.2.2.2  alnsn 
   2951  1.2.2.2  alnsn 	/* B */
   2952  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   2953  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2954  1.2.2.3    tls 	sljit_set_context(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   2955  1.2.2.2  alnsn 
   2956  1.2.2.2  alnsn 	sljit_emit_fast_enter(compiler, SLJIT_TEMPORARY_EREG2, 0);
   2957  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 6);
   2958  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_FUNC_OFFSET(codeA.code));
   2959  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_SCRATCH_REG2, 0);
   2960  1.2.2.2  alnsn 	sljit_emit_fast_return(compiler, SLJIT_TEMPORARY_EREG2, 0);
   2961  1.2.2.2  alnsn 
   2962  1.2.2.2  alnsn 	codeB.code = sljit_generate_code(compiler);
   2963  1.2.2.2  alnsn 	CHECK(compiler);
   2964  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2965  1.2.2.2  alnsn 
   2966  1.2.2.2  alnsn 	/* C */
   2967  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   2968  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2969  1.2.2.3    tls 	sljit_set_context(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   2970  1.2.2.2  alnsn 
   2971  1.2.2.3    tls 	sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_p));
   2972  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   2973  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_REWRITABLE_JUMP | SLJIT_FAST_CALL);
   2974  1.2.2.2  alnsn 	sljit_set_target(jump, SLJIT_FUNC_OFFSET(codeB.code));
   2975  1.2.2.3    tls 	sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), sizeof(sljit_p));
   2976  1.2.2.2  alnsn 
   2977  1.2.2.2  alnsn 	codeC.code = sljit_generate_code(compiler);
   2978  1.2.2.2  alnsn 	CHECK(compiler);
   2979  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2980  1.2.2.2  alnsn 
   2981  1.2.2.2  alnsn 	/* D */
   2982  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   2983  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2984  1.2.2.3    tls 	sljit_set_context(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   2985  1.2.2.2  alnsn 
   2986  1.2.2.2  alnsn 	sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   2987  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 10);
   2988  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, SLJIT_FUNC_OFFSET(codeC.code));
   2989  1.2.2.2  alnsn 	sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   2990  1.2.2.2  alnsn 
   2991  1.2.2.2  alnsn 	codeD.code = sljit_generate_code(compiler);
   2992  1.2.2.2  alnsn 	CHECK(compiler);
   2993  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   2994  1.2.2.2  alnsn 
   2995  1.2.2.2  alnsn 	/* E */
   2996  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   2997  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   2998  1.2.2.3    tls 	sljit_set_context(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   2999  1.2.2.2  alnsn 
   3000  1.2.2.2  alnsn 	sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   3001  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 12);
   3002  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_p), SLJIT_IMM, SLJIT_FUNC_OFFSET(codeD.code));
   3003  1.2.2.3    tls 	sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_p));
   3004  1.2.2.2  alnsn 	sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   3005  1.2.2.2  alnsn 
   3006  1.2.2.2  alnsn 	codeE.code = sljit_generate_code(compiler);
   3007  1.2.2.2  alnsn 	CHECK(compiler);
   3008  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3009  1.2.2.2  alnsn 
   3010  1.2.2.2  alnsn 	/* F */
   3011  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   3012  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3013  1.2.2.2  alnsn 
   3014  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 5, 5, 2 * sizeof(sljit_p));
   3015  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3016  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, SLJIT_FUNC_OFFSET(codeE.code));
   3017  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3018  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0);
   3019  1.2.2.2  alnsn 
   3020  1.2.2.2  alnsn 	codeF.code = sljit_generate_code(compiler);
   3021  1.2.2.2  alnsn 	CHECK(compiler);
   3022  1.2.2.2  alnsn 	addr = sljit_get_label_addr(label);
   3023  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3024  1.2.2.2  alnsn 
   3025  1.2.2.3    tls 	FAILED(codeF.func1((sljit_sw)&buf) != 40, "test34 case 1 failed\n");
   3026  1.2.2.2  alnsn 	FAILED(buf[0] != addr - SLJIT_RETURN_ADDRESS_OFFSET, "test34 case 2 failed\n");
   3027  1.2.2.2  alnsn 
   3028  1.2.2.2  alnsn 	sljit_free_code(codeA.code);
   3029  1.2.2.2  alnsn 	sljit_free_code(codeB.code);
   3030  1.2.2.2  alnsn 	sljit_free_code(codeC.code);
   3031  1.2.2.2  alnsn 	sljit_free_code(codeD.code);
   3032  1.2.2.2  alnsn 	sljit_free_code(codeE.code);
   3033  1.2.2.2  alnsn 	sljit_free_code(codeF.code);
   3034  1.2.2.2  alnsn 	successful_tests++;
   3035  1.2.2.2  alnsn }
   3036  1.2.2.2  alnsn 
   3037  1.2.2.2  alnsn static void test35(void)
   3038  1.2.2.2  alnsn {
   3039  1.2.2.2  alnsn 	/* More complicated tests for fast calls. */
   3040  1.2.2.2  alnsn 	executable_code codeA;
   3041  1.2.2.2  alnsn 	executable_code codeB;
   3042  1.2.2.2  alnsn 	executable_code codeC;
   3043  1.2.2.2  alnsn 	struct sljit_compiler* compiler;
   3044  1.2.2.2  alnsn 	struct sljit_jump *jump;
   3045  1.2.2.2  alnsn 	struct sljit_label* label;
   3046  1.2.2.2  alnsn 	sljit_uw return_addr, jump_addr;
   3047  1.2.2.3    tls 	sljit_p buf[1];
   3048  1.2.2.3    tls 
   3049  1.2.2.3    tls 	if (verbose)
   3050  1.2.2.3    tls 		printf("Run test35\n");
   3051  1.2.2.2  alnsn 
   3052  1.2.2.2  alnsn 	buf[0] = 0;
   3053  1.2.2.2  alnsn 
   3054  1.2.2.2  alnsn 	/* A */
   3055  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   3056  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3057  1.2.2.2  alnsn 	sljit_set_context(compiler, 0, 2, 2, 0);
   3058  1.2.2.2  alnsn 
   3059  1.2.2.3    tls 	sljit_emit_fast_enter(compiler, SLJIT_MEM0(), (sljit_sw)&buf[0]);
   3060  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3061  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_REWRITABLE_JUMP | SLJIT_FAST_CALL);
   3062  1.2.2.2  alnsn 	sljit_set_target(jump, 0);
   3063  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3064  1.2.2.3    tls 	sljit_emit_fast_return(compiler, SLJIT_MEM0(), (sljit_sw)&buf[0]);
   3065  1.2.2.2  alnsn 
   3066  1.2.2.2  alnsn 	codeA.code = sljit_generate_code(compiler);
   3067  1.2.2.2  alnsn 	CHECK(compiler);
   3068  1.2.2.2  alnsn 	return_addr = sljit_get_label_addr(label) - SLJIT_RETURN_ADDRESS_OFFSET;
   3069  1.2.2.2  alnsn 	jump_addr = sljit_get_jump_addr(jump);
   3070  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3071  1.2.2.2  alnsn 
   3072  1.2.2.2  alnsn 	/* B */
   3073  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   3074  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3075  1.2.2.2  alnsn 	sljit_set_context(compiler, 0, 2, 2, 0);
   3076  1.2.2.2  alnsn 
   3077  1.2.2.2  alnsn 	sljit_emit_fast_enter(compiler, SLJIT_UNUSED, 0);
   3078  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 7);
   3079  1.2.2.2  alnsn 	sljit_emit_fast_return(compiler, SLJIT_IMM, return_addr);
   3080  1.2.2.2  alnsn 
   3081  1.2.2.2  alnsn 	codeB.code = sljit_generate_code(compiler);
   3082  1.2.2.2  alnsn 	CHECK(compiler);
   3083  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3084  1.2.2.2  alnsn 	sljit_set_jump_addr(jump_addr, SLJIT_FUNC_OFFSET(codeB.code));
   3085  1.2.2.2  alnsn 
   3086  1.2.2.2  alnsn 	/* C */
   3087  1.2.2.2  alnsn 	compiler = sljit_create_compiler();
   3088  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3089  1.2.2.2  alnsn 
   3090  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 0, 2, 2, 0);
   3091  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3092  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, SLJIT_FUNC_OFFSET(codeA.code));
   3093  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3094  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0);
   3095  1.2.2.2  alnsn 
   3096  1.2.2.2  alnsn 	codeC.code = sljit_generate_code(compiler);
   3097  1.2.2.2  alnsn 	CHECK(compiler);
   3098  1.2.2.2  alnsn 	return_addr = sljit_get_label_addr(label);
   3099  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3100  1.2.2.2  alnsn 
   3101  1.2.2.2  alnsn 	FAILED(codeC.func0() != 12, "test35 case 1 failed\n");
   3102  1.2.2.2  alnsn 	FAILED(buf[0] != return_addr - SLJIT_RETURN_ADDRESS_OFFSET, "test35 case 2 failed\n");
   3103  1.2.2.2  alnsn 
   3104  1.2.2.2  alnsn 	sljit_free_code(codeA.code);
   3105  1.2.2.2  alnsn 	sljit_free_code(codeB.code);
   3106  1.2.2.2  alnsn 	sljit_free_code(codeC.code);
   3107  1.2.2.2  alnsn 	successful_tests++;
   3108  1.2.2.2  alnsn }
   3109  1.2.2.2  alnsn 
   3110  1.2.2.3    tls static sljit_si cmp_test(struct sljit_compiler *compiler, sljit_si type, sljit_si src1, sljit_sw src1w, sljit_si src2, sljit_sw src2w)
   3111  1.2.2.2  alnsn {
   3112  1.2.2.2  alnsn 	/* 2 = true, 1 = false */
   3113  1.2.2.2  alnsn 	struct sljit_jump* jump;
   3114  1.2.2.2  alnsn 	struct sljit_label* label;
   3115  1.2.2.2  alnsn 
   3116  1.2.2.2  alnsn 	if (sljit_emit_op1(compiler, SLJIT_MOVU_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 1, SLJIT_IMM, 2))
   3117  1.2.2.2  alnsn 		return compiler->error;
   3118  1.2.2.2  alnsn 	jump = sljit_emit_cmp(compiler, type, src1, src1w, src2, src2w);
   3119  1.2.2.2  alnsn 	if (!jump)
   3120  1.2.2.2  alnsn 		return compiler->error;
   3121  1.2.2.2  alnsn 	if (sljit_emit_op1(compiler, SLJIT_MOV_UB, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_IMM, 1))
   3122  1.2.2.2  alnsn 		return compiler->error;
   3123  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3124  1.2.2.2  alnsn 	if (!label)
   3125  1.2.2.2  alnsn 		return compiler->error;
   3126  1.2.2.2  alnsn 	sljit_set_label(jump, label);
   3127  1.2.2.2  alnsn 	return SLJIT_SUCCESS;
   3128  1.2.2.2  alnsn }
   3129  1.2.2.2  alnsn 
   3130  1.2.2.2  alnsn #define TEST_CASES	(7 + 10 + 12 + 11 + 4)
   3131  1.2.2.2  alnsn static void test36(void)
   3132  1.2.2.2  alnsn {
   3133  1.2.2.2  alnsn 	/* Compare instruction. */
   3134  1.2.2.2  alnsn 	executable_code code;
   3135  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3136  1.2.2.2  alnsn 
   3137  1.2.2.3    tls 	sljit_sb buf[TEST_CASES];
   3138  1.2.2.3    tls 	sljit_sb compare_buf[TEST_CASES] = {
   3139  1.2.2.2  alnsn 		1, 1, 2, 2, 1, 2, 2,
   3140  1.2.2.2  alnsn 		1, 1, 2, 2, 2, 1, 2, 2, 1, 1,
   3141  1.2.2.2  alnsn 		2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2,
   3142  1.2.2.2  alnsn 		2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2,
   3143  1.2.2.2  alnsn 		2, 1, 1, 2
   3144  1.2.2.2  alnsn 	};
   3145  1.2.2.3    tls 	sljit_sw data[4];
   3146  1.2.2.3    tls 	sljit_si i;
   3147  1.2.2.3    tls 
   3148  1.2.2.3    tls 	if (verbose)
   3149  1.2.2.3    tls 		printf("Run test36\n");
   3150  1.2.2.2  alnsn 
   3151  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3152  1.2.2.2  alnsn 	for (i = 0; i < TEST_CASES; ++i)
   3153  1.2.2.2  alnsn 		buf[i] = 100;
   3154  1.2.2.2  alnsn 	data[0] = 32;
   3155  1.2.2.2  alnsn 	data[1] = -9;
   3156  1.2.2.2  alnsn 	data[2] = 43;
   3157  1.2.2.2  alnsn 	data[3] = -13;
   3158  1.2.2.2  alnsn 
   3159  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 2, 0);
   3160  1.2.2.2  alnsn 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 1);
   3161  1.2.2.2  alnsn 
   3162  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 13);
   3163  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 15);
   3164  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_EQUAL, SLJIT_IMM, 9, SLJIT_SCRATCH_REG1, 0);
   3165  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3166  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3);
   3167  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_EQUAL, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_IMM, -13);
   3168  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_NOT_EQUAL, SLJIT_IMM, 0, SLJIT_SCRATCH_REG1, 0);
   3169  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3170  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_NOT_EQUAL | SLJIT_REWRITABLE_JUMP, SLJIT_IMM, 0, SLJIT_SCRATCH_REG1, 0);
   3171  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_EQUAL, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT);
   3172  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_EQUAL | SLJIT_REWRITABLE_JUMP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3173  1.2.2.2  alnsn 
   3174  1.2.2.2  alnsn 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, 0);
   3175  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -8);
   3176  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   3177  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3178  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3179  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS | SLJIT_REWRITABLE_JUMP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3180  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER_EQUAL, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   3181  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER, SLJIT_IMM, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 2 * sizeof(sljit_sw));
   3182  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS_EQUAL, SLJIT_IMM, 0, SLJIT_SCRATCH_REG2, 0);
   3183  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_IMM, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 2 * sizeof(sljit_sw));
   3184  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_IMM, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw));
   3185  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS | SLJIT_REWRITABLE_JUMP, SLJIT_IMM, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw));
   3186  1.2.2.3    tls 
   3187  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   3188  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   3189  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sw));
   3190  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   3191  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -10);
   3192  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8);
   3193  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER_EQUAL, SLJIT_IMM, 8, SLJIT_SCRATCH_REG2, 0);
   3194  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER_EQUAL | SLJIT_REWRITABLE_JUMP, SLJIT_IMM, 8, SLJIT_SCRATCH_REG2, 0);
   3195  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER, SLJIT_IMM, 8, SLJIT_SCRATCH_REG2, 0);
   3196  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS_EQUAL, SLJIT_IMM, 7, SLJIT_SCRATCH_REG1, 0);
   3197  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER, SLJIT_IMM, 1, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw));
   3198  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3199  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3200  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER | SLJIT_REWRITABLE_JUMP, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3201  1.2.2.3    tls 
   3202  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -3);
   3203  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3204  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3205  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
   3206  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   3207  1.2.2.2  alnsn 	cmp_test(compiler, SLJIT_C_SIG_LESS, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, -1);
   3208  1.2.2.2  alnsn 	cmp_test(compiler, SLJIT_C_SIG_LESS | SLJIT_REWRITABLE_JUMP, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_IMM, -1);
   3209  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3210  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3211  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS_EQUAL, SLJIT_IMM, -4, SLJIT_SCRATCH_REG1, 0);
   3212  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER, SLJIT_IMM, -1, SLJIT_SCRATCH_REG2, 0);
   3213  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER | SLJIT_REWRITABLE_JUMP, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, -1);
   3214  1.2.2.2  alnsn 
   3215  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3216  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0xf00000004));
   3217  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
   3218  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS | SLJIT_INT_OP, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 5);
   3219  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3220  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0xff0000004));
   3221  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0);
   3222  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER | SLJIT_INT_OP, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 5);
   3223  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3224  1.2.2.2  alnsn #else
   3225  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 4);
   3226  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_LESS | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3227  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_GREATER | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3228  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xf0000004);
   3229  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_GREATER | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3230  1.2.2.3    tls 	cmp_test(compiler, SLJIT_C_SIG_LESS | SLJIT_INT_OP, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 5);
   3231  1.2.2.2  alnsn #endif
   3232  1.2.2.2  alnsn 
   3233  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   3234  1.2.2.2  alnsn 
   3235  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3236  1.2.2.2  alnsn 	CHECK(compiler);
   3237  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3238  1.2.2.2  alnsn 
   3239  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&data);
   3240  1.2.2.2  alnsn 
   3241  1.2.2.2  alnsn 	for (i = 0; i < TEST_CASES; ++i)
   3242  1.2.2.2  alnsn 		if (SLJIT_UNLIKELY(buf[i] != compare_buf[i])) {
   3243  1.2.2.2  alnsn 			printf("test36 case %d failed\n", i + 1);
   3244  1.2.2.2  alnsn 			return;
   3245  1.2.2.2  alnsn 		}
   3246  1.2.2.2  alnsn 
   3247  1.2.2.3    tls 	sljit_free_code(code.code);
   3248  1.2.2.2  alnsn 	successful_tests++;
   3249  1.2.2.2  alnsn }
   3250  1.2.2.2  alnsn #undef TEST_CASES
   3251  1.2.2.2  alnsn 
   3252  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3253  1.2.2.2  alnsn #define BITN(n) (SLJIT_W(1) << (63 - (n)))
   3254  1.2.2.2  alnsn #define RESN(n) (n)
   3255  1.2.2.2  alnsn #else
   3256  1.2.2.2  alnsn #define BITN(n) (1 << (31 - ((n) & 0x1f)))
   3257  1.2.2.2  alnsn #define RESN(n) ((n) & 0x1f)
   3258  1.2.2.2  alnsn #endif
   3259  1.2.2.2  alnsn 
   3260  1.2.2.2  alnsn static void test37(void)
   3261  1.2.2.2  alnsn {
   3262  1.2.2.2  alnsn 	/* Test count leading zeroes. */
   3263  1.2.2.2  alnsn 	executable_code code;
   3264  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3265  1.2.2.3    tls 	sljit_sw buf[15];
   3266  1.2.2.3    tls 	sljit_si ibuf[2];
   3267  1.2.2.3    tls 	sljit_si i;
   3268  1.2.2.3    tls 
   3269  1.2.2.3    tls 	if (verbose)
   3270  1.2.2.3    tls 		printf("Run test37\n");
   3271  1.2.2.2  alnsn 
   3272  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3273  1.2.2.2  alnsn 
   3274  1.2.2.2  alnsn 	for (i = 0; i < 15; i++)
   3275  1.2.2.2  alnsn 		buf[i] = -1;
   3276  1.2.2.2  alnsn 	buf[3] = 0;
   3277  1.2.2.2  alnsn 	buf[7] = BITN(13);
   3278  1.2.2.2  alnsn 	ibuf[0] = -1;
   3279  1.2.2.2  alnsn 	ibuf[1] = -1;
   3280  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 1, 2, 0);
   3281  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, BITN(27));
   3282  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
   3283  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, BITN(47));
   3284  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3285  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   3286  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw));
   3287  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
   3288  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   3289  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   3290  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3291  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3292  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_ICLZ, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_SCRATCH_REG1, 0);
   3293  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -1);
   3294  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0);
   3295  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   3296  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ | SLJIT_KEEP_FLAGS, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw));
   3297  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3298  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
   3299  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, BITN(58));
   3300  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3301  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw));
   3302  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_NOT_ZERO);
   3303  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0);
   3304  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_CLZ, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3305  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3306  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0xff08a00000));
   3307  1.2.2.2  alnsn #else
   3308  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x08a00000);
   3309  1.2.2.2  alnsn #endif
   3310  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_ICLZ, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_si), SLJIT_SCRATCH_REG1, 0);
   3311  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_ICLZ, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   3312  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 12 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3313  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3314  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0xffc8a00000));
   3315  1.2.2.2  alnsn #else
   3316  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xc8a00000);
   3317  1.2.2.2  alnsn #endif
   3318  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_ICLZ | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0);
   3319  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 13 * sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_ZERO);
   3320  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_ICLZ | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   3321  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 14 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3322  1.2.2.2  alnsn 
   3323  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   3324  1.2.2.2  alnsn 
   3325  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3326  1.2.2.2  alnsn 	CHECK(compiler);
   3327  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3328  1.2.2.2  alnsn 
   3329  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&ibuf);
   3330  1.2.2.2  alnsn 	FAILED(buf[0] != RESN(27), "test37 case 1 failed\n");
   3331  1.2.2.2  alnsn 	FAILED(buf[1] != RESN(47), "test37 case 2 failed\n");
   3332  1.2.2.2  alnsn 	FAILED(buf[2] != 0, "test37 case 3 failed\n");
   3333  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3334  1.2.2.2  alnsn 	FAILED(buf[3] != 64, "test37 case 4 failed\n");
   3335  1.2.2.2  alnsn #else
   3336  1.2.2.2  alnsn 	FAILED(buf[3] != 32, "test37 case 4 failed\n");
   3337  1.2.2.2  alnsn #endif
   3338  1.2.2.2  alnsn 	FAILED(buf[4] != 1, "test37 case 5 failed\n");
   3339  1.2.2.2  alnsn 	FAILED(buf[5] != 0, "test37 case 6 failed\n");
   3340  1.2.2.2  alnsn 	FAILED(ibuf[0] != 32, "test37 case 7 failed\n");
   3341  1.2.2.2  alnsn 	FAILED(buf[6] != 1, "test37 case 8 failed\n");
   3342  1.2.2.2  alnsn 	FAILED(buf[7] != RESN(13), "test37 case 9 failed\n");
   3343  1.2.2.2  alnsn #if !(defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
   3344  1.2.2.2  alnsn 	FAILED(buf[8] != 0, "test37 case 10 failed\n");
   3345  1.2.2.2  alnsn #endif
   3346  1.2.2.2  alnsn 	FAILED(buf[9] != RESN(58), "test37 case 11 failed\n");
   3347  1.2.2.2  alnsn 	FAILED(buf[10] != 0, "test37 case 12 failed\n");
   3348  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3349  1.2.2.2  alnsn 	FAILED(buf[11] != 64, "test37 case 13 failed\n");
   3350  1.2.2.2  alnsn #else
   3351  1.2.2.2  alnsn 	FAILED(buf[11] != 32, "test37 case 13 failed\n");
   3352  1.2.2.2  alnsn #endif
   3353  1.2.2.2  alnsn 	FAILED(ibuf[1] != 4, "test37 case 14 failed\n");
   3354  1.2.2.3    tls 	FAILED((buf[12] & 0xffffffff) != 4, "test37 case 15 failed\n");
   3355  1.2.2.2  alnsn 	FAILED(buf[13] != 1, "test37 case 16 failed\n");
   3356  1.2.2.3    tls 	FAILED((buf[14] & 0xffffffff) != 0, "test37 case 17 failed\n");
   3357  1.2.2.2  alnsn 
   3358  1.2.2.2  alnsn 	sljit_free_code(code.code);
   3359  1.2.2.2  alnsn 	successful_tests++;
   3360  1.2.2.2  alnsn }
   3361  1.2.2.2  alnsn #undef BITN
   3362  1.2.2.2  alnsn #undef RESN
   3363  1.2.2.2  alnsn 
   3364  1.2.2.2  alnsn static void test38(void)
   3365  1.2.2.2  alnsn {
   3366  1.2.2.2  alnsn #if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK)
   3367  1.2.2.2  alnsn 	/* Test stack utility. */
   3368  1.2.2.2  alnsn 	executable_code code;
   3369  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3370  1.2.2.2  alnsn 	struct sljit_jump* alloc_fail;
   3371  1.2.2.2  alnsn 	struct sljit_jump* alloc2_fail;
   3372  1.2.2.2  alnsn 	struct sljit_jump* alloc3_fail;
   3373  1.2.2.2  alnsn 	struct sljit_jump* jump;
   3374  1.2.2.2  alnsn 	struct sljit_label* label;
   3375  1.2.2.2  alnsn 
   3376  1.2.2.3    tls 	if (verbose)
   3377  1.2.2.3    tls 		printf("Run test38\n");
   3378  1.2.2.3    tls 
   3379  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3380  1.2.2.2  alnsn 
   3381  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 0, 2, 1, 0);
   3382  1.2.2.2  alnsn 
   3383  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8192);
   3384  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 65536);
   3385  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_allocate_stack));
   3386  1.2.2.2  alnsn 	alloc_fail = sljit_emit_cmp(compiler, SLJIT_C_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
   3387  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG1, 0, SLJIT_RETURN_REG, 0);
   3388  1.2.2.2  alnsn 
   3389  1.2.2.2  alnsn 	/* Write 8k data. */
   3390  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, base), SLJIT_IMM, sizeof(sljit_sw));
   3391  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 8192);
   3392  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3393  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw), SLJIT_IMM, -1);
   3394  1.2.2.3    tls 	jump = sljit_emit_cmp(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3395  1.2.2.2  alnsn 	sljit_set_label(jump, label);
   3396  1.2.2.2  alnsn 
   3397  1.2.2.2  alnsn 	/* Grow stack. */
   3398  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0);
   3399  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, base), SLJIT_IMM, 65536);
   3400  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize));
   3401  1.2.2.2  alnsn 	alloc2_fail = sljit_emit_cmp(compiler, SLJIT_C_NOT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
   3402  1.2.2.2  alnsn 
   3403  1.2.2.2  alnsn 	/* Write 64k data. */
   3404  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, base), SLJIT_IMM, sizeof(sljit_sw));
   3405  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 65536);
   3406  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3407  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw), SLJIT_IMM, -1);
   3408  1.2.2.3    tls 	jump = sljit_emit_cmp(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3409  1.2.2.2  alnsn 	sljit_set_label(jump, label);
   3410  1.2.2.2  alnsn 
   3411  1.2.2.2  alnsn 	/* Shrink stack. */
   3412  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0);
   3413  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, base), SLJIT_IMM, 32768);
   3414  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize));
   3415  1.2.2.2  alnsn 	alloc3_fail = sljit_emit_cmp(compiler, SLJIT_C_NOT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
   3416  1.2.2.2  alnsn 
   3417  1.2.2.2  alnsn 	/* Write 32k data. */
   3418  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, base), SLJIT_IMM, sizeof(sljit_sw));
   3419  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(struct sljit_stack, limit), SLJIT_IMM, sizeof(sljit_sw));
   3420  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3421  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG1), sizeof(sljit_sw), SLJIT_IMM, -1);
   3422  1.2.2.3    tls 	jump = sljit_emit_cmp(compiler, SLJIT_C_LESS, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3423  1.2.2.2  alnsn 	sljit_set_label(jump, label);
   3424  1.2.2.2  alnsn 
   3425  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0);
   3426  1.2.2.2  alnsn 	sljit_emit_ijump(compiler, SLJIT_CALL1, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_free_stack));
   3427  1.2.2.2  alnsn 
   3428  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1);
   3429  1.2.2.2  alnsn 	label = sljit_emit_label(compiler);
   3430  1.2.2.2  alnsn 	sljit_set_label(alloc_fail, label);
   3431  1.2.2.2  alnsn 	sljit_set_label(alloc2_fail, label);
   3432  1.2.2.2  alnsn 	sljit_set_label(alloc3_fail, label);
   3433  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   3434  1.2.2.2  alnsn 
   3435  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3436  1.2.2.2  alnsn 	CHECK(compiler);
   3437  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3438  1.2.2.2  alnsn 
   3439  1.2.2.2  alnsn 	/* Just survive this. */
   3440  1.2.2.2  alnsn 	FAILED(code.func0() != 1, "test38 case 1 failed\n");
   3441  1.2.2.3    tls 
   3442  1.2.2.2  alnsn 	sljit_free_code(code.code);
   3443  1.2.2.2  alnsn #endif
   3444  1.2.2.2  alnsn 	successful_tests++;
   3445  1.2.2.2  alnsn }
   3446  1.2.2.2  alnsn 
   3447  1.2.2.2  alnsn static void test39(void)
   3448  1.2.2.2  alnsn {
   3449  1.2.2.2  alnsn 	/* Test error handling. */
   3450  1.2.2.2  alnsn 	executable_code code;
   3451  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3452  1.2.2.2  alnsn 	struct sljit_jump* jump;
   3453  1.2.2.2  alnsn 
   3454  1.2.2.3    tls 	if (verbose)
   3455  1.2.2.3    tls 		printf("Run test39\n");
   3456  1.2.2.3    tls 
   3457  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3458  1.2.2.2  alnsn 
   3459  1.2.2.2  alnsn 	/* Such assignment should never happen in a regular program. */
   3460  1.2.2.2  alnsn 	compiler->error = -3967;
   3461  1.2.2.2  alnsn 
   3462  1.2.2.2  alnsn 	SLJIT_ASSERT(sljit_emit_enter(compiler, 2, 5, 5, 32) == -3967);
   3463  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0) == -3967);
   3464  1.2.2.2  alnsn 	SLJIT_ASSERT(sljit_emit_op0(compiler, SLJIT_NOP) == -3967);
   3465  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SCRATCH_REG2), 1) == -3967);
   3466  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_op2(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 64, SLJIT_MEM1(SLJIT_SAVED_REG1), -64) == -3967);
   3467  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_fop1(compiler, SLJIT_ABSD, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 0) == -3967);
   3468  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_fop2(compiler, SLJIT_DIVD, SLJIT_FLOAT_REG3, 0, SLJIT_MEM2(SLJIT_SCRATCH_REG1, SLJIT_SAVED_REG1), 0, SLJIT_FLOAT_REG3, 0) == -3967);
   3469  1.2.2.2  alnsn 	SLJIT_ASSERT(!sljit_emit_label(compiler));
   3470  1.2.2.2  alnsn 	jump = sljit_emit_jump(compiler, SLJIT_CALL3);
   3471  1.2.2.2  alnsn 	SLJIT_ASSERT(!jump);
   3472  1.2.2.2  alnsn 	sljit_set_label(jump, (struct sljit_label*)0x123450);
   3473  1.2.2.2  alnsn 	sljit_set_target(jump, 0x123450);
   3474  1.2.2.3    tls 	jump = sljit_emit_cmp(compiler, SLJIT_C_SIG_LESS_EQUAL, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3475  1.2.2.2  alnsn 	SLJIT_ASSERT(!jump);
   3476  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_ijump(compiler, SLJIT_JUMP, SLJIT_MEM1(SLJIT_SCRATCH_REG1), 8) == -3967);
   3477  1.2.2.3    tls 	SLJIT_ASSERT(sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_UNUSED, 0, SLJIT_C_MUL_OVERFLOW) == -3967);
   3478  1.2.2.3    tls 	SLJIT_ASSERT(!sljit_emit_const(compiler, SLJIT_SCRATCH_REG1, 0, 99));
   3479  1.2.2.2  alnsn 
   3480  1.2.2.2  alnsn 	SLJIT_ASSERT(!compiler->labels && !compiler->jumps && !compiler->consts);
   3481  1.2.2.2  alnsn 	SLJIT_ASSERT(!compiler->last_label && !compiler->last_jump && !compiler->last_const);
   3482  1.2.2.2  alnsn 	SLJIT_ASSERT(!compiler->buf->next && !compiler->buf->used_size);
   3483  1.2.2.2  alnsn 	SLJIT_ASSERT(!compiler->abuf->next && !compiler->abuf->used_size);
   3484  1.2.2.2  alnsn 
   3485  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3486  1.2.2.2  alnsn 	SLJIT_ASSERT(!code.code && sljit_get_compiler_error(compiler) == -3967);
   3487  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3488  1.2.2.2  alnsn 	successful_tests++;
   3489  1.2.2.2  alnsn }
   3490  1.2.2.2  alnsn 
   3491  1.2.2.2  alnsn static void test40(void)
   3492  1.2.2.2  alnsn {
   3493  1.2.2.3    tls 	/* Test emit_op_flags. */
   3494  1.2.2.2  alnsn 	executable_code code;
   3495  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3496  1.2.2.3    tls 	sljit_sw buf[10];
   3497  1.2.2.3    tls 
   3498  1.2.2.3    tls 	if (verbose)
   3499  1.2.2.3    tls 		printf("Run test40\n");
   3500  1.2.2.2  alnsn 
   3501  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3502  1.2.2.2  alnsn 	buf[0] = -100;
   3503  1.2.2.2  alnsn 	buf[1] = -100;
   3504  1.2.2.2  alnsn 	buf[2] = -100;
   3505  1.2.2.2  alnsn 	buf[3] = -8;
   3506  1.2.2.2  alnsn 	buf[4] = -100;
   3507  1.2.2.2  alnsn 	buf[5] = -100;
   3508  1.2.2.2  alnsn 	buf[6] = 0;
   3509  1.2.2.2  alnsn 	buf[7] = 0;
   3510  1.2.2.2  alnsn 	buf[8] = -100;
   3511  1.2.2.3    tls 	buf[9] = -100;
   3512  1.2.2.2  alnsn 
   3513  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 3, 4, sizeof(sljit_sw));
   3514  1.2.2.2  alnsn 
   3515  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -5);
   3516  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S, SLJIT_UNUSED, 0, SLJIT_IMM, -6, SLJIT_SCRATCH_REG1, 0);
   3517  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x123456);
   3518  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_C_SIG_LESS);
   3519  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG2, 0);
   3520  1.2.2.2  alnsn 
   3521  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -13);
   3522  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_IMM, -13, SLJIT_SCRATCH_REG1, 0);
   3523  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_IMM, 0);
   3524  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_C_EQUAL);
   3525  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
   3526  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_OR | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   3527  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
   3528  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_SET_E, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_C_EQUAL);
   3529  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 2, SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
   3530  1.2.2.3    tls 
   3531  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -13);
   3532  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 3);
   3533  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_S, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3534  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG2), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG2), SLJIT_WORD_SHIFT, SLJIT_C_SIG_LESS);
   3535  1.2.2.3    tls 
   3536  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -8);
   3537  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 33);
   3538  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG2, 0);
   3539  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 0);
   3540  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_UNUSED, 0, SLJIT_C_GREATER);
   3541  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_KEEP_FLAGS, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_C_EQUAL);
   3542  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 0x88);
   3543  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_KEEP_FLAGS, SLJIT_SAVED_EREG1, 0, SLJIT_SAVED_EREG1, 0, SLJIT_C_NOT_EQUAL);
   3544  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 4, SLJIT_SAVED_REG2, 0);
   3545  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 5, SLJIT_SAVED_EREG1, 0);
   3546  1.2.2.3    tls 
   3547  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x84);
   3548  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_IMM, 0x180, SLJIT_SCRATCH_REG1, 0);
   3549  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 6, SLJIT_C_EQUAL);
   3550  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 7, SLJIT_C_EQUAL);
   3551  1.2.2.3    tls 
   3552  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   3553  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   3554  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_C_NOT_EQUAL);
   3555  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 8, SLJIT_UNUSED, 0, SLJIT_C_NOT_EQUAL);
   3556  1.2.2.3    tls 
   3557  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x123456);
   3558  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   3559  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_C_GREATER);
   3560  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw) * 9, SLJIT_SCRATCH_REG1, 0);
   3561  1.2.2.2  alnsn 
   3562  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), 0, SLJIT_IMM, 0xbaddead);
   3563  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), 0);
   3564  1.2.2.2  alnsn 
   3565  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3566  1.2.2.2  alnsn 	CHECK(compiler);
   3567  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3568  1.2.2.2  alnsn 
   3569  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != 0xbaddead, "test40 case 1 failed\n");
   3570  1.2.2.2  alnsn 	FAILED(buf[0] != 0x123457, "test40 case 2 failed\n");
   3571  1.2.2.2  alnsn 	FAILED(buf[1] != 1, "test40 case 3 failed\n");
   3572  1.2.2.2  alnsn 	FAILED(buf[2] != 0, "test40 case 4 failed\n");
   3573  1.2.2.2  alnsn 	FAILED(buf[3] != -7, "test40 case 5 failed\n");
   3574  1.2.2.2  alnsn 	FAILED(buf[4] != 0, "test40 case 6 failed\n");
   3575  1.2.2.2  alnsn 	FAILED(buf[5] != 0x89, "test40 case 7 failed\n");
   3576  1.2.2.2  alnsn 	FAILED(buf[6] != 0, "test40 case 8 failed\n");
   3577  1.2.2.2  alnsn 	FAILED(buf[7] != 1, "test40 case 9 failed\n");
   3578  1.2.2.2  alnsn 	FAILED(buf[8] != 1, "test40 case 10 failed\n");
   3579  1.2.2.3    tls 	FAILED(buf[9] != 0x123457, "test40 case 11 failed\n");
   3580  1.2.2.2  alnsn 
   3581  1.2.2.3    tls 	sljit_free_code(code.code);
   3582  1.2.2.2  alnsn 	successful_tests++;
   3583  1.2.2.2  alnsn }
   3584  1.2.2.2  alnsn 
   3585  1.2.2.2  alnsn static void test41(void)
   3586  1.2.2.2  alnsn {
   3587  1.2.2.2  alnsn 	/* Test inline assembly. */
   3588  1.2.2.2  alnsn 	executable_code code;
   3589  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3590  1.2.2.3    tls 	sljit_si i;
   3591  1.2.2.3    tls 	sljit_d buf[3];
   3592  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
   3593  1.2.2.2  alnsn 	sljit_ub inst[16];
   3594  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
   3595  1.2.2.2  alnsn 	sljit_ub inst[16];
   3596  1.2.2.3    tls 	sljit_si reg;
   3597  1.2.2.2  alnsn #else
   3598  1.2.2.2  alnsn 	sljit_ui inst;
   3599  1.2.2.2  alnsn #endif
   3600  1.2.2.2  alnsn 
   3601  1.2.2.3    tls 	if (verbose)
   3602  1.2.2.3    tls 		printf("Run test41\n");
   3603  1.2.2.3    tls 
   3604  1.2.2.2  alnsn 	for (i = 1; i <= SLJIT_NO_REGISTERS; i++) {
   3605  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
   3606  1.2.2.2  alnsn 		if (i == SLJIT_TEMPORARY_EREG1 || i == SLJIT_TEMPORARY_EREG2
   3607  1.2.2.2  alnsn 				|| i == SLJIT_SAVED_EREG1 || i == SLJIT_SAVED_EREG2) {
   3608  1.2.2.2  alnsn 			SLJIT_ASSERT(sljit_get_register_index(i) == -1);
   3609  1.2.2.2  alnsn 			continue;
   3610  1.2.2.2  alnsn 		}
   3611  1.2.2.2  alnsn #endif
   3612  1.2.2.2  alnsn 		SLJIT_ASSERT(sljit_get_register_index(i) >= 0 && sljit_get_register_index(i) < 32);
   3613  1.2.2.2  alnsn 	}
   3614  1.2.2.2  alnsn 
   3615  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3616  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 2, 3, 3, 0);
   3617  1.2.2.2  alnsn 
   3618  1.2.2.2  alnsn 	/* Returns with the sum of SLJIT_SAVED_REG1 and SLJIT_SAVED_REG2. */
   3619  1.2.2.2  alnsn #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
   3620  1.2.2.2  alnsn 	/* lea SLJIT_RETURN_REG, [SLJIT_SAVED_REG1, SLJIT_SAVED_REG2] */
   3621  1.2.2.2  alnsn 	inst[0] = 0x48;
   3622  1.2.2.2  alnsn 	inst[1] = 0x8d;
   3623  1.2.2.2  alnsn 	inst[2] = 0x04 | ((sljit_get_register_index(SLJIT_RETURN_REG) & 0x7) << 3);
   3624  1.2.2.2  alnsn 	inst[3] = (sljit_get_register_index(SLJIT_SAVED_REG1) & 0x7)
   3625  1.2.2.2  alnsn 		| ((sljit_get_register_index(SLJIT_SAVED_REG2) & 0x7) << 3);
   3626  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, inst, 4);
   3627  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
   3628  1.2.2.2  alnsn 	/* lea SLJIT_RETURN_REG, [SLJIT_SAVED_REG1, SLJIT_SAVED_REG2] */
   3629  1.2.2.2  alnsn 	inst[0] = 0x48; /* REX_W */
   3630  1.2.2.2  alnsn 	inst[1] = 0x8d;
   3631  1.2.2.2  alnsn 	inst[2] = 0x04;
   3632  1.2.2.2  alnsn 	reg = sljit_get_register_index(SLJIT_RETURN_REG);
   3633  1.2.2.2  alnsn 	inst[2] |= ((reg & 0x7) << 3);
   3634  1.2.2.2  alnsn 	if (reg > 7)
   3635  1.2.2.2  alnsn 		inst[0] |= 0x04; /* REX_R */
   3636  1.2.2.2  alnsn 	reg = sljit_get_register_index(SLJIT_SAVED_REG1);
   3637  1.2.2.2  alnsn 	inst[3] = reg & 0x7;
   3638  1.2.2.2  alnsn 	if (reg > 7)
   3639  1.2.2.2  alnsn 		inst[0] |= 0x01; /* REX_B */
   3640  1.2.2.2  alnsn 	reg = sljit_get_register_index(SLJIT_SAVED_REG2);
   3641  1.2.2.2  alnsn 	inst[3] |= (reg & 0x7) << 3;
   3642  1.2.2.2  alnsn 	if (reg > 7)
   3643  1.2.2.2  alnsn 		inst[0] |= 0x02; /* REX_X */
   3644  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, inst, 4);
   3645  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
   3646  1.2.2.2  alnsn 	/* add rd, rn, rm */
   3647  1.2.2.2  alnsn 	inst = 0xe0800000 | (sljit_get_register_index(SLJIT_RETURN_REG) << 12)
   3648  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 16)
   3649  1.2.2.2  alnsn 		| sljit_get_register_index(SLJIT_SAVED_REG2);
   3650  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3651  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
   3652  1.2.2.2  alnsn 	/* add rd, rn, rm */
   3653  1.2.2.2  alnsn 	inst = 0xeb000000 | (sljit_get_register_index(SLJIT_RETURN_REG) << 8)
   3654  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 16)
   3655  1.2.2.2  alnsn 		| sljit_get_register_index(SLJIT_SAVED_REG2);
   3656  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3657  1.2.2.3    tls #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
   3658  1.2.2.3    tls 	/* add rd, rn, rm */
   3659  1.2.2.3    tls 	inst = 0x8b000000 | sljit_get_register_index(SLJIT_RETURN_REG)
   3660  1.2.2.3    tls 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 5)
   3661  1.2.2.3    tls 		| (sljit_get_register_index(SLJIT_SAVED_REG2) << 16);
   3662  1.2.2.3    tls 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3663  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
   3664  1.2.2.2  alnsn 	/* add rD, rA, rB */
   3665  1.2.2.2  alnsn 	inst = (31 << 26) | (266 << 1) | (sljit_get_register_index(SLJIT_RETURN_REG) << 21)
   3666  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 16)
   3667  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG2) << 11);
   3668  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3669  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
   3670  1.2.2.2  alnsn 	/* addu rd, rs, rt */
   3671  1.2.2.2  alnsn 	inst = 33 | (sljit_get_register_index(SLJIT_RETURN_REG) << 11)
   3672  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 21)
   3673  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG2) << 16);
   3674  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3675  1.2.2.3    tls #elif (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
   3676  1.2.2.3    tls 	/* daddu rd, rs, rt */
   3677  1.2.2.3    tls 	inst = 45 | (sljit_get_register_index(SLJIT_RETURN_REG) << 11)
   3678  1.2.2.3    tls 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 21)
   3679  1.2.2.3    tls 		| (sljit_get_register_index(SLJIT_SAVED_REG2) << 16);
   3680  1.2.2.3    tls 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3681  1.2.2.2  alnsn #elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
   3682  1.2.2.2  alnsn 	/* add rd, rs1, rs2 */
   3683  1.2.2.2  alnsn 	inst = (0x2 << 30) | (sljit_get_register_index(SLJIT_RETURN_REG) << 25)
   3684  1.2.2.2  alnsn 		| (sljit_get_register_index(SLJIT_SAVED_REG1) << 14)
   3685  1.2.2.2  alnsn 		| sljit_get_register_index(SLJIT_SAVED_REG2);
   3686  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3687  1.2.2.2  alnsn #else
   3688  1.2.2.2  alnsn 	inst = 0;
   3689  1.2.2.2  alnsn 	sljit_emit_op_custom(compiler, &inst, 0);
   3690  1.2.2.2  alnsn #endif
   3691  1.2.2.2  alnsn 
   3692  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   3693  1.2.2.2  alnsn 
   3694  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3695  1.2.2.2  alnsn 	CHECK(compiler);
   3696  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3697  1.2.2.2  alnsn 
   3698  1.2.2.2  alnsn 	FAILED(code.func2(32, -11) != 21, "test41 case 1 failed\n");
   3699  1.2.2.2  alnsn 	FAILED(code.func2(1000, 234) != 1234, "test41 case 2 failed\n");
   3700  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3701  1.2.2.2  alnsn 	FAILED(code.func2(SLJIT_W(0x20f0a04090c06070), SLJIT_W(0x020f0a04090c0607)) != SLJIT_W(0x22ffaa4499cc6677), "test41 case 3 failed\n");
   3702  1.2.2.2  alnsn #endif
   3703  1.2.2.2  alnsn 
   3704  1.2.2.3    tls 	sljit_free_code(code.code);
   3705  1.2.2.3    tls 
   3706  1.2.2.3    tls 	if (sljit_is_fpu_available()) {
   3707  1.2.2.3    tls 		buf[0] = 13.5;
   3708  1.2.2.3    tls 		buf[1] = -2.25;
   3709  1.2.2.3    tls 		buf[2] = 0.0;
   3710  1.2.2.3    tls 
   3711  1.2.2.3    tls 		compiler = sljit_create_compiler();
   3712  1.2.2.3    tls 		sljit_emit_enter(compiler, 1, 0, 1, 0);
   3713  1.2.2.3    tls 		sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   3714  1.2.2.3    tls 		sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_d));
   3715  1.2.2.3    tls #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
   3716  1.2.2.3    tls 		/* addsd x, xm */
   3717  1.2.2.3    tls 		inst[0] = 0xf2;
   3718  1.2.2.3    tls 		inst[1] = 0x0f;
   3719  1.2.2.3    tls 		inst[2] = 0x58;
   3720  1.2.2.3    tls 		inst[3] = 0xc0 | (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 3)
   3721  1.2.2.3    tls 			| sljit_get_float_register_index(SLJIT_FLOAT_REG2);
   3722  1.2.2.3    tls 		sljit_emit_op_custom(compiler, inst, 4);
   3723  1.2.2.3    tls #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
   3724  1.2.2.3    tls 		/* addsd x, xm */
   3725  1.2.2.3    tls 		if (sljit_get_float_register_index(SLJIT_FLOAT_REG1) > 7 || sljit_get_float_register_index(SLJIT_FLOAT_REG2) > 7) {
   3726  1.2.2.3    tls 			inst[0] = 0;
   3727  1.2.2.3    tls 			if (sljit_get_float_register_index(SLJIT_FLOAT_REG1) > 7)
   3728  1.2.2.3    tls 				inst[0] |= 0x04; /* REX_R */
   3729  1.2.2.3    tls 			if (sljit_get_float_register_index(SLJIT_FLOAT_REG2) > 7)
   3730  1.2.2.3    tls 				inst[0] |= 0x01; /* REX_B */
   3731  1.2.2.3    tls 			inst[1] = 0xf2;
   3732  1.2.2.3    tls 			inst[2] = 0x0f;
   3733  1.2.2.3    tls 			inst[3] = 0x58;
   3734  1.2.2.3    tls 			inst[4] = 0xc0 | ((sljit_get_float_register_index(SLJIT_FLOAT_REG1) & 0x7) << 3)
   3735  1.2.2.3    tls 				| (sljit_get_float_register_index(SLJIT_FLOAT_REG2) & 0x7);
   3736  1.2.2.3    tls 			sljit_emit_op_custom(compiler, inst, 5);
   3737  1.2.2.3    tls 		}
   3738  1.2.2.3    tls 		else {
   3739  1.2.2.3    tls 			inst[0] = 0xf2;
   3740  1.2.2.3    tls 			inst[1] = 0x0f;
   3741  1.2.2.3    tls 			inst[2] = 0x58;
   3742  1.2.2.3    tls 			inst[3] = 0xc0 | (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 3)
   3743  1.2.2.3    tls 				| sljit_get_float_register_index(SLJIT_FLOAT_REG2);
   3744  1.2.2.3    tls 			sljit_emit_op_custom(compiler, inst, 4);
   3745  1.2.2.3    tls 		}
   3746  1.2.2.3    tls #elif (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) || (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)
   3747  1.2.2.3    tls 		/* vadd.f64 dd, dn, dm */
   3748  1.2.2.3    tls 		inst = 0xee300b00 | (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 12)
   3749  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 16)
   3750  1.2.2.3    tls 			| sljit_get_float_register_index(SLJIT_FLOAT_REG2);
   3751  1.2.2.3    tls 		sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3752  1.2.2.3    tls #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)
   3753  1.2.2.3    tls 		/* fadd rd, rn, rm */
   3754  1.2.2.3    tls 		inst = 0x1e602800 | sljit_get_float_register_index(SLJIT_FLOAT_REG1)
   3755  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 5)
   3756  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG2) << 16);
   3757  1.2.2.3    tls 		sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3758  1.2.2.3    tls #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
   3759  1.2.2.3    tls 		/* fadd frD, frA, frB */
   3760  1.2.2.3    tls 		inst = (63 << 26) | (21 << 1) | (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 21)
   3761  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 16)
   3762  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG2) << 11);
   3763  1.2.2.3    tls 		sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3764  1.2.2.3    tls #elif (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) || (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)
   3765  1.2.2.3    tls 		/* add.d fd, fs, ft */
   3766  1.2.2.3    tls 		inst = (17 << 26) | (17 << 21) | (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 6)
   3767  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 11)
   3768  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG2) << 16);
   3769  1.2.2.3    tls 		sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3770  1.2.2.3    tls #elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
   3771  1.2.2.3    tls 		/* faddd rd, rs1, rs2 */
   3772  1.2.2.3    tls 		inst = (0x2 << 30) | (0x34 << 19) | (0x42 << 5)
   3773  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 25)
   3774  1.2.2.3    tls 			| (sljit_get_float_register_index(SLJIT_FLOAT_REG1) << 14)
   3775  1.2.2.3    tls 			| sljit_get_float_register_index(SLJIT_FLOAT_REG2);
   3776  1.2.2.3    tls 		sljit_emit_op_custom(compiler, &inst, sizeof(sljit_ui));
   3777  1.2.2.3    tls #endif
   3778  1.2.2.3    tls 		sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_d), SLJIT_FLOAT_REG1, 0);
   3779  1.2.2.3    tls 		sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   3780  1.2.2.3    tls 
   3781  1.2.2.3    tls 		code.code = sljit_generate_code(compiler);
   3782  1.2.2.3    tls 		CHECK(compiler);
   3783  1.2.2.3    tls 		sljit_free_compiler(compiler);
   3784  1.2.2.3    tls 
   3785  1.2.2.3    tls 		code.func1((sljit_sw)&buf);
   3786  1.2.2.3    tls 		FAILED(buf[2] != 11.25, "test41 case 3 failed\n");
   3787  1.2.2.3    tls 
   3788  1.2.2.3    tls 		sljit_free_code(code.code);
   3789  1.2.2.3    tls 	}
   3790  1.2.2.3    tls 
   3791  1.2.2.2  alnsn 	successful_tests++;
   3792  1.2.2.2  alnsn }
   3793  1.2.2.2  alnsn 
   3794  1.2.2.2  alnsn static void test42(void)
   3795  1.2.2.2  alnsn {
   3796  1.2.2.2  alnsn 	/* Test long multiply and division. */
   3797  1.2.2.2  alnsn 	executable_code code;
   3798  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3799  1.2.2.3    tls 	sljit_si i;
   3800  1.2.2.3    tls 	sljit_sw buf[7 + 8 + 4];
   3801  1.2.2.3    tls 
   3802  1.2.2.3    tls 	if (verbose)
   3803  1.2.2.3    tls 		printf("Run test42\n");
   3804  1.2.2.2  alnsn 
   3805  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3806  1.2.2.2  alnsn 	for (i = 0; i < 7 + 8; i++)
   3807  1.2.2.2  alnsn 		buf[i] = -1;
   3808  1.2.2.2  alnsn 
   3809  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 5, 5, 0);
   3810  1.2.2.2  alnsn 
   3811  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -0x1fb308a);
   3812  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG1, 0, SLJIT_IMM, 0xf50c873);
   3813  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_TEMPORARY_EREG2, 0, SLJIT_IMM, 0x8a0475b);
   3814  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG2, 0, SLJIT_IMM, 0x9dc849b);
   3815  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_IMM, -0x7c69a35);
   3816  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG1, 0, SLJIT_IMM, 0x5a4d0c4);
   3817  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SAVED_EREG2, 0, SLJIT_IMM, 0x9a3b06d);
   3818  1.2.2.2  alnsn 
   3819  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3820  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-0x5dc4f897b8cd67f5));
   3821  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x3f8b5c026cb088df));
   3822  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_UMUL);
   3823  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3824  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3825  1.2.2.2  alnsn 
   3826  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-0x5dc4f897b8cd67f5));
   3827  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x3f8b5c026cb088df));
   3828  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_SMUL);
   3829  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3830  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3831  1.2.2.2  alnsn 
   3832  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-0x5dc4f897b8cd67f5));
   3833  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x3f8b5c026cb088df));
   3834  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_UDIV);
   3835  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3836  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 12 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3837  1.2.2.2  alnsn 
   3838  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(-0x5dc4f897b8cd67f5));
   3839  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x3f8b5c026cb088df));
   3840  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_SDIV);
   3841  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 13 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3842  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 14 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3843  1.2.2.2  alnsn 
   3844  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x5cf783d3cf0a74b0));
   3845  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x3d5df42d03a28fc7));
   3846  1.2.2.3    tls 	sljit_emit_op0(compiler, SLJIT_IUDIV);
   3847  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   3848  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0);
   3849  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 15 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3850  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 16 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3851  1.2.2.3    tls 
   3852  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, SLJIT_W(0x371df5197ba26a28));
   3853  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, SLJIT_W(0x46c78a5cfd6a420c));
   3854  1.2.2.3    tls 	sljit_emit_op0(compiler, SLJIT_ISDIV);
   3855  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0);
   3856  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0);
   3857  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 17 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3858  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 18 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3859  1.2.2.2  alnsn 
   3860  1.2.2.2  alnsn #else
   3861  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -0x58cd67f5);
   3862  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x3cb088df);
   3863  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_UMUL);
   3864  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3865  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3866  1.2.2.2  alnsn 
   3867  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -0x58cd67f5);
   3868  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x3cb088df);
   3869  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_SMUL);
   3870  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3871  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3872  1.2.2.2  alnsn 
   3873  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -0x58cd67f5);
   3874  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x3cb088df);
   3875  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_UDIV);
   3876  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3877  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 12 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3878  1.2.2.2  alnsn 
   3879  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, -0x58cd67f5);
   3880  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x3cb088df);
   3881  1.2.2.2  alnsn 	sljit_emit_op0(compiler, SLJIT_SDIV);
   3882  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 13 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3883  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 14 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3884  1.2.2.2  alnsn 
   3885  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xcf0a74b0);
   3886  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0x03a28fc7);
   3887  1.2.2.3    tls 	sljit_emit_op0(compiler, SLJIT_IUDIV);
   3888  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 15 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3889  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 16 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3890  1.2.2.3    tls 
   3891  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x7ba26a28);
   3892  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, (sljit_sw)0xfd6a420c);
   3893  1.2.2.3    tls 	sljit_emit_op0(compiler, SLJIT_ISDIV);
   3894  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 17 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   3895  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 18 * sizeof(sljit_sw), SLJIT_SCRATCH_REG2, 0);
   3896  1.2.2.3    tls #endif
   3897  1.2.2.3    tls 
   3898  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG3, 0);
   3899  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_TEMPORARY_EREG1, 0);
   3900  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_TEMPORARY_EREG2, 0);
   3901  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_sw), SLJIT_SAVED_REG2, 0);
   3902  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_sw), SLJIT_SAVED_REG3, 0);
   3903  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_sw), SLJIT_SAVED_EREG1, 0);
   3904  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_sw), SLJIT_SAVED_EREG2, 0);
   3905  1.2.2.2  alnsn 
   3906  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   3907  1.2.2.2  alnsn 
   3908  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   3909  1.2.2.2  alnsn 	CHECK(compiler);
   3910  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   3911  1.2.2.2  alnsn 
   3912  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   3913  1.2.2.2  alnsn 
   3914  1.2.2.2  alnsn 	FAILED(buf[0] != -0x1fb308a, "test42 case 1 failed\n");
   3915  1.2.2.2  alnsn 	FAILED(buf[1] != 0xf50c873, "test42 case 2 failed\n");
   3916  1.2.2.2  alnsn 	FAILED(buf[2] != 0x8a0475b, "test42 case 3 failed\n");
   3917  1.2.2.2  alnsn 	FAILED(buf[3] != 0x9dc849b, "test42 case 4 failed\n");
   3918  1.2.2.2  alnsn 	FAILED(buf[4] != -0x7c69a35, "test42 case 5 failed\n");
   3919  1.2.2.2  alnsn 	FAILED(buf[5] != 0x5a4d0c4, "test42 case 6 failed\n");
   3920  1.2.2.2  alnsn 	FAILED(buf[6] != 0x9a3b06d, "test42 case 7 failed\n");
   3921  1.2.2.2  alnsn 
   3922  1.2.2.2  alnsn #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   3923  1.2.2.2  alnsn 	FAILED(buf[7] != SLJIT_W(-4388959407985636971), "test42 case 8 failed\n");
   3924  1.2.2.2  alnsn 	FAILED(buf[8] != SLJIT_W(2901680654366567099), "test42 case 9 failed\n");
   3925  1.2.2.2  alnsn 	FAILED(buf[9] != SLJIT_W(-4388959407985636971), "test42 case 10 failed\n");
   3926  1.2.2.2  alnsn 	FAILED(buf[10] != SLJIT_W(-1677173957268872740), "test42 case 11 failed\n");
   3927  1.2.2.2  alnsn 	FAILED(buf[11] != SLJIT_W(2), "test42 case 12 failed\n");
   3928  1.2.2.2  alnsn 	FAILED(buf[12] != SLJIT_W(2532236178951865933), "test42 case 13 failed\n");
   3929  1.2.2.2  alnsn 	FAILED(buf[13] != SLJIT_W(-1), "test42 case 14 failed\n");
   3930  1.2.2.2  alnsn 	FAILED(buf[14] != SLJIT_W(-2177944059851366166), "test42 case 15 failed\n");
   3931  1.2.2.2  alnsn #else
   3932  1.2.2.2  alnsn 	FAILED(buf[7] != -1587000939, "test42 case 8 failed\n");
   3933  1.2.2.2  alnsn 	FAILED(buf[8] != 665003983, "test42 case 9 failed\n");
   3934  1.2.2.2  alnsn 	FAILED(buf[9] != -1587000939, "test42 case 10 failed\n");
   3935  1.2.2.2  alnsn 	FAILED(buf[10] != -353198352, "test42 case 11 failed\n");
   3936  1.2.2.2  alnsn 	FAILED(buf[11] != 2, "test42 case 12 failed\n");
   3937  1.2.2.2  alnsn 	FAILED(buf[12] != 768706125, "test42 case 13 failed\n");
   3938  1.2.2.2  alnsn 	FAILED(buf[13] != -1, "test42 case 14 failed\n");
   3939  1.2.2.2  alnsn 	FAILED(buf[14] != -471654166, "test42 case 15 failed\n");
   3940  1.2.2.2  alnsn #endif
   3941  1.2.2.2  alnsn 
   3942  1.2.2.2  alnsn 	FAILED(buf[15] != SLJIT_W(56), "test42 case 16 failed\n");
   3943  1.2.2.2  alnsn 	FAILED(buf[16] != SLJIT_W(58392872), "test42 case 17 failed\n");
   3944  1.2.2.2  alnsn 	FAILED(buf[17] != SLJIT_W(-47), "test42 case 18 failed\n");
   3945  1.2.2.2  alnsn 	FAILED(buf[18] != SLJIT_W(35949148), "test42 case 19 failed\n");
   3946  1.2.2.3    tls 
   3947  1.2.2.3    tls 	sljit_free_code(code.code);
   3948  1.2.2.2  alnsn 	successful_tests++;
   3949  1.2.2.2  alnsn }
   3950  1.2.2.2  alnsn 
   3951  1.2.2.2  alnsn static void test43(void)
   3952  1.2.2.2  alnsn {
   3953  1.2.2.2  alnsn 	/* Test floating point compare. */
   3954  1.2.2.2  alnsn 	executable_code code;
   3955  1.2.2.2  alnsn 	struct sljit_compiler* compiler = sljit_create_compiler();
   3956  1.2.2.2  alnsn 	struct sljit_jump* jump;
   3957  1.2.2.2  alnsn 
   3958  1.2.2.2  alnsn 	union {
   3959  1.2.2.3    tls 		sljit_d value;
   3960  1.2.2.2  alnsn 		struct {
   3961  1.2.2.3    tls 			sljit_ui value1;
   3962  1.2.2.3    tls 			sljit_ui value2;
   3963  1.2.2.2  alnsn 		} u;
   3964  1.2.2.2  alnsn 	} dbuf[4];
   3965  1.2.2.2  alnsn 
   3966  1.2.2.3    tls 	if (verbose)
   3967  1.2.2.3    tls 		printf("Run test43\n");
   3968  1.2.2.3    tls 
   3969  1.2.2.2  alnsn 	if (!sljit_is_fpu_available()) {
   3970  1.2.2.2  alnsn 		printf("no fpu available, test43 skipped\n");
   3971  1.2.2.2  alnsn 		successful_tests++;
   3972  1.2.2.2  alnsn 		if (compiler)
   3973  1.2.2.2  alnsn 			sljit_free_compiler(compiler);
   3974  1.2.2.2  alnsn 		return;
   3975  1.2.2.2  alnsn 	}
   3976  1.2.2.2  alnsn 
   3977  1.2.2.2  alnsn 	FAILED(!compiler, "cannot create compiler\n");
   3978  1.2.2.2  alnsn 
   3979  1.2.2.2  alnsn 	dbuf[0].value = 12.125;
   3980  1.2.2.2  alnsn 	/* a NaN */
   3981  1.2.2.2  alnsn 	dbuf[1].u.value1 = 0x7fffffff;
   3982  1.2.2.2  alnsn 	dbuf[1].u.value2 = 0x7fffffff;
   3983  1.2.2.2  alnsn 	dbuf[2].value = -13.5;
   3984  1.2.2.2  alnsn 	dbuf[3].value = 12.125;
   3985  1.2.2.2  alnsn 
   3986  1.2.2.2  alnsn 	sljit_emit_enter(compiler, 1, 1, 1, 0);
   3987  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   3988  1.2.2.2  alnsn 	/* dbuf[0] < dbuf[2] -> -2 */
   3989  1.2.2.3    tls 	jump = sljit_emit_fcmp(compiler, SLJIT_C_FLOAT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), SLJIT_DOUBLE_SHIFT);
   3990  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_IMM, -2);
   3991  1.2.2.2  alnsn 
   3992  1.2.2.2  alnsn 	sljit_set_label(jump, sljit_emit_label(compiler));
   3993  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   3994  1.2.2.2  alnsn 	/* dbuf[0] and dbuf[1] is not NaN -> 5 */
   3995  1.2.2.3    tls 	jump = sljit_emit_fcmp(compiler, SLJIT_C_FLOAT_UNORDERED, SLJIT_MEM0(), (sljit_sw)&dbuf[1], SLJIT_FLOAT_REG2, 0);
   3996  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_IMM, 5);
   3997  1.2.2.2  alnsn 
   3998  1.2.2.2  alnsn 	sljit_set_label(jump, sljit_emit_label(compiler));
   3999  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVD, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_d));
   4000  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, 11);
   4001  1.2.2.2  alnsn 	/* dbuf[0] == dbuf[3] -> 11 */
   4002  1.2.2.2  alnsn 	jump = sljit_emit_fcmp(compiler, SLJIT_C_FLOAT_EQUAL, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_FLOAT_REG3, 0);
   4003  1.2.2.2  alnsn 
   4004  1.2.2.2  alnsn 	/* else -> -17 */
   4005  1.2.2.2  alnsn 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, -17);
   4006  1.2.2.2  alnsn 	sljit_set_label(jump, sljit_emit_label(compiler));
   4007  1.2.2.2  alnsn 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   4008  1.2.2.2  alnsn 
   4009  1.2.2.2  alnsn 	code.code = sljit_generate_code(compiler);
   4010  1.2.2.2  alnsn 	CHECK(compiler);
   4011  1.2.2.2  alnsn 	sljit_free_compiler(compiler);
   4012  1.2.2.2  alnsn 
   4013  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&dbuf) != 11, "test43 case 1 failed\n");
   4014  1.2.2.2  alnsn 	dbuf[3].value = 12;
   4015  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&dbuf) != -17, "test43 case 2 failed\n");
   4016  1.2.2.2  alnsn 	dbuf[1].value = 0;
   4017  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&dbuf) != 5, "test43 case 3 failed\n");
   4018  1.2.2.2  alnsn 	dbuf[2].value = 20;
   4019  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&dbuf) != -2, "test43 case 4 failed\n");
   4020  1.2.2.2  alnsn 
   4021  1.2.2.3    tls 	sljit_free_code(code.code);
   4022  1.2.2.2  alnsn 	successful_tests++;
   4023  1.2.2.2  alnsn }
   4024  1.2.2.2  alnsn 
   4025  1.2.2.3    tls static void test44(void)
   4026  1.2.2.2  alnsn {
   4027  1.2.2.3    tls 	/* Test mov. */
   4028  1.2.2.3    tls 	executable_code code;
   4029  1.2.2.3    tls 	struct sljit_compiler* compiler = sljit_create_compiler();
   4030  1.2.2.3    tls 	void *buf[5];
   4031  1.2.2.3    tls 
   4032  1.2.2.3    tls 	if (verbose)
   4033  1.2.2.3    tls 		printf("Run test44\n");
   4034  1.2.2.3    tls 
   4035  1.2.2.3    tls 	FAILED(!compiler, "cannot create compiler\n");
   4036  1.2.2.3    tls 
   4037  1.2.2.3    tls 	buf[0] = buf + 2;
   4038  1.2.2.3    tls 	buf[1] = NULL;
   4039  1.2.2.3    tls 	buf[2] = NULL;
   4040  1.2.2.3    tls 	buf[3] = NULL;
   4041  1.2.2.3    tls 	buf[4] = NULL;
   4042  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 3, 2, 0);
   4043  1.2.2.3    tls 
   4044  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_P, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4045  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_P, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_p), SLJIT_SCRATCH_REG1, 0);
   4046  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_p));
   4047  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 2);
   4048  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_P, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG2), SLJIT_POINTER_SHIFT, SLJIT_SCRATCH_REG1, 0);
   4049  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, sizeof(sljit_p));
   4050  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 3);
   4051  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG1, 0);
   4052  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOVU_P, SLJIT_MEM2(SLJIT_SCRATCH_REG3, SLJIT_SCRATCH_REG2), SLJIT_POINTER_SHIFT, SLJIT_SCRATCH_REG1, 0);
   4053  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2 * sizeof(sljit_p));
   4054  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_P, SLJIT_MEM1(SLJIT_SCRATCH_REG3), sizeof(sljit_p), SLJIT_SCRATCH_REG1, 0);
   4055  1.2.2.3    tls 
   4056  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0);
   4057  1.2.2.3    tls 
   4058  1.2.2.3    tls 	code.code = sljit_generate_code(compiler);
   4059  1.2.2.3    tls 	CHECK(compiler);
   4060  1.2.2.3    tls 	sljit_free_compiler(compiler);
   4061  1.2.2.3    tls 
   4062  1.2.2.3    tls 	FAILED(code.func1((sljit_sw)&buf) != (sljit_sw)(buf + 2), "test44 case 1 failed\n");
   4063  1.2.2.3    tls 	FAILED(buf[1] != buf + 2, "test44 case 2 failed\n");
   4064  1.2.2.3    tls 	FAILED(buf[2] != buf + 3, "test44 case 3 failed\n");
   4065  1.2.2.3    tls 	FAILED(buf[3] != buf + 4, "test44 case 4 failed\n");
   4066  1.2.2.3    tls 	FAILED(buf[4] != buf + 2, "test44 case 5 failed\n");
   4067  1.2.2.3    tls 
   4068  1.2.2.3    tls 	sljit_free_code(code.code);
   4069  1.2.2.3    tls 	successful_tests++;
   4070  1.2.2.3    tls }
   4071  1.2.2.3    tls 
   4072  1.2.2.3    tls static void test45(void)
   4073  1.2.2.3    tls {
   4074  1.2.2.3    tls 	/* Test single precision floating point. */
   4075  1.2.2.3    tls 
   4076  1.2.2.3    tls 	executable_code code;
   4077  1.2.2.3    tls 	struct sljit_compiler* compiler = sljit_create_compiler();
   4078  1.2.2.3    tls 	sljit_s buf[12];
   4079  1.2.2.3    tls 	sljit_sw buf2[6];
   4080  1.2.2.3    tls 	struct sljit_jump* jump;
   4081  1.2.2.3    tls 
   4082  1.2.2.3    tls 	if (verbose)
   4083  1.2.2.3    tls 		printf("Run test45\n");
   4084  1.2.2.3    tls 
   4085  1.2.2.3    tls 	if (!sljit_is_fpu_available()) {
   4086  1.2.2.3    tls 		printf("no fpu available, test45 skipped\n");
   4087  1.2.2.3    tls 		successful_tests++;
   4088  1.2.2.3    tls 		if (compiler)
   4089  1.2.2.3    tls 			sljit_free_compiler(compiler);
   4090  1.2.2.3    tls 		return;
   4091  1.2.2.3    tls 	}
   4092  1.2.2.3    tls 
   4093  1.2.2.3    tls 	FAILED(!compiler, "cannot create compiler\n");
   4094  1.2.2.3    tls 
   4095  1.2.2.3    tls 	buf[0] = 5.5;
   4096  1.2.2.3    tls 	buf[1] = -7.25;
   4097  1.2.2.3    tls 	buf[2] = 0;
   4098  1.2.2.3    tls 	buf[3] = 0;
   4099  1.2.2.3    tls 	buf[4] = 0;
   4100  1.2.2.3    tls 	buf[5] = 0;
   4101  1.2.2.3    tls 	buf[6] = 0;
   4102  1.2.2.3    tls 	buf[7] = 8.75;
   4103  1.2.2.3    tls 	buf[8] = 0;
   4104  1.2.2.3    tls 	buf[9] = 16.5;
   4105  1.2.2.3    tls 	buf[10] = 0;
   4106  1.2.2.3    tls 	buf[11] = 0;
   4107  1.2.2.3    tls 
   4108  1.2.2.3    tls 	buf2[0] = -1;
   4109  1.2.2.3    tls 	buf2[1] = -1;
   4110  1.2.2.3    tls 	buf2[2] = -1;
   4111  1.2.2.3    tls 	buf2[3] = -1;
   4112  1.2.2.3    tls 	buf2[4] = -1;
   4113  1.2.2.3    tls 	buf2[5] = -1;
   4114  1.2.2.3    tls 
   4115  1.2.2.3    tls 	sljit_emit_enter(compiler, 2, 3, 2, 0);
   4116  1.2.2.3    tls 
   4117  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4118  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_FLOAT_REG6, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_s));
   4119  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_NEGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_s), SLJIT_FLOAT_REG1, 0);
   4120  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSS, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG6, 0);
   4121  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_MEM1(SLJIT_SAVED_REG1), 3 * sizeof(sljit_s), SLJIT_FLOAT_REG2, 0);
   4122  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSS, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_s), SLJIT_FLOAT_REG6, 0);
   4123  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_NEGS, SLJIT_FLOAT_REG5, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4124  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_MEM1(SLJIT_SAVED_REG1), 5 * sizeof(sljit_s), SLJIT_FLOAT_REG5, 0);
   4125  1.2.2.3    tls 
   4126  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_ADDS, SLJIT_FLOAT_REG1, 0, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_s));
   4127  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_s), SLJIT_FLOAT_REG1, 0);
   4128  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_SUBS, SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_s), SLJIT_MEM1(SLJIT_SAVED_REG1), 7 * sizeof(sljit_s), SLJIT_FLOAT_REG6, 0);
   4129  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_FLOAT_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4130  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_MULS, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_s), SLJIT_FLOAT_REG1, 0, SLJIT_FLOAT_REG1, 0);
   4131  1.2.2.3    tls 	sljit_emit_fop2(compiler, SLJIT_DIVS, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_s), SLJIT_FLOAT_REG1, 0);
   4132  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSS, SLJIT_MEM1(SLJIT_SAVED_REG1), 9 * sizeof(sljit_s), SLJIT_FLOAT_REG3, 0);
   4133  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 0x3d0ac);
   4134  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_NEGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_s), SLJIT_MEM1(SLJIT_SCRATCH_REG1), 0x3d0ac);
   4135  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_ADD, SLJIT_SCRATCH_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, 0x3d0ac + sizeof(sljit_s));
   4136  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_ABSS, SLJIT_MEM1(SLJIT_SAVED_REG1), 11 * sizeof(sljit_s), SLJIT_MEM1(SLJIT_SCRATCH_REG1), -0x3d0ac);
   4137  1.2.2.3    tls 
   4138  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4139  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_MOVS, SLJIT_FLOAT_REG3, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_s));
   4140  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPS | SLJIT_SET_E | SLJIT_SET_S, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0);
   4141  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG2), 0, SLJIT_C_FLOAT_EQUAL);
   4142  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG2), sizeof(sljit_sw), SLJIT_C_FLOAT_LESS);
   4143  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPS | SLJIT_SET_E, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG3, 0);
   4144  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG2), 2 * sizeof(sljit_sw), SLJIT_C_FLOAT_EQUAL);
   4145  1.2.2.3    tls 	sljit_emit_fop1(compiler, SLJIT_CMPS | SLJIT_SET_S, SLJIT_FLOAT_REG2, 0, SLJIT_FLOAT_REG3, 0);
   4146  1.2.2.3    tls 	cond_set(compiler, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw), SLJIT_C_FLOAT_GREATER_EQUAL);
   4147  1.2.2.3    tls 
   4148  1.2.2.3    tls 	jump = sljit_emit_fcmp(compiler, SLJIT_C_FLOAT_LESS_EQUAL | SLJIT_SINGLE_OP, SLJIT_FLOAT_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_s));
   4149  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 4 * sizeof(sljit_sw), SLJIT_IMM, 7);
   4150  1.2.2.3    tls 	sljit_set_label(jump, sljit_emit_label(compiler));
   4151  1.2.2.3    tls 
   4152  1.2.2.3    tls 	jump = sljit_emit_fcmp(compiler, SLJIT_C_FLOAT_GREATER | SLJIT_SINGLE_OP, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_FLOAT_REG3, 0);
   4153  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 5 * sizeof(sljit_sw), SLJIT_IMM, 6);
   4154  1.2.2.3    tls 	sljit_set_label(jump, sljit_emit_label(compiler));
   4155  1.2.2.3    tls 
   4156  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0);
   4157  1.2.2.3    tls 
   4158  1.2.2.3    tls 	code.code = sljit_generate_code(compiler);
   4159  1.2.2.3    tls 	CHECK(compiler);
   4160  1.2.2.3    tls 	sljit_free_compiler(compiler);
   4161  1.2.2.3    tls 
   4162  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&buf2);
   4163  1.2.2.3    tls 	FAILED(buf[2] != -5.5, "test45 case 1 failed\n");
   4164  1.2.2.3    tls 	FAILED(buf[3] != 7.25, "test45 case 2 failed\n");
   4165  1.2.2.3    tls 	FAILED(buf[4] != 7.25, "test45 case 3 failed\n");
   4166  1.2.2.3    tls 	FAILED(buf[5] != -5.5, "test45 case 4 failed\n");
   4167  1.2.2.3    tls 	FAILED(buf[6] != -1.75, "test45 case 5 failed\n");
   4168  1.2.2.3    tls 	FAILED(buf[7] != 16.0, "test45 case 6 failed\n");
   4169  1.2.2.3    tls 	FAILED(buf[8] != 30.25, "test45 case 7 failed\n");
   4170  1.2.2.3    tls 	FAILED(buf[9] != 3, "test45 case 8 failed\n");
   4171  1.2.2.3    tls 	FAILED(buf[10] != -5.5, "test45 case 9 failed\n");
   4172  1.2.2.3    tls 	FAILED(buf[11] != 7.25, "test45 case 10 failed\n");
   4173  1.2.2.3    tls 	FAILED(buf2[0] != 1, "test45 case 11 failed\n");
   4174  1.2.2.3    tls 	FAILED(buf2[1] != 2, "test45 case 12 failed\n");
   4175  1.2.2.3    tls 	FAILED(buf2[2] != 2, "test45 case 13 failed\n");
   4176  1.2.2.3    tls 	FAILED(buf2[3] != 1, "test45 case 14 failed\n");
   4177  1.2.2.3    tls 	FAILED(buf2[4] != 7, "test45 case 15 failed\n");
   4178  1.2.2.3    tls 	FAILED(buf2[5] != -1, "test45 case 16 failed\n");
   4179  1.2.2.3    tls 
   4180  1.2.2.3    tls 	sljit_free_code(code.code);
   4181  1.2.2.3    tls 	successful_tests++;
   4182  1.2.2.3    tls }
   4183  1.2.2.3    tls 
   4184  1.2.2.3    tls static void test46(void)
   4185  1.2.2.3    tls {
   4186  1.2.2.3    tls 	/* Test sljit_emit_op_flags with 32 bit operations. */
   4187  1.2.2.3    tls 
   4188  1.2.2.3    tls 	executable_code code;
   4189  1.2.2.3    tls 	struct sljit_compiler* compiler = sljit_create_compiler();
   4190  1.2.2.3    tls 	sljit_si buf[24];
   4191  1.2.2.3    tls 	sljit_sw buf2[6];
   4192  1.2.2.3    tls 	sljit_si i;
   4193  1.2.2.3    tls 
   4194  1.2.2.3    tls 	if (verbose)
   4195  1.2.2.3    tls 		printf("Run test46\n");
   4196  1.2.2.3    tls 
   4197  1.2.2.3    tls 	for (i = 0; i < 24; ++i)
   4198  1.2.2.3    tls 		buf[i] = -17;
   4199  1.2.2.3    tls 	buf[16] = 0;
   4200  1.2.2.3    tls 	for (i = 0; i < 6; ++i)
   4201  1.2.2.3    tls 		buf2[i] = -13;
   4202  1.2.2.3    tls 	buf2[4] = -124;
   4203  1.2.2.3    tls 
   4204  1.2.2.3    tls 	sljit_emit_enter(compiler, 2, 3, 3, 0);
   4205  1.2.2.3    tls 
   4206  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -7);
   4207  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 13);
   4208  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV_SI, SLJIT_MEM0(), (sljit_sw)&buf, SLJIT_UNUSED, 0, SLJIT_C_LESS);
   4209  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_si), SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_si), SLJIT_C_GREATER);
   4210  1.2.2.3    tls 
   4211  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -7);
   4212  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_si), SLJIT_MEM1(SLJIT_SAVED_REG1), 4 * sizeof(sljit_si), SLJIT_C_EQUAL);
   4213  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_si), SLJIT_MEM1(SLJIT_SAVED_REG1), 6 * sizeof(sljit_si), SLJIT_C_EQUAL);
   4214  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x1235);
   4215  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND | SLJIT_SET_E, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_C_EQUAL);
   4216  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND, SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_si), SLJIT_MEM1(SLJIT_SAVED_REG1), 8 * sizeof(sljit_si), SLJIT_C_EQUAL);
   4217  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_UI, SLJIT_MEM1(SLJIT_SAVED_REG1), 10 * sizeof(sljit_si), SLJIT_SCRATCH_REG1, 0);
   4218  1.2.2.3    tls 
   4219  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -7);
   4220  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 12);
   4221  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV_UI, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 2, SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
   4222  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IMOV, SLJIT_SCRATCH_REG1, 0, SLJIT_UNUSED, 0, SLJIT_C_EQUAL);
   4223  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_SAVED_REG1), 14 * sizeof(sljit_si), SLJIT_SCRATCH_REG1, 0);
   4224  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 16);
   4225  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IAND | SLJIT_SET_E, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 2, SLJIT_MEM2(SLJIT_SAVED_REG1, SLJIT_SCRATCH_REG1), 2, SLJIT_C_EQUAL);
   4226  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV_UI, SLJIT_MEM1(SLJIT_SAVED_REG1), 18 * sizeof(sljit_si), SLJIT_UNUSED, 0, SLJIT_C_NOT_EQUAL);
   4227  1.2.2.3    tls 
   4228  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -7);
   4229  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IXOR | SLJIT_KEEP_FLAGS, SLJIT_MEM1(SLJIT_SAVED_REG1), 20 * sizeof(sljit_si), SLJIT_MEM1(SLJIT_SAVED_REG1), 20 * sizeof(sljit_si), SLJIT_C_EQUAL);
   4230  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 39);
   4231  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_IXOR, SLJIT_SCRATCH_REG1, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_C_EQUAL);
   4232  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV_SI | SLJIT_INT_OP, SLJIT_MEM1(SLJIT_SAVED_REG1), 22 * sizeof(sljit_si), SLJIT_SCRATCH_REG1, 0);
   4233  1.2.2.3    tls 
   4234  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, -7);
   4235  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_AND, SLJIT_MEM0(), (sljit_sw)&buf2, SLJIT_MEM0(), (sljit_sw)&buf2, SLJIT_C_GREATER);
   4236  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_E | SLJIT_SET_S | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 5);
   4237  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 1);
   4238  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_AND | SLJIT_KEEP_FLAGS, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_C_SIG_LESS);
   4239  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 2);
   4240  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_MEM2(SLJIT_SAVED_REG2, SLJIT_SCRATCH_REG1), SLJIT_WORD_SHIFT, SLJIT_UNUSED, 0, SLJIT_C_LESS);
   4241  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_UNUSED, 0, SLJIT_C_NOT_EQUAL);
   4242  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG2), 3 * sizeof(sljit_sw), SLJIT_SAVED_REG3, 0);
   4243  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_OR, SLJIT_MEM1(SLJIT_SAVED_REG2), 4 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG2), 4 * sizeof(sljit_sw), SLJIT_C_GREATER);
   4244  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 0);
   4245  1.2.2.3    tls 	sljit_emit_op_flags(compiler, SLJIT_XOR, SLJIT_MEM1(SLJIT_SAVED_REG2), 5 * sizeof(sljit_sw), SLJIT_MEM1(SLJIT_SAVED_REG2), 5 * sizeof(sljit_sw), SLJIT_C_GREATER);
   4246  1.2.2.3    tls 
   4247  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_UNUSED, 0, 0);
   4248  1.2.2.3    tls 
   4249  1.2.2.3    tls 	code.code = sljit_generate_code(compiler);
   4250  1.2.2.3    tls 	CHECK(compiler);
   4251  1.2.2.3    tls 	sljit_free_compiler(compiler);
   4252  1.2.2.3    tls 
   4253  1.2.2.3    tls 	code.func2((sljit_sw)&buf, (sljit_sw)&buf2);
   4254  1.2.2.3    tls 	FAILED(buf[0] != 0, "test46 case 1 failed\n");
   4255  1.2.2.3    tls 	FAILED(buf[1] != -17, "test46 case 2 failed\n");
   4256  1.2.2.3    tls 	FAILED(buf[2] != 1, "test46 case 3 failed\n");
   4257  1.2.2.3    tls 	FAILED(buf[3] != -17, "test46 case 4 failed\n");
   4258  1.2.2.3    tls 	FAILED(buf[4] != 1, "test46 case 5 failed\n");
   4259  1.2.2.3    tls 	FAILED(buf[5] != -17, "test46 case 6 failed\n");
   4260  1.2.2.3    tls 	FAILED(buf[6] != 1, "test46 case 7 failed\n");
   4261  1.2.2.3    tls 	FAILED(buf[7] != -17, "test46 case 8 failed\n");
   4262  1.2.2.3    tls 	FAILED(buf[8] != 0, "test46 case 9 failed\n");
   4263  1.2.2.3    tls 	FAILED(buf[9] != -17, "test46 case 10 failed\n");
   4264  1.2.2.3    tls 	FAILED(buf[10] != 1, "test46 case 11 failed\n");
   4265  1.2.2.3    tls 	FAILED(buf[11] != -17, "test46 case 12 failed\n");
   4266  1.2.2.3    tls 	FAILED(buf[12] != 1, "test46 case 13 failed\n");
   4267  1.2.2.3    tls 	FAILED(buf[13] != -17, "test46 case 14 failed\n");
   4268  1.2.2.3    tls 	FAILED(buf[14] != 1, "test46 case 15 failed\n");
   4269  1.2.2.3    tls 	FAILED(buf[15] != -17, "test46 case 16 failed\n");
   4270  1.2.2.3    tls 	FAILED(buf[16] != 0, "test46 case 17 failed\n");
   4271  1.2.2.3    tls 	FAILED(buf[17] != -17, "test46 case 18 failed\n");
   4272  1.2.2.3    tls 	FAILED(buf[18] != 0, "test46 case 19 failed\n");
   4273  1.2.2.3    tls 	FAILED(buf[19] != -17, "test46 case 20 failed\n");
   4274  1.2.2.3    tls 	FAILED(buf[20] != -18, "test46 case 21 failed\n");
   4275  1.2.2.3    tls 	FAILED(buf[21] != -17, "test46 case 22 failed\n");
   4276  1.2.2.3    tls 	FAILED(buf[22] != 38, "test46 case 23 failed\n");
   4277  1.2.2.3    tls 	FAILED(buf[23] != -17, "test46 case 24 failed\n");
   4278  1.2.2.3    tls 
   4279  1.2.2.3    tls 	FAILED(buf2[0] != 0, "test46 case 25 failed\n");
   4280  1.2.2.3    tls 	FAILED(buf2[1] != 1, "test46 case 26 failed\n");
   4281  1.2.2.3    tls 	FAILED(buf2[2] != 0, "test46 case 27 failed\n");
   4282  1.2.2.3    tls 	FAILED(buf2[3] != 1, "test46 case 28 failed\n");
   4283  1.2.2.3    tls 	FAILED(buf2[4] != -123, "test46 case 29 failed\n");
   4284  1.2.2.3    tls 	FAILED(buf2[5] != -14, "test46 case 30 failed\n");
   4285  1.2.2.3    tls 
   4286  1.2.2.3    tls 	sljit_free_code(code.code);
   4287  1.2.2.3    tls 	successful_tests++;
   4288  1.2.2.3    tls }
   4289  1.2.2.3    tls 
   4290  1.2.2.3    tls static void test47(void)
   4291  1.2.2.3    tls {
   4292  1.2.2.3    tls 	/* Test jump optimizations. */
   4293  1.2.2.3    tls 	executable_code code;
   4294  1.2.2.3    tls 	struct sljit_compiler* compiler = sljit_create_compiler();
   4295  1.2.2.3    tls 	sljit_sw buf[3];
   4296  1.2.2.3    tls 
   4297  1.2.2.3    tls 	if (verbose)
   4298  1.2.2.3    tls 		printf("Run test47\n");
   4299  1.2.2.3    tls 
   4300  1.2.2.3    tls 	FAILED(!compiler, "cannot create compiler\n");
   4301  1.2.2.3    tls 	buf[0] = 0;
   4302  1.2.2.3    tls 	buf[1] = 0;
   4303  1.2.2.3    tls 	buf[2] = 0;
   4304  1.2.2.3    tls 
   4305  1.2.2.3    tls 	sljit_emit_enter(compiler, 1, 3, 1, 0);
   4306  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x3a5c6f);
   4307  1.2.2.3    tls 	sljit_emit_op2(compiler, SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 3);
   4308  1.2.2.3    tls 	sljit_set_target(sljit_emit_jump(compiler, SLJIT_C_LESS), 0x11223344);
   4309  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
   4310  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0xd37c10);
   4311  1.2.2.3    tls #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   4312  1.2.2.3    tls 	sljit_set_target(sljit_emit_jump(compiler, SLJIT_C_LESS), SLJIT_W(0x112233445566));
   4313  1.2.2.3    tls #endif
   4314  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   4315  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_IMM, 0x59b48e);
   4316  1.2.2.3    tls #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   4317  1.2.2.3    tls 	sljit_set_target(sljit_emit_jump(compiler, SLJIT_C_LESS), SLJIT_W(0x1122334455667788));
   4318  1.2.2.3    tls #endif
   4319  1.2.2.3    tls 	sljit_emit_op1(compiler, SLJIT_MOV, SLJIT_MEM1(SLJIT_SAVED_REG1), 2 * sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
   4320  1.2.2.3    tls 	sljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);
   4321  1.2.2.3    tls 
   4322  1.2.2.3    tls 	code.code = sljit_generate_code(compiler);
   4323  1.2.2.3    tls 	CHECK(compiler);
   4324  1.2.2.3    tls 	sljit_free_compiler(compiler);
   4325  1.2.2.3    tls 
   4326  1.2.2.3    tls 	code.func1((sljit_sw)&buf);
   4327  1.2.2.3    tls 	FAILED(buf[0] != 0x3a5c6f, "test47 case 1 failed\n");
   4328  1.2.2.3    tls 	FAILED(buf[1] != 0xd37c10, "test47 case 2 failed\n");
   4329  1.2.2.3    tls 	FAILED(buf[2] != 0x59b48e, "test47 case 3 failed\n");
   4330  1.2.2.3    tls 
   4331  1.2.2.3    tls 	sljit_free_code(code.code);
   4332  1.2.2.3    tls 	successful_tests++;
   4333  1.2.2.3    tls }
   4334  1.2.2.3    tls 
   4335  1.2.2.3    tls void sljit_test(int argc, char* argv[]);
   4336  1.2.2.3    tls void sljit_test(int argc, char* argv[])
   4337  1.2.2.3    tls {
   4338  1.2.2.3    tls 	sljit_si has_arg = (argc >= 2 && argv[1][0] == '-' && argv[1][2] == '\0');
   4339  1.2.2.3    tls 	verbose = has_arg && argv[1][1] == 'v';
   4340  1.2.2.3    tls 	silent = has_arg && argv[1][1] == 's';
   4341  1.2.2.3    tls 
   4342  1.2.2.3    tls 	if (!verbose && !silent)
   4343  1.2.2.3    tls 		printf("Pass -v to enable verbose, -s to disable this hint.\n\n");
   4344  1.2.2.3    tls 
   4345  1.2.2.2  alnsn #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)
   4346  1.2.2.2  alnsn 	test_exec_allocator();
   4347  1.2.2.2  alnsn #endif
   4348  1.2.2.2  alnsn 	test1();
   4349  1.2.2.2  alnsn 	test2();
   4350  1.2.2.2  alnsn 	test3();
   4351  1.2.2.2  alnsn 	test4();
   4352  1.2.2.2  alnsn 	test5();
   4353  1.2.2.2  alnsn 	test6();
   4354  1.2.2.2  alnsn 	test7();
   4355  1.2.2.2  alnsn 	test8();
   4356  1.2.2.2  alnsn 	test9();
   4357  1.2.2.2  alnsn 	test10();
   4358  1.2.2.2  alnsn 	test11();
   4359  1.2.2.2  alnsn 	test12();
   4360  1.2.2.2  alnsn 	test13();
   4361  1.2.2.2  alnsn 	test14();
   4362  1.2.2.2  alnsn 	test15();
   4363  1.2.2.2  alnsn 	test16();
   4364  1.2.2.2  alnsn 	test17();
   4365  1.2.2.2  alnsn 	test18();
   4366  1.2.2.2  alnsn 	test19();
   4367  1.2.2.2  alnsn 	test20();
   4368  1.2.2.2  alnsn 	test21();
   4369  1.2.2.2  alnsn 	test22();
   4370  1.2.2.2  alnsn 	test23();
   4371  1.2.2.2  alnsn 	test24();
   4372  1.2.2.2  alnsn 	test25();
   4373  1.2.2.2  alnsn 	test26();
   4374  1.2.2.2  alnsn 	test27();
   4375  1.2.2.2  alnsn 	test28();
   4376  1.2.2.2  alnsn 	test29();
   4377  1.2.2.2  alnsn 	test30();
   4378  1.2.2.2  alnsn 	test31();
   4379  1.2.2.2  alnsn 	test32();
   4380  1.2.2.2  alnsn 	test33();
   4381  1.2.2.2  alnsn 	test34();
   4382  1.2.2.2  alnsn 	test35();
   4383  1.2.2.2  alnsn 	test36();
   4384  1.2.2.2  alnsn 	test37();
   4385  1.2.2.2  alnsn 	test38();
   4386  1.2.2.2  alnsn 	test39();
   4387  1.2.2.2  alnsn 	test40();
   4388  1.2.2.2  alnsn 	test41();
   4389  1.2.2.2  alnsn 	test42();
   4390  1.2.2.2  alnsn 	test43();
   4391  1.2.2.3    tls 	test44();
   4392  1.2.2.3    tls 	test45();
   4393  1.2.2.3    tls 	test46();
   4394  1.2.2.3    tls 	test47();
   4395  1.2.2.3    tls 
   4396  1.2.2.3    tls #if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
   4397  1.2.2.3    tls 	sljit_free_unused_memory_exec();
   4398  1.2.2.3    tls #endif
   4399  1.2.2.3    tls 
   4400  1.2.2.3    tls 	printf("SLJIT tests: On " COLOR_ARCH "%s" COLOR_DEFAULT "%s: ", sljit_get_platform_name(), sljit_is_fpu_available() ? " (+fpu)" : "");
   4401  1.2.2.3    tls 	if (successful_tests == 47)
   4402  1.2.2.3    tls 		printf("All tests are " COLOR_GREEN "PASSED" COLOR_DEFAULT "!\n");
   4403  1.2.2.2  alnsn 	else
   4404  1.2.2.3    tls 		printf("Successful test ratio: " COLOR_RED "%d%%" COLOR_DEFAULT ".\n", successful_tests * 100 / 47);
   4405  1.2.2.2  alnsn }
   4406