SLJIT_CPUINFO;
32 return "RISC-V-64"SLJIT_CPUINFO;
40 #define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) 41 #define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) 42 #define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4) 46 #define EQUAL_FLAG (SLJIT_NUMBER_OF_REGISTERS + 5) 47 #define RETURN_ADDR_REG TMP_REG2 48 #define OTHER_FLAG (SLJIT_NUMBER_OF_REGISTERS + 6) 50 #define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1) 51 #define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) 540, 10, 11, 12, 13, 14, 15, 16, 17, 29, 30, 31, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 9, 8, 2, 6, 1, 7, 5, 28
580, 10, 11, 12, 13, 14, 15, 16, 17, 2, 3, 4, 5, 6, 7, 28, 29, 30, 31, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 9, 8, 0, 1,
65 #define RD(rd) ((sljit_ins)reg_map[rd] << 7) 66 #define RS1(rs1) ((sljit_ins)reg_map[rs1] << 15) 67 #define RS2(rs2) ((sljit_ins)reg_map[rs2] << 20) 68 #define FRD(rd) ((sljit_ins)freg_map[rd] << 7) 69 #define FRS1(rs1) ((sljit_ins)freg_map[rs1] << 15) 70 #define FRS2(rs2) ((sljit_ins)freg_map[rs2] << 20) 71 #define IMM_I(imm) ((sljit_ins)(imm) << 20) 72 #define IMM_S(imm) ((((sljit_ins)(imm) & 0xfe0) << 20) | (((sljit_ins)(imm) & 0x1f) << 7)) 75 #define OPC(o) ((sljit_ins)(o)) 76 #define F3(f) ((sljit_ins)(f) << 12) 77 #define F12(f) ((sljit_ins)(f) << 20) 78 #define F7(f) ((sljit_ins)(f) << 25) 80 #define ADD (F7(0x0) | F3(0x0) | OPC(0x33)) 81 #define ADDI (F3(0x0) | OPC(0x13)) 82 #define AND (F7(0x0) | F3(0x7) | OPC(0x33)) 83 #define ANDI (F3(0x7) | OPC(0x13)) 84 #define AUIPC (OPC(0x17)) 85 #define BEQ (F3(0x0) | OPC(0x63)) 86 #define BNE (F3(0x1) | OPC(0x63)) 87 #define BLT (F3(0x4) | OPC(0x63)) 88 #define BGE (F3(0x5) | OPC(0x63)) 89 #define BLTU (F3(0x6) | OPC(0x63)) 90 #define BGEU (F3(0x7) | OPC(0x63)) 91 #define DIV (F7(0x1) | F3(0x4) | OPC(0x33)) 92 #define DIVU (F7(0x1) | F3(0x5) | OPC(0x33)) 93 #define EBREAK (F12(0x1) | F3(0x0) | OPC(0x73)) 94 #define FADD_S (F7(0x0) | F3(0x7) | OPC(0x53)) 95 #define FDIV_S (F7(0xc) | F3(0x7) | OPC(0x53)) 96 #define FEQ_S (F7(0x50) | F3(0x2) | OPC(0x53)) 97 #define FLD (F3(0x3) | OPC(0x7)) 98 #define FLE_S (F7(0x50) | F3(0x0) | OPC(0x53)) 99 #define FLT_S (F7(0x50) | F3(0x1) | OPC(0x53)) 101 #define FCVT_S_D (F7(0x20) | OPC(0x53)) 102 #define FCVT_S_W (F7(0x68) | OPC(0x53)) 103 #define FCVT_S_WU (F7(0x68) | F12(0x1) | OPC(0x53)) 104 #define FCVT_W_S (F7(0x60) | F3(0x1) | OPC(0x53)) 105 #define FMUL_S (F7(0x8) | F3(0x7) | OPC(0x53)) 106 #define FMV_X_W (F7(0x70) | F3(0x0) | OPC(0x53)) 107 #define FMV_W_X (F7(0x78) | F3(0x0) | OPC(0x53)) 108 #define FSD (F3(0x3) | OPC(0x27)) 109 #define FSGNJ_S (F7(0x10) | F3(0x0) | OPC(0x53)) 110 #define FSGNJN_S (F7(0x10) | F3(0x1) | OPC(0x53)) 111 #define FSGNJX_S (F7(0x10) | F3(0x2) | OPC(0x53)) 112 #define FSUB_S (F7(0x4) | F3(0x7) | OPC(0x53)) 113 #define FSW (F3(0x2) | OPC(0x27)) 114 #define JAL (OPC(0x6f)) 115 #define JALR (F3(0x0) | OPC(0x67)) 116 #define LD (F3(0x3) | OPC(0x3)) 117 #define LUI (OPC(0x37)) 118 #define LW (F3(0x2) | OPC(0x3)) 119 #define MUL (F7(0x1) | F3(0x0) | OPC(0x33)) 120 #define MULH (F7(0x1) | F3(0x1) | OPC(0x33)) 121 #define MULHU (F7(0x1) | F3(0x3) | OPC(0x33)) 122 #define OR (F7(0x0) | F3(0x6) | OPC(0x33)) 123 #define ORI (F3(0x6) | OPC(0x13)) 124 #define REM (F7(0x1) | F3(0x6) | OPC(0x33)) 125 #define REMU (F7(0x1) | F3(0x7) | OPC(0x33)) 126 #define SD (F3(0x3) | OPC(0x23)) 127 #define SLL (F7(0x0) | F3(0x1) | OPC(0x33)) 128 #define SLLI (IMM_I(0x0) | F3(0x1) | OPC(0x13)) 129 #define SLT (F7(0x0) | F3(0x2) | OPC(0x33)) 130 #define SLTI (F3(0x2) | OPC(0x13)) 131 #define SLTU (F7(0x0) | F3(0x3) | OPC(0x33)) 132 #define SLTUI (F3(0x3) | OPC(0x13)) 133 #define SRL (F7(0x0) | F3(0x5) | OPC(0x33)) 134 #define SRLI (IMM_I(0x0) | F3(0x5) | OPC(0x13)) 135 #define SRA (F7(0x20) | F3(0x5) | OPC(0x33)) 136 #define SRAI (IMM_I(0x400) | F3(0x5) | OPC(0x13)) 137 #define SUB (F7(0x20) | F3(0x0) | OPC(0x33)) 138 #define SW (F3(0x2) | OPC(0x23)) 139 #define XOR (F7(0x0) | F3(0x4) | OPC(0x33)) 140 #define XORI (F3(0x4) | OPC(0x13)) 142 #define SIMM_MAX (0x7ff) 143 #define SIMM_MIN (-0x800) 144 #define BRANCH_MAX (0xfff) 145 #define BRANCH_MIN (-0x1000) 146 #define JUMP_MAX (0xfffff) 147 #define JUMP_MIN (-0x100000) 149 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 150 #define S32_MAX (0x7ffff7ffl) 151 #define S32_MIN (-0x80000000l) 152 #define S44_MAX (0x7fffffff7ffl) 153 #define S52_MAX (0x7ffffffffffffl) 181 if(jump->
flags& JUMP_ADDR)
182target_addr = jump->
u.
target;
190 if(jump->
flags& IS_COND) {
191diff += SSIZE_OF(ins);
195inst[0] = (inst[0] & 0x1fff07f) ^ 0x1000;
196jump->
flags|= PATCH_B;
201diff -= SSIZE_OF(ins);
205 if(jump->
flags& IS_COND) {
206 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 213jump->
flags|= PATCH_J;
217 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 219 if(jump->
flags& IS_COND)
222jump->
flags|= PATCH_REL32;
228 if(jump->
flags& IS_COND)
231jump->
flags|= PATCH_ABS32;
236 if(target_addr <= S44_MAX) {
237 if(jump->
flags& IS_COND)
240jump->
flags|= PATCH_ABS44;
246 if(jump->
flags& IS_COND)
249jump->
flags|= PATCH_ABS52;
256 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 265 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 274 if(jump->
flags& JUMP_ADDR)
283jump->
flags|= PATCH_REL32;
289jump->
flags|= PATCH_ABS32;
293 if(
addr<= S44_MAX) {
295jump->
flags|= PATCH_ABS44;
301jump->
flags|= PATCH_ABS52;
317 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 322 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 323 if(
flags& PATCH_REL32) {
324 addr-= (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(ins, executable_offset);
328 if((
addr& 0x800) != 0)
333 if(!(
flags& JUMP_MOV_ADDR)) {
335ins[1] = (ins[1] & 0xfffff) |
IMM_I(
addr);
342 if((
addr& 0x800) != 0)
345 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 349 if(
flags& PATCH_ABS32) {
352}
else if(
flags& PATCH_ABS44) {
361 if((high & 0x800) != 0)
373 if((
addr& 0x80000000l) != 0)
376 if(
flags& PATCH_ABS52) {
380 if((high & 0x800) != 0)
394 if(!(
flags& JUMP_MOV_ADDR)) {
396ins[1] = (ins[1] & 0xfffff) |
IMM_I(
addr);
406SLJIT_NEXT_DEFINE_TYPES;
412jump = compiler->
jumps;
413const_ = compiler->
consts;
414SLJIT_NEXT_INIT_TYPES();
417SLJIT_GET_NEXT_MIN();
419 if(next_min_addr == SLJIT_MAX_ADDRESS)
422 if(next_min_addr == next_label_size) {
423 label->size -= size_reduce;
426next_label_size = SLJIT_GET_NEXT_SIZE(
label);
429 if(next_min_addr == next_const_addr) {
430const_->
addr-= size_reduce;
431const_ = const_->
next;
432next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
436 if(next_min_addr != next_jump_addr)
439jump->
addr-= size_reduce;
440 if(!(jump->
flags& JUMP_MOV_ADDR)) {
444 if(jump->
flags& JUMP_ADDR) {
445 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 448 else if(jump->
u.
target<= S44_MAX)
457 if((jump->
flags& IS_COND) && (diff + 1) <= (
BRANCH_MAX/ SSIZE_OF(ins)) && (diff + 1) >= (
BRANCH_MIN/ SSIZE_OF(ins)))
459 else if(diff >= (
JUMP_MIN/ SSIZE_OF(ins)) && diff <= (
JUMP_MAX/ SSIZE_OF(ins)))
461 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 462 else if(diff >= (
S32_MIN/ SSIZE_OF(ins)) && diff <= (
S32_MAX/ SSIZE_OF(ins)))
470 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 474 if(!(jump->
flags& JUMP_ADDR)) {
478 if(diff >= (
S32_MIN/ SSIZE_OF(ins)) && diff <= (
S32_MAX/ SSIZE_OF(ins)))
482 else if(jump->
u.
target< S44_MAX)
493next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
496compiler->
size-= size_reduce;
507SLJIT_NEXT_DEFINE_TYPES;
516CHECK_PTR(check_sljit_generate_code(compiler));
520 code= (
sljit_ins*)allocate_executable_memory(compiler->
size*
sizeof(
sljit_ins), options, exec_allocator_data, &executable_offset);
523reverse_buf(compiler);
529jump = compiler->
jumps;
530const_ = compiler->
consts;
531SLJIT_NEXT_INIT_TYPES();
532SLJIT_GET_NEXT_MIN();
536buf_end = buf_ptr + (
buf->used_size >> 2);
538*code_ptr = *buf_ptr++;
539 if(next_min_addr == word_count) {
545 if(next_min_addr == next_label_size) {
546 label->u.addr = (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
549next_label_size = SLJIT_GET_NEXT_SIZE(
label);
552 if(next_min_addr == next_jump_addr) {
553 if(!(jump->
flags& JUMP_MOV_ADDR)) {
554word_count = word_count - 1 + (jump->
flags>> JUMP_SIZE_SHIFT);
559 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 564word_count += jump->
flags>> JUMP_SIZE_SHIFT;
571next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump);
572}
else if(next_min_addr == next_const_addr) {
574const_ = const_->
next;
575next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_);
578SLJIT_GET_NEXT_MIN();
582}
while(buf_ptr < buf_end);
598jump = compiler->
jumps;
601 if(!(jump->
flags& (PATCH_B | PATCH_J)) || (jump->
flags& JUMP_MOV_ADDR)) {
608 addr-= (
sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset);
610 if(jump->
flags& PATCH_B) {
612 addr= ((
addr& 0x800) >> 4) | ((
addr& 0x1e) << 7) | ((
addr& 0x7e0) << 20) | ((
addr& 0x1000) << 19);
618 addr= (
addr& 0xff000) | ((
addr& 0x800) << 9) | ((
addr& 0x7fe) << 20) | ((
addr& 0x100000) << 11);
630code_ptr = (
sljit_ins*)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset);
639 switch(feature_type) {
641 #ifdef SLJIT_IS_FPU_AVAILABLE 643 #elif defined(__riscv_float_abi_soft) 650 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 679 #define LOAD_DATA 0x01 680 #define WORD_DATA 0x00 681 #define BYTE_DATA 0x02 682 #define HALF_DATA 0x04 683 #define INT_DATA 0x06 684 #define SIGNED_DATA 0x08 687 #define DOUBLE_DATA 0x10 688 #define SINGLE_DATA 0x12 690 #define MEM_MASK 0x1f 692 #define ARG_TEST 0x00020 693 #define ALT_KEEP_CACHE 0x00040 694 #define CUMULATIVE_OP 0x00080 695 #define IMM_OP 0x00100 696 #define MOVE_OP 0x00200 697 #define SRC2_IMM 0x00400 699 #define UNUSED_DEST 0x00800 700 #define REG_DEST 0x01000 701 #define REG1_SOURCE 0x02000 702 #define REG2_SOURCE 0x04000 703 #define SLOW_SRC1 0x08000 704 #define SLOW_SRC2 0x10000 705 #define SLOW_DEST 0x20000 706 #define MEM_USE_TMP2 0x40000 708 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 709 #define STACK_STORE SW 710 #define STACK_LOAD LW 712 #define STACK_STORE SD 713 #define STACK_LOAD LD 716 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 722 #define STACK_MAX_DISTANCE (-SIMM_MIN) 731 sljit_s32saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options);
734 CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
735set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
737local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 1);
738 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 740 if((local_size & SSIZE_OF(
sw)) != 0)
741local_size += SSIZE_OF(
sw);
742local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
745local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
753 offset= local_size - SSIZE_OF(
sw);
777 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 779 if((
offset& SSIZE_OF(
sw)) != 0)
796 else if(local_size > 0)
806 while(arg_types > 0) {
821 #undef STACK_MAX_DISTANCE 828 CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size));
829set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size);
831local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 1);
832 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 834 if((local_size & SSIZE_OF(
sw)) != 0)
835local_size += SSIZE_OF(
sw);
836local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
839local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64);
846 #define STACK_MAX_DISTANCE (-SIMM_MIN - 16) 867 offset= local_size - SSIZE_OF(
sw);
882 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 884 if((
offset& SSIZE_OF(
sw)) != 0)
902 #undef STACK_MAX_DISTANCE 907 CHECK(check_sljit_emit_return_void(compiler));
917 CHECK(check_sljit_emit_return_to(compiler, src, srcw));
920ADJUST_LOCAL_OFFSET(src, srcw);
932SLJIT_SKIP_CHECKS(compiler);
940 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 941 #define ARCH_32_64(a, b) a 943 #define ARCH_32_64(a, b) b 949 F3(0x0) |
OPC(0x23)
,
950 F3(0x4) |
OPC(0x3)
,
951 F3(0x1) |
OPC(0x23)
,
952 F3(0x5) |
OPC(0x3)
,
953 F3(0x2) |
OPC(0x23)
,
958 F3(0x0) |
OPC(0x23)
,
959 F3(0x0) |
OPC(0x3)
,
960 F3(0x1) |
OPC(0x23)
,
961 F3(0x1) |
OPC(0x3)
,
962 F3(0x2) |
OPC(0x23)
,
963 F3(0x2) |
OPC(0x3)
,
965 F3(0x3) |
OPC(0x27)
,
966 F3(0x3) |
OPC(0x7)
,
967 F3(0x2) |
OPC(0x27)
,
968 F3(0x2) |
OPC(0x7)
,
993 if(!(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >=
SIMM_MIN) {
1004 #define TO_ARGW_HI(argw) (((argw) & ~0xfff) + (((argw) & 0x800) ? 0x1000 : 0)) 1013 if(arg & OFFS_REG_MASK) {
1016 if(argw && argw == next_argw && (arg == next_arg || (arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK)))
1021 if(arg == next_arg) {
1048 if(argw == compiler->cache_argw) {
1049 if(arg == compiler->cache_arg)
1052 if((
SLJIT_MEM| (arg & OFFS_REG_MASK)) == compiler->cache_arg) {
1053 if(arg == next_arg && argw == (next_argw & 0x3)) {
1054compiler->cache_arg = arg;
1055compiler->cache_argw = argw;
1065compiler->cache_arg =
SLJIT_MEM| (arg & OFFS_REG_MASK);
1066compiler->cache_argw = argw;
1070 if(arg == next_arg && argw == (next_argw & 0x3)) {
1071compiler->cache_arg = arg;
1072compiler->cache_argw = argw;
1081 if(compiler->cache_arg == arg && argw - compiler->cache_argw <=
SIMM_MAX&& argw - compiler->cache_argw >=
SIMM_MIN)
1084 if(compiler->cache_arg ==
SLJIT_MEM&& (argw - compiler->cache_argw <=
SIMM_MAX) && (argw - compiler->cache_argw >=
SIMM_MIN)) {
1085 offset= argw - compiler->cache_argw;
1091 if(next_arg && next_argw - argw <= SIMM_MAX && next_argw - argw >=
SIMM_MIN&& argw_hi !=
TO_ARGW_HI(next_argw)) {
1093compiler->cache_argw = argw;
1097compiler->cache_argw = argw_hi;
1106 if(arg == next_arg && next_argw - argw <= SIMM_MAX && next_argw - argw >=
SIMM_MIN) {
1107compiler->cache_arg = arg;
1122 returncompiler->
error;
1151 returncompiler->
error;
1155 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 1158 #define IMM_EXTEND(v) (IMM_I(v)) 1161 #define WORD_32 0x08 1162 #define IMM_EXTEND(v) (IMM_I((op & SLJIT_32) ? (v) : (32 + (v)))) 1168 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1213 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1254 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1268 #define EMIT_LOGICAL(op_imm, op_reg) \ 1269 if (flags & SRC2_IMM) { \ 1270 if (op & SLJIT_SET_Z) \ 1271 FAIL_IF(push_inst(compiler, op_imm | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(src2))); \ 1272 if (!(flags & UNUSED_DEST)) \ 1273 FAIL_IF(push_inst(compiler, op_imm | RD(dst) | RS1(src1) | IMM_I(src2))); \ 1276 if (op & SLJIT_SET_Z) \ 1277 FAIL_IF(push_inst(compiler, op_reg | RD(EQUAL_FLAG) | RS1(src1) | RS2(src2))); \ 1278 if (!(flags & UNUSED_DEST)) \ 1279 FAIL_IF(push_inst(compiler, op_reg | RD(dst) | RS1(src1) | RS2(src2))); \ 1282 #define EMIT_SHIFT(imm, reg) \ 1289 sljit_s32is_overflow, is_carry, carry_src_r, is_handled, reg;
1291 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1297 switch(GET_OPCODE(op)) {
1338 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1363 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 1367 return emit_rev(compiler, op, dst, src2);
1374 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1409 if(is_overflow || carry_src_r != 0) {
1412 else if(src2 != dst)
1426 if(is_overflow || carry_src_r != 0) {
1448 if(carry_src_r != 0) {
1451 else if(src2 != dst)
1463 if(carry_src_r != 0) {
1472 if(carry_src_r == 0)
1510 switch(GET_FLAG_TYPE(op)) {
1555 if(is_overflow || is_carry)
1568 if(is_overflow || is_carry)
1623 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1633 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 1675 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1676src2 = ((op &
SLJIT_32) ? 32 : 64) - src2;
1737compiler->cache_arg = 0;
1738compiler->cache_argw = 0;
1746 else if(FAST_IS_REG(dst)) {
1750src2_tmp_reg = dst_r;
1756 if(src2 ==
SLJIT_IMM&& src2w != 0 && src2w <= SIMM_MAX && src2w >=
SIMM_MIN) {
1773 if(FAST_IS_REG(src1)) {
1792 if(FAST_IS_REG(src2)) {
1801src2_r = src2_tmp_reg;
1817src2_r = src2_tmp_reg;
1840 returncompiler->
error;
1850 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1857 CHECK(check_sljit_emit_op0(compiler, op));
1859 switch(GET_OPCODE(op)) {
1899 CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1900ADJUST_LOCAL_OFFSET(dst, dstw);
1901ADJUST_LOCAL_OFFSET(src, srcw);
1903 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1908 switch(GET_OPCODE(op)) {
1910 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 1918 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1966 CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w));
1967ADJUST_LOCAL_OFFSET(dst, dstw);
1968ADJUST_LOCAL_OFFSET(src1, src1w);
1969ADJUST_LOCAL_OFFSET(src2, src2w);
1971 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 1981 switch(GET_OPCODE(op)) {
1993compiler->status_flags_state = 0;
2010 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2032 CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w));
2034SLJIT_SKIP_CHECKS(compiler);
2035 return sljit_emit_op2(compiler, op, 0, 0, src1, src1w, src2, src2w);
2043 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 2048 CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w));
2052 switch(GET_OPCODE(op)) {
2054SLJIT_SKIP_CHECKS(compiler);
2070 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 2082 CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w));
2086 if(src1_reg == src2_reg) {
2087SLJIT_SKIP_CHECKS(compiler);
2091ADJUST_LOCAL_OFFSET(src3, src3w);
2094src3w &= bit_length - 1;
2101src3w = bit_length - src3w;
2105src3w = bit_length - src3w;
2117}
else if(dst_reg == src3) {
2149 CHECK(check_sljit_emit_op_src(compiler, op, src, srcw));
2150ADJUST_LOCAL_OFFSET(src, srcw);
2154 if(FAST_IS_REG(src))
2178 CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw));
2179ADJUST_LOCAL_OFFSET(dst, dstw);
2183 if(FAST_IS_REG(dst))
2189dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
2202CHECK_REG_INDEX(check_sljit_get_register_index(
type, reg));
2219 CHECK(check_sljit_emit_op_custom(compiler, instruction,
size));
2228 #define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7)) 2229 #define FMT(op) ((sljit_ins)((op & SLJIT_32) ^ SLJIT_32) << 17) 2235 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2236 # define flags (sljit_u32)0 2251 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2259 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2271 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2295 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2317 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2349 switch(GET_FLAG_TYPE(op)) {
2394compiler->cache_arg = 0;
2395compiler->cache_argw = 0;
2398SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
2403dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG1;
2410 switch(GET_OPCODE(op)) {
2445 CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
2446ADJUST_LOCAL_OFFSET(dst, dstw);
2447ADJUST_LOCAL_OFFSET(src1, src1w);
2448ADJUST_LOCAL_OFFSET(src2, src2w);
2450compiler->cache_arg = 0;
2451compiler->cache_argw = 0;
2453dst_r = FAST_IS_REG(dst) ? dst :
TMP_FREG2;
2490 switch(GET_OPCODE(op)) {
2526 CHECK(check_sljit_emit_fset32(compiler, freg,
value));
2546CHECK_PTR(check_sljit_emit_label(compiler));
2553set_label(
label, compiler);
2557 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2558 #define BRANCH_LENGTH ((sljit_ins)(3 * sizeof(sljit_ins)) << 7) 2560 #define BRANCH_LENGTH ((sljit_ins)(7 * sizeof(sljit_ins)) << 7) 2617CHECK_PTR(check_sljit_emit_jump(compiler,
type));
2628jump->
flags|= IS_COND;
2635jump->
flags|= IS_CALL;
2642compiler->
size+= JUMP_MAX_SIZE - 1;
2651CHECK_PTR(check_sljit_emit_call(compiler,
type, arg_types));
2658SLJIT_SKIP_CHECKS(compiler);
2672CHECK_PTR(check_sljit_emit_cmp(compiler,
type, src1, src1w, src2, src2w));
2673ADJUST_LOCAL_OFFSET(src1, src1w);
2674ADJUST_LOCAL_OFFSET(src2, src2w);
2676compiler->cache_arg = 0;
2677compiler->cache_argw = 0;
2678 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2691src2 = src2_tmp_reg;
2706src2 = src2_tmp_reg;
2756compiler->
size+= JUMP_MAX_SIZE - 1;
2760 #undef BRANCH_LENGTH 2767 CHECK(check_sljit_emit_ijump(compiler,
type, src, srcw));
2771ADJUST_LOCAL_OFFSET(src, srcw);
2788compiler->
size+= JUMP_MAX_SIZE - 1;
2798 CHECK(check_sljit_emit_icall(compiler,
type, arg_types, src, srcw));
2801ADJUST_LOCAL_OFFSET(src, srcw);
2816SLJIT_SKIP_CHECKS(compiler);
2826 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 2833 CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw,
type));
2834ADJUST_LOCAL_OFFSET(dst, dstw);
2836op = GET_OPCODE(op);
2839compiler->cache_arg = 0;
2840compiler->cache_argw = 0;
2893 return emit_op_mem(compiler, mem_type, src_r, dst, dstw);
2903 return emit_op(compiler, saved_op, mem_type, dst, dstw,
TMP_REG1, 0, src_r, 0);
2904 return emit_op(compiler, saved_op, mem_type, dst, dstw, dst, dstw, src_r, 0);
2914 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 2924 CHECK(check_sljit_emit_select(compiler,
type, dst_reg, src1, src1w, src2_reg));
2926ADJUST_LOCAL_OFFSET(src1, src1w);
2928 if(dst_reg != src2_reg) {
2929 if(dst_reg == src1) {
2934 if(ADDRESSING_DEPENDS_ON(src1, dst_reg)) {
2937 if((src1 & REG_MASK) == dst_reg)
2938src1 = (src1 & ~REG_MASK) |
TMP_REG1;
2940 if(OFFS_REG(src1) == dst_reg)
2941src1 = (src1 & ~OFFS_REG_MASK) | TO_OFFS_REG(
TMP_REG1);
2957 #if (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) 2981 CHECK(check_sljit_emit_fselect(compiler,
type, dst_freg, src1, src1w, src2_freg));
2983ADJUST_LOCAL_OFFSET(src1, src1w);
2985 if(dst_freg != src2_freg) {
2986 if(dst_freg == src1) {
3020 CHECK(check_sljit_emit_mem(compiler,
type, reg, mem, memw));
3022 if(!(reg & REG_PAIR_MASK))
3023 returnsljit_emit_mem_unaligned(compiler,
type, reg, mem, memw);
3037 if(((memw + 0x800) & 0xfff) <= 0xfff - SSIZE_OF(
sw)) {
3064 return push_mem_inst(compiler,
flags, REG_PAIR_SECOND(reg), mem, (memw + SSIZE_OF(
sw)) & 0xfff);
3075CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
3076ADJUST_LOCAL_OFFSET(dst, dstw);
3080set_const(const_, compiler);
3082dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
3097CHECK_PTR(check_sljit_emit_mov_addr(compiler, dst, dstw));
3098ADJUST_LOCAL_OFFSET(dst, dstw);
3102set_mov_addr(jump, compiler, 0);
3104dst_r = FAST_IS_REG(dst) ? dst :
TMP_REG2;
3106 #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) 3107compiler->
size+= 1;
3109compiler->
size+= 5;
#define CHECK_ERROR(name, s)
static const char label[]
if(yy_accept[yy_current_state])
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_ARG_TYPE_SCRATCH_REG
#define SLJIT_ORDERED_LESS_EQUAL
#define SLJIT_CONV_F64_FROM_S32
#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_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_ENTER_REG_ARG
#define SLJIT_SIG_GREATER
#define SLJIT_FLOAT_REGISTER
#define SLJIT_GET_RETURN_ADDRESS
#define SLJIT_FIRST_SAVED_FLOAT_REG
#define SLJIT_CONV_F64_FROM_SW
#define SLJIT_SHIFT_INTO_NON_ZERO
#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_F_LESS_EQUAL
#define SLJIT_ORDERED_LESS
#define SLJIT_HAS_COPY_F32
#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_CONV_F64_FROM_UW
#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_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)
#define SLJIT_IS_FPU_AVAILABLE
static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w)
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)
static sljit_s32 push_mem_inst(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 base, sljit_sw offset)
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]
static sljit_ins get_jump_instruction(sljit_s32 type)
static sljit_s32 emit_rev16(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw src)
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)
static SLJIT_INLINE sljit_ins * detect_jump_type(struct sljit_jump *jump, sljit_ins *code, sljit_sw executable_offset)
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)
static sljit_s32 emit_rev(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw src)
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_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
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 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw)
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_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)
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)
static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, sljit_s32 dst, sljit_s32 src1, sljit_sw src2)
#define EMIT_SHIFT(imm, reg)
#define EMIT_LOGICAL(op_imm, op_reg)
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)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler)
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_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op)
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_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 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 void load_addr_to_reg(struct sljit_jump *jump, sljit_sw executable_offset)
static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
static sljit_s32 emit_clz_ctz(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw src)
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)
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)
static const sljit_ins data_transfer_insts[16+4]
#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)
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)
static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw)
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)
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)
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)
static sljit_s32 push_imm_s_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_sw imm)
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump * sljit_emit_cmp(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w)
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
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