53 *code_ptr++ = get_jump_code(type);
58 jump->
flags |= PATCH_MW;
73 check_sljit_emit_enter(compiler, args, scratches, saveds, local_size);
77 compiler->args = args;
78 compiler->flags_saved = 0;
79 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
83 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
84 size = 1 + (saveds <= 3 ? saveds : 3) + (args > 0 ? (args * 2) : 0) + (args > 2 ? 2 : 0);
86 size = 1 + (saveds <= 3 ? saveds : 3) + (args > 0 ? (2 + args * 3) : 0);
88 inst = (
sljit_ub*)ensure_buf(compiler, 1 + size);
93 #if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
106 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
119 *inst++ =
sizeof(
sljit_sw) * (3 + 2);
139 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
140 locals_offset = 2 *
sizeof(
sljit_uw);
143 locals_offset = FIXED_LOCALS_OFFSET;
145 compiler->scratches_start = locals_offset;
147 locals_offset += (scratches - 3) *
sizeof(
sljit_uw);
148 compiler->saveds_start = locals_offset;
150 locals_offset += (saveds - 3) *
sizeof(
sljit_uw);
151 compiler->locals_offset = locals_offset;
152 local_size = locals_offset + ((local_size +
sizeof(
sljit_uw) - 1) & ~(
sizeof(
sljit_uw) - 1));
156 if (local_size > 1024) {
157 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
160 local_size -= FIXED_LOCALS_OFFSET;
161 FAIL_IF(emit_do_imm(compiler,
MOV_r_i32 + reg_map[SLJIT_SCRATCH_REG1], local_size));
179 check_sljit_set_context(compiler, args, scratches, saveds, local_size);
182 compiler->
saveds = saveds;
183 compiler->args = args;
184 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
188 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
189 locals_offset = 2 *
sizeof(
sljit_uw);
191 locals_offset = FIXED_LOCALS_OFFSET;
193 compiler->scratches_start = locals_offset;
195 locals_offset += (scratches - 3) *
sizeof(
sljit_uw);
196 compiler->saveds_start = locals_offset;
198 locals_offset += (saveds - 3) *
sizeof(
sljit_uw);
199 compiler->locals_offset = locals_offset;
209 check_sljit_emit_return(compiler, op, src, srcw);
212 compiler->flags_saved = 0;
213 FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
219 size = 2 + (compiler->
saveds <= 3 ? compiler->
saveds : 3);
220 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
221 if (compiler->args > 2)
224 if (compiler->args > 0)
227 inst = (
sljit_ub*)ensure_buf(compiler, 1 + size);
239 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
240 if (compiler->args > 2)
273 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
276 SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3)
284 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
285 if (flags & (EX86_PREF_F2 | EX86_PREF_F3))
296 else if (immb != 0 && !(b & 0xf0)) {
298 if (immb <= 127 && immb >= -128)
314 if (imma <= 127 && imma >= -128) {
329 inst_size +=
sizeof(short);
336 inst = (
sljit_ub*)ensure_buf(compiler, 1 + inst_size);
341 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
342 if (flags & EX86_PREF_F2)
344 if (flags & EX86_PREF_F3)
347 if (flags & EX86_PREF_66)
350 buf_ptr = inst + size;
353 if (!(flags & EX86_SHIFT_INS)) {
354 if ((flags & EX86_BIN_INS) && (a & SLJIT_IMM))
357 if ((a & SLJIT_IMM) || (a == 0))
359 #if (defined SLJIT_SSE2 && SLJIT_SSE2)
360 else if (!(flags & EX86_SSE2))
361 *buf_ptr = reg_map[a] << 3;
366 *buf_ptr = reg_map[a] << 3;
380 if (!(b & SLJIT_MEM))
381 #
if (defined SLJIT_SSE2 && SLJIT_SSE2)
382 *buf_ptr++ |=
MOD_REG + ((!(flags & EX86_SSE2)) ? reg_map[b] : b);
384 *buf_ptr++ |=
MOD_REG + reg_map[b];
389 if (immb <= 127 && immb >= -128)
396 *buf_ptr++ |= reg_map[b & 0x0f];
399 *buf_ptr++ = reg_map[b & 0x0f] | (reg_map[(b >> 4) & 0x0f] << 3);
403 if (immb <= 127 && immb >= -128)
413 *buf_ptr++ = reg_map[b & 0x0f] | (reg_map[(b >> 4) & 0x0f] << 3) | (immb << 6);
423 if (flags & EX86_BYTE_ARG)
426 *(
short*)buf_ptr = imma;
427 else if (!(flags & EX86_SHIFT_INS))
442 #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL)
481 check_sljit_emit_fast_enter(compiler, dst, dstw);
492 inst = (
sljit_ub*)ensure_buf(compiler, 1 + 1);
501 inst = emit_x86_instruction(compiler, 1, 0, 0, dst, dstw);
512 check_sljit_emit_fast_return(compiler, src, srcw);
518 inst = (
sljit_ub*)ensure_buf(compiler, 1 + 1 + 1);
524 else if (src & SLJIT_MEM) {
525 inst = emit_x86_instruction(compiler, 1, 0, 0, src, srcw);
530 inst = (
sljit_ub*)ensure_buf(compiler, 1 + 1);
536 inst = (
sljit_ub*)ensure_buf(compiler, 1 + 5 + 1);