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