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