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