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