ravif2 (struct ravi_lua_State * L) { struct ravi_CallInfo * D.1181; struct ravi_TValue * D.1182; sizetype D.1183; struct ravi_TValue * D.1184; struct ravi_Proto * D.1185; struct ravi_TValue * D.1186; sizetype D.1187; struct ravi_TValue * D.1188; signed long D.1189; signed int D.1190; signed int D.1191; signed int D.1192; iftmp.3; iftmp.4; iftmp.5; iftmp.6; D.1213; signed int D.1214; iftmp.7; iftmp.8; sizetype D.1225; struct ravi_TValue * D.1226; signed int D.1227; struct ravi_TValue * D.1228; signed int D.1229; comparison_0_26; comparison_0_22; comparison_0_19; comparison_0_18; comparison_0_17; isfalse_0_16; comparison_0_13; comparison_0_12; comparison_0_11; isfalse_0_10; comparison_0_7; comparison_0_6; comparison_0_5; isfalse_0_4; struct ravi_LClosure * cl; struct ravi_TValue * base; entry: D.1181 = L->ci; D.1182 = D.1181->func; cl = D.1182->value_.gc; D.1181 = L->ci; base = D.1181->u.l.base; D.1181 = L->ci; raviV_op_loadnil (D.1181, 0, 0); D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1185 = cl->p; D.1186 = D.1185->k; D.1187 = 0; D.1188 = D.1186 + D.1187; D.1189 = D.1188->value_.i; D.1184->value_.i = D.1189; D.1183 = 16; D.1184 = base + D.1183; D.1185 = cl->p; D.1186 = D.1185->k; D.1187 = 0; D.1188 = D.1186 + D.1187; D.1190 = D.1188->tt_; D.1184->tt_ = D.1190; printf ("OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to %d\n", 3, 1, 5); D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_5 = D.1191 == 0; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_6 = D.1191 == 1; D.1183 = 16; D.1184 = base + D.1183; D.1192 = D.1184->value_.b; comparison_0_7 = D.1192 == 0; if (comparison_0_5 != 0) goto ; else goto ; : if (comparison_0_6 != 0) goto ; else goto ; : if (comparison_0_7 != 0) goto ; else goto ; : iftmp.4 = 1; goto ; : iftmp.4 = 0; : if (iftmp.4 != 0) goto ; else goto ; : iftmp.3 = 1; goto ; : iftmp.3 = 0; : isfalse_0_4 = iftmp.3; if (isfalse_0_4 == 0) goto OP_TEST_do_jmp_2_8; else goto OP_TEST_do_skip_2_9; jmp_5_1: D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1184->value_.b = 0; D.1183 = 16; D.1184 = base + D.1183; D.1184->tt_ = 1; printf ("OP_TEST(%d C=0) if (reg(A=%d)) then skip next else jmp to %d\n", 6, 1, 9); D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_11 = D.1191 == 0; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_12 = D.1191 == 1; D.1183 = 16; D.1184 = base + D.1183; D.1192 = D.1184->value_.b; comparison_0_13 = D.1192 == 0; if (comparison_0_11 != 0) goto ; else goto ; : if (comparison_0_12 != 0) goto ; else goto ; : if (comparison_0_13 != 0) goto ; else goto ; : iftmp.6 = 1; goto ; : iftmp.6 = 0; : if (iftmp.6 != 0) goto ; else goto ; : iftmp.5 = 1; goto ; : iftmp.5 = 0; : isfalse_0_10 = iftmp.5; D.1213 = ~isfalse_0_10; D.1214 = (signed int) D.1213; if (D.1214 == 0) goto OP_TEST_do_jmp_5_14; else goto OP_TEST_do_skip_5_15; jmp_9_2: D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1185 = cl->p; D.1186 = D.1185->k; D.1187 = 0; D.1188 = D.1186 + D.1187; D.1189 = D.1188->value_.i; D.1184->value_.i = D.1189; D.1183 = 16; D.1184 = base + D.1183; D.1185 = cl->p; D.1186 = D.1185->k; D.1187 = 0; D.1188 = D.1186 + D.1187; D.1190 = D.1188->tt_; D.1184->tt_ = D.1190; printf ("OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to %d\n", 10, 1, 12); D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_17 = D.1191 == 0; D.1183 = 16; D.1184 = base + D.1183; D.1191 = D.1184->tt_; comparison_0_18 = D.1191 == 1; D.1183 = 16; D.1184 = base + D.1183; D.1192 = D.1184->value_.b; comparison_0_19 = D.1192 == 0; if (comparison_0_17 != 0) goto ; else goto ; : if (comparison_0_18 != 0) goto ; else goto ; : if (comparison_0_19 != 0) goto ; else goto ; : iftmp.8 = 1; goto ; : iftmp.8 = 0; : if (iftmp.8 != 0) goto ; else goto ; : iftmp.7 = 1; goto ; : iftmp.7 = 0; : isfalse_0_16 = iftmp.7; if (isfalse_0_16 == 0) goto OP_TEST_do_jmp_9_20; else goto OP_TEST_do_skip_9_21; jmp_12_3: D.1181 = L->ci; base = D.1181->u.l.base; D.1183 = 16; D.1184 = base + D.1183; D.1184->value_.b = 0; D.1183 = 16; D.1184 = base + D.1183; D.1184->tt_ = 1; D.1181 = L->ci; base = D.1181->u.l.base; D.1225 = 32; D.1226 = base + D.1225; L->top = D.1226; D.1185 = cl->p; D.1227 = D.1185->sizep; comparison_0_22 = D.1227 > 0; if (comparison_0_22 != 0) goto OP_RETURN_if_sizep_gt_0_12_23; else goto OP_RETURN_else_sizep_gt_0_12_24; OP_TEST_do_jmp_2_8: goto jmp_5_1; OP_TEST_do_skip_2_9: goto jmp_5_1; OP_TEST_do_jmp_5_14: goto jmp_9_2; OP_TEST_do_skip_5_15: D.1181 = L->ci; base = D.1181->u.l.base; D.1187 = 0; D.1228 = base + D.1187; D.1228->value_.b = 1; D.1187 = 0; D.1228 = base + D.1187; D.1228->tt_ = 1; goto jmp_9_2; OP_TEST_do_jmp_9_20: goto jmp_12_3; OP_TEST_do_skip_9_21: goto jmp_12_3; OP_RETURN_if_sizep_gt_0_12_23: luaF_close (L, base); goto OP_RETURN_else_sizep_gt_0_12_24; OP_RETURN_else_sizep_gt_0_12_24: D.1183 = 16; D.1184 = base + D.1183; luaD_poscall (L, D.1184); D.1229 = 1; return D.1229; OP_RETURN_13_25: D.1181 = L->ci; base = D.1181->u.l.base; D.1187 = 0; D.1228 = base + D.1187; L->top = D.1228; D.1185 = cl->p; D.1227 = D.1185->sizep; comparison_0_26 = D.1227 > 0; if (comparison_0_26 != 0) goto OP_RETURN_if_sizep_gt_0_13_27; else goto OP_RETURN_else_sizep_gt_0_13_28; OP_RETURN_if_sizep_gt_0_13_27: luaF_close (L, base); goto OP_RETURN_else_sizep_gt_0_13_28; OP_RETURN_else_sizep_gt_0_13_28: D.1187 = 0; D.1228 = base + D.1187; luaD_poscall (L, D.1228); D.1229 = 1; return D.1229; } .file "fake.c" .section .rodata .align 8 .LC1: .ascii "OP_TEST(%d C=1)) if (!reg(A=%d)) then skip next else jmp to " .ascii "%d\n" .zero 138 .align 8 .LC2: .ascii "OP_TEST(%d C=0) if (reg(A=%d)) then skip next else jmp to %d" .ascii "\n" .zero 140 .section .text.unlikely,"ax",@progbits .LCOLDB3: .text .LHOTB3: .p2align 4,,15 .globl ravif2 .type ravif2, @function ravif2: .LFB1: .cfi_startproc .L35: pushq %r12 .cfi_def_cfa_offset 16 .cfi_offset 12, -16 xorl %edx, %edx xorl %esi, %esi pushq %rbp .cfi_def_cfa_offset 24 .cfi_offset 6, -24 pushq %rbx .cfi_def_cfa_offset 32 .cfi_offset 3, -32 movq %rdi, %rbx movq 32(%rdi), %rdi movq (%rdi), %rax movq (%rax), %r12 call raviV_op_loadnil@PLT movq 32(%rbx), %rax movl $3, %esi leaq .LC1(%rip), %rdi movq 24(%r12), %rdx movq 32(%rax), %rax movq 48(%rdx), %rdx movq (%rdx), %rcx movl 8(%rdx), %edx movq %rcx, 16(%rax) movl $5, %ecx movl %edx, 24(%rax) movl $1, %edx xorl %eax, %eax call printf@PLT movq 32(%rbx), %rax movl $1, %edx movl $9, %ecx leaq .LC2(%rip), %rdi movl $6, %esi movq 32(%rax), %rax movl $0, 16(%rax) movl $1, 24(%rax) xorl %eax, %eax call printf@PLT movq 32(%rbx), %rax movq 32(%rax), %rax movl 24(%rax), %edx testl %edx, %edx je .L38 movl 16(%rax), %ecx testl %ecx, %ecx je .L51 .L37: movl $1, (%rax) movl $1, 8(%rax) .L36: .L38: movq 24(%r12), %rdx movl $10, %esi leaq .LC1(%rip), %rdi movq 48(%rdx), %rdx movq (%rdx), %rcx movl 8(%rdx), %edx movq %rcx, 16(%rax) movl $12, %ecx movl %edx, 24(%rax) movl $1, %edx xorl %eax, %eax call printf@PLT movq 32(%rbx), %rax movq 32(%rax), %rbp leaq 32(%rbp), %rax movl $0, 16(%rbp) movl $1, 24(%rbp) movq %rax, 16(%rbx) movq 24(%r12), %rax movl 32(%rax), %eax testl %eax, %eax jle .L40 .L39: movq %rbp, %rsi movq %rbx, %rdi call luaF_close@PLT .L40: leaq 16(%rbp), %rsi movq %rbx, %rdi call luaD_poscall@PLT popq %rbx .cfi_remember_state .cfi_def_cfa_offset 24 movl $1, %eax popq %rbp .cfi_def_cfa_offset 16 popq %r12 .cfi_def_cfa_offset 8 ret .p2align 4,,10 .p2align 3 .L51: .cfi_restore_state cmpl $1, %edx jne .L37 jmp .L38 .cfi_endproc .LFE1: .size ravif2, .-ravif2 .section .text.unlikely .LCOLDE3: .text .LHOTE3: .ident "GCC: (GNU) 5.1.0" .section .note.GNU-stack,"",@progbits