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