SLJIT_CPUINFO;
37 #define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) 38 #define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) 39 #define TMP_LR (SLJIT_NUMBER_OF_REGISTERS + 4) 40 #define TMP_FP (SLJIT_NUMBER_OF_REGISTERS + 5) 42 #define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1) 43 #define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) 4731, 0, 1, 2, 3, 4, 5, 6, 7, 11, 12, 13, 14, 15, 16, 17, 8, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 31, 9, 10, 30, 29
510, 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 14, 13, 12, 11, 10, 9, 8, 30, 31
54 #define W_OP ((sljit_ins)1 << 31) 55 #define RD(rd) ((sljit_ins)reg_map[rd]) 56 #define RT(rt) ((sljit_ins)reg_map[rt]) 57 #define RN(rn) ((sljit_ins)reg_map[rn] << 5) 58 #define RT2(rt2) ((sljit_ins)reg_map[rt2] << 10) 59 #define RM(rm) ((sljit_ins)reg_map[rm] << 16) 60 #define VD(vd) ((sljit_ins)freg_map[vd]) 61 #define VT(vt) ((sljit_ins)freg_map[vt]) 62 #define VT2(vt) ((sljit_ins)freg_map[vt] << 10) 63 #define VN(vn) ((sljit_ins)freg_map[vn] << 5) 64 #define VM(vm) ((sljit_ins)freg_map[vm] << 16) 70 #define ADC 0x9a000000 71 #define ADD 0x8b000000 72 #define ADDE 0x8b200000 73 #define ADDI 0x91000000 74 #define ADR 0x10000000 75 #define ADRP 0x90000000 76 #define AND 0x8a000000 77 #define ANDI 0x92000000 78 #define AND_v 0x0e201c00 79 #define ASRV 0x9ac02800 81 #define B_CC 0x54000000 83 #define BLR 0xd63f0000 85 #define BRK 0xd4200000 86 #define CAS 0xc8a07c00 87 #define CASB 0x08a07c00 88 #define CASH 0x48a07c00 89 #define CBZ 0xb4000000 90 #define CCMPI 0xfa400800 91 #define CLZ 0xdac01000 92 #define CSEL 0x9a800000 93 #define CSINC 0x9a800400 94 #define DUP_e 0x0e000400 95 #define DUP_g 0x0e000c00 96 #define EOR 0xca000000 97 #define EOR_v 0x2e201c00 98 #define EORI 0xd2000000 99 #define EXTR 0x93c00000 100 #define FABS 0x1e60c000 101 #define FADD 0x1e602800 102 #define FCMP 0x1e602000 103 #define FCSEL 0x1e600c00 104 #define FCVT 0x1e224000 105 #define FCVTL 0x0e217800 106 #define FCVTZS 0x9e780000 107 #define FDIV 0x1e601800 108 #define FMOV 0x1e604000 109 #define FMOV_R 0x9e660000 110 #define FMOV_I 0x1e601000 111 #define FMUL 0x1e600800 112 #define FNEG 0x1e614000 113 #define FSUB 0x1e603800 114 #define INS 0x4e001c00 115 #define INS_e 0x6e000400 116 #define LD1 0x0c407000 117 #define LD1_s 0x0d400000 118 #define LD1R 0x0d40c000 119 #define LDRI 0xf9400000 120 #define LDRI_F64 0xfd400000 121 #define LDRI_POST 0xf8400400 122 #define LDP 0xa9400000 123 #define LDP_F64 0x6d400000 124 #define LDP_POST 0xa8c00000 125 #define LDR_PRE 0xf8400c00 126 #define LDXR 0xc85f7c00 127 #define LDXRB 0x085f7c00 128 #define LDXRH 0x485f7c00 129 #define LSLV 0x9ac02000 130 #define LSRV 0x9ac02400 131 #define MADD 0x9b000000 132 #define MOVI 0x0f000400 133 #define MOVK 0xf2800000 134 #define MOVN 0x92800000 135 #define MOVZ 0xd2800000 136 #define NOP 0xd503201f 137 #define ORN 0xaa200000 138 #define ORR 0xaa000000 139 #define ORR_v 0x0ea01c00 140 #define ORRI 0xb2000000 141 #define RBIT 0xdac00000 142 #define RET 0xd65f0000 143 #define REV 0xdac00c00 144 #define REV16 0xdac00400 145 #define RORV 0x9ac02c00 146 #define SBC 0xda000000 147 #define SBFM 0x93400000 148 #define SCVTF 0x9e620000 149 #define SDIV 0x9ac00c00 150 #define SMADDL 0x9b200000 151 #define SMOV 0x0e002c00 152 #define SMULH 0x9b403c00 153 #define SSHLL 0x0f00a400 154 #define ST1 0x0c007000 155 #define ST1_s 0x0d000000 156 #define STP 0xa9000000 157 #define STP_F64 0x6d000000 158 #define STP_PRE 0xa9800000 159 #define STRB 0x38206800 160 #define STRBI 0x39000000 161 #define STRI 0xf9000000 162 #define STRI_F64 0xfd000000 163 #define STR_FI 0x3d000000 164 #define STR_FR 0x3c206800 165 #define STUR_FI 0x3c000000 166 #define STURBI 0x38000000 167 #define STXR 0xc8007c00 168 #define STXRB 0x8007c00 169 #define STXRH 0x48007c00 170 #define SUB 0xcb000000 171 #define SUBI 0xd1000000 172 #define SUBS 0xeb000000 173 #define TBZ 0x36000000 174 #define UBFM 0xd3400000 175 #define UCVTF 0x9e630000 176 #define UDIV 0x9ac00800 177 #define UMOV 0x0e003c00 178 #define UMULH 0x9bc03c00 179 #define USHLL 0x2f00a400 180 #define USHR 0x2f000400 181 #define USRA 0x2f001400 182 #define XTN 0x0e212800 184 #define CSET (CSINC | RM(TMP_ZERO) | RN(TMP_ZERO)) 185 #define LDR (STRI | (1 << 22)) 186 #define LDRB (STRBI | (1 << 22)) 187 #define LDRH (LDRB | (1 << 30)) 188 #define MOV (ORR | RN(TMP_ZERO)) 215 if(jump->
flags& JUMP_ADDR)
216target_addr = jump->
u.
target;
224 if(jump->
flags& IS_COND) {
225diff += SSIZE_OF(ins);
226 if(diff <= 0xfffff && diff >= -0x100000) {
227*(--code_ptr) ^= (jump->
flags& IS_CBZ) ? (0x1 << 24) : 0x1;
228jump->
flags|= PATCH_COND;
232diff -= SSIZE_OF(ins);
235 if(diff <= 0x7ffffff && diff >= -0x8000000) {
236 if(jump->
flags& IS_COND)
237code_ptr[-1] -= (4 << 5);
238jump->
flags|= PATCH_B;
242 if(target_addr < 0x100000000l) {
243 if(jump->
flags& IS_COND)
244code_ptr[-1] -= (2 << 5);
245code_ptr[2] = code_ptr[0];
249 if(diff <= 0xfffff000l && diff >= -0x100000000l) {
250 if(jump->
flags& IS_COND)
251code_ptr[-1] -= (2 << 5);
252jump->
flags|= PATCH_B32;
253code_ptr[2] = code_ptr[0];
257 if(target_addr < 0x1000000000000l) {
258 if(jump->
flags& IS_COND)
259code_ptr[-1] -= (1 << 5);
260jump->
flags|= PATCH_ABS48;
261code_ptr[3] = code_ptr[0];
266jump->
flags|= PATCH_ABS64;
267code_ptr[4] = code_ptr[0];
278 if(jump->
flags& JUMP_ADDR)
285 if(diff <= 0xfffff && diff >= -0x100000) {
286jump->
flags|= PATCH_B;
290 if(diff <= 0xfffff000l && diff >= -0x100000000l) {
292jump->
flags|= PATCH_B32;
296 if(
addr< 0x100000000l) {
301 if(
addr< 0x1000000000000l) {
303jump->
flags|= PATCH_ABS48;
308jump->
flags|= PATCH_ABS64;
319 if(!(jump->
flags& JUMP_MOV_ADDR)) {
320 if(jump->
flags& PATCH_COND) {
321 addr= (
addr- (
sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
327 if(jump->
flags& PATCH_B) {
328 addr= (
addr- (
sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2;
334dst = (buf_ptr[0] >> 5) & 0x1f;
336 if(jump->
flags& PATCH_B32) {
346 if(jump->
flags& PATCH_B) {
347 addr-= (
sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
353 if(jump->
flags& PATCH_B32) {
366buf_ptr[1] =
MOVK| (((
sljit_ins)(
addr>> 16) & 0xffff) << 5) | (1 << 21) | dst;
367 if(jump->
flags& (PATCH_ABS48 | PATCH_ABS64))
368buf_ptr[2] =
MOVK| (((
sljit_ins)(
addr>> 32) & 0xffff) << 5) | (2 << 21) | dst;
370 if(jump->
flags& PATCH_ABS64)
379SLJIT_NEXT_DEFINE_TYPES;
385jump = compiler->
jumps;
386const_ = compiler->
consts;
387SLJIT_NEXT_INIT_TYPES();
390SLJIT_GET_NEXT_MIN();
392 if(next_min_addr == SLJIT_MAX_ADDRESS)
395 if(next_min_addr == next_label_size) {
396 label->size -= size_reduce;
399next_label_size = SLJIT_GET_NEXT_SIZE(
label);
402 if(next_min_addr == next_const_addr) {
403const_->
addr-= size_reduce;
404const_ = const_->
next;
405next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
409 if(next_min_addr != next_jump_addr)
412jump->
addr-= size_reduce;
413 if(!(jump->
flags& JUMP_MOV_ADDR)) {
417 if(jump->
flags& JUMP_ADDR) {
418 if(jump->
u.
target< 0x100000000l)
420 else if(jump->
u.
target< 0x1000000000000l)
426 if((jump->
flags& IS_COND) && (diff + 1) <= (0xfffff / SSIZE_OF(ins)) && (diff + 1) >= (-0x100000 / SSIZE_OF(ins)))
428 else if(diff <= (0x7ffffff / SSIZE_OF(ins)) && diff >= (-0x8000000 / SSIZE_OF(ins)))
430 else if(diff <= (0xfffff000l / SSIZE_OF(ins)) && diff >= (-0x100000000l / SSIZE_OF(ins)))
440 if(!(jump->
flags& JUMP_ADDR)) {
443 if(diff <= (0xfffff / SSIZE_OF(ins)) && diff >= (-0x100000 / SSIZE_OF(ins)))
445 else if(diff <= (0xfffff000l / SSIZE_OF(ins)) && diff >= (-0x100000000l / SSIZE_OF(ins)))
447}
else if(jump->
u.
target< 0x100000000l)
449 else if(jump->
u.
target< 0x1000000000000l)
457next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
460compiler->
size-= size_reduce;
471SLJIT_NEXT_DEFINE_TYPES;
480CHECK_PTR(check_sljit_generate_code(compiler));
484 code= (
sljit_ins*)allocate_executable_memory(compiler->
size*
sizeof(
sljit_ins), options, exec_allocator_data, &executable_offset);
487reverse_buf(compiler);
493jump = compiler->
jumps;
494const_ = compiler->
consts;
495SLJIT_NEXT_INIT_TYPES();
496SLJIT_GET_NEXT_MIN();
500buf_end = buf_ptr + (
buf->used_size >> 2);
502*code_ptr = *buf_ptr++;
503 if(next_min_addr == word_count) {
509 if(next_min_addr == next_label_size) {
510 label->u.addr = (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
513next_label_size = SLJIT_GET_NEXT_SIZE(
label);
516 if(next_min_addr == next_jump_addr) {
517 if(!(jump->
flags& JUMP_MOV_ADDR)) {
518word_count = word_count - 1 + (jump->
flags>> JUMP_SIZE_SHIFT);
523word_count += jump->
flags>> JUMP_SIZE_SHIFT;
530next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
531}
else if(next_min_addr == next_const_addr) {
533const_ = const_->
next;
534next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
537SLJIT_GET_NEXT_MIN();
541}
while(buf_ptr < buf_end);
547 label->u.addr = (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
557jump = compiler->
jumps;
568code_ptr = (
sljit_ins*)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
577 switch(feature_type) {
580 #ifdef SLJIT_IS_FPU_AVAILABLE 618 #define COUNT_TRAILING_ZERO(value, result) \ 620 if (!(value & 0xffffffff)) { \ 624 if (!(value & 0xffff)) { \ 628 if (!(value & 0xff)) { \ 632 if (!(value & 0xf)) { \ 636 if (!(value & 0x3)) { \ 640 if (!(value & 0x1)) { \ 645 #define LOGICAL_IMM_CHECK (sljit_ins)0x100 656 if(
len== 32 && (imm == 0 || imm == -1))
704ins = (0x3f - ((
len<< 1) - 1)) << 10;
707 returnins | ((
len- ones - 1) << 10) | ((
len- ones - right) << 16);
709 returnins | ((ones - 1) << 10) | ((
len- right) << 16);
712 #undef COUNT_TRAILING_ZERO 724 if(simm < 0 && simm >= -0x10000)
727 if(imm <= 0xffffffffl) {
728 if((imm & 0xffff) == 0)
730 if((imm & 0xffff0000l) == 0xffff0000)
732 if((imm & 0xffff) == 0xffff)
747 if(simm < 0 && simm >= -0x100000000l) {
748 if((imm & 0xffff) == 0xffff)
759 for(
i= 4;
i> 0;
i--) {
760 if((simm & 0xffff) == 0)
762 if((simm & 0xffff) == 0xffff)
771 for(
i= 0;
i< 4;
i++) {
772 if(!(simm & 0xffff)) {
787 for(
i= 0;
i< 4;
i++) {
788 if(!(simm & 0xffff)) {
803 #define ARG1_IMM 0x0010000 804 #define ARG2_IMM 0x0020000 805 #define INT_OP 0x0040000 806 #define SET_FLAGS 0x0080000 807 #define UNUSED_RETURN 0x0100000 809 #define CHECK_FLAGS(flag_bits) \ 810 if (flags & SET_FLAGS) { \ 811 inv_bits |= flag_bits; \ 812 if (flags & UNUSED_RETURN) \ 874 if(imm > 0 && imm <= 0xfff) {
879 if(nimm > 0 && nimm <= 0xfff) {
883 if(imm > 0 && imm <= 0xffffff && !(imm & 0xfff)) {
887 if(nimm > 0 && nimm <= 0xffffff && !(nimm & 0xfff)) {
905 return push_inst(compiler, (
ANDI^ inv_bits) |
RD(dst) |
RN(reg) | inst_bits);
935inv_bits |= inv_bits >> 9;
945inv_bits |= inv_bits >> 9;
951inst_bits = ((
sljit_ins)imm << 16) | (31 << 10);
1002inv_bits |= inv_bits >> 9;
1003 return push_inst(compiler, (
UBFM^ inv_bits) |
RD(dst) |
RN(arg2) | (7 << 10));
1006inv_bits |= inv_bits >> 9;
1007 return push_inst(compiler, (
SBFM^ inv_bits) |
RD(dst) |
RN(arg2) | (7 << 10));
1010inv_bits |= inv_bits >> 9;
1011 return push_inst(compiler, (
UBFM^ inv_bits) |
RD(dst) |
RN(arg2) | (15 << 10));
1014inv_bits |= inv_bits >> 9;
1015 return push_inst(compiler, (
SBFM^ inv_bits) |
RD(dst) |
RN(arg2) | (15 << 10));
1026 return push_inst(compiler,
SBFM| (1 << 22) |
RD(dst) |
RN(arg2) | (31 << 10));
1036inv_bits |= inv_bits >> 21;
1044inv_bits |= inv_bits >> 9;
1052 return push_inst(compiler,
SBFM| (1 << 22) |
RD(dst) |
RN(dst) | (31 << 10));
1070compiler->status_flags_state = 0;
1109compiler->status_flags_state = 0;
1125 #define BYTE_SIZE 0x0 1126 #define HALF_SIZE 0x1 1127 #define INT_SIZE 0x2 1128 #define WORD_SIZE 0x3 1130 #define MEM_SIZE_SHIFT(flags) ((sljit_ins)(flags) & 0x3) 1146 if(argw == 0 || argw == shift)
1148|
RN(arg & REG_MASK) |
RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0));
1159argw = (argw >> shift) & 0xfff;
1164 if((argw & ((1 << shift) - 1)) == 0) {
1166 if((argw >> shift) <= 0xfff)
1169 if(argw <= 0xffffff) {
1172argw = ((argw & 0xfff) >> shift);
1175}
else if(argw < -256 && argw >= -0xfff000) {
1177argw = ((0x1000 + argw) & 0xfff) >> shift;
1182 if(argw <= 0xff && argw >= -0x100)
1185 if(((argw + 0x100) & 0xfff) <= 0x1ff && argw <= 0xfff0ff && argw >= -0xfff100) {
1193 if(!(argw & 0x100))
1215 sljit_s32saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options);
1219 CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
1220set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
1222saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 2);
1223saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
1225local_size = (local_size + saved_regs_size + 0xf) & ~0xf;
1228 if(local_size <= 512) {
1231offs = (
sljit_ins)(local_size - 2 * SSIZE_OF(
sw)) << (15 - 3);
1234saved_regs_size = ((saved_regs_size - 2 * SSIZE_OF(
sw)) + 0xf) & ~0xf;
1237offs = (
sljit_ins)(saved_regs_size - 2 * SSIZE_OF(
sw)) << (15 - 3);
1238local_size -= saved_regs_size;
1296 if(local_size > 4096)
1302saved_arg_count = 0;
1318 if(local_size > 4096) {
1319 if(local_size < 4 * 4096) {
1322 if(local_size >= 2 * 4096) {
1323 if(local_size >= 3 * 4096) {
1340local_size &= 0xfff;
1348 if(local_size > 0) {
1349 if(local_size <= 512)
1353 if(local_size >= 4096)
1354local_size = (1 << (22 - 10));
1364 if(local_size != 0) {
1365 if(local_size > 0xfff) {
1367local_size &= 0xfff;
1370 if(local_size > 512 || local_size == 0) {
1371 if(local_size != 0)
1392 CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
1393set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
1395saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 2);
1396saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
1398compiler->
local_size= (local_size + saved_regs_size + 0xf) & ~0xf;
1409 if(!is_return_to) {
1410 if(local_size > 512 && local_size <= 512 + 496) {
1417 if(local_size > 512 && local_size <= 512 + 248) {
1424 if(local_size > 512) {
1426 if(local_size > 0xfff) {
1428| (((
sljit_ins)local_size >> 12) << 10) | (1 << 22)));
1429local_size &= 0xfff;
1436offs = (
sljit_ins)(local_size - 2 * SSIZE_OF(
sw)) << (15 - 3);
1496 CHECK(check_sljit_emit_return_void(compiler));
1507 CHECK(check_sljit_emit_return_to(compiler, src, srcw));
1510ADJUST_LOCAL_OFFSET(src, srcw);
1522SLJIT_SKIP_CHECKS(compiler);
1535 CHECK(check_sljit_emit_op0(compiler, op));
1537op = GET_OPCODE(op);
1573 CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1574ADJUST_LOCAL_OFFSET(dst, dstw);
1575ADJUST_LOCAL_OFFSET(src, srcw);
1577dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
1579op = GET_OPCODE(op);
1582 if(FAST_IS_REG(dst) && FAST_IS_REG(src))
1680 CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
1681ADJUST_LOCAL_OFFSET(dst, dstw);
1682ADJUST_LOCAL_OFFSET(src1, src1w);
1683ADJUST_LOCAL_OFFSET(src2, src2w);
1685dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
1729 CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
1731SLJIT_SKIP_CHECKS(compiler);
1741 CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
1743 switch(GET_OPCODE(op)) {
1745SLJIT_SKIP_CHECKS(compiler);
1746 return sljit_emit_op2(compiler, op, dst_reg, 0, src1, src1w, src2, src2w);
1763 CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w));
1767 if(src1_reg == src2_reg) {
1768SLJIT_SKIP_CHECKS(compiler);
1772ADJUST_LOCAL_OFFSET(src3, src3w);
1777 mask= inv_bits ? 0x1f : 0x3f;
1784src3w = (src3w ^
mask) + 1;
1786 return push_inst(compiler, (
EXTR^ (inv_bits | (inv_bits >> 9))) |
RD(dst_reg)
1787|
RN(is_left ? src1_reg : src2_reg) |
RM(is_left ? src2_reg : src1_reg) | ((
sljit_ins)src3w << 10));
1793}
else if(dst_reg == src3) {
1803imm = (
sljit_ins)(inv_bits ? ((1 << 16) | (31 << 10)) : ((1 << 16) | (63 << 10) | (1 << 22)));
1805imm = (
sljit_ins)(inv_bits ? ((31 << 16) | (30 << 10)) : ((63 << 16) | (62 << 10) | (1 << 22)));
1810imm = (
sljit_ins)(inv_bits ? (4 << 10) : ((5 << 10) | (1 << 22)));
1825 CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));
1826ADJUST_LOCAL_OFFSET(src, srcw);
1830 if(FAST_IS_REG(src))
1867 CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw));
1868ADJUST_LOCAL_OFFSET(dst, dstw);
1872 if(FAST_IS_REG(dst))
1876dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
1889CHECK_REG_INDEX(check_sljit_get_register_index(
type, reg));
1905 CHECK(check_sljit_emit_op_custom(compiler, instruction,
size));
1924 if(arg & OFFS_REG_MASK) {
1926 if(argw == 0 || argw == shift)
1928|
RN(arg & REG_MASK) |
RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0));
1939argw = (argw >> shift) & 0xfff;
1944 if(argw >= 0 && (argw & ((1 << shift) - 1)) == 0) {
1945 if((argw >> shift) <= 0xfff)
1948 if(argw <= 0xffffff) {
1951argw = ((argw & 0xfff) >> shift);
1956 if(argw <= 255 && argw >= -256)
2074SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
2076inv_bits = (op &
SLJIT_32) ? (1 << 22) : 0;
2077dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG1;
2084 switch(GET_OPCODE(op)) {
2118 CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
2119ADJUST_LOCAL_OFFSET(dst, dstw);
2120ADJUST_LOCAL_OFFSET(src1, src1w);
2121ADJUST_LOCAL_OFFSET(src2, src2w);
2123dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG1;
2133 switch(GET_OPCODE(op)) {
2168 CHECK(check_sljit_emit_fset32(compiler, freg,
value));
2175 if((u.imm << (32 - 19)) == 0) {
2176exp = (u.imm >> (23 + 2)) & 0x3f;
2178 if(exp == 0x20 || exp == 0x1f)
2179 return push_inst(compiler, (
FMOV_I^ (1 << 22)) | (
sljit_ins)((((u.imm >> 24) & 0x80) | ((u.imm >> 19) & 0x7f)) << 13) |
VD(freg));
2196 CHECK(check_sljit_emit_fset64(compiler, freg,
value));
2203 if((u.imm << (64 - 48)) == 0) {
2204exp = (u.imm >> (52 + 2)) & 0x1ff;
2206 if(exp == 0x100 || exp == 0xff)
2220 CHECK(check_sljit_emit_fcopy(compiler, op, freg, reg));
2223inst =
FMOV_R|
RN(reg) |
VD(freg) | (1 << 16);
2228inst ^=
W_OP| (1 << 22);
2331CHECK_PTR(check_sljit_emit_label(compiler));
2338set_label(
label, compiler);
2347CHECK_PTR(check_sljit_emit_jump(compiler,
type));
2355jump->
flags|= IS_COND;
2358jump->
flags|= IS_BL;
2364compiler->
size+= JUMP_MAX_SIZE - 1;
2373CHECK_PTR(check_sljit_emit_call(compiler,
type, arg_types));
2380SLJIT_SKIP_CHECKS(compiler);
2391ADJUST_LOCAL_OFFSET(src, srcw);
2396jump->
flags|= IS_CBZ | IS_COND;
2410inv_bits |= 1 << 24;
2417compiler->
size+= JUMP_MAX_SIZE - 1;
2426 CHECK(check_sljit_emit_ijump(compiler,
type, src, srcw));
2430ADJUST_LOCAL_OFFSET(src, srcw);
2445compiler->
size+= JUMP_MAX_SIZE - 1;
2455 CHECK(check_sljit_emit_icall(compiler,
type, arg_types, src, srcw));
2458ADJUST_LOCAL_OFFSET(src, srcw);
2473SLJIT_SKIP_CHECKS(compiler);
2485 CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw,
type));
2486ADJUST_LOCAL_OFFSET(dst, dstw);
2489dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
2534 CHECK(check_sljit_emit_select(compiler,
type, dst_reg, src1, src1w, src2_reg));
2536ADJUST_LOCAL_OFFSET(src1, src1w);
2549 return push_inst(compiler, (
CSEL^ inv_bits) | (cc << 12) |
RD(dst_reg) |
RN(src2_reg) |
RM(src1));
2561 CHECK(check_sljit_emit_fselect(compiler,
type, dst_freg, src1, src1w, src2_freg));
2563ADJUST_LOCAL_OFFSET(src1, src1w);
2571 return push_inst(compiler, (
FCSEL^ inv_bits) | (cc << 12) |
VD(dst_freg) |
VN(src2_freg) |
VM(src1));
2581 CHECK(check_sljit_emit_mem(compiler,
type, reg, mem, memw));
2583 if(!(reg & REG_PAIR_MASK))
2584 returnsljit_emit_mem_unaligned(compiler,
type, reg, mem, memw);
2586ADJUST_LOCAL_OFFSET(mem, memw);
2588 if(!(mem & REG_MASK)) {
2593}
else if(mem & OFFS_REG_MASK) {
2598}
else if((memw & 0x7) != 0 || memw > 0x1f8 || memw < -0x200) {
2605}
else if((memw & 0x7) == 0 && memw <= 0x7ff0) {
2614 return push_inst(compiler, inst |
RD(REG_PAIR_SECOND(reg)) |
RN(mem & REG_MASK) | ((
sljit_ins)(memw + 0x8) << 7));
2620}
else if((
sljit_uw)memw <= 0xffffff) {
2623 if((memw & 0xe07) != 0) {
2641 SLJIT_ASSERT((memw & 0x7) == 0 && memw <= 0x1f8 && memw >= -0x200);
2652 CHECK(check_sljit_emit_mem_update(compiler,
type, reg, mem, memw));
2654 if((mem & OFFS_REG_MASK) || (memw > 255 || memw < -256))
2660 switch(
type& 0xff) {
2691inst |= sign ? 0x00800000 : 0x00400000;
2696 return push_inst(compiler, inst |
RT(reg) |
RN(mem & REG_MASK) | (
sljit_ins)((memw & 0x1ff) << 12));
2706 CHECK(check_sljit_emit_fmem_update(compiler,
type, freg, mem, memw));
2708 if((mem & OFFS_REG_MASK) || (memw > 255 || memw < -256))
2725 return push_inst(compiler, inst |
VT(freg) |
RN(mem & REG_MASK) | (
sljit_ins)((memw & 0x1ff) << 12));
2738 if(!(mem & REG_MASK)) {
2752 if(memw < -0xffffff || memw > 0xffffff) {
2786 CHECK(check_sljit_emit_simd_mov(compiler,
type, freg, srcdst, srcdstw));
2788ADJUST_LOCAL_OFFSET(srcdst, srcdstw);
2790 if(reg_size != 3 && reg_size != 4)
2801ins =
VD(srcdst) |
VN(freg) |
VM(freg);
2803ins =
VD(freg) |
VN(srcdst) |
VM(srcdst);
2843 switch(elem_size) {
2853 if(
value<= 0xff) {
2858 if((
value& 0xff) == 0) {
2876 if(
value<= 0xff) {
2934 CHECK(check_sljit_emit_simd_replicate(compiler,
type, freg, src, srcw));
2936ADJUST_LOCAL_OFFSET(src, srcw);
2938 if(reg_size != 3 && reg_size != 4)
2958ins = (
sljit_ins)1 << (16 + elem_size);
2998 CHECK(check_sljit_emit_simd_lane_mov(compiler,
type, freg, lane_index, srcdst, srcdstw));
3000ADJUST_LOCAL_OFFSET(srcdst, srcdstw);
3002 if(reg_size != 3 && reg_size != 4)
3012ins = (reg_size == 3) ? 0 : ((
sljit_ins)1 << 30);
3028 else if(elem_size == 0)
3033lane_index = lane_index << elem_size;
3034ins |= (
sljit_ins)(((lane_index & 0x8) << 27) | ((lane_index & 0x7) << 10));
3043ins =
INS_e| ((((
sljit_ins)lane_index << 1) | 1) << (16 + elem_size)) |
VD(freg) |
VN(srcdst);
3057ins =
RD(srcdst) |
VN(freg);
3067ins =
INS|
VD(freg) |
RN(srcdst);
3072 return push_inst(compiler, ins | ((((
sljit_ins)lane_index << 1) | 1) << (16 + elem_size)));
3084 CHECK(check_sljit_emit_simd_lane_replicate(compiler,
type, freg, src, src_lane_index));
3086 if(reg_size != 3 && reg_size != 4)
3095ins = (((
sljit_ins)src_lane_index << 1) | 1) << (16 + elem_size);
3112 CHECK(check_sljit_emit_simd_extend(compiler,
type, freg, src, srcw));
3114ADJUST_LOCAL_OFFSET(src, srcw);
3116 if(reg_size != 3 && reg_size != 4)
3128 if(reg_size == 4 && elem2_size - elem_size == 1)
3142| ((
sljit_ins)1 << (19 + elem_size)) |
VD(freg) |
VN(src)));
3144}
while(++elem_size < elem2_size);
3159 CHECK(check_sljit_emit_simd_sign(compiler,
type, freg, dst, dstw));
3161ADJUST_LOCAL_OFFSET(dst, dstw);
3163 if(reg_size != 3 && reg_size != 4)
3172 switch(elem_size) {
3175ins =
USHR| (0x9 << 16);
3178imms = (reg_size == 4) ? 0x643219 : 0x6231;
3179ins =
USHR| (0x11 << 16);
3182imms = (reg_size == 4) ? 0x6231 : 0x61;
3183ins =
USHR| (0x21 << 16);
3187ins =
USHR| (0x41 << 16);
3196 if(reg_size == 4 && elem_size > 0)
3199 if(imms >= 0x100) {
3200ins = (reg_size == 4 && elem_size == 0) ? (1 << 30) : 0;
3205}
while(imms >= 0x100);
3210dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
3213 if(reg_size == 4 && elem_size == 0) {
3234 CHECK(check_sljit_emit_simd_op2(compiler,
type, dst_freg, src1_freg, src2_freg));
3236 if(reg_size != 3 && reg_size != 4)
3242 switch(SLJIT_SIMD_GET_OPCODE(
type)) {
3260 return push_inst(compiler, ins |
VD(dst_freg) |
VN(src1_freg) |
VM(src2_freg));
3270 CHECK(check_sljit_emit_atomic_load(compiler, op, dst_reg, mem_reg));
3272 #ifdef __ARM_FEATURE_ATOMICS 3273 switch(GET_OPCODE(op)) {
3276ins =
LDR^ (1 << 30);
3289 switch(GET_OPCODE(op)) {
3292ins =
LDXR^ (1 << 30);
3305 return push_inst(compiler, ins |
RN(mem_reg) |
RT(dst_reg));
3319 CHECK(check_sljit_emit_atomic_store(compiler, op, src_reg, mem_reg, temp_reg));
3321 #ifdef __ARM_FEATURE_ATOMICS 3325 switch(GET_OPCODE(op)) {
3328ins =
CAS^ (1 << 30);
3362 switch(GET_OPCODE(op)) {
3365ins =
STXR^ (1 << 30);
3389 CHECK(check_sljit_get_local_base(compiler, dst, dstw,
offset));
3392dst_reg = FAST_IS_REG(dst) ? dst :
TMP_REG1;
3395 if(offset <= 0xffffff && offset >= -0xffffff) {
3429CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
3430ADJUST_LOCAL_OFFSET(dst, dstw);
3434set_const(const_, compiler);
3436dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
3450CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
3451ADJUST_LOCAL_OFFSET(dst, dstw);
3453dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
3458set_mov_addr(jump, compiler, 1);
3460compiler->
size+= 3;
3476dst = inst[0] & 0x1f;
3477 SLJIT_ASSERT((inst[0] & 0xffe00000) ==
MOVZ&& (inst[1] & 0xffe00000) == (
MOVK| (1 << 21)));
3478inst[0] =
MOVZ| dst | (((
sljit_u32)new_target & 0xffff) << 5);
3479inst[1] =
MOVK| dst | (((
sljit_u32)(new_target >> 16) & 0xffff) << 5) | (1 << 21);
3480inst[2] =
MOVK| dst | (((
sljit_u32)(new_target >> 32) & 0xffff) << 5) | (2 << 21);
3481inst[3] =
MOVK| dst | ((
sljit_u32)(new_target >> 48) << 5) | (3 << 21);
3484inst = (
sljit_ins*)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset);
ncbi::TMaskedQueryRegions mask
#define CHECK_ERROR(name, s)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static const char label[]
const struct ncbi::grid::netcache::search::fields::SIZE size
const GenericPointer< typename T::ValueType > T2 value
#define SLJIT_UNREACHABLE()
unsigned short int sljit_u16
signed short int sljit_s16
#define SLJIT_UNLIKELY(x)
#define SLJIT_API_FUNC_ATTRIBUTE
#define SLJIT_COMPILE_ASSERT(x, description)
#define SLJIT_UNUSED_ARG(arg)
#define SLJIT_CACHE_FLUSH(from, to)
#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
static sljit_uw total_size
#define PTR_FAIL_IF(expr)
#define PTR_FAIL_WITH_EXEC_IF(ptr)
#define CHECK_ERROR_PTR()
#define SLJIT_UNORDERED_OR_LESS_EQUAL
#define SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN
#define SLJIT_ARG_TYPE_SCRATCH_REG
#define SLJIT_SIMD_OP2_AND
#define SLJIT_ORDERED_LESS_EQUAL
#define SLJIT_CONV_F64_FROM_S32
#define SLJIT_CONV_S32_FROM_F64
#define SLJIT_FAST_RETURN
#define SLJIT_SIMD_REG_64
#define SLJIT_ATOMIC_NOT_STORED
#define SLJIT_FIRST_SAVED_REG
#define SLJIT_CONV_F64_FROM_U32
#define SLJIT_UNORDERED_OR_GREATER
#define SLJIT_ORDERED_GREATER_EQUAL
#define SLJIT_PREFETCH_L3
#define SLJIT_SIG_GREATER_EQUAL
#define SLJIT_UNORDERED_OR_NOT_EQUAL
#define SLJIT_ARG_TYPE_F64
#define SLJIT_SIMD_EXTEND_SIGNED
#define SLJIT_PREFETCH_L1
#define SLJIT_SIMD_OP2_XOR
#define SLJIT_COPYSIGN_F64
#define SLJIT_ORDERED_EQUAL
#define SLJIT_ERR_UNSUPPORTED
#define SLJIT_UNORDERED_OR_LESS
#define SLJIT_ORDERED_GREATER
#define SLJIT_SIG_LESS_EQUAL
#define SLJIT_UNORDERED_OR_EQUAL
#define SLJIT_CALL_RETURN
#define SLJIT_REWRITABLE_JUMP
#define SLJIT_NOT_OVERFLOW
#define SLJIT_F_NOT_EQUAL
#define SLJIT_F_GREATER_EQUAL
#define SLJIT_CURRENT_FLAGS_ADD
#define SLJIT_HAS_PREFETCH
#define SLJIT_ENTER_REG_ARG
#define SLJIT_SIG_GREATER
#define SLJIT_SIMD_LANE_ZERO
#define SLJIT_FLOAT_REGISTER
#define SLJIT_ATOMIC_STORED
#define SLJIT_GET_RETURN_ADDRESS
#define SLJIT_FIRST_SAVED_FLOAT_REG
#define SLJIT_SIMD_OP2_OR
#define SLJIT_SHIFT_INTO_NON_ZERO
#define SLJIT_SIMD_LANE_SIGNED
#define SLJIT_GREATER_EQUAL
#define SLJIT_GP_REGISTER
#define SLJIT_SKIP_FRAMES_BEFORE_RETURN
#define SLJIT_ERR_COMPILED
#define SLJIT_HAS_COPY_F64
#define SLJIT_SIMD_REG_128
#define SLJIT_F_LESS_EQUAL
#define SLJIT_ORDERED_LESS
#define SLJIT_HAS_COPY_F32
#define SLJIT_CONV_F64_FROM_F32
#define SLJIT_COPY_TO_F64
#define SLJIT_PREFETCH_L2
#define SLJIT_SET_ATOMIC_STORED
#define SLJIT_CURRENT_FLAGS_SUB
#define SLJIT_PREFETCH_ONCE
#define SLJIT_ORDERED_NOT_EQUAL
#define SLJIT_UNORDERED_OR_GREATER_EQUAL
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 type)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump * sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst_reg, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS+3]
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 dst_reg, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2_reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 reg, sljit_s32 mem, sljit_sw memw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
static SLJIT_INLINE void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_label * sljit_emit_label(struct sljit_compiler *compiler)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type)
static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw simm)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw offset)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_load(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst_reg, sljit_s32 mem_reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 type, sljit_s32 reg)
static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_replicate(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_op2(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 dst_freg, sljit_s32 src1_freg, sljit_s32 src2_freg)
static sljit_s32 sljit_emit_simd_mem_offset(struct sljit_compiler *compiler, sljit_s32 *mem_ptr, sljit_sw memw)
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 tmp_reg)
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
#define CHECK_FLAGS(flag_bits)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump * sljit_emit_mov_addr(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset32(struct sljit_compiler *compiler, sljit_s32 freg, sljit_f32 value)
static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins)
#define COUNT_TRAILING_ZERO(value, result)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 freg, sljit_s32 reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem_update(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 reg, sljit_s32 mem, sljit_sw memw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
static SLJIT_INLINE sljit_ins * detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_mov(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 lane_index, sljit_s32 srcdst, sljit_sw srcdstw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)
static SLJIT_INLINE sljit_s32 emit_imm64_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_uw imm)
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_uw(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst_reg, sljit_s32 src1_reg, sljit_s32 src2_reg, sljit_s32 src3, sljit_sw src3w)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_extend(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_mov(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 srcdst, sljit_sw srcdstw)
static sljit_ins logical_imm(sljit_sw imm, sljit_u32 len)
static sljit_s32 sljit_emit_fop1_conv_f64_from_w(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
static void reduce_code_size(struct sljit_compiler *compiler)
static SLJIT_INLINE struct sljit_jump * emit_cmp_to0(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw)
static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
#define LOGICAL_IMM_CHECK
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *compiler, sljit_s32 freg, sljit_f64 value)
static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 dst, sljit_sw arg1, sljit_sw arg2)
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 is_return_to)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_dst(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw)
#define MEM_SIZE_SHIFT(flags)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_const * sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value)
SLJIT_API_FUNC_ATTRIBUTE const char * sljit_get_platform_name(void)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_store(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src_reg, sljit_s32 mem_reg, sljit_s32 temp_reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 dst_freg, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2_freg)
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS+8]
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump * sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types)
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_sign(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 dst, sljit_sw dstw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
static SLJIT_INLINE sljit_sw mov_addr_get_length(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
static sljit_ins simd_get_imm(sljit_s32 elem_size, sljit_uw value)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, void *instruction, sljit_u32 size)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem_update(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 mem, sljit_sw memw)
static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE void * sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_simd_lane_replicate(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, sljit_s32 src, sljit_s32 src_lane_index)
#define SLJIT_IS_FPU_AVAILABLE
struct sljit_const * consts
sljit_sw executable_offset
struct sljit_jump * jumps
struct sljit_label * last_label
struct sljit_memory_fragment * buf
struct sljit_label * labels
struct sljit_const * next
union sljit_jump::@1235 u
struct sljit_label * label
union sljit_label::@1234 u
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4