29 return "PowerPC" SLJIT_CPUINFO;
36 #if ((defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) && (defined _AIX)) \
37 || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
38 #define SLJIT_PPC_STACK_FRAME_V2 1
42 #include <sys/cache.h>
45 #if (defined _CALL_ELF && _CALL_ELF == 2)
46 #define SLJIT_PASS_ENTRY_ADDR_TO_CALL 1
49 #if (defined SLJIT_CACHE_FLUSH_OWN_IMPL && SLJIT_CACHE_FLUSH_OWN_IMPL)
54 _sync_cache_range((caddr_t)from, (
int)((
size_t)to - (
size_t)from));
55 #elif defined(__GNUC__) || (defined(__IBM_GCC_ASM) && __IBM_GCC_ASM)
56 # if defined(_ARCH_PWR) || defined(_ARCH_PWR2)
66 __asm__
volatile (
"ics" );
67 # elif defined(_ARCH_COM) && !defined(_ARCH_PPC)
68 # error "Cache flush is not implemented for PowerPC/POWER common mode."
80 __asm__
volatile (
"isync" );
83 # warning "This file may fail to compile if -qfuncsect is used"
85 #elif defined(__xlc__)
86 #error "Please enable GCC syntax for inline assembly statements with -qasm=gcc"
88 #error "This platform requires a cache flush implementation."
94 #define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2)
95 #define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3)
96 #define TMP_ZERO (SLJIT_NUMBER_OF_REGISTERS + 4)
98 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
99 #define TMP_CALL_REG (SLJIT_NUMBER_OF_REGISTERS + 5)
101 #define TMP_CALL_REG TMP_REG1
104 #define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1)
105 #define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2)
108 0, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 9, 10, 31, 12
112 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 0, 13
118 #define D(d) ((sljit_ins)reg_map[d] << 21)
119 #define S(s) ((sljit_ins)reg_map[s] << 21)
120 #define A(a) ((sljit_ins)reg_map[a] << 16)
121 #define B(b) ((sljit_ins)reg_map[b] << 11)
122 #define C(c) ((sljit_ins)reg_map[c] << 6)
123 #define FD(fd) ((sljit_ins)freg_map[fd] << 21)
124 #define FS(fs) ((sljit_ins)freg_map[fs] << 21)
125 #define FA(fa) ((sljit_ins)freg_map[fa] << 16)
126 #define FB(fb) ((sljit_ins)freg_map[fb] << 11)
127 #define FC(fc) ((sljit_ins)freg_map[fc] << 6)
128 #define IMM(imm) ((sljit_ins)(imm) & 0xffff)
129 #define CRD(d) ((sljit_ins)(d) << 21)
133 #define OE(flags) ((flags) & ALT_SET_FLAGS)
135 #define RC(flags) ((sljit_ins)((flags) & ALT_SET_FLAGS) >> 10)
136 #define HI(opcode) ((sljit_ins)(opcode) << 26)
137 #define LO(opcode) ((sljit_ins)(opcode) << 1)
139 #define ADD (HI(31) | LO(266))
140 #define ADDC (HI(31) | LO(10))
141 #define ADDE (HI(31) | LO(138))
142 #define ADDI (HI(14))
143 #define ADDIC (HI(13))
144 #define ADDIS (HI(15))
145 #define ADDME (HI(31) | LO(234))
146 #define AND (HI(31) | LO(28))
147 #define ANDI (HI(28))
148 #define ANDIS (HI(29))
151 #define BCCTR (HI(19) | LO(528) | (3 << 11))
152 #define BLR (HI(19) | LO(16) | (0x14 << 21))
153 #if defined(_ARCH_PWR10) && _ARCH_PWR10
154 #define BRD (HI(31) | LO(187))
156 #define CNTLZD (HI(31) | LO(58))
157 #define CNTLZW (HI(31) | LO(26))
158 #define CMP (HI(31) | LO(0))
159 #define CMPI (HI(11))
160 #define CMPL (HI(31) | LO(32))
161 #define CMPLI (HI(10))
162 #define CROR (HI(19) | LO(449))
163 #define DCBT (HI(31) | LO(278))
164 #define DIVD (HI(31) | LO(489))
165 #define DIVDU (HI(31) | LO(457))
166 #define DIVW (HI(31) | LO(491))
167 #define DIVWU (HI(31) | LO(459))
168 #define EXTSB (HI(31) | LO(954))
169 #define EXTSH (HI(31) | LO(922))
170 #define EXTSW (HI(31) | LO(986))
171 #define FABS (HI(63) | LO(264))
172 #define FADD (HI(63) | LO(21))
173 #define FADDS (HI(59) | LO(21))
174 #define FCFID (HI(63) | LO(846))
175 #define FCMPU (HI(63) | LO(0))
176 #define FCTIDZ (HI(63) | LO(815))
177 #define FCTIWZ (HI(63) | LO(15))
178 #define FDIV (HI(63) | LO(18))
179 #define FDIVS (HI(59) | LO(18))
180 #define FMR (HI(63) | LO(72))
181 #define FMUL (HI(63) | LO(25))
182 #define FMULS (HI(59) | LO(25))
183 #define FNEG (HI(63) | LO(40))
184 #define FRSP (HI(63) | LO(12))
185 #define FSUB (HI(63) | LO(20))
186 #define FSUBS (HI(59) | LO(20))
187 #define LD (HI(58) | 0)
190 #if defined(_ARCH_PWR7) && _ARCH_PWR7
191 #define LDBRX (HI(31) | LO(532))
193 #define LHBRX (HI(31) | LO(790))
194 #define LWBRX (HI(31) | LO(534))
196 #define MFCR (HI(31) | LO(19))
197 #define MFLR (HI(31) | LO(339) | 0x80000)
198 #define MFXER (HI(31) | LO(339) | 0x10000)
199 #define MTCTR (HI(31) | LO(467) | 0x90000)
200 #define MTLR (HI(31) | LO(467) | 0x80000)
201 #define MTXER (HI(31) | LO(467) | 0x10000)
202 #define MULHD (HI(31) | LO(73))
203 #define MULHDU (HI(31) | LO(9))
204 #define MULHW (HI(31) | LO(75))
205 #define MULHWU (HI(31) | LO(11))
206 #define MULLD (HI(31) | LO(233))
207 #define MULLI (HI(7))
208 #define MULLW (HI(31) | LO(235))
209 #define NEG (HI(31) | LO(104))
211 #define NOR (HI(31) | LO(124))
212 #define OR (HI(31) | LO(444))
214 #define ORIS (HI(25))
215 #define RLDCL (HI(30) | LO(8))
216 #define RLDICL (HI(30) | LO(0 << 1))
217 #define RLDICR (HI(30) | LO(1 << 1))
218 #define RLDIMI (HI(30) | LO(3 << 1))
219 #define RLWIMI (HI(20))
220 #define RLWINM (HI(21))
221 #define RLWNM (HI(23))
222 #define SLD (HI(31) | LO(27))
223 #define SLW (HI(31) | LO(24))
224 #define SRAD (HI(31) | LO(794))
225 #define SRADI (HI(31) | LO(413 << 1))
226 #define SRAW (HI(31) | LO(792))
227 #define SRAWI (HI(31) | LO(824))
228 #define SRD (HI(31) | LO(539))
229 #define SRW (HI(31) | LO(536))
230 #define STD (HI(62) | 0)
231 #if defined(_ARCH_PWR7) && _ARCH_PWR7
232 #define STDBRX (HI(31) | LO(660))
234 #define STDU (HI(62) | 1)
235 #define STDUX (HI(31) | LO(181))
236 #define STFD (HI(54))
237 #define STFIWX (HI(31) | LO(983))
238 #define STFS (HI(52))
239 #define STHBRX (HI(31) | LO(918))
241 #define STWBRX (HI(31) | LO(662))
242 #define STWU (HI(37))
243 #define STWUX (HI(31) | LO(183))
244 #define SUBF (HI(31) | LO(40))
245 #define SUBFC (HI(31) | LO(8))
246 #define SUBFE (HI(31) | LO(136))
247 #define SUBFIC (HI(8))
248 #define XOR (HI(31) | LO(316))
249 #define XORI (HI(26))
250 #define XORIS (HI(27))
252 #define SIMM_MAX (0x7fff)
253 #define SIMM_MIN (-0x8000)
254 #define UIMM_MAX (0xffff)
257 #define RLWI_SH(sh) ((sljit_ins)(sh) << 11)
258 #define RLWI_MBE(mb, me) (((sljit_ins)(mb) << 6) | ((sljit_ins)(me) << 1))
259 #define RLDI_SH(sh) ((((sljit_ins)(sh) & 0x1f) << 11) | (((sljit_ins)(sh) & 0x20) >> 4))
260 #define RLDI_MB(mb) ((((sljit_ins)(mb) & 0x1f) << 6) | ((sljit_ins)(mb) & 0x20))
261 #define RLDI_ME(me) RLDI_MB(me)
263 #define SLWI(shift) (RLWINM | RLWI_SH(shift) | RLWI_MBE(0, 31 - (shift)))
264 #define SLDI(shift) (RLDICR | RLDI_SH(shift) | RLDI_ME(63 - (shift)))
266 #define SRWI(shift) (RLWINM | RLWI_SH(32 - (shift)) | RLWI_MBE((shift), 31))
267 #define SRDI(shift) (RLDICL | RLDI_SH(64 - (shift)) | RLDI_MB(shift))
269 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
270 #define SLWI_W(shift) SLWI(shift)
271 #define TMP_MEM_OFFSET (2 * sizeof(sljit_sw))
273 #define SLWI_W(shift) SLDI(shift)
274 #define TMP_MEM_OFFSET (6 * sizeof(sljit_sw))
277 #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
278 #define TMP_MEM_OFFSET_LO (TMP_MEM_OFFSET)
279 #define TMP_MEM_OFFSET_HI (TMP_MEM_OFFSET + sizeof(sljit_s32))
280 #define LWBRX_FIRST_REG S(TMP_REG1)
281 #define LWBRX_SECOND_REG S(dst)
283 #define TMP_MEM_OFFSET_LO (TMP_MEM_OFFSET + sizeof(sljit_s32))
284 #define TMP_MEM_OFFSET_HI (TMP_MEM_OFFSET)
285 #define LWBRX_FIRST_REG S(dst)
286 #define LWBRX_SECOND_REG S(TMP_REG1)
289 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
318 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) && (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
326 if (jump->
flags & JUMP_ADDR)
333 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) && (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
334 if (jump->
flags & IS_CALL)
340 if (jump->
flags & IS_COND) {
341 if (diff <= 0x7fff && diff >= -0x8000) {
342 jump->
flags |= PATCH_B;
345 if (target_addr <= 0xffff) {
346 jump->
flags |= PATCH_B | PATCH_ABS_B;
350 diff -= SSIZE_OF(ins);
353 if (diff <= 0x01ffffff && diff >= -0x02000000) {
354 jump->
flags |= PATCH_B;
355 }
else if (target_addr <= 0x01ffffff) {
356 jump->
flags |= PATCH_B | PATCH_ABS_B;
359 if (jump->
flags & PATCH_B) {
360 if (!(jump->
flags & IS_COND))
363 code_ptr[0] =
BCx | (2 << 2) | ((code_ptr[0] ^ (8 << 21)) & 0x03ff0001);
366 jump->
flags -= IS_COND;
370 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
371 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
374 if (target_addr < 0x80000000l) {
375 jump->
flags |= PATCH_ABS32;
377 code_ptr[3] = code_ptr[0];
381 if (target_addr < 0x800000000000l) {
382 jump->
flags |= PATCH_ABS48;
384 code_ptr[5] = code_ptr[0];
390 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
392 code_ptr[3] = code_ptr[0];
395 code_ptr[6] = code_ptr[0];
397 return code_ptr + JUMP_MAX_SIZE - 1;
400 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
408 if (jump->
flags & JUMP_ADDR)
413 if (
addr < 0x80000000l) {
415 jump->
flags |= PATCH_ABS32;
419 if (
addr < 0x800000000000l) {
421 jump->
flags |= PATCH_ABS48;
439 if (
flags & PATCH_B) {
440 if (
flags & IS_COND) {
441 if (!(
flags & PATCH_ABS_B)) {
442 addr -= (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
452 if (!(
flags & PATCH_ABS_B)) {
453 addr -= (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
465 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
471 if (
flags & PATCH_ABS32) {
478 if (
flags & PATCH_ABS48) {
482 ins[2] =
SLDI(16) |
S(reg) |
A(reg);
489 ins[2] =
SLDI(32) |
S(reg) |
A(reg);
500 SLJIT_NEXT_DEFINE_TYPES;
506 jump = compiler->
jumps;
507 const_ = compiler->
consts;
508 SLJIT_NEXT_INIT_TYPES();
511 SLJIT_GET_NEXT_MIN();
513 if (next_min_addr == SLJIT_MAX_ADDRESS)
516 if (next_min_addr == next_label_size) {
517 label->size -= size_reduce;
520 next_label_size = SLJIT_GET_NEXT_SIZE(
label);
523 if (next_min_addr == next_const_addr) {
524 const_->
addr -= size_reduce;
525 const_ = const_->
next;
526 next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
530 if (next_min_addr != next_jump_addr)
533 jump->
addr -= size_reduce;
534 if (!(jump->
flags & JUMP_MOV_ADDR)) {
538 if (jump->
flags & JUMP_ADDR) {
539 if (jump->
u.
target <= 0x01ffffff)
541 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
542 else if (jump->
u.
target < 0x80000000l)
544 else if (jump->
u.
target < 0x800000000000l)
551 if (jump->
flags & IS_COND) {
552 if (diff <= (0x7fff / SSIZE_OF(ins)) && diff >= (-0x8000 / SSIZE_OF(ins)))
554 else if ((diff - 1) <= (0x01ffffff / SSIZE_OF(ins)) && (diff - 1) >= (-0x02000000 / SSIZE_OF(ins)))
556 }
else if (diff <= (0x01ffffff / SSIZE_OF(ins)) && diff >= (-0x02000000 / SSIZE_OF(ins)))
561 size_reduce += (JUMP_MAX_SIZE - 1) -
total_size;
563 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
567 if (jump->
flags & JUMP_ADDR) {
568 if (jump->
u.
target < 0x80000000l) {
571 }
else if (jump->
u.
target < 0x800000000000l) {
581 next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
584 compiler->
size -= size_reduce;
595 SLJIT_NEXT_DEFINE_TYPES;
603 CHECK_PTR(check_sljit_generate_code(compiler));
607 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
609 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
610 compiler->
size += (compiler->
size & 0x1) + (
sizeof(
struct sljit_function_context) /
sizeof(
sljit_ins));
612 compiler->
size += (
sizeof(
struct sljit_function_context) / sizeof(
sljit_ins));
615 code = (
sljit_ins*)allocate_executable_memory(compiler->
size *
sizeof(
sljit_ins), options, exec_allocator_data, &executable_offset);
618 reverse_buf(compiler);
624 jump = compiler->
jumps;
625 const_ = compiler->
consts;
626 SLJIT_NEXT_INIT_TYPES();
627 SLJIT_GET_NEXT_MIN();
631 buf_end = buf_ptr + (
buf->used_size >> 2);
633 *code_ptr = *buf_ptr++;
634 if (next_min_addr == word_count) {
640 if (next_min_addr == next_label_size) {
642 label->u.addr = (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
645 next_label_size = SLJIT_GET_NEXT_SIZE(
label);
648 if (next_min_addr == next_jump_addr) {
649 if (!(jump->
flags & JUMP_MOV_ADDR)) {
650 word_count += jump->
flags >> JUMP_SIZE_SHIFT;
656 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
657 word_count += jump->
flags >> JUMP_SIZE_SHIFT;
665 next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
666 }
else if (next_min_addr == next_const_addr) {
668 const_ = const_->
next;
669 next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
672 SLJIT_GET_NEXT_MIN();
676 }
while (buf_ptr < buf_end);
682 label->u.addr = (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
691 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
697 jump = compiler->
jumps;
708 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
709 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
716 code_ptr = (
sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
721 #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
732 switch (feature_type) {
734 #ifdef SLJIT_IS_FPU_AVAILABLE
741 #if defined(_ARCH_PWR10) && _ARCH_PWR10
783 #define LOAD_DATA 0x01
785 #define SIGNED_DATA 0x04
787 #define WORD_DATA 0x00
788 #define BYTE_DATA 0x08
789 #define HALF_DATA 0x10
790 #define INT_DATA 0x18
793 #define DOUBLE_DATA 0x20
795 #define MEM_MASK 0x7f
797 #define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 6))
802 #define ALT_SIGN_EXT 0x000100
804 #define ALT_SET_FLAGS 0x000400
805 #define ALT_FORM1 0x001000
806 #define ALT_FORM2 0x002000
807 #define ALT_FORM3 0x004000
808 #define ALT_FORM4 0x008000
809 #define ALT_FORM5 0x010000
812 #define REG_DEST 0x000001
813 #define REG1_SOURCE 0x000002
814 #define REG2_SOURCE 0x000004
825 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
831 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
832 #define STACK_STORE STW
833 #define STACK_LOAD LWZ
835 #define STACK_STORE STD
836 #define STACK_LOAD LD
839 #if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2)
840 #define LR_SAVE_OFFSET (2 * SSIZE_OF(sw))
842 #define LR_SAVE_OFFSET SSIZE_OF(sw)
845 #define STACK_MAX_DISTANCE (0x8000 - SSIZE_OF(sw) - LR_SAVE_OFFSET)
853 sljit_s32 saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options);
854 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
859 CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
860 set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
862 local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 0)
863 + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
866 local_size += SSIZE_OF(
sw);
877 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
886 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
932 while (arg_types > 0) {
934 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
939 }
else if (arg_count != word_arg_count)
955 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
969 CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
970 set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
972 local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 0)
973 + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
976 local_size += SSIZE_OF(
sw);
1048 CHECK(check_sljit_emit_return_void(compiler));
1058 CHECK(check_sljit_emit_return_to(compiler, src, srcw));
1061 ADJUST_LOCAL_OFFSET(src, srcw);
1073 SLJIT_SKIP_CHECKS(compiler);
1089 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1090 #define INT_ALIGNED 0x10000
1093 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
1094 #define ARCH_32_64(a, b) a
1095 #define INST_CODE_AND_DST(inst, flags, reg) \
1096 ((sljit_ins)(inst) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg)))
1098 #define ARCH_32_64(a, b) b
1099 #define INST_CODE_AND_DST(inst, flags, reg) \
1100 (((sljit_ins)(inst) & ~(sljit_ins)INT_ALIGNED) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg)))
1248 offs_reg = OFFS_REG(arg);
1257 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1267 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1268 if ((inst & INT_ALIGNED) && (argw & 0x3) != 0) {
1276 if (argw <= SIMM_MAX && argw >=
SIMM_MIN)
1279 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1280 if (argw <= 0x7fff7fffl && argw >= -0x80000000l) {
1284 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1309 if (FAST_IS_REG(dst)) {
1316 src2_tmp_reg = dst_r;
1320 if (FAST_IS_REG(src2)) {
1330 src2_r = src2_tmp_reg;
1334 src2_r = src2_tmp_reg;
1338 if (FAST_IS_REG(src1)) {
1362 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1367 CHECK(check_sljit_emit_op0(compiler, op));
1369 op = GET_OPCODE(op);
1377 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1387 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1397 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1416 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1419 op = GET_OPCODE(op);
1438 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1440 #if defined(_ARCH_PWR10) && _ARCH_PWR10
1441 return push_inst(compiler, BRD |
S(src) |
A(dst));
1457 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1475 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1488 offs_reg = OFFS_REG(mem);
1496 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1497 }
else if (memw > 0x7fff7fffl || memw < -0x80000000l) {
1522 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1525 #if defined(_ARCH_PWR7) && _ARCH_PWR7
1526 return push_inst(compiler, STDBRX |
S(src) |
A(mem) |
B(offs_reg));
1528 #if defined(SLJIT_LITTLE_ENDIAN) && SLJIT_LITTLE_ENDIAN
1541 #if defined(_ARCH_PWR7) && _ARCH_PWR7
1542 return push_inst(compiler, LDBRX |
S(dst) |
A(mem) |
B(offs_reg));
1556 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1563 #define EMIT_MOV(type, type_flags, type_cast) \
1564 emit_op(compiler, (src == SLJIT_IMM) ? SLJIT_MOV : type, flags | (type_flags), dst, dstw, TMP_REG1, 0, src, (src == SLJIT_IMM) ? type_cast srcw : srcw)
1574 CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1575 ADJUST_LOCAL_OFFSET(dst, dstw);
1576 ADJUST_LOCAL_OFFSET(src, srcw);
1578 op = GET_OPCODE(op);
1583 if (op <=
SLJIT_MOV_P && FAST_IS_REG(src) && src == dst) {
1584 if (!TYPE_CAST_NEEDED(op))
1588 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1603 if (HAS_FLAGS(op_flags))
1611 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
1619 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1642 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1649 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1656 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1659 return emit_rev(compiler, op, dst, dstw, src, srcw);
1668 #define TEST_SL_IMM(src, srcw) \
1669 ((src) == SLJIT_IMM && (srcw) <= SIMM_MAX && (srcw) >= SIMM_MIN)
1670 #define TEST_UL_IMM(src, srcw) \
1671 ((src) == SLJIT_IMM && !((srcw) & ~0xffff))
1672 #define TEST_UH_IMM(src, srcw) \
1673 ((src) == SLJIT_IMM && !((srcw) & ~(sljit_sw)0xffff0000))
1675 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1676 #define TEST_SH_IMM(src, srcw) \
1677 ((src) == SLJIT_IMM && !((srcw) & 0xffff) && (srcw) <= 0x7fffffffl && (srcw) >= -0x80000000l)
1678 #define TEST_ADD_IMM(src, srcw) \
1679 ((src) == SLJIT_IMM && (srcw) <= 0x7fff7fffl && (srcw) >= -0x80000000l)
1680 #define TEST_UI_IMM(src, srcw) \
1681 ((src) == SLJIT_IMM && !((srcw) & ~0xffffffff))
1683 #define TEST_ADD_FORM1(op) \
1684 (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
1685 || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z | SLJIT_SET_CARRY))
1686 #define TEST_SUB_FORM2(op) \
1687 ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \
1688 || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z))
1689 #define TEST_SUB_FORM3(op) \
1690 (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
1691 || (op & (SLJIT_32 | SLJIT_SET_Z)) == (SLJIT_32 | SLJIT_SET_Z))
1694 #define TEST_SH_IMM(src, srcw) \
1695 ((src) == SLJIT_IMM && !((srcw) & 0xffff))
1696 #define TEST_ADD_IMM(src, srcw) \
1697 ((src) == SLJIT_IMM)
1698 #define TEST_UI_IMM(src, srcw) \
1699 ((src) == SLJIT_IMM)
1701 #define TEST_ADD_FORM1(op) \
1702 (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
1703 #define TEST_SUB_FORM2(op) \
1704 (GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL)
1705 #define TEST_SUB_FORM3(op) \
1706 (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
1717 CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
1718 ADJUST_LOCAL_OFFSET(dst, dstw);
1719 ADJUST_LOCAL_OFFSET(src1, src1w);
1720 ADJUST_LOCAL_OFFSET(src2, src2w);
1722 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1737 switch (GET_OPCODE(op)) {
1746 compiler->imm = (
sljit_ins)src2w & 0xffff;
1750 compiler->imm = (
sljit_ins)src1w & 0xffff;
1754 compiler->imm = (
sljit_ins)(src2w >> 16) & 0xffff;
1758 compiler->imm = (
sljit_ins)(src1w >> 16) & 0xffff;
1763 compiler->imm = (
sljit_ins)src2w & 0xffffffff;
1767 compiler->imm = (
sljit_ins)src1w & 0xffffffff;
1772 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1775 compiler->imm = (
sljit_ins)src2w & 0xffff;
1779 compiler->imm = (
sljit_ins)src1w & 0xffff;
1785 if (HAS_FLAGS(op)) {
1787 compiler->imm = (
sljit_ins)src2w & 0xffff;
1791 compiler->imm = (
sljit_ins)src1w & 0xffff;
1807 compiler->imm = (
sljit_ins)src2w & 0xffff;
1822 compiler->imm = (
sljit_ins)src2w & 0xffff;
1830 compiler->imm = (
sljit_ins)src2w & 0xffff;
1840 compiler->imm = (
sljit_ins)(-src2w) & 0xffff;
1845 compiler->imm = (
sljit_ins)src1w & 0xffff;
1849 if (!HAS_FLAGS(op)) {
1851 compiler->imm = (
sljit_ins)((-src2w) >> 16) & 0xffff;
1869 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1873 if (!HAS_FLAGS(op)) {
1875 compiler->imm = (
sljit_ins)src2w & 0xffff;
1879 compiler->imm = (
sljit_ins)src1w & 0xffff;
1898 if (!HAS_FLAGS(op) || GET_OPCODE(op) ==
SLJIT_AND) {
1908 compiler->imm = (
sljit_ins)(src2w >> 16) & 0xffff;
1912 compiler->imm = (
sljit_ins)(src1w >> 16) & 0xffff;
1916 if (!HAS_FLAGS(op) && GET_OPCODE(op) !=
SLJIT_AND) {
1927 return emit_op(compiler, GET_OPCODE(op),
flags, dst, dstw, src1, src1w, src2, src2w);
1937 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1945 return emit_op(compiler, GET_OPCODE(op),
flags, dst, dstw, src1, src1w, src2, src2w);
1956 CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
1958 SLJIT_SKIP_CHECKS(compiler);
1962 #undef TEST_ADD_FORM1
1963 #undef TEST_SUB_FORM2
1964 #undef TEST_SUB_FORM3
1972 CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
1974 switch (GET_OPCODE(op)) {
1976 SLJIT_SKIP_CHECKS(compiler);
1991 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2000 CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w));
2004 if (src1_reg == src2_reg) {
2005 SLJIT_SKIP_CHECKS(compiler);
2009 ADJUST_LOCAL_OFFSET(src3, src3w);
2012 src3w &= bit_length - 1;
2017 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2045 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2075 if (!(src & OFFS_REG_MASK)) {
2076 if (srcw == 0 && (src & REG_MASK))
2087 return push_inst(compiler,
DCBT |
A(src & REG_MASK) |
B(OFFS_REG(src)));
2097 CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));
2098 ADJUST_LOCAL_OFFSET(src, srcw);
2102 if (FAST_IS_REG(src))
2128 CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw));
2129 ADJUST_LOCAL_OFFSET(dst, dstw);
2133 if (FAST_IS_REG(dst))
2139 dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG1;
2152 CHECK_REG_INDEX(check_sljit_get_register_index(
type, reg));
2169 CHECK(check_sljit_emit_op_custom(compiler, instruction,
size));
2178 #define SELECT_FOP(op, single, double) ((sljit_ins)((op & SLJIT_32) ? single : double))
2190 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2191 op = GET_OPCODE(op);
2195 if (FAST_IS_REG(dst)) {
2205 if (FAST_IS_REG(dst)) {
2213 if (dst & OFFS_REG_MASK) {
2219 dstw = OFFS_REG(dst);
2222 if ((dst & REG_MASK) && !dstw) {
2223 dstw = dst & REG_MASK;
2251 switch (GET_FLAG_TYPE(op)) {
2253 return push_inst(compiler,
CROR | ((4 + 2) << 21) | ((4 + 2) << 16) | ((4 + 3) << 11));
2255 return push_inst(compiler,
CROR | ((4 + 0) << 21) | ((4 + 0) << 16) | ((4 + 3) << 11));
2257 return push_inst(compiler,
CROR | ((4 + 1) << 21) | ((4 + 1) << 16) | ((4 + 3) << 11));
2272 SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
2277 dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG1;
2284 switch (GET_OPCODE(op)) {
2321 CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
2322 ADJUST_LOCAL_OFFSET(dst, dstw);
2323 ADJUST_LOCAL_OFFSET(src1, src1w);
2324 ADJUST_LOCAL_OFFSET(src2, src2w);
2326 dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG2;
2338 switch (GET_OPCODE(op)) {
2353 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
2359 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
2385 CHECK(check_sljit_emit_fset32(compiler, freg,
value));
2405 CHECK_PTR(check_sljit_emit_label(compiler));
2412 set_label(
label, compiler);
2421 return (4 << 21) | (2 << 16);
2425 return (12 << 21) | (2 << 16);
2429 return (12 << 21) | (2 << 16);
2433 return (4 << 21) | (2 << 16);
2437 return (12 << 21) | (0 << 16);
2441 return (4 << 21) | (0 << 16);
2445 return (12 << 21) | (1 << 16);
2449 return (4 << 21) | (1 << 16);
2452 return (12 << 21) | (3 << 16);
2455 return (4 << 21) | (3 << 16);
2460 return (12 << 21) | ((4 + 0) << 16);
2465 return (4 << 21) | ((4 + 0) << 16);
2470 return (12 << 21) | ((4 + 1) << 16);
2475 return (4 << 21) | ((4 + 1) << 16);
2480 return (12 << 21) | ((4 + 2) << 16);
2485 return (4 << 21) | ((4 + 2) << 16);
2488 return (12 << 21) | ((4 + 3) << 16);
2491 return (4 << 21) | ((4 + 3) << 16);
2505 CHECK_PTR(check_sljit_emit_jump(compiler,
type));
2521 jump->
flags |= IS_COND;
2522 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
2524 jump->
flags |= IS_CALL;
2531 compiler->
size += JUMP_MAX_SIZE - 1;
2541 CHECK_PTR(check_sljit_emit_call(compiler,
type, arg_types));
2543 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2553 SLJIT_SKIP_CHECKS(compiler);
2563 CHECK(check_sljit_emit_ijump(compiler,
type, src, srcw));
2569 set_jump(jump, compiler, JUMP_ADDR);
2572 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
2574 jump->
flags |= IS_CALL;
2581 compiler->
size += JUMP_MAX_SIZE - 1;
2585 if (FAST_IS_REG(src)) {
2586 #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL)
2596 ADJUST_LOCAL_OFFSET(src, srcw);
2612 CHECK(check_sljit_emit_icall(compiler,
type, arg_types, src, srcw));
2615 ADJUST_LOCAL_OFFSET(src, srcw);
2630 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2635 SLJIT_SKIP_CHECKS(compiler);
2647 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2654 CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw,
type));
2655 ADJUST_LOCAL_OFFSET(dst, dstw);
2657 op = GET_OPCODE(op);
2786 SLJIT_SKIP_CHECKS(compiler);
2800 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2807 CHECK(check_sljit_emit_select(compiler,
type, dst_reg, src1, src1w, src2_reg));
2809 ADJUST_LOCAL_OFFSET(src1, src1w);
2811 if (dst_reg != src2_reg) {
2812 if (dst_reg == src1) {
2817 if (ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
2820 if ((src1 & REG_MASK) == dst_reg)
2821 src1 = (src1 & ~REG_MASK) |
TMP_REG1;
2823 if (OFFS_REG(src1) == dst_reg)
2824 src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(
TMP_REG1);
2843 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)
2864 CHECK(check_sljit_emit_fselect(compiler,
type, dst_freg, src1, src1w, src2_freg));
2866 ADJUST_LOCAL_OFFSET(src1, src1w);
2868 if (dst_freg != src2_freg) {
2869 if (dst_freg == src1) {
2895 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
2897 #define EMIT_MEM_LOAD_IMM(inst, mem, memw) \
2898 ((sljit_s16)(memw) > SIMM_MAX - SSIZE_OF(sw))
2902 #define EMIT_MEM_LOAD_IMM(inst, mem, memw) \
2903 ((((inst) & INT_ALIGNED) && ((memw) & 0x3) != 0) \
2904 || ((sljit_s16)(memw) > SIMM_MAX - SSIZE_OF(sw)) \
2905 || ((memw) > 0x7fff7fffl || (memw) < -0x80000000l)) \
2916 CHECK(check_sljit_emit_mem(compiler,
type, reg, mem, memw));
2918 if (!(reg & REG_PAIR_MASK))
2919 return sljit_emit_mem_unaligned(compiler,
type, reg, mem, memw);
2921 ADJUST_LOCAL_OFFSET(mem, memw);
2938 if ((mem & REG_MASK) != 0) {
2939 SLJIT_SKIP_CHECKS(compiler);
2959 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
2965 return push_inst(compiler, inst |
D(REG_PAIR_FIRST(reg)) |
A(mem) |
IMM(memw));
2969 return push_inst(compiler, inst |
D(REG_PAIR_SECOND(reg)) |
A(mem) |
IMM(memw + SSIZE_OF(
sw)));
2972 #undef EMIT_MEM_LOAD_IMM
2982 CHECK(check_sljit_emit_mem_update(compiler,
type, reg, mem, memw));
2987 switch (
type & 0xff) {
2990 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
2998 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
3008 if (mem & OFFS_REG_MASK)
3054 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
3055 if ((inst & INT_ALIGNED) && (memw & 0x3) != 0)
3078 CHECK(check_sljit_emit_fmem_update(compiler,
type, freg, mem, memw));
3115 CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
3116 ADJUST_LOCAL_OFFSET(dst, dstw);
3120 set_const(const_, compiler);
3122 dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
3137 CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
3138 ADJUST_LOCAL_OFFSET(dst, dstw);
3142 set_mov_addr(jump, compiler, 0);
3144 dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
3146 #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32)
3149 compiler->
size += 4;
#define CHECK_ERROR(name, s)
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_LOCALS_OFFSET
#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_CALL_REG_ARG
#define SLJIT_ARG_TYPE_SCRATCH_REG
#define SLJIT_ORDERED_LESS_EQUAL
#define SLJIT_CONV_S32_FROM_F64
#define SLJIT_FAST_RETURN
#define SLJIT_HAS_ZERO_REGISTER
#define SLJIT_FIRST_SAVED_REG
#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_PREFETCH_L1
#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_CONV_SW_FROM_F64
#define SLJIT_CURRENT_FLAGS_ADD
#define SLJIT_HAS_PREFETCH
#define SLJIT_ENTER_REG_ARG
#define SLJIT_SIG_GREATER
#define SLJIT_FLOAT_REGISTER
#define SLJIT_GET_RETURN_ADDRESS
#define SLJIT_FIRST_SAVED_FLOAT_REG
#define SLJIT_GREATER_EQUAL
#define SLJIT_GP_REGISTER
#define SLJIT_SKIP_FRAMES_BEFORE_RETURN
#define SLJIT_ERR_COMPILED
#define SLJIT_F_LESS_EQUAL
#define SLJIT_ORDERED_LESS
#define SLJIT_CONV_F64_FROM_F32
#define SLJIT_PREFETCH_L2
void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset)
#define SLJIT_CURRENT_FLAGS_SUB
#define SLJIT_PREFETCH_ONCE
#define SLJIT_ORDERED_NOT_EQUAL
#define SLJIT_UNORDERED_OR_GREATER_EQUAL
static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw imm)
static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, sljit_uw dst, sljit_uw src1, sljit_uw src2)
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_INLINE sljit_s32 emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw init_value, sljit_ins last_ins)
static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr, sljit_u32 *extra_space)
#define SLJIT_IS_FPU_AVAILABLE
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)
static const sljit_ins updated_data_transfer_insts[64]
#define TMP_MEM_OFFSET_HI
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump * sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
#define TEST_SUB_FORM2(op)
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)
#define INST_CODE_AND_DST(inst, flags, reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw)
#define TEST_SH_IMM(src, 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)
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 emit_prefetch(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw)
#define TEST_ADD_IMM(src, srcw)
static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 inp_flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 tmp_reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 type, sljit_s32 reg)
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset)
static sljit_s32 emit_rev(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_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)
#define SELECT_FOP(op, single, double)
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 TEST_UI_IMM(src, srcw)
static void generate_jump_or_mov_addr(struct sljit_jump *jump, sljit_sw executable_offset)
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)
#define EMIT_MEM_LOAD_IMM(inst, mem, memw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)
#define TEST_UH_IMM(src, srcw)
static const sljit_ins data_transfer_insts[64+16]
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)
static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type)
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)
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS+7]
static void reduce_code_size(struct sljit_compiler *compiler)
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 EMIT_MOV(type, type_flags, type_cast)
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)
#define STACK_MAX_DISTANCE
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)
#define TEST_UL_IMM(src, srcw)
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_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 input_flags, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
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)
#define TEST_SL_IMM(src, srcw)
#define TMP_MEM_OFFSET_LO
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)
#define TEST_SUB_FORM3(op)
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)
#define TEST_ADD_FORM1(op)
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)
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
static CS_CONTEXT * context