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