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