Skip to content

Instantly share code, notes, and snippets.

@wingo
Created September 1, 2014 16:24
Show Gist options
  • Save wingo/745dbb1b4909dcf75b16 to your computer and use it in GitHub Desktop.
Save wingo/745dbb1b4909dcf75b16 to your computer and use it in GitHub Desktop.
test
<style type="text/css">
background { background: #ffffff; color: #000000; }
pre.ljdump {
font-size: 10pt;
background: #f0f4ff;
color: #000000;
border: 1px solid #bfcfff;
padding: 0.5em;
margin-left: 2em;
margin-right: 2em;
}
span.irt_str { color: #00a000; }
span.irt_thr, span.irt_fun { color: #404040; font-weight: bold; }
span.irt_tab { color: #c00000; }
span.irt_udt, span.irt_lud { color: #00c0c0; }
span.irt_num { color: #4040c0; }
span.irt_int, span.irt_i8, span.irt_u8, span.irt_i16, span.irt_u16 { color: #b040b0; }
</style>
<pre class="ljdump">
---- TRACE 1 start utils.lua:39
0006 GGET 8 1 ; "table"
0007 TGETS 8 8 2 ; "insert"
0008 MOV 9 2
0009 MOV 10 7
0010 CALL 8 1 3
0000 . FUNCC ; table.insert
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 ITERL 6 =&gt; 0006
---- TRACE 1 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"table"</span> @47
0016 > <span class="irt_tab">tab</span> HLOAD 0015
0017 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+7 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"insert"</span> @7
0021 > <span class="irt_fun">fun</span> HLOAD 0020
0022 > <span class="irt_tab">tab</span> SLOAD #3 T
0023 > <span class="irt_tab">tab</span> SLOAD #8 T
0024 > <span class="irt_fun">fun</span> EQ 0021 <span class="irt_fun">table.insert</span>
0025 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0026 <span class="irt_int">int</span> ADD 0025 <span class="irt_int">+1 </span>
0027 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0028 > <span class="irt_int">int</span> ULE 0027 0026
0029 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0030 > <span class="irt_int">int</span> EQ 0029 <span class="irt_int">+0 </span>
0031 <span class="irt_num">num</span> CONV 0026 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0032 <span class="irt_p32">p32</span> NEWREF 0022 0031
0033 <span class="irt_tab">tab</span> HSTORE 0032 0023
0034 <span class="irt_nil">nil</span> TBAR 0022
0035 > <span class="irt_fun">fun</span> SLOAD #4 T
0036 > <span class="irt_tab">tab</span> SLOAD #5 T
0037 > <span class="irt_num">num</span> SLOAD #6 T
0038 > <span class="irt_fun">fun</span> EQ 0035 <span class="irt_fun">ipairs_aux</span>
0039 <span class="irt_int">int</span> CONV 0037 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0040 + <span class="irt_int">int</span> ADD 0039 <span class="irt_int">+1 </span>
0041 <span class="irt_int">int</span> FLOAD 0036 tab.asize
0042 > <span class="irt_int">int</span> ABC 0041 0040
0043 <span class="irt_p32">p32</span> FLOAD 0036 tab.array
0044 <span class="irt_p32">p32</span> AREF 0043 0040
0045 >+ <span class="irt_tab">tab</span> ALOAD 0044
0046 ------ LOOP ------------
0047 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0048 > <span class="irt_p32">p32</span> EQ 0047 <span class="irt_p32">[0x405d8420]</span>
0049 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0050 > <span class="irt_int">int</span> EQ 0049 <span class="irt_int">+1 </span>
0051 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0052 > <span class="irt_p32">p32</span> HREFK 0051 <span class="irt_str">"__index"</span> @1
0053 > <span class="irt_tab">tab</span> HLOAD 0052
0054 <span class="irt_int">int</span> FLOAD 0053 tab.hmask
0055 > <span class="irt_int">int</span> EQ 0054 <span class="irt_int">+63 </span>
0056 <span class="irt_p32">p32</span> FLOAD 0053 tab.node
0057 > <span class="irt_p32">p32</span> HREFK 0056 <span class="irt_str">"table"</span> @47
0058 > <span class="irt_tab">tab</span> HLOAD 0057
0059 <span class="irt_int">int</span> FLOAD 0058 tab.hmask
0060 > <span class="irt_int">int</span> EQ 0059 <span class="irt_int">+7 </span>
0061 <span class="irt_p32">p32</span> FLOAD 0058 tab.node
0062 > <span class="irt_p32">p32</span> HREFK 0061 <span class="irt_str">"insert"</span> @7
0063 > <span class="irt_fun">fun</span> HLOAD 0062
0064 > <span class="irt_fun">fun</span> EQ 0063 <span class="irt_fun">table.insert</span>
0065 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0066 <span class="irt_int">int</span> ADD 0065 <span class="irt_int">+1 </span>
0067 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0068 > <span class="irt_int">int</span> ULE 0067 0066
0069 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0070 > <span class="irt_int">int</span> EQ 0069 <span class="irt_int">+0 </span>
0071 <span class="irt_num">num</span> CONV 0066 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0072 <span class="irt_p32">p32</span> NEWREF 0022 0071
0073 <span class="irt_tab">tab</span> HSTORE 0072 0045
0074 <span class="irt_num">num</span> CONV 0040 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0075 + <span class="irt_int">int</span> ADD 0040 <span class="irt_int">+1 </span>
0076 <span class="irt_int">int</span> FLOAD 0036 tab.asize
0077 > <span class="irt_int">int</span> ABC 0076 0075
0078 <span class="irt_p32">p32</span> FLOAD 0036 tab.array
0079 <span class="irt_p32">p32</span> AREF 0078 0075
0080 >+ <span class="irt_tab">tab</span> ALOAD 0079
0081 <span class="irt_tab">tab</span> PHI 0045 0080
0082 <span class="irt_int">int</span> PHI 0040 0075
---- TRACE 1 mcode 831
0bcafcc1 add rsp, -0x20
0bcafcc5 mov dword [0x405d84a0], 0x1
0bcafcd0 mov eax, [rdx-0x8]
0bcafcd3 mov eax, [rax+0x8]
0bcafcd6 mov [rsp+0x14], eax
0bcafcda mov ecx, [rax+0x1c]
0bcafcdd and ecx, 0x7230fd67
0bcafce3 lea ecx, [rcx+rcx*2]
0bcafce6 shl ecx, 0x03
0bcafce9 add ecx, [rax+0x14]
0bcafcec cmp dword [rcx+0xc], -0x05
0bcafcf0 jnz 0x0bcafcff
0bcafcf2 cmp dword [rcx+0x8], 0x405dae40
0bcafcf9 jz 0x0bca0010 ->0
0bcafcff mov ecx, [rcx+0x10]
0bcafd02 test ecx, ecx
0bcafd04 jnz 0x0bcafcec
0bcafd06 mov ecx, 0x405d8420
0bcafd0b mov r13d, [rax+0x10]
0bcafd0f test r13d, r13d
0bcafd12 jz 0x0bca0010 ->0
0bcafd18 cmp dword [r13+0x1c], +0x01
0bcafd1d jnz 0x0bca0010 ->0
0bcafd23 mov eax, [r13+0x14]
0bcafd27 mov rdi, 0xfffffffb405da430
0bcafd31 cmp rdi, [rax+0x20]
0bcafd35 jnz 0x0bca0010 ->0
0bcafd3b cmp dword [rax+0x1c], -0x0c
0bcafd3f jnz 0x0bca0010 ->0
0bcafd45 mov eax, [rax+0x18]
0bcafd48 cmp dword [rax+0x1c], +0x3f
0bcafd4c jnz 0x0bca0010 ->0
0bcafd52 mov eax, [rax+0x14]
0bcafd55 mov rdi, 0xfffffffb405dae40
0bcafd5f cmp rdi, [rax+0x470]
0bcafd66 jnz 0x0bca0010 ->0
0bcafd6c cmp dword [rax+0x46c], -0x0c
0bcafd73 jnz 0x0bca0010 ->0
0bcafd79 mov eax, [rax+0x468]
0bcafd7f cmp dword [rax+0x1c], +0x07
0bcafd83 jnz 0x0bca0010 ->0
0bcafd89 mov eax, [rax+0x14]
0bcafd8c mov rdi, 0xfffffffb405dc4f0
0bcafd96 cmp rdi, [rax+0xb0]
0bcafd9d jnz 0x0bca0010 ->0
0bcafda3 cmp dword [rax+0xac], -0x09
0bcafdaa jnz 0x0bca0010 ->0
0bcafdb0 cmp dword [rdx+0x14], -0x0c
0bcafdb4 jnz 0x0bca0010 ->0
0bcafdba mov edi, [rdx+0x10]
0bcafdbd mov [rsp+0x10], edi
0bcafdc1 cmp dword [rdx+0x3c], -0x0c
0bcafdc5 jnz 0x0bca0010 ->0
0bcafdcb mov esi, [rdx+0x38]
0bcafdce mov [rsp+0x18], esi
0bcafdd2 cmp dword [rax+0xa8], 0x405dc4c8
0bcafddc jnz 0x0bca0010 ->0
0bcafde2 call 0x00420530 ->lj_tab_len
0bcafde7 mov edi, [0x405d84ac]
0bcafdee mov esi, [rsp+0x10]
0bcafdf2 add eax, +0x01
0bcafdf5 cmp eax, [rsi+0x18]
0bcafdf8 jb 0x0bca0010 ->0
0bcafdfe cmp dword [rsi+0x1c], +0x00
0bcafe02 jnz 0x0bca0010 ->0
0bcafe08 xorps xmm7, xmm7
0bcafe0b cvtsi2sd xmm7, eax
0bcafe0f movsd [rsp+0x20], xmm7
0bcafe15 lea rdx, [rsp+0x20]
0bcafe1a call 0x004200e0 ->lj_tab_newkey
0bcafe1f mov ecx, eax
0bcafe21 mov edi, [rsp+0x10]
0bcafe25 mov edx, [0x405d84b0]
0bcafe2c mov eax, [rsp+0x18]
0bcafe30 mov dword [rcx+0x4], 0xfffffff4
0bcafe37 mov [rcx], eax
0bcafe39 test byte [rdi+0x4], 0x4
0bcafe3d jz 0x0bcafe54
0bcafe3f and byte [rdi+0x4], 0xfb
0bcafe43 mov esi, [0x405d83f4]
0bcafe4a mov [0x405d83f4], edi
0bcafe51 mov [rdi+0xc], esi
0bcafe54 cmp dword [rdx+0x1c], -0x09
0bcafe58 jnz 0x0bca0014 ->1
0bcafe5e cmp dword [rdx+0x24], -0x0c
0bcafe62 jnz 0x0bca0014 ->1
0bcafe68 mov r12d, [rdx+0x20]
0bcafe6c cmp dword [rdx+0x2c], 0xfffeffff
0bcafe73 jnb 0x0bca0014 ->1
0bcafe79 cmp dword [rdx+0x18], 0x405dafd0
0bcafe80 jnz 0x0bca0014 ->1
0bcafe86 cvtsd2si ebp, [rdx+0x28]
0bcafe8b add ebp, +0x01
0bcafe8e cmp ebp, [r12+0x18]
0bcafe93 jnb 0x0bca0014 ->1
0bcafe99 mov eax, [r12+0x8]
0bcafe9e cmp dword [rax+rbp*8+0x4], -0x0c
0bcafea3 jnz 0x0bca0014 ->1
0bcafea9 mov ebx, [rax+rbp*8]
->LOOP:
0bcafeac mov edi, [rsp+0x10]
0bcafeb0 mov eax, [rsp+0x14]
0bcafeb4 mov r14d, ebx
0bcafeb7 mov ebx, [rax+0x1c]
0bcafeba and ebx, 0x7230fd67
0bcafec0 lea ebx, [rbx+rbx*2]
0bcafec3 shl ebx, 0x03
0bcafec6 add ebx, [rax+0x14]
0bcafec9 cmp dword [rbx+0xc], -0x05
0bcafecd jnz 0x0bcafedc
0bcafecf cmp dword [rbx+0x8], 0x405dae40
0bcafed6 jz 0x0bca0018 ->2
0bcafedc mov ebx, [rbx+0x10]
0bcafedf test ebx, ebx
0bcafee1 jnz 0x0bcafec9
0bcafee3 mov ebx, 0x405d8420
0bcafee8 cmp dword [r13+0x1c], +0x01
0bcafeed jnz 0x0bca0018 ->2
0bcafef3 mov ebx, [r13+0x14]
0bcafef7 mov rsi, 0xfffffffb405da430
0bcaff01 cmp rsi, [rbx+0x20]
0bcaff05 jnz 0x0bca0018 ->2
0bcaff0b cmp dword [rbx+0x1c], -0x0c
0bcaff0f jnz 0x0bca0018 ->2
0bcaff15 mov ebx, [rbx+0x18]
0bcaff18 cmp dword [rbx+0x1c], +0x3f
0bcaff1c jnz 0x0bca0018 ->2
0bcaff22 mov ebx, [rbx+0x14]
0bcaff25 mov rsi, 0xfffffffb405dae40
0bcaff2f cmp rsi, [rbx+0x470]
0bcaff36 jnz 0x0bca0018 ->2
0bcaff3c cmp dword [rbx+0x46c], -0x0c
0bcaff43 jnz 0x0bca0018 ->2
0bcaff49 mov ebx, [rbx+0x468]
0bcaff4f cmp dword [rbx+0x1c], +0x07
0bcaff53 jnz 0x0bca0018 ->2
0bcaff59 mov ebx, [rbx+0x14]
0bcaff5c mov rsi, 0xfffffffb405dc4f0
0bcaff66 cmp rsi, [rbx+0xb0]
0bcaff6d jnz 0x0bca0018 ->2
0bcaff73 cmp dword [rbx+0xac], -0x09
0bcaff7a jnz 0x0bca0018 ->2
0bcaff80 cmp dword [rbx+0xa8], 0x405dc4c8
0bcaff8a jnz 0x0bca0018 ->2
0bcaff90 call 0x00420530 ->lj_tab_len
0bcaff95 mov edi, [0x405d84ac]
0bcaff9c mov esi, [rsp+0x10]
0bcaffa0 add eax, +0x01
0bcaffa3 cmp eax, [rsi+0x18]
0bcaffa6 jb 0x0bca0018 ->2
0bcaffac cmp dword [rsi+0x1c], +0x00
0bcaffb0 jnz 0x0bca0018 ->2
0bcaffb6 xorps xmm7, xmm7
0bcaffb9 cvtsi2sd xmm7, eax
0bcaffbd movsd [rsp+0x8], xmm7
0bcaffc3 lea rdx, [rsp+0x8]
0bcaffc8 call 0x004200e0 ->lj_tab_newkey
0bcaffcd mov dword [rax+0x4], 0xfffffff4
0bcaffd4 mov [rax], r14d
0bcaffd7 mov r15d, ebp
0bcaffda add ebp, +0x01
0bcaffdd cmp ebp, [r12+0x18]
0bcaffe2 jnb 0x0bca001c ->3
0bcaffe8 mov ebx, [r12+0x8]
0bcaffed cmp dword [rbx+rbp*8+0x4], -0x0c
0bcafff2 jnz 0x0bca001c ->3
0bcafff8 mov ebx, [rbx+rbp*8]
0bcafffb jmp 0x0bcafeac ->LOOP
---- TRACE 1 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 2 start utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
---- TRACE 2 abort utils.lua:41 -- leaving loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 2 start 1/2 utils.lua:39
0006 GGET 8 1 ; "table"
0007 TGETS 8 8 2 ; "insert"
0008 MOV 9 2
0009 MOV 10 7
0010 CALL 8 1 3
0000 . FUNCC ; table.insert
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0024 RET1 2 2
0059 UCLO 0 =&gt; 0060
---- TRACE 2 abort expand.lua:615 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 2 start 1/1 utils.lua:39
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0024 RET1 2 2
0007 UGET 3 1 ; assert_expr
0008 UGET 4 3 ; has_ether_protocol_min_payload
0009 MOV 5 0
0010 CALL 4 0 2
0000 . FUNCF 5 ; expand.lua:94
0001 . UGET 1 0 ; has_proto_min_payload
0002 . UGET 2 1 ; ether_min_payloads
0003 . MOV 3 0
0004 . KSTR 4 0 ; "[ether*]"
0005 . CALLT 1 4
0000 . FUNCF 7 ; expand.lua:86
0001 . GGET 3 0 ; "assert"
0002 . TGETV 4 0 1
0003 . CALL 3 2 2
0000 . . FUNCC ; assert
0004 . TDUP 4 1
0005 . TDUP 5 2
0006 . TSETB 2 5 1
0007 . SUBVN 6 3 0 ; 1
0008 . TSETB 6 5 2
0009 . TSETB 5 4 3
0010 . RET1 4 2
0011 CALLM 3 0 0
0000 . FUNCF 6 ; expand.lua:565
0001 . UGET 1 0 ; expand_relop
0002 . MOV 2 0
0003 . UGET 3 1 ; dlt
0004 . CALL 1 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . FUNCF 14 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0011 . . . MOV 2 0
0012 . . . TNEW 3 0
0013 . . . RET 2 3
0005 . . UGET 4 0 ; expand_arith
0006 . . TGETB 5 0 3
0007 . . MOV 6 1
0008 . . CALL 4 3 3
0000 . . . FUNCF 14 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 2 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 2 start 1/1 utils.lua:39
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0024 RET1 2 2
0012 CALLMT 1 1
0000 FUNCF 11 ; utils.lua:37
0001 TNEW 2 0
0002 GGET 3 0 ; "ipairs"
0003 MOV 4 0
0004 CALL 3 4 2
0000 . FUNCC ; ipairs
0005 JMP 6 =&gt; 0011
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 2 IR
0001 > <span class="irt_fun">fun</span> SLOAD #4 T
0002 > <span class="irt_tab">tab</span> SLOAD #5 T
0003 > <span class="irt_num">num</span> SLOAD #6 T
0004 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">ipairs_aux</span>
0005 <span class="irt_int">int</span> CONV 0003 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0006 <span class="irt_int">int</span> ADD 0005 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0002 tab.asize
0008 > <span class="irt_int">int</span> ABC 0007 0006
0009 <span class="irt_p32">p32</span> FLOAD 0002 tab.array
0010 <span class="irt_p32">p32</span> AREF 0009 0006
0011 > <span class="irt_nil">nil</span> ALOAD 0010
0012 <span class="irt_fun">fun</span> SLOAD #0 R
0013 <span class="irt_tab">tab</span> FLOAD 0012 func.env
0014 <span class="irt_p32">p32</span> HREF 0013 <span class="irt_str">"ipairs"</span>
0015 > <span class="irt_p32">p32</span> EQ 0014 <span class="irt_p32">[0x405d8420]</span>
0016 <span class="irt_tab">tab</span> FLOAD 0013 tab.meta
0017 > <span class="irt_tab">tab</span> NE 0016 <span class="irt_tab">[NULL]</span>
0018 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0019 > <span class="irt_int">int</span> EQ 0018 <span class="irt_int">+1 </span>
0020 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0021 > <span class="irt_p32">p32</span> HREFK 0020 <span class="irt_str">"__index"</span> @1
0022 > <span class="irt_tab">tab</span> HLOAD 0021
0023 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0024 > <span class="irt_int">int</span> EQ 0023 <span class="irt_int">+63 </span>
0025 <span class="irt_p32">p32</span> FLOAD 0022 tab.node
0026 > <span class="irt_p32">p32</span> HREFK 0025 <span class="irt_str">"ipairs"</span> @18
0027 > <span class="irt_fun">fun</span> HLOAD 0026
0028 > <span class="irt_tab">tab</span> SLOAD #2 T
0029 > <span class="irt_fun">fun</span> EQ 0027 <span class="irt_fun">ipairs</span>
0030 <span class="irt_int">int</span> FLOAD 0028 tab.asize
0031 > <span class="irt_int">int</span> ABC 0030 <span class="irt_int">+2 </span>
0032 <span class="irt_p32">p32</span> FLOAD 0028 tab.array
0033 <span class="irt_p32">p32</span> AREF 0032 <span class="irt_int">+1 </span>
0034 > <span class="irt_tab">tab</span> ALOAD 0033
0035 <span class="irt_p32">p32</span> HREF 0013 <span class="irt_str">"table"</span>
0036 > <span class="irt_p32">p32</span> EQ 0035 <span class="irt_p32">[0x405d8420]</span>
0037 > <span class="irt_p32">p32</span> HREFK 0025 <span class="irt_str">"table"</span> @47
0038 > <span class="irt_tab">tab</span> HLOAD 0037
0039 <span class="irt_int">int</span> FLOAD 0038 tab.hmask
0040 > <span class="irt_int">int</span> EQ 0039 <span class="irt_int">+7 </span>
0041 <span class="irt_p32">p32</span> FLOAD 0038 tab.node
0042 > <span class="irt_p32">p32</span> HREFK 0041 <span class="irt_str">"insert"</span> @7
0043 > <span class="irt_fun">fun</span> HLOAD 0042
0044 > <span class="irt_tab">tab</span> SLOAD #3 T
0045 > <span class="irt_fun">fun</span> EQ 0043 <span class="irt_fun">table.insert</span>
0046 <span class="irt_int">int</span> CALLL lj_tab_len (0044)
0047 <span class="irt_int">int</span> ADD 0046 <span class="irt_int">+1 </span>
0048 <span class="irt_int">int</span> FLOAD 0044 tab.asize
0049 > <span class="irt_int">int</span> ABC 0048 0047
0050 <span class="irt_p32">p32</span> FLOAD 0044 tab.array
0051 <span class="irt_p32">p32</span> AREF 0050 0047
0052 <span class="irt_tab">tab</span> ASTORE 0051 0034
0053 <span class="irt_nil">nil</span> TBAR 0044
0054 <span class="irt_p32">p32</span> AREF 0032 <span class="irt_int">+2 </span>
0055 > <span class="irt_nil">nil</span> ALOAD 0054
0056 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x403ab2c8</span> <span class="irt_p32">[0x403ab338]</span>
0057 > <span class="irt_fun">fun</span> SLOAD #2 T
0058 > <span class="irt_tab">tab</span> SLOAD #3 T
0059 > <span class="irt_fun">fun</span> EQ 0057 <span class="irt_fun">utils.lua:37</span>
0060 > <span class="irt_tab">tab</span> TNEW #0 #0
0061 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0062 <span class="irt_p32">p32</span> HREF 0061 <span class="irt_str">"ipairs"</span>
0063 > <span class="irt_p32">p32</span> EQ 0062 <span class="irt_p32">[0x405d8420]</span>
0064 <span class="irt_tab">tab</span> FLOAD 0061 tab.meta
0065 > <span class="irt_tab">tab</span> NE 0064 <span class="irt_tab">[NULL]</span>
0066 <span class="irt_int">int</span> FLOAD 0064 tab.hmask
0067 > <span class="irt_int">int</span> EQ 0066 <span class="irt_int">+1 </span>
0068 <span class="irt_p32">p32</span> FLOAD 0064 tab.node
0069 > <span class="irt_p32">p32</span> HREFK 0068 <span class="irt_str">"__index"</span> @1
0070 > <span class="irt_tab">tab</span> HLOAD 0069
0071 <span class="irt_int">int</span> FLOAD 0070 tab.hmask
0072 > <span class="irt_int">int</span> EQ 0071 <span class="irt_int">+63 </span>
0073 <span class="irt_p32">p32</span> FLOAD 0070 tab.node
0074 > <span class="irt_p32">p32</span> HREFK 0073 <span class="irt_str">"ipairs"</span> @18
0075 > <span class="irt_fun">fun</span> HLOAD 0074
0076 > <span class="irt_fun">fun</span> EQ 0075 <span class="irt_fun">ipairs</span>
0077 <span class="irt_int">int</span> FLOAD 0058 tab.asize
0078 > <span class="irt_int">int</span> ABC 0077 <span class="irt_int">+1 </span>
0079 <span class="irt_p32">p32</span> FLOAD 0058 tab.array
0080 <span class="irt_p32">p32</span> AREF 0079 <span class="irt_int">+1 </span>
0081 > <span class="irt_tab">tab</span> ALOAD 0080
---- TRACE 2 mcode 1038
0bcaf8b0 mov dword [0x405d84a0], 0x2
0bcaf8bb mov edi, [0x405d83d8]
0bcaf8c2 cmp edi, [0x405d83dc]
0bcaf8c9 jb 0x0bcaf8e2
0bcaf8cb mov esi, 0x1
0bcaf8d0 mov edi, 0x405d83b8
0bcaf8d5 call 0x0041f3d0 ->lj_gc_step_jit
0bcaf8da test eax, eax
0bcaf8dc jnz 0x0bca0010 ->0
0bcaf8e2 mov edx, [0x405d84b0]
0bcaf8e9 cmp dword [rdx+0x1c], -0x09
0bcaf8ed jnz 0x0bca0010 ->0
0bcaf8f3 cmp dword [rdx+0x24], -0x0c
0bcaf8f7 jnz 0x0bca0010 ->0
0bcaf8fd mov ebp, [rdx+0x20]
0bcaf900 cmp dword [rdx+0x2c], 0xfffeffff
0bcaf907 jnb 0x0bca0010 ->0
0bcaf90d cmp dword [rdx+0x18], 0x405dafd0
0bcaf914 jnz 0x0bca0010 ->0
0bcaf91a cvtsd2si ebx, [rdx+0x28]
0bcaf91f add ebx, +0x01
0bcaf922 cmp ebx, [rbp+0x18]
0bcaf925 jnb 0x0bca0010 ->0
0bcaf92b mov ebp, [rbp+0x8]
0bcaf92e cmp dword [rbp+rbx*8+0x4], -0x01
0bcaf933 jnz 0x0bca0010 ->0
0bcaf939 mov ebp, [rdx-0x8]
0bcaf93c mov r12d, [rbp+0x8]
0bcaf940 mov ebp, [r12+0x1c]
0bcaf945 and ebp, 0x644f2e12
0bcaf94b lea ebp, [rbp+rbp*2+0x0]
0bcaf94f shl ebp, 0x03
0bcaf952 add ebp, [r12+0x14]
0bcaf957 cmp dword [rbp+0xc], -0x05
0bcaf95b jnz 0x0bcaf96a
0bcaf95d cmp dword [rbp+0x8], 0x405db028
0bcaf964 jz 0x0bca0010 ->0
0bcaf96a mov ebp, [rbp+0x10]
0bcaf96d test ebp, ebp
0bcaf96f jnz 0x0bcaf957
0bcaf971 mov ebp, 0x405d8420
0bcaf976 mov ebp, [r12+0x10]
0bcaf97b test ebp, ebp
0bcaf97d jz 0x0bca0010 ->0
0bcaf983 cmp dword [rbp+0x1c], +0x01
0bcaf987 jnz 0x0bca0010 ->0
0bcaf98d mov ebp, [rbp+0x14]
0bcaf990 mov rdi, 0xfffffffb405da430
0bcaf99a cmp rdi, [rbp+0x20]
0bcaf99e jnz 0x0bca0010 ->0
0bcaf9a4 cmp dword [rbp+0x1c], -0x0c
0bcaf9a8 jnz 0x0bca0010 ->0
0bcaf9ae mov ebp, [rbp+0x18]
0bcaf9b1 cmp dword [rbp+0x1c], +0x3f
0bcaf9b5 jnz 0x0bca0010 ->0
0bcaf9bb mov ebx, [rbp+0x14]
0bcaf9be mov rdi, 0xfffffffb405db028
0bcaf9c8 cmp rdi, [rbx+0x1b8]
0bcaf9cf jnz 0x0bca0010 ->0
0bcaf9d5 cmp dword [rbx+0x1b4], -0x09
0bcaf9dc jnz 0x0bca0010 ->0
0bcaf9e2 cmp dword [rdx+0xc], -0x0c
0bcaf9e6 jnz 0x0bca0010 ->0
0bcaf9ec mov ebp, [rdx+0x8]
0bcaf9ef cmp dword [rbx+0x1b0], 0x405daff8
0bcaf9f9 jnz 0x0bca0010 ->0
0bcaf9ff cmp dword [rbp+0x18], +0x02
0bcafa03 jbe 0x0bca0010 ->0
0bcafa09 mov r14d, [rbp+0x8]
0bcafa0d cmp dword [r14+0xc], -0x0c
0bcafa12 jnz 0x0bca0010 ->0
0bcafa18 mov r15d, [r14+0x8]
0bcafa1c mov r13d, [r12+0x1c]
0bcafa21 and r13d, 0x7230fd67
0bcafa28 lea r13d, [r13+r13*2+0x0]
0bcafa2d shl r13d, 0x03
0bcafa31 add r13d, [r12+0x14]
0bcafa36 cmp dword [r13+0xc], -0x05
0bcafa3b jnz 0x0bcafa4b
0bcafa3d cmp dword [r13+0x8], 0x405dae40
0bcafa45 jz 0x0bca0010 ->0
0bcafa4b mov r13d, [r13+0x10]
0bcafa4f test r13d, r13d
0bcafa52 jnz 0x0bcafa36
0bcafa54 mov r13d, 0x405d8420
0bcafa5a mov rdi, 0xfffffffb405dae40
0bcafa64 cmp rdi, [rbx+0x470]
0bcafa6b jnz 0x0bca0010 ->0
0bcafa71 cmp dword [rbx+0x46c], -0x0c
0bcafa78 jnz 0x0bca0010 ->0
0bcafa7e mov ebx, [rbx+0x468]
0bcafa84 cmp dword [rbx+0x1c], +0x07
0bcafa88 jnz 0x0bca0010 ->0
0bcafa8e mov r13d, [rbx+0x14]
0bcafa92 mov rdi, 0xfffffffb405dc4f0
0bcafa9c cmp rdi, [r13+0xb0]
0bcafaa3 jnz 0x0bca0010 ->0
0bcafaa9 cmp dword [r13+0xac], -0x09
0bcafab1 jnz 0x0bca0010 ->0
0bcafab7 cmp dword [rdx+0x14], -0x0c
0bcafabb jnz 0x0bca0010 ->0
0bcafac1 mov ebx, [rdx+0x10]
0bcafac4 cmp dword [r13+0xa8], 0x405dc4c8
0bcafacf jnz 0x0bca0010 ->0
0bcafad5 mov edi, ebx
0bcafad7 call 0x00420530 ->lj_tab_len
0bcafadc mov edi, [0x405d84ac]
0bcafae3 mov edx, [0x405d84b0]
0bcafaea add eax, +0x01
0bcafaed cmp eax, [rbx+0x18]
0bcafaf0 jnb 0x0bca0010 ->0
0bcafaf6 mov r13d, [rbx+0x8]
0bcafafa mov dword [r13+rax*8+0x4], 0xfffffff4
0bcafb03 mov [r13+rax*8+0x0], r15d
0bcafb08 test byte [rbx+0x4], 0x4
0bcafb0c jz 0x0bcafb23
0bcafb0e and byte [rbx+0x4], 0xfb
0bcafb12 mov esi, [0x405d83f4]
0bcafb19 mov [0x405d83f4], ebx
0bcafb20 mov [rbx+0xc], esi
0bcafb23 cmp dword [r14+0x14], -0x01
0bcafb28 jnz 0x0bca0014 ->1
0bcafb2e cmp dword [rdx-0x4], 0x403ab338
0bcafb35 jnz 0x0bca0018 ->2
0bcafb3b add edx, -0x20
0bcafb3e mov [0x405d84b0], edx
0bcafb45 cmp dword [rdx+0xc], -0x09
0bcafb49 jnz 0x0bca001c ->3
0bcafb4f cmp dword [rdx+0x14], -0x0c
0bcafb53 jnz 0x0bca001c ->3
0bcafb59 mov ebp, [rdx+0x10]
0bcafb5c cmp dword [rdx+0x8], 0x40b42658
0bcafb63 jnz 0x0bca001c ->3
0bcafb69 xor esi, esi
0bcafb6b call 0x0041f7e0 ->lj_tab_new1
0bcafb70 mov edx, [0x405d84b0]
0bcafb77 movsd xmm7, [0x401f5ce0]
0bcafb80 mov r15d, [0x40b42660]
0bcafb88 mov r14d, [r15+0x1c]
0bcafb8c and r14d, 0x644f2e12
0bcafb93 lea r14d, [r14+r14*2]
0bcafb97 shl r14d, 0x03
0bcafb9b add r14d, [r15+0x14]
0bcafb9f cmp dword [r14+0xc], -0x05
0bcafba4 jnz 0x0bcafbb4
0bcafba6 cmp dword [r14+0x8], 0x405db028
0bcafbae jz 0x0bca001c ->3
0bcafbb4 mov r14d, [r14+0x10]
0bcafbb8 test r14d, r14d
0bcafbbb jnz 0x0bcafb9f
0bcafbbd mov r14d, 0x405d8420
0bcafbc3 mov r15d, [r15+0x10]
0bcafbc7 test r15d, r15d
0bcafbca jz 0x0bca001c ->3
0bcafbd0 cmp dword [r15+0x1c], +0x01
0bcafbd5 jnz 0x0bca001c ->3
0bcafbdb mov r15d, [r15+0x14]
0bcafbdf mov rdi, 0xfffffffb405da430
0bcafbe9 cmp rdi, [r15+0x20]
0bcafbed jnz 0x0bca001c ->3
0bcafbf3 cmp dword [r15+0x1c], -0x0c
0bcafbf8 jnz 0x0bca001c ->3
0bcafbfe mov r15d, [r15+0x18]
0bcafc02 cmp dword [r15+0x1c], +0x3f
0bcafc07 jnz 0x0bca001c ->3
0bcafc0d mov r15d, [r15+0x14]
0bcafc11 mov rdi, 0xfffffffb405db028
0bcafc1b cmp rdi, [r15+0x1b8]
0bcafc22 jnz 0x0bca001c ->3
0bcafc28 cmp dword [r15+0x1b4], -0x09
0bcafc30 jnz 0x0bca001c ->3
0bcafc36 cmp dword [r15+0x1b0], 0x405daff8
0bcafc41 jnz 0x0bca001c ->3
0bcafc47 cmp dword [rbp+0x18], +0x01
0bcafc4b jbe 0x0bca001c ->3
0bcafc51 mov r15d, [rbp+0x8]
0bcafc55 cmp dword [r15+0xc], -0x0c
0bcafc5a jnz 0x0bca001c ->3
0bcafc60 mov r15d, [r15+0x8]
0bcafc64 mov dword [rdx+0x3c], 0xfffffff4
0bcafc6b mov [rdx+0x38], r15d
0bcafc6f movsd [rdx+0x30], xmm7
0bcafc74 movsd [rdx+0x28], xmm7
0bcafc79 mov dword [rdx+0x24], 0xfffffff4
0bcafc80 mov [rdx+0x20], ebp
0bcafc83 mov dword [rdx+0x1c], 0xfffffff7
0bcafc8a mov dword [rdx+0x18], 0x405dafd0
0bcafc91 mov dword [rdx+0x14], 0xfffffff4
0bcafc98 mov [rdx+0x10], eax
0bcafc9b mov dword [rdx+0xc], 0xfffffff4
0bcafca2 mov [rdx+0x8], ebx
0bcafca5 mov dword [rdx+0x4], 0xfffffff4
0bcafcac mov [rdx], ebp
0bcafcae mov dword [rdx-0x8], 0x40b42658
0bcafcb5 add rsp, +0x20
0bcafcb9 jmp 0x0bcafcc1
---- TRACE 2 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 3 start 1/2 utils.lua:39
0006 GGET 8 1 ; "table"
0007 TGETS 8 8 2 ; "insert"
0008 MOV 9 2
0009 MOV 10 7
0010 CALL 8 1 3
0000 . FUNCC ; table.insert
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
0024 RET1 2 2
0059 UCLO 0 =&gt; 0060
---- TRACE 3 abort expand.lua:615 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 3 start 1/2 utils.lua:39
0006 GGET 8 1 ; "table"
0007 TGETS 8 8 2 ; "insert"
0008 MOV 9 2
0009 MOV 10 7
0010 CALL 8 1 3
0000 . FUNCC ; table.insert
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 3 IR
0001 <span class="irt_int">int</span> SLOAD #6 PI
0002 <span class="irt_tab">tab</span> SLOAD #8 PI
0003 <span class="irt_fun">fun</span> SLOAD #0 R
0004 <span class="irt_tab">tab</span> FLOAD 0003 func.env
0005 <span class="irt_p32">p32</span> HREF 0004 <span class="irt_str">"table"</span>
0006 > <span class="irt_p32">p32</span> EQ 0005 <span class="irt_p32">[0x405d8420]</span>
0007 <span class="irt_tab">tab</span> FLOAD 0004 tab.meta
0008 > <span class="irt_tab">tab</span> NE 0007 <span class="irt_tab">[NULL]</span>
0009 <span class="irt_int">int</span> FLOAD 0007 tab.hmask
0010 > <span class="irt_int">int</span> EQ 0009 <span class="irt_int">+1 </span>
0011 <span class="irt_p32">p32</span> FLOAD 0007 tab.node
0012 > <span class="irt_p32">p32</span> HREFK 0011 <span class="irt_str">"__index"</span> @1
0013 > <span class="irt_tab">tab</span> HLOAD 0012
0014 <span class="irt_int">int</span> FLOAD 0013 tab.hmask
0015 > <span class="irt_int">int</span> EQ 0014 <span class="irt_int">+63 </span>
0016 <span class="irt_p32">p32</span> FLOAD 0013 tab.node
0017 > <span class="irt_p32">p32</span> HREFK 0016 <span class="irt_str">"table"</span> @47
0018 > <span class="irt_tab">tab</span> HLOAD 0017
0019 <span class="irt_int">int</span> FLOAD 0018 tab.hmask
0020 > <span class="irt_int">int</span> EQ 0019 <span class="irt_int">+7 </span>
0021 <span class="irt_p32">p32</span> FLOAD 0018 tab.node
0022 > <span class="irt_p32">p32</span> HREFK 0021 <span class="irt_str">"insert"</span> @7
0023 > <span class="irt_fun">fun</span> HLOAD 0022
0024 > <span class="irt_tab">tab</span> SLOAD #3 T
0025 > <span class="irt_fun">fun</span> EQ 0023 <span class="irt_fun">table.insert</span>
0026 <span class="irt_int">int</span> CALLL lj_tab_len (0024)
0027 <span class="irt_int">int</span> ADD 0026 <span class="irt_int">+1 </span>
0028 <span class="irt_int">int</span> FLOAD 0024 tab.asize
0029 > <span class="irt_int">int</span> ABC 0028 0027
0030 <span class="irt_p32">p32</span> FLOAD 0024 tab.array
0031 <span class="irt_p32">p32</span> AREF 0030 0027
0032 <span class="irt_tab">tab</span> ASTORE 0031 0002
0033 <span class="irt_nil">nil</span> TBAR 0024
0034 > <span class="irt_fun">fun</span> SLOAD #4 T
0035 > <span class="irt_tab">tab</span> SLOAD #5 T
0036 > <span class="irt_fun">fun</span> EQ 0034 <span class="irt_fun">ipairs_aux</span>
0037 <span class="irt_int">int</span> ADD 0001 <span class="irt_int">+1 </span>
0038 <span class="irt_int">int</span> FLOAD 0035 tab.asize
0039 > <span class="irt_int">int</span> ABC 0038 0037
0040 <span class="irt_p32">p32</span> FLOAD 0035 tab.array
0041 <span class="irt_p32">p32</span> AREF 0040 0037
0042 > <span class="irt_tab">tab</span> ALOAD 0041
0043 <span class="irt_num">num</span> CONV 0037 <span class="irt_num">num</span>.<span class="irt_int">int</span>
---- TRACE 3 mcode 437
0bcaf6f8 mov r15d, ebp
0bcaf6fb mov dword [0x405d84a0], 0x3
0bcaf706 mov edx, [0x405d84b0]
0bcaf70d mov ebp, [rdx-0x8]
0bcaf710 mov ebp, [rbp+0x8]
0bcaf713 mov ebx, [rbp+0x1c]
0bcaf716 and ebx, 0x7230fd67
0bcaf71c lea ebx, [rbx+rbx*2]
0bcaf71f shl ebx, 0x03
0bcaf722 add ebx, [rbp+0x14]
0bcaf725 cmp dword [rbx+0xc], -0x05
0bcaf729 jnz 0x0bcaf738
0bcaf72b cmp dword [rbx+0x8], 0x405dae40
0bcaf732 jz 0x0bca0010 ->0
0bcaf738 mov ebx, [rbx+0x10]
0bcaf73b test ebx, ebx
0bcaf73d jnz 0x0bcaf725
0bcaf73f mov ebx, 0x405d8420
0bcaf744 mov ebp, [rbp+0x10]
0bcaf747 test ebp, ebp
0bcaf749 jz 0x0bca0010 ->0
0bcaf74f cmp dword [rbp+0x1c], +0x01
0bcaf753 jnz 0x0bca0010 ->0
0bcaf759 mov ebp, [rbp+0x14]
0bcaf75c mov rdi, 0xfffffffb405da430
0bcaf766 cmp rdi, [rbp+0x20]
0bcaf76a jnz 0x0bca0010 ->0
0bcaf770 cmp dword [rbp+0x1c], -0x0c
0bcaf774 jnz 0x0bca0010 ->0
0bcaf77a mov ebp, [rbp+0x18]
0bcaf77d cmp dword [rbp+0x1c], +0x3f
0bcaf781 jnz 0x0bca0010 ->0
0bcaf787 mov ebp, [rbp+0x14]
0bcaf78a mov rdi, 0xfffffffb405dae40
0bcaf794 cmp rdi, [rbp+0x470]
0bcaf79b jnz 0x0bca0010 ->0
0bcaf7a1 cmp dword [rbp+0x46c], -0x0c
0bcaf7a8 jnz 0x0bca0010 ->0
0bcaf7ae mov ebp, [rbp+0x468]
0bcaf7b4 cmp dword [rbp+0x1c], +0x07
0bcaf7b8 jnz 0x0bca0010 ->0
0bcaf7be mov ebx, [rbp+0x14]
0bcaf7c1 mov rdi, 0xfffffffb405dc4f0
0bcaf7cb cmp rdi, [rbx+0xb0]
0bcaf7d2 jnz 0x0bca0010 ->0
0bcaf7d8 cmp dword [rbx+0xac], -0x09
0bcaf7df jnz 0x0bca0010 ->0
0bcaf7e5 cmp dword [rdx+0x14], -0x0c
0bcaf7e9 jnz 0x0bca0010 ->0
0bcaf7ef mov ebp, [rdx+0x10]
0bcaf7f2 cmp dword [rbx+0xa8], 0x405dc4c8
0bcaf7fc jnz 0x0bca0010 ->0
0bcaf802 mov edi, ebp
0bcaf804 call 0x00420530 ->lj_tab_len
0bcaf809 mov edx, [0x405d84b0]
0bcaf810 add eax, +0x01
0bcaf813 cmp eax, [rbp+0x18]
0bcaf816 jnb 0x0bca0010 ->0
0bcaf81c mov ebx, [rbp+0x8]
0bcaf81f mov dword [rbx+rax*8+0x4], 0xfffffff4
0bcaf827 mov [rbx+rax*8], r14d
0bcaf82b test byte [rbp+0x4], 0x4
0bcaf82f jz 0x0bcaf846
0bcaf831 and byte [rbp+0x4], 0xfb
0bcaf835 mov edi, [0x405d83f4]
0bcaf83c mov [0x405d83f4], ebp
0bcaf843 mov [rbp+0xc], edi
0bcaf846 cmp dword [rdx+0x1c], -0x09
0bcaf84a jnz 0x0bca0014 ->1
0bcaf850 cmp dword [rdx+0x24], -0x0c
0bcaf854 jnz 0x0bca0014 ->1
0bcaf85a mov ebp, [rdx+0x20]
0bcaf85d cmp dword [rdx+0x18], 0x405dafd0
0bcaf864 jnz 0x0bca0014 ->1
0bcaf86a lea ebx, [r15+0x1]
0bcaf86e cmp ebx, [rbp+0x18]
0bcaf871 jnb 0x0bca0014 ->1
0bcaf877 mov ebp, [rbp+0x8]
0bcaf87a cmp dword [rbp+rbx*8+0x4], -0x0c
0bcaf87f jnz 0x0bca0014 ->1
0bcaf885 mov ebp, [rbp+rbx*8+0x0]
0bcaf889 xorps xmm7, xmm7
0bcaf88c cvtsi2sd xmm7, ebx
0bcaf890 mov dword [rdx+0x3c], 0xfffffff4
0bcaf897 mov [rdx+0x38], ebp
0bcaf89a movsd [rdx+0x30], xmm7
0bcaf89f movsd [rdx+0x28], xmm7
0bcaf8a4 add rsp, +0x20
0bcaf8a8 jmp 0x0bcafcc1
---- TRACE 3 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 4 start utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 ITERL 6 =&gt; 0017
---- TRACE 4 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"table"</span> @47
0016 > <span class="irt_tab">tab</span> HLOAD 0015
0017 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+7 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"insert"</span> @7
0021 > <span class="irt_fun">fun</span> HLOAD 0020
0022 > <span class="irt_tab">tab</span> SLOAD #3 T
0023 > <span class="irt_tab">tab</span> SLOAD #8 T
0024 > <span class="irt_fun">fun</span> EQ 0021 <span class="irt_fun">table.insert</span>
0025 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0026 <span class="irt_int">int</span> ADD 0025 <span class="irt_int">+1 </span>
0027 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0028 > <span class="irt_int">int</span> ABC 0027 0026
0029 <span class="irt_p32">p32</span> FLOAD 0022 tab.array
0030 <span class="irt_p32">p32</span> AREF 0029 0026
0031 <span class="irt_tab">tab</span> ASTORE 0030 0023
0032 <span class="irt_nil">nil</span> TBAR 0022
0033 > <span class="irt_fun">fun</span> SLOAD #4 T
0034 > <span class="irt_tab">tab</span> SLOAD #5 T
0035 > <span class="irt_num">num</span> SLOAD #6 T
0036 > <span class="irt_fun">fun</span> EQ 0033 <span class="irt_fun">ipairs_aux</span>
0037 <span class="irt_int">int</span> CONV 0035 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0038 + <span class="irt_int">int</span> ADD 0037 <span class="irt_int">+1 </span>
0039 <span class="irt_int">int</span> FLOAD 0034 tab.asize
0040 > <span class="irt_int">int</span> ABC 0039 0038
0041 <span class="irt_p32">p32</span> FLOAD 0034 tab.array
0042 <span class="irt_p32">p32</span> AREF 0041 0038
0043 >+ <span class="irt_tab">tab</span> ALOAD 0042
0044 ------ LOOP ------------
0045 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0046 <span class="irt_int">int</span> ADD 0045 <span class="irt_int">+1 </span>
0047 > <span class="irt_int">int</span> ABC 0027 0046
0048 <span class="irt_p32">p32</span> AREF 0029 0046
0049 <span class="irt_tab">tab</span> ASTORE 0048 0043
0050 <span class="irt_num">num</span> CONV 0038 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0051 + <span class="irt_int">int</span> ADD 0038 <span class="irt_int">+1 </span>
0052 > <span class="irt_int">int</span> ABC 0039 0051
0053 <span class="irt_p32">p32</span> AREF 0041 0051
0054 >+ <span class="irt_tab">tab</span> ALOAD 0053
0055 <span class="irt_tab">tab</span> PHI 0043 0054
0056 <span class="irt_int">int</span> PHI 0038 0051
---- TRACE 4 mcode 537
0bcaf4d5 add rsp, -0x10
0bcaf4d9 mov dword [0x405d84a0], 0x4
0bcaf4e4 mov eax, [rdx-0x8]
0bcaf4e7 mov eax, [rax+0x8]
0bcaf4ea mov ecx, [rax+0x1c]
0bcaf4ed and ecx, 0x7230fd67
0bcaf4f3 lea ecx, [rcx+rcx*2]
0bcaf4f6 shl ecx, 0x03
0bcaf4f9 add ecx, [rax+0x14]
0bcaf4fc cmp dword [rcx+0xc], -0x05
0bcaf500 jnz 0x0bcaf50f
0bcaf502 cmp dword [rcx+0x8], 0x405dae40
0bcaf509 jz 0x0bca0010 ->0
0bcaf50f mov ecx, [rcx+0x10]
0bcaf512 test ecx, ecx
0bcaf514 jnz 0x0bcaf4fc
0bcaf516 mov ecx, 0x405d8420
0bcaf51b mov eax, [rax+0x10]
0bcaf51e test eax, eax
0bcaf520 jz 0x0bca0010 ->0
0bcaf526 cmp dword [rax+0x1c], +0x01
0bcaf52a jnz 0x0bca0010 ->0
0bcaf530 mov eax, [rax+0x14]
0bcaf533 mov rdi, 0xfffffffb405da430
0bcaf53d cmp rdi, [rax+0x20]
0bcaf541 jnz 0x0bca0010 ->0
0bcaf547 cmp dword [rax+0x1c], -0x0c
0bcaf54b jnz 0x0bca0010 ->0
0bcaf551 mov eax, [rax+0x18]
0bcaf554 cmp dword [rax+0x1c], +0x3f
0bcaf558 jnz 0x0bca0010 ->0
0bcaf55e mov eax, [rax+0x14]
0bcaf561 mov rdi, 0xfffffffb405dae40
0bcaf56b cmp rdi, [rax+0x470]
0bcaf572 jnz 0x0bca0010 ->0
0bcaf578 cmp dword [rax+0x46c], -0x0c
0bcaf57f jnz 0x0bca0010 ->0
0bcaf585 mov eax, [rax+0x468]
0bcaf58b cmp dword [rax+0x1c], +0x07
0bcaf58f jnz 0x0bca0010 ->0
0bcaf595 mov eax, [rax+0x14]
0bcaf598 mov rdi, 0xfffffffb405dc4f0
0bcaf5a2 cmp rdi, [rax+0xb0]
0bcaf5a9 jnz 0x0bca0010 ->0
0bcaf5af cmp dword [rax+0xac], -0x09
0bcaf5b6 jnz 0x0bca0010 ->0
0bcaf5bc cmp dword [rdx+0x14], -0x0c
0bcaf5c0 jnz 0x0bca0010 ->0
0bcaf5c6 mov edi, [rdx+0x10]
0bcaf5c9 mov [rsp+0x10], edi
0bcaf5cd cmp dword [rdx+0x3c], -0x0c
0bcaf5d1 jnz 0x0bca0010 ->0
0bcaf5d7 mov esi, [rdx+0x38]
0bcaf5da mov [rsp+0x14], esi
0bcaf5de cmp dword [rax+0xa8], 0x405dc4c8
0bcaf5e8 jnz 0x0bca0010 ->0
0bcaf5ee call 0x00420530 ->lj_tab_len
0bcaf5f3 mov ecx, eax
0bcaf5f5 mov edi, [rsp+0x10]
0bcaf5f9 mov edx, [0x405d84b0]
0bcaf600 mov eax, [rsp+0x14]
0bcaf604 mov ebx, ecx
0bcaf606 add ebx, +0x01
0bcaf609 mov ecx, [rdi+0x18]
0bcaf60c mov [rsp+0xc], ecx
0bcaf610 cmp ebx, [rdi+0x18]
0bcaf613 jnb 0x0bca0010 ->0
0bcaf619 mov ecx, [rdi+0x8]
0bcaf61c mov [rsp+0x8], ecx
0bcaf620 mov dword [rcx+rbx*8+0x4], 0xfffffff4
0bcaf628 mov [rcx+rbx*8], eax
0bcaf62b test byte [rdi+0x4], 0x4
0bcaf62f jz 0x0bcaf646
0bcaf631 and byte [rdi+0x4], 0xfb
0bcaf635 mov esi, [0x405d83f4]
0bcaf63c mov [0x405d83f4], edi
0bcaf643 mov [rdi+0xc], esi
0bcaf646 cmp dword [rdx+0x1c], -0x09
0bcaf64a jnz 0x0bca0014 ->1
0bcaf650 cmp dword [rdx+0x24], -0x0c
0bcaf654 jnz 0x0bca0014 ->1
0bcaf65a mov eax, [rdx+0x20]
0bcaf65d cmp dword [rdx+0x2c], 0xfffeffff
0bcaf664 jnb 0x0bca0014 ->1
0bcaf66a cmp dword [rdx+0x18], 0x405dafd0
0bcaf671 jnz 0x0bca0014 ->1
0bcaf677 cvtsd2si ebp, [rdx+0x28]
0bcaf67c add ebp, +0x01
0bcaf67f mov r13d, [rax+0x18]
0bcaf683 cmp ebp, r13d
0bcaf686 jnb 0x0bca0014 ->1
0bcaf68c mov r12d, [rax+0x8]
0bcaf690 cmp dword [r12+rbp*8+0x4], -0x0c
0bcaf696 jnz 0x0bca0014 ->1
0bcaf69c mov ebx, [r12+rbp*8]
->LOOP:
0bcaf6a0 mov edi, [rsp+0x10]
0bcaf6a4 mov r14d, ebx
0bcaf6a7 call 0x00420530 ->lj_tab_len
0bcaf6ac mov ebx, eax
0bcaf6ae mov ecx, [rsp+0xc]
0bcaf6b2 mov eax, [rsp+0x8]
0bcaf6b6 add ebx, +0x01
0bcaf6b9 cmp ebx, ecx
0bcaf6bb jnb 0x0bca0018 ->2
0bcaf6c1 mov dword [rax+rbx*8+0x4], 0xfffffff4
0bcaf6c9 mov [rax+rbx*8], r14d
0bcaf6cd mov r15d, ebp
0bcaf6d0 add ebp, +0x01
0bcaf6d3 cmp ebp, r13d
0bcaf6d6 jnb 0x0bca001c ->3
0bcaf6dc cmp dword [r12+rbp*8+0x4], -0x0c
0bcaf6e2 jnz 0x0bca001c ->3
0bcaf6e8 mov ebx, [r12+rbp*8]
0bcaf6ec jmp 0x0bcaf6a0 ->LOOP
---- TRACE 4 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 5 start 4/0 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0088 TDUP 11 15
0089 TDUP 12 16
0090 TSETB 4 12 2
0091 TSETB 6 12 3
0092 TSETB 12 11 2
0093 TSETB 8 11 3
0094 ISNEN 8 0 ; 1
0095 JMP 12 => 0099
0099 ISNEN 8 1 ; 2
0100 JMP 12 => 0105
0101 TDUP 12 17
0102 TSETB 11 12 2
0103 MOV 13 10
0104 RET 12 3
---- TRACE 5 abort expand.lua:659 -- down-recursion, restarting
</pre>
<pre class="ljdump">
---- TRACE 5 start expand.lua:659
0104 RET 12 3
0023 UGET 5 1 ; expand_arith
0024 TGETB 6 0 3
0025 MOV 7 1
0026 CALL 5 3 3
0000 . FUNCF 14 ; expand.lua:632
0001 . GGET 2 0 ; "assert"
0002 . MOV 3 0
0003 . CALL 2 1 2
0000 . . FUNCC ; assert
0004 . GGET 2 1 ; "type"
0005 . MOV 3 0
0006 . CALL 2 2 2
0000 . . FUNCC ; type
0007 . ISEQS 2 2 ; "number"
0008 . JMP 2 => 0011
0011 . MOV 2 0
0012 . TNEW 3 0
0013 . RET 2 3
0027 TDUP 7 4
0028 TNEW 8 4
0029 TSETB 2 8 1
0030 TSETB 3 8 2
0031 TSETB 5 8 3
0032 TSETB 8 7 2
0033 UGET 8 2 ; concat
0034 MOV 9 4
0035 MOV 10 6
0036 CALL 8 2 3
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 5 abort utils.lua:39 -- inner loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 5 start utils.lua:37
0001 TNEW 2 0
0002 GGET 3 0 ; "ipairs"
0003 MOV 4 0
0004 CALL 3 4 2
0000 . FUNCC ; ipairs
0005 JMP 6 =&gt; 0011
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 5 abort utils.lua:39 -- inner loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 5 start 3/1 utils.lua:39
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
---- TRACE 5 IR
0001 <span class="irt_int">int</span> SLOAD #6 PI
0002 <span class="irt_tab">tab</span> SLOAD #8 PI
0003 > <span class="irt_fun">fun</span> SLOAD #4 T
0004 > <span class="irt_tab">tab</span> SLOAD #5 T
0005 > <span class="irt_fun">fun</span> EQ 0003 <span class="irt_fun">ipairs_aux</span>
0006 <span class="irt_int">int</span> ADD 0001 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0004 tab.asize
0008 > <span class="irt_int">int</span> ULE 0007 0006
0009 <span class="irt_int">int</span> FLOAD 0004 tab.hmask
0010 > <span class="irt_int">int</span> EQ 0009 <span class="irt_int">+0 </span>
0011 <span class="irt_fun">fun</span> SLOAD #0 R
0012 <span class="irt_tab">tab</span> FLOAD 0011 func.env
0013 <span class="irt_p32">p32</span> HREF 0012 <span class="irt_str">"ipairs"</span>
0014 > <span class="irt_p32">p32</span> EQ 0013 <span class="irt_p32">[0x405d8420]</span>
0015 <span class="irt_tab">tab</span> FLOAD 0012 tab.meta
0016 > <span class="irt_tab">tab</span> NE 0015 <span class="irt_tab">[NULL]</span>
0017 <span class="irt_int">int</span> FLOAD 0015 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+1 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0015 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"__index"</span> @1
0021 > <span class="irt_tab">tab</span> HLOAD 0020
0022 <span class="irt_int">int</span> FLOAD 0021 tab.hmask
0023 > <span class="irt_int">int</span> EQ 0022 <span class="irt_int">+63 </span>
0024 <span class="irt_p32">p32</span> FLOAD 0021 tab.node
0025 > <span class="irt_p32">p32</span> HREFK 0024 <span class="irt_str">"ipairs"</span> @18
0026 > <span class="irt_fun">fun</span> HLOAD 0025
0027 > <span class="irt_tab">tab</span> SLOAD #2 T
0028 > <span class="irt_fun">fun</span> EQ 0026 <span class="irt_fun">ipairs</span>
0029 <span class="irt_int">int</span> FLOAD 0027 tab.asize
0030 > <span class="irt_int">int</span> ABC 0029 <span class="irt_int">+1 </span>
0031 <span class="irt_p32">p32</span> FLOAD 0027 tab.array
0032 <span class="irt_p32">p32</span> AREF 0031 <span class="irt_int">+1 </span>
0033 > <span class="irt_tab">tab</span> ALOAD 0032
---- TRACE 5 mcode 355
0bcaf36f mov dword [0x405d84a0], 0x5
0bcaf37a mov edx, [0x405d84b0]
0bcaf381 movsd xmm7, [0x401f5ce0]
0bcaf38a cmp dword [rdx+0x1c], -0x09
0bcaf38e jnz 0x0bca0010 ->0
0bcaf394 cmp dword [rdx+0x24], -0x0c
0bcaf398 jnz 0x0bca0010 ->0
0bcaf39e mov ebp, [rdx+0x20]
0bcaf3a1 cmp dword [rdx+0x18], 0x405dafd0
0bcaf3a8 jnz 0x0bca0010 ->0
0bcaf3ae lea ebx, [r15+0x1]
0bcaf3b2 cmp ebx, [rbp+0x18]
0bcaf3b5 jb 0x0bca0010 ->0
0bcaf3bb cmp dword [rbp+0x1c], +0x00
0bcaf3bf jnz 0x0bca0010 ->0
0bcaf3c5 mov ebp, [rdx-0x8]
0bcaf3c8 mov ebp, [rbp+0x8]
0bcaf3cb mov ebx, [rbp+0x1c]
0bcaf3ce and ebx, 0x644f2e12
0bcaf3d4 lea ebx, [rbx+rbx*2]
0bcaf3d7 shl ebx, 0x03
0bcaf3da add ebx, [rbp+0x14]
0bcaf3dd cmp dword [rbx+0xc], -0x05
0bcaf3e1 jnz 0x0bcaf3f0
0bcaf3e3 cmp dword [rbx+0x8], 0x405db028
0bcaf3ea jz 0x0bca0010 ->0
0bcaf3f0 mov ebx, [rbx+0x10]
0bcaf3f3 test ebx, ebx
0bcaf3f5 jnz 0x0bcaf3dd
0bcaf3f7 mov ebx, 0x405d8420
0bcaf3fc mov ebp, [rbp+0x10]
0bcaf3ff test ebp, ebp
0bcaf401 jz 0x0bca0010 ->0
0bcaf407 cmp dword [rbp+0x1c], +0x01
0bcaf40b jnz 0x0bca0010 ->0
0bcaf411 mov ebp, [rbp+0x14]
0bcaf414 mov rdi, 0xfffffffb405da430
0bcaf41e cmp rdi, [rbp+0x20]
0bcaf422 jnz 0x0bca0010 ->0
0bcaf428 cmp dword [rbp+0x1c], -0x0c
0bcaf42c jnz 0x0bca0010 ->0
0bcaf432 mov ebp, [rbp+0x18]
0bcaf435 cmp dword [rbp+0x1c], +0x3f
0bcaf439 jnz 0x0bca0010 ->0
0bcaf43f mov ebx, [rbp+0x14]
0bcaf442 mov rdi, 0xfffffffb405db028
0bcaf44c cmp rdi, [rbx+0x1b8]
0bcaf453 jnz 0x0bca0010 ->0
0bcaf459 cmp dword [rbx+0x1b4], -0x09
0bcaf460 jnz 0x0bca0010 ->0
0bcaf466 cmp dword [rdx+0xc], -0x0c
0bcaf46a jnz 0x0bca0010 ->0
0bcaf470 mov ebp, [rdx+0x8]
0bcaf473 cmp dword [rbx+0x1b0], 0x405daff8
0bcaf47d jnz 0x0bca0010 ->0
0bcaf483 cmp dword [rbp+0x18], +0x01
0bcaf487 jbe 0x0bca0010 ->0
0bcaf48d mov ebx, [rbp+0x8]
0bcaf490 cmp dword [rbx+0xc], -0x0c
0bcaf494 jnz 0x0bca0010 ->0
0bcaf49a mov ebx, [rbx+0x8]
0bcaf49d mov dword [rdx+0x3c], 0xfffffff4
0bcaf4a4 mov [rdx+0x38], ebx
0bcaf4a7 movsd [rdx+0x30], xmm7
0bcaf4ac movsd [rdx+0x28], xmm7
0bcaf4b1 mov dword [rdx+0x24], 0xfffffff4
0bcaf4b8 mov [rdx+0x20], ebp
0bcaf4bb mov dword [rdx+0x1c], 0xfffffff7
0bcaf4c2 mov dword [rdx+0x18], 0x405dafd0
0bcaf4c9 add rsp, +0x20
0bcaf4cd jmp 0x0bcaf4d5
---- TRACE 5 stop -> 4
</pre>
<pre class="ljdump">
---- TRACE 6 start 4/0 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
---- TRACE 6 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"table"</span> @47
0016 > <span class="irt_tab">tab</span> HLOAD 0015
0017 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+7 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"insert"</span> @7
0021 > <span class="irt_fun">fun</span> HLOAD 0020
0022 > <span class="irt_tab">tab</span> SLOAD #3 T
0023 > <span class="irt_tab">tab</span> SLOAD #8 T
0024 > <span class="irt_fun">fun</span> EQ 0021 <span class="irt_fun">table.insert</span>
0025 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0026 <span class="irt_int">int</span> ADD 0025 <span class="irt_int">+1 </span>
0027 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0028 > <span class="irt_int">int</span> ULE 0027 0026
0029 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0030 > <span class="irt_int">int</span> EQ 0029 <span class="irt_int">+0 </span>
0031 <span class="irt_num">num</span> CONV 0026 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0032 <span class="irt_p32">p32</span> NEWREF 0022 0031
0033 <span class="irt_tab">tab</span> HSTORE 0032 0023
0034 <span class="irt_nil">nil</span> TBAR 0022
0035 > <span class="irt_fun">fun</span> SLOAD #4 T
0036 > <span class="irt_tab">tab</span> SLOAD #5 T
0037 > <span class="irt_num">num</span> SLOAD #6 T
0038 > <span class="irt_fun">fun</span> EQ 0035 <span class="irt_fun">ipairs_aux</span>
0039 <span class="irt_int">int</span> CONV 0037 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0040 + <span class="irt_int">int</span> ADD 0039 <span class="irt_int">+1 </span>
0041 <span class="irt_int">int</span> FLOAD 0036 tab.asize
0042 > <span class="irt_int">int</span> ABC 0041 0040
0043 <span class="irt_p32">p32</span> FLOAD 0036 tab.array
0044 <span class="irt_p32">p32</span> AREF 0043 0040
0045 >+ <span class="irt_tab">tab</span> ALOAD 0044
0046 ------ LOOP ------------
0047 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0048 > <span class="irt_p32">p32</span> EQ 0047 <span class="irt_p32">[0x405d8420]</span>
0049 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0050 > <span class="irt_int">int</span> EQ 0049 <span class="irt_int">+1 </span>
0051 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0052 > <span class="irt_p32">p32</span> HREFK 0051 <span class="irt_str">"__index"</span> @1
0053 > <span class="irt_tab">tab</span> HLOAD 0052
0054 <span class="irt_int">int</span> FLOAD 0053 tab.hmask
0055 > <span class="irt_int">int</span> EQ 0054 <span class="irt_int">+63 </span>
0056 <span class="irt_p32">p32</span> FLOAD 0053 tab.node
0057 > <span class="irt_p32">p32</span> HREFK 0056 <span class="irt_str">"table"</span> @47
0058 > <span class="irt_tab">tab</span> HLOAD 0057
0059 <span class="irt_int">int</span> FLOAD 0058 tab.hmask
0060 > <span class="irt_int">int</span> EQ 0059 <span class="irt_int">+7 </span>
0061 <span class="irt_p32">p32</span> FLOAD 0058 tab.node
0062 > <span class="irt_p32">p32</span> HREFK 0061 <span class="irt_str">"insert"</span> @7
0063 > <span class="irt_fun">fun</span> HLOAD 0062
0064 > <span class="irt_fun">fun</span> EQ 0063 <span class="irt_fun">table.insert</span>
0065 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0066 <span class="irt_int">int</span> ADD 0065 <span class="irt_int">+1 </span>
0067 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0068 > <span class="irt_int">int</span> ULE 0067 0066
0069 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0070 > <span class="irt_int">int</span> EQ 0069 <span class="irt_int">+0 </span>
0071 <span class="irt_num">num</span> CONV 0066 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0072 <span class="irt_p32">p32</span> NEWREF 0022 0071
0073 <span class="irt_tab">tab</span> HSTORE 0072 0045
0074 <span class="irt_num">num</span> CONV 0040 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0075 + <span class="irt_int">int</span> ADD 0040 <span class="irt_int">+1 </span>
0076 <span class="irt_int">int</span> FLOAD 0036 tab.asize
0077 > <span class="irt_int">int</span> ABC 0076 0075
0078 <span class="irt_p32">p32</span> FLOAD 0036 tab.array
0079 <span class="irt_p32">p32</span> AREF 0078 0075
0080 >+ <span class="irt_tab">tab</span> ALOAD 0079
0081 <span class="irt_tab">tab</span> PHI 0045 0080
0082 <span class="irt_int">int</span> PHI 0040 0075
---- TRACE 6 mcode 838
0bcaf029 add rsp, -0x10
0bcaf02d mov dword [0x405d84a0], 0x6
0bcaf038 mov edx, [0x405d84b0]
0bcaf03f mov eax, [rdx-0x8]
0bcaf042 mov eax, [rax+0x8]
0bcaf045 mov [rsp+0x14], eax
0bcaf049 mov ecx, [rax+0x1c]
0bcaf04c and ecx, 0x7230fd67
0bcaf052 lea ecx, [rcx+rcx*2]
0bcaf055 shl ecx, 0x03
0bcaf058 add ecx, [rax+0x14]
0bcaf05b cmp dword [rcx+0xc], -0x05
0bcaf05f jnz 0x0bcaf06e
0bcaf061 cmp dword [rcx+0x8], 0x405dae40
0bcaf068 jz 0x0bca0010 ->0
0bcaf06e mov ecx, [rcx+0x10]
0bcaf071 test ecx, ecx
0bcaf073 jnz 0x0bcaf05b
0bcaf075 mov ecx, 0x405d8420
0bcaf07a mov r13d, [rax+0x10]
0bcaf07e test r13d, r13d
0bcaf081 jz 0x0bca0010 ->0
0bcaf087 cmp dword [r13+0x1c], +0x01
0bcaf08c jnz 0x0bca0010 ->0
0bcaf092 mov eax, [r13+0x14]
0bcaf096 mov rdi, 0xfffffffb405da430
0bcaf0a0 cmp rdi, [rax+0x20]
0bcaf0a4 jnz 0x0bca0010 ->0
0bcaf0aa cmp dword [rax+0x1c], -0x0c
0bcaf0ae jnz 0x0bca0010 ->0
0bcaf0b4 mov eax, [rax+0x18]
0bcaf0b7 cmp dword [rax+0x1c], +0x3f
0bcaf0bb jnz 0x0bca0010 ->0
0bcaf0c1 mov eax, [rax+0x14]
0bcaf0c4 mov rdi, 0xfffffffb405dae40
0bcaf0ce cmp rdi, [rax+0x470]
0bcaf0d5 jnz 0x0bca0010 ->0
0bcaf0db cmp dword [rax+0x46c], -0x0c
0bcaf0e2 jnz 0x0bca0010 ->0
0bcaf0e8 mov eax, [rax+0x468]
0bcaf0ee cmp dword [rax+0x1c], +0x07
0bcaf0f2 jnz 0x0bca0010 ->0
0bcaf0f8 mov eax, [rax+0x14]
0bcaf0fb mov rdi, 0xfffffffb405dc4f0
0bcaf105 cmp rdi, [rax+0xb0]
0bcaf10c jnz 0x0bca0010 ->0
0bcaf112 cmp dword [rax+0xac], -0x09
0bcaf119 jnz 0x0bca0010 ->0
0bcaf11f cmp dword [rdx+0x14], -0x0c
0bcaf123 jnz 0x0bca0010 ->0
0bcaf129 mov edi, [rdx+0x10]
0bcaf12c mov [rsp+0x10], edi
0bcaf130 cmp dword [rdx+0x3c], -0x0c
0bcaf134 jnz 0x0bca0010 ->0
0bcaf13a mov esi, [rdx+0x38]
0bcaf13d mov [rsp+0x18], esi
0bcaf141 cmp dword [rax+0xa8], 0x405dc4c8
0bcaf14b jnz 0x0bca0010 ->0
0bcaf151 call 0x00420530 ->lj_tab_len
0bcaf156 mov edi, [0x405d84ac]
0bcaf15d mov esi, [rsp+0x10]
0bcaf161 add eax, +0x01
0bcaf164 cmp eax, [rsi+0x18]
0bcaf167 jb 0x0bca0010 ->0
0bcaf16d cmp dword [rsi+0x1c], +0x00
0bcaf171 jnz 0x0bca0010 ->0
0bcaf177 xorps xmm7, xmm7
0bcaf17a cvtsi2sd xmm7, eax
0bcaf17e movsd [rsp+0x20], xmm7
0bcaf184 lea rdx, [rsp+0x20]
0bcaf189 call 0x004200e0 ->lj_tab_newkey
0bcaf18e mov ecx, eax
0bcaf190 mov edi, [rsp+0x10]
0bcaf194 mov edx, [0x405d84b0]
0bcaf19b mov eax, [rsp+0x18]
0bcaf19f mov dword [rcx+0x4], 0xfffffff4
0bcaf1a6 mov [rcx], eax
0bcaf1a8 test byte [rdi+0x4], 0x4
0bcaf1ac jz 0x0bcaf1c3
0bcaf1ae and byte [rdi+0x4], 0xfb
0bcaf1b2 mov esi, [0x405d83f4]
0bcaf1b9 mov [0x405d83f4], edi
0bcaf1c0 mov [rdi+0xc], esi
0bcaf1c3 cmp dword [rdx+0x1c], -0x09
0bcaf1c7 jnz 0x0bca0014 ->1
0bcaf1cd cmp dword [rdx+0x24], -0x0c
0bcaf1d1 jnz 0x0bca0014 ->1
0bcaf1d7 mov r12d, [rdx+0x20]
0bcaf1db cmp dword [rdx+0x2c], 0xfffeffff
0bcaf1e2 jnb 0x0bca0014 ->1
0bcaf1e8 cmp dword [rdx+0x18], 0x405dafd0
0bcaf1ef jnz 0x0bca0014 ->1
0bcaf1f5 cvtsd2si ebp, [rdx+0x28]
0bcaf1fa add ebp, +0x01
0bcaf1fd cmp ebp, [r12+0x18]
0bcaf202 jnb 0x0bca0014 ->1
0bcaf208 mov eax, [r12+0x8]
0bcaf20d cmp dword [rax+rbp*8+0x4], -0x0c
0bcaf212 jnz 0x0bca0014 ->1
0bcaf218 mov ebx, [rax+rbp*8]
->LOOP:
0bcaf21b mov edi, [rsp+0x10]
0bcaf21f mov eax, [rsp+0x14]
0bcaf223 mov r14d, ebx
0bcaf226 mov ebx, [rax+0x1c]
0bcaf229 and ebx, 0x7230fd67
0bcaf22f lea ebx, [rbx+rbx*2]
0bcaf232 shl ebx, 0x03
0bcaf235 add ebx, [rax+0x14]
0bcaf238 cmp dword [rbx+0xc], -0x05
0bcaf23c jnz 0x0bcaf24b
0bcaf23e cmp dword [rbx+0x8], 0x405dae40
0bcaf245 jz 0x0bca0018 ->2
0bcaf24b mov ebx, [rbx+0x10]
0bcaf24e test ebx, ebx
0bcaf250 jnz 0x0bcaf238
0bcaf252 mov ebx, 0x405d8420
0bcaf257 cmp dword [r13+0x1c], +0x01
0bcaf25c jnz 0x0bca0018 ->2
0bcaf262 mov ebx, [r13+0x14]
0bcaf266 mov rsi, 0xfffffffb405da430
0bcaf270 cmp rsi, [rbx+0x20]
0bcaf274 jnz 0x0bca0018 ->2
0bcaf27a cmp dword [rbx+0x1c], -0x0c
0bcaf27e jnz 0x0bca0018 ->2
0bcaf284 mov ebx, [rbx+0x18]
0bcaf287 cmp dword [rbx+0x1c], +0x3f
0bcaf28b jnz 0x0bca0018 ->2
0bcaf291 mov ebx, [rbx+0x14]
0bcaf294 mov rsi, 0xfffffffb405dae40
0bcaf29e cmp rsi, [rbx+0x470]
0bcaf2a5 jnz 0x0bca0018 ->2
0bcaf2ab cmp dword [rbx+0x46c], -0x0c
0bcaf2b2 jnz 0x0bca0018 ->2
0bcaf2b8 mov ebx, [rbx+0x468]
0bcaf2be cmp dword [rbx+0x1c], +0x07
0bcaf2c2 jnz 0x0bca0018 ->2
0bcaf2c8 mov ebx, [rbx+0x14]
0bcaf2cb mov rsi, 0xfffffffb405dc4f0
0bcaf2d5 cmp rsi, [rbx+0xb0]
0bcaf2dc jnz 0x0bca0018 ->2
0bcaf2e2 cmp dword [rbx+0xac], -0x09
0bcaf2e9 jnz 0x0bca0018 ->2
0bcaf2ef cmp dword [rbx+0xa8], 0x405dc4c8
0bcaf2f9 jnz 0x0bca0018 ->2
0bcaf2ff call 0x00420530 ->lj_tab_len
0bcaf304 mov edi, [0x405d84ac]
0bcaf30b mov esi, [rsp+0x10]
0bcaf30f add eax, +0x01
0bcaf312 cmp eax, [rsi+0x18]
0bcaf315 jb 0x0bca0018 ->2
0bcaf31b cmp dword [rsi+0x1c], +0x00
0bcaf31f jnz 0x0bca0018 ->2
0bcaf325 xorps xmm7, xmm7
0bcaf328 cvtsi2sd xmm7, eax
0bcaf32c movsd [rsp+0x8], xmm7
0bcaf332 lea rdx, [rsp+0x8]
0bcaf337 call 0x004200e0 ->lj_tab_newkey
0bcaf33c mov dword [rax+0x4], 0xfffffff4
0bcaf343 mov [rax], r14d
0bcaf346 mov r15d, ebp
0bcaf349 add ebp, +0x01
0bcaf34c cmp ebp, [r12+0x18]
0bcaf351 jnb 0x0bca001c ->3
0bcaf357 mov ebx, [r12+0x8]
0bcaf35c cmp dword [rbx+rbp*8+0x4], -0x0c
0bcaf361 jnz 0x0bca001c ->3
0bcaf367 mov ebx, [rbx+rbp*8]
0bcaf36a jmp 0x0bcaf21b ->LOOP
---- TRACE 6 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 7 start 1/0 utils.lua:39
0006 GGET 8 1 ; "table"
0007 TGETS 8 8 2 ; "insert"
0008 MOV 9 2
0009 MOV 10 7
0010 CALL 8 1 3
0000 . FUNCC ; table.insert
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 7 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"table"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"table"</span> @47
0016 > <span class="irt_tab">tab</span> HLOAD 0015
0017 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+7 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"insert"</span> @7
0021 > <span class="irt_fun">fun</span> HLOAD 0020
0022 > <span class="irt_tab">tab</span> SLOAD #3 T
0023 > <span class="irt_tab">tab</span> SLOAD #8 T
0024 > <span class="irt_fun">fun</span> EQ 0021 <span class="irt_fun">table.insert</span>
0025 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0026 <span class="irt_int">int</span> ADD 0025 <span class="irt_int">+1 </span>
0027 <span class="irt_int">int</span> FLOAD 0022 tab.asize
0028 > <span class="irt_int">int</span> ABC 0027 0026
0029 <span class="irt_p32">p32</span> FLOAD 0022 tab.array
0030 <span class="irt_p32">p32</span> AREF 0029 0026
0031 <span class="irt_tab">tab</span> ASTORE 0030 0023
0032 <span class="irt_nil">nil</span> TBAR 0022
0033 > <span class="irt_fun">fun</span> SLOAD #4 T
0034 > <span class="irt_tab">tab</span> SLOAD #5 T
0035 > <span class="irt_num">num</span> SLOAD #6 T
0036 > <span class="irt_fun">fun</span> EQ 0033 <span class="irt_fun">ipairs_aux</span>
0037 <span class="irt_int">int</span> CONV 0035 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0038 + <span class="irt_int">int</span> ADD 0037 <span class="irt_int">+1 </span>
0039 <span class="irt_int">int</span> FLOAD 0034 tab.asize
0040 > <span class="irt_int">int</span> ABC 0039 0038
0041 <span class="irt_p32">p32</span> FLOAD 0034 tab.array
0042 <span class="irt_p32">p32</span> AREF 0041 0038
0043 >+ <span class="irt_tab">tab</span> ALOAD 0042
0044 ------ LOOP ------------
0045 <span class="irt_int">int</span> CALLL lj_tab_len (0022)
0046 <span class="irt_int">int</span> ADD 0045 <span class="irt_int">+1 </span>
0047 > <span class="irt_int">int</span> ABC 0027 0046
0048 <span class="irt_p32">p32</span> AREF 0029 0046
0049 <span class="irt_tab">tab</span> ASTORE 0048 0043
0050 <span class="irt_num">num</span> CONV 0038 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0051 + <span class="irt_int">int</span> ADD 0038 <span class="irt_int">+1 </span>
0052 > <span class="irt_int">int</span> ABC 0039 0051
0053 <span class="irt_p32">p32</span> AREF 0041 0051
0054 >+ <span class="irt_tab">tab</span> ALOAD 0053
0055 <span class="irt_tab">tab</span> PHI 0043 0054
0056 <span class="irt_int">int</span> PHI 0038 0051
---- TRACE 7 mcode 540
0bcaee02 mov dword [0x405d84a0], 0x7
0bcaee0d mov edx, [0x405d84b0]
0bcaee14 mov eax, [rdx-0x8]
0bcaee17 mov eax, [rax+0x8]
0bcaee1a mov ecx, [rax+0x1c]
0bcaee1d and ecx, 0x7230fd67
0bcaee23 lea ecx, [rcx+rcx*2]
0bcaee26 shl ecx, 0x03
0bcaee29 add ecx, [rax+0x14]
0bcaee2c cmp dword [rcx+0xc], -0x05
0bcaee30 jnz 0x0bcaee3f
0bcaee32 cmp dword [rcx+0x8], 0x405dae40
0bcaee39 jz 0x0bca0010 ->0
0bcaee3f mov ecx, [rcx+0x10]
0bcaee42 test ecx, ecx
0bcaee44 jnz 0x0bcaee2c
0bcaee46 mov ecx, 0x405d8420
0bcaee4b mov eax, [rax+0x10]
0bcaee4e test eax, eax
0bcaee50 jz 0x0bca0010 ->0
0bcaee56 cmp dword [rax+0x1c], +0x01
0bcaee5a jnz 0x0bca0010 ->0
0bcaee60 mov eax, [rax+0x14]
0bcaee63 mov rdi, 0xfffffffb405da430
0bcaee6d cmp rdi, [rax+0x20]
0bcaee71 jnz 0x0bca0010 ->0
0bcaee77 cmp dword [rax+0x1c], -0x0c
0bcaee7b jnz 0x0bca0010 ->0
0bcaee81 mov eax, [rax+0x18]
0bcaee84 cmp dword [rax+0x1c], +0x3f
0bcaee88 jnz 0x0bca0010 ->0
0bcaee8e mov eax, [rax+0x14]
0bcaee91 mov rdi, 0xfffffffb405dae40
0bcaee9b cmp rdi, [rax+0x470]
0bcaeea2 jnz 0x0bca0010 ->0
0bcaeea8 cmp dword [rax+0x46c], -0x0c
0bcaeeaf jnz 0x0bca0010 ->0
0bcaeeb5 mov eax, [rax+0x468]
0bcaeebb cmp dword [rax+0x1c], +0x07
0bcaeebf jnz 0x0bca0010 ->0
0bcaeec5 mov eax, [rax+0x14]
0bcaeec8 mov rdi, 0xfffffffb405dc4f0
0bcaeed2 cmp rdi, [rax+0xb0]
0bcaeed9 jnz 0x0bca0010 ->0
0bcaeedf cmp dword [rax+0xac], -0x09
0bcaeee6 jnz 0x0bca0010 ->0
0bcaeeec cmp dword [rdx+0x14], -0x0c
0bcaeef0 jnz 0x0bca0010 ->0
0bcaeef6 mov edi, [rdx+0x10]
0bcaeef9 mov [rsp+0x10], edi
0bcaeefd cmp dword [rdx+0x3c], -0x0c
0bcaef01 jnz 0x0bca0010 ->0
0bcaef07 mov esi, [rdx+0x38]
0bcaef0a mov [rsp+0x14], esi
0bcaef0e cmp dword [rax+0xa8], 0x405dc4c8
0bcaef18 jnz 0x0bca0010 ->0
0bcaef1e call 0x00420530 ->lj_tab_len
0bcaef23 mov ecx, eax
0bcaef25 mov edi, [rsp+0x10]
0bcaef29 mov edx, [0x405d84b0]
0bcaef30 mov eax, [rsp+0x14]
0bcaef34 mov ebx, ecx
0bcaef36 add ebx, +0x01
0bcaef39 mov ecx, [rdi+0x18]
0bcaef3c mov [rsp+0xc], ecx
0bcaef40 cmp ebx, [rdi+0x18]
0bcaef43 jnb 0x0bca0010 ->0
0bcaef49 mov ecx, [rdi+0x8]
0bcaef4c mov [rsp+0x8], ecx
0bcaef50 mov dword [rcx+rbx*8+0x4], 0xfffffff4
0bcaef58 mov [rcx+rbx*8], eax
0bcaef5b test byte [rdi+0x4], 0x4
0bcaef5f jz 0x0bcaef76
0bcaef61 and byte [rdi+0x4], 0xfb
0bcaef65 mov esi, [0x405d83f4]
0bcaef6c mov [0x405d83f4], edi
0bcaef73 mov [rdi+0xc], esi
0bcaef76 cmp dword [rdx+0x1c], -0x09
0bcaef7a jnz 0x0bca0014 ->1
0bcaef80 cmp dword [rdx+0x24], -0x0c
0bcaef84 jnz 0x0bca0014 ->1
0bcaef8a mov eax, [rdx+0x20]
0bcaef8d cmp dword [rdx+0x2c], 0xfffeffff
0bcaef94 jnb 0x0bca0014 ->1
0bcaef9a cmp dword [rdx+0x18], 0x405dafd0
0bcaefa1 jnz 0x0bca0014 ->1
0bcaefa7 cvtsd2si ebp, [rdx+0x28]
0bcaefac add ebp, +0x01
0bcaefaf mov r13d, [rax+0x18]
0bcaefb3 cmp ebp, r13d
0bcaefb6 jnb 0x0bca0014 ->1
0bcaefbc mov r12d, [rax+0x8]
0bcaefc0 cmp dword [r12+rbp*8+0x4], -0x0c
0bcaefc6 jnz 0x0bca0014 ->1
0bcaefcc mov ebx, [r12+rbp*8]
->LOOP:
0bcaefd0 mov edi, [rsp+0x10]
0bcaefd4 mov r14d, ebx
0bcaefd7 call 0x00420530 ->lj_tab_len
0bcaefdc mov ebx, eax
0bcaefde mov ecx, [rsp+0xc]
0bcaefe2 mov eax, [rsp+0x8]
0bcaefe6 add ebx, +0x01
0bcaefe9 cmp ebx, ecx
0bcaefeb jnb 0x0bca0018 ->2
0bcaeff1 mov dword [rax+rbx*8+0x4], 0xfffffff4
0bcaeff9 mov [rax+rbx*8], r14d
0bcaeffd mov r15d, ebp
0bcaf000 add ebp, +0x01
0bcaf003 cmp ebp, r13d
0bcaf006 jnb 0x0bca001c ->3
0bcaf00c cmp dword [r12+rbp*8+0x4], -0x0c
0bcaf012 jnz 0x0bca001c ->3
0bcaf018 mov ebx, [r12+rbp*8]
0bcaf01c jmp 0x0bcaefd0 ->LOOP
---- TRACE 7 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 8 start expand.lua:685
0081 TDUP 4 15
0082 GGET 5 2 ; "table"
0083 TGETS 5 5 16 ; "remove"
0084 MOV 6 3
0085 CALL 5 2 2
0000 . FUNCC ; table.remove
0086 TSETB 5 4 2
0087 TSETB 2 4 3
0088 TDUP 5 17
0089 TSETB 5 4 4
0090 MOV 2 4
0091 JMP 4 =&gt; 0077
0077 LEN 4 3
0078 ISEQN 4 2 ; 0
0079 JMP 4 => 0092
0080 LOOP 4 =&gt; 0092
---- TRACE 8 IR
0001 >+ <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40b40c98}</span>
0002 <span class="irt_fun">fun</span> SLOAD #0 R
0003 <span class="irt_tab">tab</span> FLOAD 0002 func.env
0004 <span class="irt_p32">p32</span> HREF 0003 <span class="irt_str">"table"</span>
0005 > <span class="irt_p32">p32</span> EQ 0004 <span class="irt_p32">[0x405d8420]</span>
0006 <span class="irt_tab">tab</span> FLOAD 0003 tab.meta
0007 > <span class="irt_tab">tab</span> NE 0006 <span class="irt_tab">[NULL]</span>
0008 <span class="irt_int">int</span> FLOAD 0006 tab.hmask
0009 > <span class="irt_int">int</span> EQ 0008 <span class="irt_int">+1 </span>
0010 <span class="irt_p32">p32</span> FLOAD 0006 tab.node
0011 > <span class="irt_p32">p32</span> HREFK 0010 <span class="irt_str">"__index"</span> @1
0012 > <span class="irt_tab">tab</span> HLOAD 0011
0013 <span class="irt_int">int</span> FLOAD 0012 tab.hmask
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+63 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0012 tab.node
0016 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"table"</span> @47
0017 > <span class="irt_tab">tab</span> HLOAD 0016
0018 <span class="irt_int">int</span> FLOAD 0017 tab.hmask
0019 > <span class="irt_int">int</span> EQ 0018 <span class="irt_int">+7 </span>
0020 <span class="irt_p32">p32</span> FLOAD 0017 tab.node
0021 > <span class="irt_p32">p32</span> HREFK 0020 <span class="irt_str">"remove"</span> @2
0022 > <span class="irt_fun">fun</span> HLOAD 0021
0023 > <span class="irt_tab">tab</span> SLOAD #4 T
0024 > <span class="irt_fun">fun</span> EQ 0022 <span class="irt_fun">table.remove</span>
0025 <span class="irt_int">int</span> CALLL lj_tab_len (0023)
0026 > <span class="irt_int">int</span> NE 0025 <span class="irt_int">+0 </span>
0027 <span class="irt_int">int</span> FLOAD 0023 tab.asize
0028 > <span class="irt_int">int</span> ABC 0027 0025
0029 <span class="irt_p32">p32</span> FLOAD 0023 tab.array
0030 <span class="irt_p32">p32</span> AREF 0029 0025
0031 > <span class="irt_tab">tab</span> ALOAD 0030
0032 <span class="irt_nil">nil</span> ASTORE 0030 <span class="irt_nil">nil </span>
0033 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0034 <span class="irt_p32">p32</span> AREF 0033 <span class="irt_int">+2 </span>
0035 <span class="irt_tab">tab</span> ASTORE 0034 0031
0036 > <span class="irt_tab">tab</span> SLOAD #3 T
0037 <span class="irt_p32">p32</span> AREF 0033 <span class="irt_int">+3 </span>
0038 <span class="irt_tab">tab</span> ASTORE 0037 0036
0039 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40b40cd0}</span>
0040 <span class="irt_p32">p32</span> AREF 0033 <span class="irt_int">+4 </span>
0041 <span class="irt_tab">tab</span> ASTORE 0040 0039
0042 + <span class="irt_int">int</span> CALLL lj_tab_len (0023)
0043 > <span class="irt_int">int</span> NE 0042 <span class="irt_int">+0 </span>
0044 ------ LOOP ------------
0045 >+ <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40b40c98}</span>
0046 > <span class="irt_int">int</span> ABC 0027 0042
0047 <span class="irt_p32">p32</span> AREF 0029 0042
0048 > <span class="irt_tab">tab</span> ALOAD 0047
0049 <span class="irt_nil">nil</span> ASTORE 0047 <span class="irt_nil">nil </span>
0050 <span class="irt_p32">p32</span> FLOAD 0045 tab.array
0051 <span class="irt_p32">p32</span> AREF 0050 <span class="irt_int">+2 </span>
0052 <span class="irt_tab">tab</span> ASTORE 0051 0048
0053 <span class="irt_p32">p32</span> AREF 0050 <span class="irt_int">+3 </span>
0054 <span class="irt_tab">tab</span> ASTORE 0053 0001
0055 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40b40cd0}</span>
0056 <span class="irt_p32">p32</span> AREF 0050 <span class="irt_int">+4 </span>
0057 <span class="irt_tab">tab</span> ASTORE 0056 0055
0058 + <span class="irt_int">int</span> CALLL lj_tab_len (0023)
0059 > <span class="irt_int">int</span> NE 0058 <span class="irt_int">+0 </span>
0060 <span class="irt_int">int</span> PHI 0042 0058
0061 <span class="irt_tab">tab</span> PHI 0001 0045
---- TRACE 8 mcode 660
0bcaeb6e add rsp, -0x10
0bcaeb72 mov dword [0x405d84a0], 0x8
0bcaeb7d mov edi, [0x405d83d8]
0bcaeb84 cmp edi, [0x405d83dc]
0bcaeb8b jb 0x0bcaeba4
0bcaeb8d mov esi, 0x2
0bcaeb92 mov edi, 0x405d83b8
0bcaeb97 call 0x0041f3d0 ->lj_gc_step_jit
0bcaeb9c test eax, eax
0bcaeb9e jnz 0x0bca0010 ->0
0bcaeba4 mov edi, [0x405d84ac]
0bcaebab mov esi, 0x40b40c98
0bcaebb0 call 0x0041f850 ->lj_tab_dup
0bcaebb5 mov ebp, eax
0bcaebb7 mov [rsp+0x10], ebp
0bcaebbb mov edx, [0x405d84b0]
0bcaebc2 mov eax, [rdx-0x8]
0bcaebc5 mov eax, [rax+0x8]
0bcaebc8 mov ecx, [rax+0x1c]
0bcaebcb and ecx, 0x7230fd67
0bcaebd1 lea ecx, [rcx+rcx*2]
0bcaebd4 shl ecx, 0x03
0bcaebd7 add ecx, [rax+0x14]
0bcaebda cmp dword [rcx+0xc], -0x05
0bcaebde jnz 0x0bcaebed
0bcaebe0 cmp dword [rcx+0x8], 0x405dae40
0bcaebe7 jz 0x0bca0010 ->0
0bcaebed mov ecx, [rcx+0x10]
0bcaebf0 test ecx, ecx
0bcaebf2 jnz 0x0bcaebda
0bcaebf4 mov ecx, 0x405d8420
0bcaebf9 mov eax, [rax+0x10]
0bcaebfc test eax, eax
0bcaebfe jz 0x0bca0010 ->0
0bcaec04 cmp dword [rax+0x1c], +0x01
0bcaec08 jnz 0x0bca0010 ->0
0bcaec0e mov eax, [rax+0x14]
0bcaec11 mov rdi, 0xfffffffb405da430
0bcaec1b cmp rdi, [rax+0x20]
0bcaec1f jnz 0x0bca0010 ->0
0bcaec25 cmp dword [rax+0x1c], -0x0c
0bcaec29 jnz 0x0bca0010 ->0
0bcaec2f mov eax, [rax+0x18]
0bcaec32 cmp dword [rax+0x1c], +0x3f
0bcaec36 jnz 0x0bca0010 ->0
0bcaec3c mov eax, [rax+0x14]
0bcaec3f mov rdi, 0xfffffffb405dae40
0bcaec49 cmp rdi, [rax+0x470]
0bcaec50 jnz 0x0bca0010 ->0
0bcaec56 cmp dword [rax+0x46c], -0x0c
0bcaec5d jnz 0x0bca0010 ->0
0bcaec63 mov eax, [rax+0x468]
0bcaec69 cmp dword [rax+0x1c], +0x07
0bcaec6d jnz 0x0bca0010 ->0
0bcaec73 mov eax, [rax+0x14]
0bcaec76 mov rdi, 0xfffffffb405dc538
0bcaec80 cmp rdi, [rax+0x38]
0bcaec84 jnz 0x0bca0010 ->0
0bcaec8a cmp dword [rax+0x34], -0x09
0bcaec8e jnz 0x0bca0010 ->0
0bcaec94 cmp dword [rdx+0x1c], -0x0c
0bcaec98 jnz 0x0bca0010 ->0
0bcaec9e mov edi, [rdx+0x18]
0bcaeca1 mov [rsp+0xc], edi
0bcaeca5 cmp dword [rax+0x30], 0x405dc510
0bcaecac jnz 0x0bca0010 ->0
0bcaecb2 call 0x00420530 ->lj_tab_len
0bcaecb7 mov ecx, eax
0bcaecb9 mov edi, [rsp+0xc]
0bcaecbd mov edx, [0x405d84b0]
0bcaecc4 test ecx, ecx
0bcaecc6 jz 0x0bca0010 ->0
0bcaeccc mov r13d, [rdi+0x18]
0bcaecd0 cmp ecx, r13d
0bcaecd3 jnb 0x0bca0010 ->0
0bcaecd9 mov r12d, [rdi+0x8]
0bcaecdd mov edi, [0x405d84ac]
0bcaece4 cmp dword [r12+rcx*8+0x4], -0x0c
0bcaecea jnz 0x0bca0010 ->0
0bcaecf0 mov eax, [r12+rcx*8]
0bcaecf4 mov dword [r12+rcx*8+0x4], 0xffffffff
0bcaecfd mov r14d, [rbp+0x8]
0bcaed01 mov dword [r14+0x14], 0xfffffff4
0bcaed09 mov [r14+0x10], eax
0bcaed0d cmp dword [rdx+0x14], -0x0c
0bcaed11 jnz 0x0bca0014 ->1
0bcaed17 mov eax, [rdx+0x10]
0bcaed1a mov dword [r14+0x1c], 0xfffffff4
0bcaed22 mov [r14+0x18], eax
0bcaed26 mov esi, 0x40b40cd0
0bcaed2b call 0x0041f850 ->lj_tab_dup
0bcaed30 mov edi, [rsp+0xc]
0bcaed34 mov dword [r14+0x24], 0xfffffff4
0bcaed3c mov [r14+0x20], eax
0bcaed40 call 0x00420530 ->lj_tab_len
0bcaed45 mov ebp, eax
0bcaed47 mov eax, [rsp+0x10]
0bcaed4b test ebp, ebp
0bcaed4d jz 0x0bca001c ->3
->LOOP:
0bcaed53 mov ebx, eax
0bcaed55 mov edi, [0x405d83d8]
0bcaed5c cmp edi, [0x405d83dc]
0bcaed63 jb 0x0bcaed7c
0bcaed65 mov esi, 0x2
0bcaed6a mov edi, 0x405d83b8
0bcaed6f call 0x0041f3d0 ->lj_gc_step_jit
0bcaed74 test eax, eax
0bcaed76 jnz 0x0bca0020 ->4
0bcaed7c mov edi, [0x405d84ac]
0bcaed83 mov esi, 0x40b40c98
0bcaed88 call 0x0041f850 ->lj_tab_dup
0bcaed8d mov [rsp+0x8], eax
0bcaed91 mov edi, [0x405d84ac]
0bcaed98 cmp ebp, r13d
0bcaed9b jnb 0x0bca0020 ->4
0bcaeda1 cmp dword [r12+rbp*8+0x4], -0x0c
0bcaeda7 jnz 0x0bca0020 ->4
0bcaedad mov r15d, [r12+rbp*8]
0bcaedb1 mov dword [r12+rbp*8+0x4], 0xffffffff
0bcaedba mov ebp, [rax+0x8]
0bcaedbd mov dword [rbp+0x14], 0xfffffff4
0bcaedc4 mov [rbp+0x10], r15d
0bcaedc8 mov dword [rbp+0x1c], 0xfffffff4
0bcaedcf mov [rbp+0x18], ebx
0bcaedd2 mov esi, 0x40b40cd0
0bcaedd7 call 0x0041f850 ->lj_tab_dup
0bcaeddc mov edi, [rsp+0xc]
0bcaede0 mov dword [rbp+0x24], 0xfffffff4
0bcaede7 mov [rbp+0x20], eax
0bcaedea call 0x00420530 ->lj_tab_len
0bcaedef mov ebp, eax
0bcaedf1 mov eax, [rsp+0x8]
0bcaedf5 test ebp, ebp
0bcaedf7 jnz 0x0bcaed53 ->LOOP
0bcaedfd jmp 0x0bca0028 ->6
---- TRACE 8 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 9 start 2/0 utils.lua:39
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0018 RETM 6 1
0005 UGET 3 2 ; concat
0006 MOV 4 2
0007 TNEW 5 3
0008 TSETB 1 5 1
0009 CALLT 3 3
0000 FUNCF 11 ; utils.lua:37
0001 TNEW 2 0
0002 GGET 3 0 ; "ipairs"
0003 MOV 4 0
0004 CALL 3 4 2
0000 . FUNCC ; ipairs
0005 JMP 6 =&gt; 0011
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 9 IR
0001 > <span class="irt_fun">fun</span> SLOAD #4 T
0002 > <span class="irt_tab">tab</span> SLOAD #5 T
0003 > <span class="irt_num">num</span> SLOAD #6 T
0004 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">ipairs_aux</span>
0005 <span class="irt_int">int</span> CONV 0003 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0006 <span class="irt_int">int</span> ADD 0005 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0002 tab.asize
0008 > <span class="irt_int">int</span> ABC 0007 0006
0009 <span class="irt_p32">p32</span> FLOAD 0002 tab.array
0010 <span class="irt_p32">p32</span> AREF 0009 0006
0011 > <span class="irt_nil">nil</span> ALOAD 0010
0012 <span class="irt_fun">fun</span> SLOAD #0 R
0013 <span class="irt_tab">tab</span> FLOAD 0012 func.env
0014 <span class="irt_p32">p32</span> HREF 0013 <span class="irt_str">"ipairs"</span>
0015 > <span class="irt_p32">p32</span> EQ 0014 <span class="irt_p32">[0x405d8420]</span>
0016 <span class="irt_tab">tab</span> FLOAD 0013 tab.meta
0017 > <span class="irt_tab">tab</span> NE 0016 <span class="irt_tab">[NULL]</span>
0018 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0019 > <span class="irt_int">int</span> EQ 0018 <span class="irt_int">+1 </span>
0020 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0021 > <span class="irt_p32">p32</span> HREFK 0020 <span class="irt_str">"__index"</span> @1
0022 > <span class="irt_tab">tab</span> HLOAD 0021
0023 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0024 > <span class="irt_int">int</span> EQ 0023 <span class="irt_int">+63 </span>
0025 <span class="irt_p32">p32</span> FLOAD 0022 tab.node
0026 > <span class="irt_p32">p32</span> HREFK 0025 <span class="irt_str">"ipairs"</span> @18
0027 > <span class="irt_fun">fun</span> HLOAD 0026
0028 > <span class="irt_tab">tab</span> SLOAD #2 T
0029 > <span class="irt_fun">fun</span> EQ 0027 <span class="irt_fun">ipairs</span>
0030 <span class="irt_int">int</span> FLOAD 0028 tab.asize
0031 > <span class="irt_int">int</span> ULE 0030 <span class="irt_int">+1 </span>
0032 <span class="irt_int">int</span> FLOAD 0028 tab.hmask
0033 > <span class="irt_int">int</span> EQ 0032 <span class="irt_int">+0 </span>
0034 > <span class="irt_tab">tab</span> SLOAD #3 T
0035 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b58a90</span> <span class="irt_p32">[0x40b58b18]</span>
0036 > <span class="irt_tab">tab</span> SLOAD #7 T
0037 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x403ab5e0</span> <span class="irt_p32">[0x403ab634]</span>
0038 <span class="irt_fun">fun</span> SLOAD #0 R
0039 > <span class="irt_p32">p32</span> UREFC 0038 #2
0040 > <span class="irt_fun">fun</span> ULOAD 0039
0041 > <span class="irt_tab">tab</span> TNEW #3 #0
0042 <span class="irt_p32">p32</span> FLOAD 0041 tab.array
0043 <span class="irt_p32">p32</span> AREF 0042 <span class="irt_int">+1 </span>
0044 <span class="irt_tab">tab</span> ASTORE 0043 0036
0045 > <span class="irt_fun">fun</span> EQ 0040 <span class="irt_fun">utils.lua:37</span>
0046 > <span class="irt_tab">tab</span> TNEW #0 #0
0047 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0048 <span class="irt_p32">p32</span> HREF 0047 <span class="irt_str">"ipairs"</span>
0049 > <span class="irt_p32">p32</span> EQ 0048 <span class="irt_p32">[0x405d8420]</span>
0050 <span class="irt_tab">tab</span> FLOAD 0047 tab.meta
0051 > <span class="irt_tab">tab</span> NE 0050 <span class="irt_tab">[NULL]</span>
0052 <span class="irt_int">int</span> FLOAD 0050 tab.hmask
0053 > <span class="irt_int">int</span> EQ 0052 <span class="irt_int">+1 </span>
0054 <span class="irt_p32">p32</span> FLOAD 0050 tab.node
0055 > <span class="irt_p32">p32</span> HREFK 0054 <span class="irt_str">"__index"</span> @1
0056 > <span class="irt_tab">tab</span> HLOAD 0055
0057 <span class="irt_int">int</span> FLOAD 0056 tab.hmask
0058 > <span class="irt_int">int</span> EQ 0057 <span class="irt_int">+63 </span>
0059 <span class="irt_p32">p32</span> FLOAD 0056 tab.node
0060 > <span class="irt_p32">p32</span> HREFK 0059 <span class="irt_str">"ipairs"</span> @18
0061 > <span class="irt_fun">fun</span> HLOAD 0060
0062 > <span class="irt_fun">fun</span> EQ 0061 <span class="irt_fun">ipairs</span>
0063 <span class="irt_int">int</span> FLOAD 0034 tab.asize
0064 > <span class="irt_int">int</span> ABC 0063 <span class="irt_int">+1 </span>
0065 <span class="irt_p32">p32</span> FLOAD 0034 tab.array
0066 <span class="irt_p32">p32</span> AREF 0065 <span class="irt_int">+1 </span>
0067 > <span class="irt_tab">tab</span> ALOAD 0066
---- TRACE 9 mcode 854
0bcae815 mov dword [0x405d84a0], 0x9
0bcae820 mov edi, [0x405d83d8]
0bcae827 cmp edi, [0x405d83dc]
0bcae82e jb 0x0bcae847
0bcae830 mov esi, 0x2
0bcae835 mov edi, 0x405d83b8
0bcae83a call 0x0041f3d0 ->lj_gc_step_jit
0bcae83f test eax, eax
0bcae841 jnz 0x0bca0010 ->0
0bcae847 mov edi, [0x405d84ac]
0bcae84e mov edx, [0x405d84b0]
0bcae855 cmp dword [rdx+0x1c], -0x09
0bcae859 jnz 0x0bca0010 ->0
0bcae85f cmp dword [rdx+0x24], -0x0c
0bcae863 jnz 0x0bca0010 ->0
0bcae869 mov ebp, [rdx+0x20]
0bcae86c cmp dword [rdx+0x2c], 0xfffeffff
0bcae873 jnb 0x0bca0010 ->0
0bcae879 cmp dword [rdx+0x18], 0x405dafd0
0bcae880 jnz 0x0bca0010 ->0
0bcae886 cvtsd2si ebx, [rdx+0x28]
0bcae88b add ebx, +0x01
0bcae88e cmp ebx, [rbp+0x18]
0bcae891 jnb 0x0bca0010 ->0
0bcae897 mov ebp, [rbp+0x8]
0bcae89a cmp dword [rbp+rbx*8+0x4], -0x01
0bcae89f jnz 0x0bca0010 ->0
0bcae8a5 mov ebp, [rdx-0x8]
0bcae8a8 mov ebp, [rbp+0x8]
0bcae8ab mov ebx, [rbp+0x1c]
0bcae8ae and ebx, 0x644f2e12
0bcae8b4 lea ebx, [rbx+rbx*2]
0bcae8b7 shl ebx, 0x03
0bcae8ba add ebx, [rbp+0x14]
0bcae8bd cmp dword [rbx+0xc], -0x05
0bcae8c1 jnz 0x0bcae8d0
0bcae8c3 cmp dword [rbx+0x8], 0x405db028
0bcae8ca jz 0x0bca0010 ->0
0bcae8d0 mov ebx, [rbx+0x10]
0bcae8d3 test ebx, ebx
0bcae8d5 jnz 0x0bcae8bd
0bcae8d7 mov ebx, 0x405d8420
0bcae8dc mov ebp, [rbp+0x10]
0bcae8df test ebp, ebp
0bcae8e1 jz 0x0bca0010 ->0
0bcae8e7 cmp dword [rbp+0x1c], +0x01
0bcae8eb jnz 0x0bca0010 ->0
0bcae8f1 mov ebp, [rbp+0x14]
0bcae8f4 mov rsi, 0xfffffffb405da430
0bcae8fe cmp rsi, [rbp+0x20]
0bcae902 jnz 0x0bca0010 ->0
0bcae908 cmp dword [rbp+0x1c], -0x0c
0bcae90c jnz 0x0bca0010 ->0
0bcae912 mov ebp, [rbp+0x18]
0bcae915 cmp dword [rbp+0x1c], +0x3f
0bcae919 jnz 0x0bca0010 ->0
0bcae91f mov ebx, [rbp+0x14]
0bcae922 mov rsi, 0xfffffffb405db028
0bcae92c cmp rsi, [rbx+0x1b8]
0bcae933 jnz 0x0bca0010 ->0
0bcae939 cmp dword [rbx+0x1b4], -0x09
0bcae940 jnz 0x0bca0010 ->0
0bcae946 cmp dword [rdx+0xc], -0x0c
0bcae94a jnz 0x0bca0010 ->0
0bcae950 mov ebp, [rdx+0x8]
0bcae953 cmp dword [rbx+0x1b0], 0x405daff8
0bcae95d jnz 0x0bca0010 ->0
0bcae963 cmp dword [rbp+0x18], +0x01
0bcae967 ja 0x0bca0010 ->0
0bcae96d cmp dword [rbp+0x1c], +0x00
0bcae971 jnz 0x0bca0010 ->0
0bcae977 cmp dword [rdx+0x14], -0x0c
0bcae97b jnz 0x0bca0010 ->0
0bcae981 mov ebp, [rdx+0x10]
0bcae984 cmp dword [rdx-0x4], 0x40b58b18
0bcae98b jnz 0x0bca0014 ->1
0bcae991 add edx, -0x40
0bcae994 mov [0x405d84b0], edx
0bcae99b cmp dword [rdx+0x34], -0x0c
0bcae99f jnz 0x0bca0018 ->2
0bcae9a5 mov ebx, [rdx+0x30]
0bcae9a8 cmp dword [rdx-0x4], 0x403ab634
0bcae9af jnz 0x0bca001c ->3
0bcae9b5 add edx, -0x10
0bcae9b8 mov [0x405d84b0], edx
0bcae9bf mov r15d, [rdx-0x8]
0bcae9c3 mov esi, [r15+0x1c]
0bcae9c7 cmp byte [rsi+0x6], 0x1
0bcae9cb jnz 0x0bca0020 ->4
0bcae9d1 lea r15d, [rsi+0x8]
0bcae9d5 cmp dword [r15+0x4], -0x09
0bcae9da jnz 0x0bca0020 ->4
0bcae9e0 mov r14d, [r15]
0bcae9e3 mov esi, 0x3
0bcae9e8 call 0x0041f7e0 ->lj_tab_new1
0bcae9ed mov [rsp+0x8], eax
0bcae9f1 mov edi, [0x405d84ac]
0bcae9f8 mov dword [rax+0x2c], 0xfffffff4
0bcae9ff mov [rax+0x28], ebx
0bcaea02 cmp r14d, 0x40b42658
0bcaea09 jnz 0x0bca0024 ->5
0bcaea0f xor esi, esi
0bcaea11 call 0x0041f7e0 ->lj_tab_new1
0bcaea16 mov ebx, eax
0bcaea18 mov edx, [0x405d84b0]
0bcaea1f mov eax, [rsp+0x8]
0bcaea23 movsd xmm7, [0x401f5ce0]
0bcaea2c mov r15d, [0x40b42660]
0bcaea34 mov r13d, [r15+0x1c]
0bcaea38 and r13d, 0x644f2e12
0bcaea3f lea r13d, [r13+r13*2+0x0]
0bcaea44 shl r13d, 0x03
0bcaea48 add r13d, [r15+0x14]
0bcaea4c cmp dword [r13+0xc], -0x05
0bcaea51 jnz 0x0bcaea61
0bcaea53 cmp dword [r13+0x8], 0x405db028
0bcaea5b jz 0x0bca0024 ->5
0bcaea61 mov r13d, [r13+0x10]
0bcaea65 test r13d, r13d
0bcaea68 jnz 0x0bcaea4c
0bcaea6a mov r13d, 0x405d8420
0bcaea70 mov r15d, [r15+0x10]
0bcaea74 test r15d, r15d
0bcaea77 jz 0x0bca0024 ->5
0bcaea7d cmp dword [r15+0x1c], +0x01
0bcaea82 jnz 0x0bca0024 ->5
0bcaea88 mov r15d, [r15+0x14]
0bcaea8c mov rdi, 0xfffffffb405da430
0bcaea96 cmp rdi, [r15+0x20]
0bcaea9a jnz 0x0bca0024 ->5
0bcaeaa0 cmp dword [r15+0x1c], -0x0c
0bcaeaa5 jnz 0x0bca0024 ->5
0bcaeaab mov r15d, [r15+0x18]
0bcaeaaf cmp dword [r15+0x1c], +0x3f
0bcaeab4 jnz 0x0bca0024 ->5
0bcaeaba mov r15d, [r15+0x14]
0bcaeabe mov rdi, 0xfffffffb405db028
0bcaeac8 cmp rdi, [r15+0x1b8]
0bcaeacf jnz 0x0bca0024 ->5
0bcaead5 cmp dword [r15+0x1b4], -0x09
0bcaeadd jnz 0x0bca0024 ->5
0bcaeae3 cmp dword [r15+0x1b0], 0x405daff8
0bcaeaee jnz 0x0bca0024 ->5
0bcaeaf4 cmp dword [rbp+0x18], +0x01
0bcaeaf8 jbe 0x0bca0024 ->5
0bcaeafe mov r15d, [rbp+0x8]
0bcaeb02 cmp dword [r15+0xc], -0x0c
0bcaeb07 jnz 0x0bca0024 ->5
0bcaeb0d mov r15d, [r15+0x8]
0bcaeb11 mov dword [rdx+0x3c], 0xfffffff4
0bcaeb18 mov [rdx+0x38], r15d
0bcaeb1c movsd [rdx+0x30], xmm7
0bcaeb21 movsd [rdx+0x28], xmm7
0bcaeb26 mov dword [rdx+0x24], 0xfffffff4
0bcaeb2d mov [rdx+0x20], ebp
0bcaeb30 mov dword [rdx+0x1c], 0xfffffff7
0bcaeb37 mov dword [rdx+0x18], 0x405dafd0
0bcaeb3e mov dword [rdx+0x14], 0xfffffff4
0bcaeb45 mov [rdx+0x10], ebx
0bcaeb48 mov dword [rdx+0xc], 0xfffffff4
0bcaeb4f mov [rdx+0x8], eax
0bcaeb52 mov dword [rdx+0x4], 0xfffffff4
0bcaeb59 mov [rdx], ebp
0bcaeb5b mov dword [rdx-0x8], 0x40b42658
0bcaeb62 add rsp, +0x20
0bcaeb66 jmp 0x0bcafcc1
---- TRACE 9 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 10 start 6/1 utils.lua:40
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0018 RETM 6 1
0005 UGET 3 2 ; concat
0006 MOV 4 2
0007 TNEW 5 3
0008 TSETB 1 5 1
0009 CALLT 3 3
0000 FUNCF 11 ; utils.lua:37
0001 TNEW 2 0
0002 GGET 3 0 ; "ipairs"
0003 MOV 4 0
0004 CALL 3 4 2
0000 . FUNCC ; ipairs
0005 JMP 6 =&gt; 0011
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 10 IR
0001 > <span class="irt_fun">fun</span> SLOAD #4 T
0002 > <span class="irt_tab">tab</span> SLOAD #5 T
0003 > <span class="irt_num">num</span> SLOAD #6 T
0004 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">ipairs_aux</span>
0005 <span class="irt_int">int</span> CONV 0003 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0006 <span class="irt_int">int</span> ADD 0005 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0002 tab.asize
0008 > <span class="irt_int">int</span> ABC 0007 0006
0009 <span class="irt_p32">p32</span> FLOAD 0002 tab.array
0010 <span class="irt_p32">p32</span> AREF 0009 0006
0011 > <span class="irt_nil">nil</span> ALOAD 0010
0012 > <span class="irt_tab">tab</span> SLOAD #3 T
0013 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b58a90</span> <span class="irt_p32">[0x40b58b18]</span>
0014 > <span class="irt_tab">tab</span> SLOAD #7 T
0015 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x403ab5e0</span> <span class="irt_p32">[0x403ab634]</span>
0016 <span class="irt_fun">fun</span> SLOAD #0 R
0017 > <span class="irt_p32">p32</span> UREFC 0016 #2
0018 > <span class="irt_fun">fun</span> ULOAD 0017
0019 > <span class="irt_tab">tab</span> TNEW #3 #0
0020 <span class="irt_p32">p32</span> FLOAD 0019 tab.array
0021 <span class="irt_p32">p32</span> AREF 0020 <span class="irt_int">+1 </span>
0022 <span class="irt_tab">tab</span> ASTORE 0021 0014
0023 > <span class="irt_fun">fun</span> EQ 0018 <span class="irt_fun">utils.lua:37</span>
0024 > <span class="irt_tab">tab</span> TNEW #0 #0
0025 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0026 <span class="irt_p32">p32</span> HREF 0025 <span class="irt_str">"ipairs"</span>
0027 > <span class="irt_p32">p32</span> EQ 0026 <span class="irt_p32">[0x405d8420]</span>
0028 <span class="irt_tab">tab</span> FLOAD 0025 tab.meta
0029 > <span class="irt_tab">tab</span> NE 0028 <span class="irt_tab">[NULL]</span>
0030 <span class="irt_int">int</span> FLOAD 0028 tab.hmask
0031 > <span class="irt_int">int</span> EQ 0030 <span class="irt_int">+1 </span>
0032 <span class="irt_p32">p32</span> FLOAD 0028 tab.node
0033 > <span class="irt_p32">p32</span> HREFK 0032 <span class="irt_str">"__index"</span> @1
0034 > <span class="irt_tab">tab</span> HLOAD 0033
0035 <span class="irt_int">int</span> FLOAD 0034 tab.hmask
0036 > <span class="irt_int">int</span> EQ 0035 <span class="irt_int">+63 </span>
0037 <span class="irt_p32">p32</span> FLOAD 0034 tab.node
0038 > <span class="irt_p32">p32</span> HREFK 0037 <span class="irt_str">"ipairs"</span> @18
0039 > <span class="irt_fun">fun</span> HLOAD 0038
0040 > <span class="irt_fun">fun</span> EQ 0039 <span class="irt_fun">ipairs</span>
0041 <span class="irt_int">int</span> FLOAD 0012 tab.asize
0042 > <span class="irt_int">int</span> ABC 0041 <span class="irt_int">+1 </span>
0043 <span class="irt_p32">p32</span> FLOAD 0012 tab.array
0044 <span class="irt_p32">p32</span> AREF 0043 <span class="irt_int">+1 </span>
0045 > <span class="irt_tab">tab</span> ALOAD 0044
---- TRACE 10 mcode 644
0bcae58e mov dword [0x405d84a0], 0xa
0bcae599 mov edi, [0x405d83d8]
0bcae5a0 cmp edi, [0x405d83dc]
0bcae5a7 jb 0x0bcae5c0
0bcae5a9 mov esi, 0x2
0bcae5ae mov edi, 0x405d83b8
0bcae5b3 call 0x0041f3d0 ->lj_gc_step_jit
0bcae5b8 test eax, eax
0bcae5ba jnz 0x0bca0010 ->0
0bcae5c0 mov edi, [0x405d84ac]
0bcae5c7 mov edx, [0x405d84b0]
0bcae5ce cmp dword [rdx+0x1c], -0x09
0bcae5d2 jnz 0x0bca0010 ->0
0bcae5d8 cmp dword [rdx+0x24], -0x0c
0bcae5dc jnz 0x0bca0010 ->0
0bcae5e2 mov ebp, [rdx+0x20]
0bcae5e5 cmp dword [rdx+0x2c], 0xfffeffff
0bcae5ec jnb 0x0bca0010 ->0
0bcae5f2 cmp dword [rdx+0x18], 0x405dafd0
0bcae5f9 jnz 0x0bca0010 ->0
0bcae5ff cvtsd2si ebx, [rdx+0x28]
0bcae604 add ebx, +0x01
0bcae607 cmp ebx, [rbp+0x18]
0bcae60a jnb 0x0bca0010 ->0
0bcae610 mov ebp, [rbp+0x8]
0bcae613 cmp dword [rbp+rbx*8+0x4], -0x01
0bcae618 jnz 0x0bca0010 ->0
0bcae61e cmp dword [rdx+0x14], -0x0c
0bcae622 jnz 0x0bca0010 ->0
0bcae628 mov ebp, [rdx+0x10]
0bcae62b cmp dword [rdx-0x4], 0x40b58b18
0bcae632 jnz 0x0bca0014 ->1
0bcae638 add edx, -0x40
0bcae63b mov [0x405d84b0], edx
0bcae642 cmp dword [rdx+0x34], -0x0c
0bcae646 jnz 0x0bca0018 ->2
0bcae64c mov ebx, [rdx+0x30]
0bcae64f cmp dword [rdx-0x4], 0x403ab634
0bcae656 jnz 0x0bca001c ->3
0bcae65c add edx, -0x10
0bcae65f mov [0x405d84b0], edx
0bcae666 mov r15d, [rdx-0x8]
0bcae66a mov esi, [r15+0x1c]
0bcae66e cmp byte [rsi+0x6], 0x1
0bcae672 jnz 0x0bca0020 ->4
0bcae678 lea r15d, [rsi+0x8]
0bcae67c cmp dword [r15+0x4], -0x09
0bcae681 jnz 0x0bca0020 ->4
0bcae687 mov r14d, [r15]
0bcae68a mov esi, 0x3
0bcae68f call 0x0041f7e0 ->lj_tab_new1
0bcae694 mov [rsp+0x8], eax
0bcae698 mov edi, [0x405d84ac]
0bcae69f mov dword [rax+0x2c], 0xfffffff4
0bcae6a6 mov [rax+0x28], ebx
0bcae6a9 cmp r14d, 0x40b42658
0bcae6b0 jnz 0x0bca0024 ->5
0bcae6b6 xor esi, esi
0bcae6b8 call 0x0041f7e0 ->lj_tab_new1
0bcae6bd mov ebx, eax
0bcae6bf mov edx, [0x405d84b0]
0bcae6c6 mov eax, [rsp+0x8]
0bcae6ca movsd xmm7, [0x401f5ce0]
0bcae6d3 mov r15d, [0x40b42660]
0bcae6db mov r13d, [r15+0x1c]
0bcae6df and r13d, 0x644f2e12
0bcae6e6 lea r13d, [r13+r13*2+0x0]
0bcae6eb shl r13d, 0x03
0bcae6ef add r13d, [r15+0x14]
0bcae6f3 cmp dword [r13+0xc], -0x05
0bcae6f8 jnz 0x0bcae708
0bcae6fa cmp dword [r13+0x8], 0x405db028
0bcae702 jz 0x0bca0024 ->5
0bcae708 mov r13d, [r13+0x10]
0bcae70c test r13d, r13d
0bcae70f jnz 0x0bcae6f3
0bcae711 mov r13d, 0x405d8420
0bcae717 mov r15d, [r15+0x10]
0bcae71b test r15d, r15d
0bcae71e jz 0x0bca0024 ->5
0bcae724 cmp dword [r15+0x1c], +0x01
0bcae729 jnz 0x0bca0024 ->5
0bcae72f mov r15d, [r15+0x14]
0bcae733 mov rdi, 0xfffffffb405da430
0bcae73d cmp rdi, [r15+0x20]
0bcae741 jnz 0x0bca0024 ->5
0bcae747 cmp dword [r15+0x1c], -0x0c
0bcae74c jnz 0x0bca0024 ->5
0bcae752 mov r15d, [r15+0x18]
0bcae756 cmp dword [r15+0x1c], +0x3f
0bcae75b jnz 0x0bca0024 ->5
0bcae761 mov r15d, [r15+0x14]
0bcae765 mov rdi, 0xfffffffb405db028
0bcae76f cmp rdi, [r15+0x1b8]
0bcae776 jnz 0x0bca0024 ->5
0bcae77c cmp dword [r15+0x1b4], -0x09
0bcae784 jnz 0x0bca0024 ->5
0bcae78a cmp dword [r15+0x1b0], 0x405daff8
0bcae795 jnz 0x0bca0024 ->5
0bcae79b cmp dword [rbp+0x18], +0x01
0bcae79f jbe 0x0bca0024 ->5
0bcae7a5 mov r15d, [rbp+0x8]
0bcae7a9 cmp dword [r15+0xc], -0x0c
0bcae7ae jnz 0x0bca0024 ->5
0bcae7b4 mov r15d, [r15+0x8]
0bcae7b8 mov dword [rdx+0x3c], 0xfffffff4
0bcae7bf mov [rdx+0x38], r15d
0bcae7c3 movsd [rdx+0x30], xmm7
0bcae7c8 movsd [rdx+0x28], xmm7
0bcae7cd mov dword [rdx+0x24], 0xfffffff4
0bcae7d4 mov [rdx+0x20], ebp
0bcae7d7 mov dword [rdx+0x1c], 0xfffffff7
0bcae7de mov dword [rdx+0x18], 0x405dafd0
0bcae7e5 mov dword [rdx+0x14], 0xfffffff4
0bcae7ec mov [rdx+0x10], ebx
0bcae7ef mov dword [rdx+0xc], 0xfffffff4
0bcae7f6 mov [rdx+0x8], eax
0bcae7f9 mov dword [rdx+0x4], 0xfffffff4
0bcae800 mov [rdx], ebp
0bcae802 mov dword [rdx-0x8], 0x40b42658
0bcae809 add rsp, +0x20
0bcae80d jmp 0x0bcafcc1
---- TRACE 10 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 11 start 2/2 utils.lua:41
0024 RET1 2 2
0018 CALLM 3 2 1
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 11 IR
0001 > <span class="irt_tab">tab</span> SLOAD #3 T
0002 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b40870</span> <span class="irt_p32">[0x40b408f8]</span>
0003 > <span class="irt_fun">fun</span> SLOAD #4 T
0004 > <span class="irt_tab">tab</span> SLOAD #5 T
0005 > <span class="irt_fun">fun</span> EQ 0003 <span class="irt_fun">utils.lua:37</span>
0006 > <span class="irt_tab">tab</span> TNEW #0 #0
0007 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0008 <span class="irt_p32">p32</span> HREF 0007 <span class="irt_str">"ipairs"</span>
0009 > <span class="irt_p32">p32</span> EQ 0008 <span class="irt_p32">[0x405d8420]</span>
0010 <span class="irt_tab">tab</span> FLOAD 0007 tab.meta
0011 > <span class="irt_tab">tab</span> NE 0010 <span class="irt_tab">[NULL]</span>
0012 <span class="irt_int">int</span> FLOAD 0010 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+1 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0010 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"__index"</span> @1
0016 > <span class="irt_tab">tab</span> HLOAD 0015
0017 <span class="irt_int">int</span> FLOAD 0016 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+63 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0016 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"ipairs"</span> @18
0021 > <span class="irt_fun">fun</span> HLOAD 0020
0022 > <span class="irt_fun">fun</span> EQ 0021 <span class="irt_fun">ipairs</span>
0023 <span class="irt_int">int</span> FLOAD 0004 tab.asize
0024 > <span class="irt_int">int</span> ABC 0023 <span class="irt_int">+1 </span>
0025 <span class="irt_p32">p32</span> FLOAD 0004 tab.array
0026 <span class="irt_p32">p32</span> AREF 0025 <span class="irt_int">+1 </span>
0027 > <span class="irt_tab">tab</span> ALOAD 0026
---- TRACE 11 mcode 485
0bcae3a6 mov dword [0x405d84a0], 0xb
0bcae3b1 mov edi, [0x405d83d8]
0bcae3b8 cmp edi, [0x405d83dc]
0bcae3bf jb 0x0bcae3d8
0bcae3c1 mov esi, 0x1
0bcae3c6 mov edi, 0x405d83b8
0bcae3cb call 0x0041f3d0 ->lj_gc_step_jit
0bcae3d0 test eax, eax
0bcae3d2 jnz 0x0bca0010 ->0
0bcae3d8 mov edi, [0x405d84ac]
0bcae3df mov edx, [0x405d84b0]
0bcae3e6 cmp dword [rdx+0x14], -0x0c
0bcae3ea jnz 0x0bca0010 ->0
0bcae3f0 mov ebp, [rdx+0x10]
0bcae3f3 cmp dword [rdx-0x4], 0x40b408f8
0bcae3fa jnz 0x0bca0014 ->1
0bcae400 add edx, -0x30
0bcae403 mov [0x405d84b0], edx
0bcae40a cmp dword [rdx+0x1c], -0x09
0bcae40e jnz 0x0bca0018 ->2
0bcae414 cmp dword [rdx+0x24], -0x0c
0bcae418 jnz 0x0bca0018 ->2
0bcae41e mov ebx, [rdx+0x20]
0bcae421 cmp dword [rdx+0x18], 0x40b42658
0bcae428 jnz 0x0bca0018 ->2
0bcae42e xor esi, esi
0bcae430 call 0x0041f7e0 ->lj_tab_new1
0bcae435 mov edx, [0x405d84b0]
0bcae43c movsd xmm7, [0x401f5ce0]
0bcae445 mov r15d, [0x40b42660]
0bcae44d mov r14d, [r15+0x1c]
0bcae451 and r14d, 0x644f2e12
0bcae458 lea r14d, [r14+r14*2]
0bcae45c shl r14d, 0x03
0bcae460 add r14d, [r15+0x14]
0bcae464 cmp dword [r14+0xc], -0x05
0bcae469 jnz 0x0bcae479
0bcae46b cmp dword [r14+0x8], 0x405db028
0bcae473 jz 0x0bca0018 ->2
0bcae479 mov r14d, [r14+0x10]
0bcae47d test r14d, r14d
0bcae480 jnz 0x0bcae464
0bcae482 mov r14d, 0x405d8420
0bcae488 mov r15d, [r15+0x10]
0bcae48c test r15d, r15d
0bcae48f jz 0x0bca0018 ->2
0bcae495 cmp dword [r15+0x1c], +0x01
0bcae49a jnz 0x0bca0018 ->2
0bcae4a0 mov r15d, [r15+0x14]
0bcae4a4 mov rdi, 0xfffffffb405da430
0bcae4ae cmp rdi, [r15+0x20]
0bcae4b2 jnz 0x0bca0018 ->2
0bcae4b8 cmp dword [r15+0x1c], -0x0c
0bcae4bd jnz 0x0bca0018 ->2
0bcae4c3 mov r15d, [r15+0x18]
0bcae4c7 cmp dword [r15+0x1c], +0x3f
0bcae4cc jnz 0x0bca0018 ->2
0bcae4d2 mov r15d, [r15+0x14]
0bcae4d6 mov rdi, 0xfffffffb405db028
0bcae4e0 cmp rdi, [r15+0x1b8]
0bcae4e7 jnz 0x0bca0018 ->2
0bcae4ed cmp dword [r15+0x1b4], -0x09
0bcae4f5 jnz 0x0bca0018 ->2
0bcae4fb cmp dword [r15+0x1b0], 0x405daff8
0bcae506 jnz 0x0bca0018 ->2
0bcae50c cmp dword [rbx+0x18], +0x01
0bcae510 jbe 0x0bca0018 ->2
0bcae516 mov r15d, [rbx+0x8]
0bcae51a cmp dword [r15+0xc], -0x0c
0bcae51f jnz 0x0bca0018 ->2
0bcae525 mov r15d, [r15+0x8]
0bcae529 mov dword [rdx+0x5c], 0xfffffff4
0bcae530 mov [rdx+0x58], r15d
0bcae534 movsd [rdx+0x50], xmm7
0bcae539 movsd [rdx+0x48], xmm7
0bcae53e mov dword [rdx+0x44], 0xfffffff4
0bcae545 mov [rdx+0x40], ebx
0bcae548 mov dword [rdx+0x3c], 0xfffffff7
0bcae54f mov dword [rdx+0x38], 0x405dafd0
0bcae556 mov dword [rdx+0x34], 0xfffffff4
0bcae55d mov [rdx+0x30], eax
0bcae560 mov dword [rdx+0x2c], 0xfffffff4
0bcae567 mov [rdx+0x28], ebp
0bcae56a mov dword [rdx+0x1c], 0x40b408fc
0bcae571 mov dword [rdx+0x18], 0x40b42658
0bcae578 add edx, +0x20
0bcae57b mov [0x405d84b0], edx
0bcae582 add rsp, +0x20
0bcae586 jmp 0x0bcafcc1
---- TRACE 11 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 12 start 4/1 utils.lua:40
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0088 TDUP 11 15
0089 TDUP 12 16
0090 TSETB 4 12 2
0091 TSETB 6 12 3
0092 TSETB 12 11 2
0093 TSETB 8 11 3
0094 ISNEN 8 0 ; 1
0095 JMP 12 => 0099
0099 ISNEN 8 1 ; 2
0100 JMP 12 => 0105
0101 TDUP 12 17
0102 TSETB 11 12 2
0103 MOV 13 10
0104 RET 12 3
0005 UGET 4 0 ; expand_arith
0006 TGETB 5 0 3
0007 MOV 6 1
0008 CALL 4 3 3
0000 . FUNCF 14 ; expand.lua:632
0001 . GGET 2 0 ; "assert"
0002 . MOV 3 0
0003 . CALL 2 1 2
0000 . . FUNCC ; assert
0004 . GGET 2 1 ; "type"
0005 . MOV 3 0
0006 . CALL 2 2 2
0000 . . FUNCC ; type
0007 . ISEQS 2 2 ; "number"
0008 . JMP 2 => 0011
0011 . MOV 2 0
0012 . TNEW 3 0
0013 . RET 2 3
0009 TNEW 6 4
0010 TGETB 7 0 1
0011 TSETB 7 6 1
0012 TSETB 2 6 2
0013 TSETB 4 6 3
0014 UGET 7 1 ; concat
0015 MOV 8 3
0016 MOV 9 5
0017 CALL 7 0 3
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 12 IR
0001 > <span class="irt_fun">fun</span> SLOAD #4 T
0002 > <span class="irt_tab">tab</span> SLOAD #5 T
0003 > <span class="irt_num">num</span> SLOAD #6 T
0004 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">ipairs_aux</span>
0005 <span class="irt_int">int</span> CONV 0003 <span class="irt_int">int</span>.<span class="irt_num">num</span>
0006 <span class="irt_int">int</span> ADD 0005 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0002 tab.asize
0008 > <span class="irt_int">int</span> ABC 0007 0006
0009 <span class="irt_p32">p32</span> FLOAD 0002 tab.array
0010 <span class="irt_p32">p32</span> AREF 0009 0006
0011 > <span class="irt_nil">nil</span> ALOAD 0010
0012 > <span class="irt_tab">tab</span> SLOAD #3 T
0013 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b54c08</span> <span class="irt_p32">[0x40b54da8]</span>
0014 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x405e1ee8}</span>
0015 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x405e3708}</span>
0016 > <span class="irt_tab">tab</span> SLOAD #5 T
0017 <span class="irt_p32">p32</span> FLOAD 0015 tab.array
0018 <span class="irt_p32">p32</span> AREF 0017 <span class="irt_int">+2 </span>
0019 <span class="irt_tab">tab</span> ASTORE 0018 0016
0020 > <span class="irt_num">num</span> SLOAD #7 T
0021 <span class="irt_p32">p32</span> AREF 0017 <span class="irt_int">+3 </span>
0022 <span class="irt_num">num</span> ASTORE 0021 0020
0023 <span class="irt_p32">p32</span> FLOAD 0014 tab.array
0024 <span class="irt_p32">p32</span> AREF 0023 <span class="irt_int">+2 </span>
0025 <span class="irt_tab">tab</span> ASTORE 0024 0015
0026 > <span class="irt_num">num</span> SLOAD #9 T
0027 <span class="irt_p32">p32</span> AREF 0023 <span class="irt_int">+3 </span>
0028 <span class="irt_num">num</span> ASTORE 0027 0026
0029 > <span class="irt_num">num</span> NE 0026 <span class="irt_num">+1 </span>
0030 > <span class="irt_num">num</span> EQ 0026 <span class="irt_num">+2 </span>
0031 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40be9a48}</span>
0032 <span class="irt_p32">p32</span> FLOAD 0031 tab.array
0033 <span class="irt_p32">p32</span> AREF 0032 <span class="irt_int">+2 </span>
0034 <span class="irt_tab">tab</span> ASTORE 0033 0014
0035 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b58a90</span> <span class="irt_p32">[0x40b58ae4]</span>
0036 <span class="irt_fun">fun</span> SLOAD #0 R
0037 > <span class="irt_p32">p32</span> UREFC 0036 #0
0038 > <span class="irt_fun">fun</span> ULOAD 0037
0039 > <span class="irt_tab">tab</span> SLOAD #1 T
0040 <span class="irt_int">int</span> FLOAD 0039 tab.asize
0041 > <span class="irt_int">int</span> ABC 0040 <span class="irt_int">+3 </span>
0042 <span class="irt_p32">p32</span> FLOAD 0039 tab.array
0043 <span class="irt_p32">p32</span> AREF 0042 <span class="irt_int">+3 </span>
0044 > <span class="irt_num">num</span> ALOAD 0043
0045 > <span class="irt_str">str</span> SLOAD #2 T
0046 > <span class="irt_fun">fun</span> EQ 0038 <span class="irt_fun">expand.lua:632</span>
0047 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">expand.lua:632</span> func.env
0048 <span class="irt_p32">p32</span> HREF 0047 <span class="irt_str">"assert"</span>
0049 > <span class="irt_p32">p32</span> EQ 0048 <span class="irt_p32">[0x405d8420]</span>
0050 <span class="irt_tab">tab</span> FLOAD 0047 tab.meta
0051 > <span class="irt_tab">tab</span> NE 0050 <span class="irt_tab">[NULL]</span>
0052 <span class="irt_int">int</span> FLOAD 0050 tab.hmask
0053 > <span class="irt_int">int</span> EQ 0052 <span class="irt_int">+1 </span>
0054 <span class="irt_p32">p32</span> FLOAD 0050 tab.node
0055 > <span class="irt_p32">p32</span> HREFK 0054 <span class="irt_str">"__index"</span> @1
0056 > <span class="irt_tab">tab</span> HLOAD 0055
0057 <span class="irt_int">int</span> FLOAD 0056 tab.hmask
0058 > <span class="irt_int">int</span> EQ 0057 <span class="irt_int">+63 </span>
0059 <span class="irt_p32">p32</span> FLOAD 0056 tab.node
0060 > <span class="irt_p32">p32</span> HREFK 0059 <span class="irt_str">"assert"</span> @3
0061 > <span class="irt_fun">fun</span> HLOAD 0060
0062 > <span class="irt_fun">fun</span> EQ 0061 <span class="irt_fun">assert</span>
0063 <span class="irt_p32">p32</span> HREF 0047 <span class="irt_str">"type"</span>
0064 > <span class="irt_p32">p32</span> EQ 0063 <span class="irt_p32">[0x405d8420]</span>
0065 > <span class="irt_p32">p32</span> HREFK 0059 <span class="irt_str">"type"</span> @60
0066 > <span class="irt_fun">fun</span> HLOAD 0065
0067 > <span class="irt_fun">fun</span> EQ 0066 <span class="irt_fun">type</span>
0068 > <span class="irt_tab">tab</span> TNEW #0 #0
0069 > <span class="irt_tab">tab</span> TNEW #4 #0
0070 <span class="irt_p32">p32</span> AREF 0042 <span class="irt_int">+1 </span>
0071 > <span class="irt_str">str</span> ALOAD 0070
0072 <span class="irt_p32">p32</span> FLOAD 0069 tab.array
0073 <span class="irt_p32">p32</span> AREF 0072 <span class="irt_int">+1 </span>
0074 <span class="irt_str">str</span> ASTORE 0073 0071
0075 <span class="irt_p32">p32</span> AREF 0072 <span class="irt_int">+2 </span>
0076 <span class="irt_tab">tab</span> ASTORE 0075 0031
0077 <span class="irt_p32">p32</span> AREF 0072 <span class="irt_int">+3 </span>
0078 <span class="irt_num">num</span> ASTORE 0077 0044
0079 > <span class="irt_fun">fun</span> EQ 0036 <span class="irt_fun">expand.lua:664</span>
0080 > <span class="irt_tab">tab</span> TNEW #0 #0
0081 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0082 <span class="irt_p32">p32</span> HREF 0081 <span class="irt_str">"ipairs"</span>
0083 > <span class="irt_p32">p32</span> EQ 0082 <span class="irt_p32">[0x405d8420]</span>
0084 <span class="irt_tab">tab</span> FLOAD 0081 tab.meta
0085 > <span class="irt_tab">tab</span> NE 0084 <span class="irt_tab">[NULL]</span>
0086 <span class="irt_int">int</span> FLOAD 0084 tab.hmask
0087 > <span class="irt_int">int</span> EQ 0086 <span class="irt_int">+1 </span>
0088 <span class="irt_p32">p32</span> FLOAD 0084 tab.node
0089 > <span class="irt_p32">p32</span> HREFK 0088 <span class="irt_str">"__index"</span> @1
0090 > <span class="irt_tab">tab</span> HLOAD 0089
0091 <span class="irt_int">int</span> FLOAD 0090 tab.hmask
0092 > <span class="irt_int">int</span> EQ 0091 <span class="irt_int">+63 </span>
0093 <span class="irt_p32">p32</span> FLOAD 0090 tab.node
0094 > <span class="irt_p32">p32</span> HREFK 0093 <span class="irt_str">"ipairs"</span> @18
0095 > <span class="irt_fun">fun</span> HLOAD 0094
0096 > <span class="irt_fun">fun</span> EQ 0095 <span class="irt_fun">ipairs</span>
0097 <span class="irt_int">int</span> FLOAD 0012 tab.asize
0098 > <span class="irt_int">int</span> ABC 0097 <span class="irt_int">+1 </span>
0099 <span class="irt_p32">p32</span> FLOAD 0012 tab.array
0100 <span class="irt_p32">p32</span> AREF 0099 <span class="irt_int">+1 </span>
0101 > <span class="irt_tab">tab</span> ALOAD 0100
---- TRACE 12 mcode 1332
0bcade6f mov dword [0x405d84a0], 0xc
0bcade7a mov edi, [0x405d83d8]
0bcade81 cmp edi, [0x405d83dc]
0bcade88 jb 0x0bcadea1
0bcade8a mov esi, 0x6
0bcade8f mov edi, 0x405d83b8
0bcade94 call 0x0041f3d0 ->lj_gc_step_jit
0bcade99 test eax, eax
0bcade9b jnz 0x0bca0010 ->0
0bcadea1 mov edi, [0x405d84ac]
0bcadea8 mov edx, [0x405d84b0]
0bcadeaf cmp dword [rdx+0x1c], -0x09
0bcadeb3 jnz 0x0bca0010 ->0
0bcadeb9 cmp dword [rdx+0x24], -0x0c
0bcadebd jnz 0x0bca0010 ->0
0bcadec3 mov ebp, [rdx+0x20]
0bcadec6 cmp dword [rdx+0x2c], 0xfffeffff
0bcadecd jnb 0x0bca0010 ->0
0bcaded3 cmp dword [rdx+0x18], 0x405dafd0
0bcadeda jnz 0x0bca0010 ->0
0bcadee0 cvtsd2si ebx, [rdx+0x28]
0bcadee5 add ebx, +0x01
0bcadee8 cmp ebx, [rbp+0x18]
0bcadeeb jnb 0x0bca0010 ->0
0bcadef1 mov ebp, [rbp+0x8]
0bcadef4 cmp dword [rbp+rbx*8+0x4], -0x01
0bcadef9 jnz 0x0bca0010 ->0
0bcadeff cmp dword [rdx+0x14], -0x0c
0bcadf03 jnz 0x0bca0010 ->0
0bcadf09 mov ebp, [rdx+0x10]
0bcadf0c cmp dword [rdx-0x4], 0x40b54da8
0bcadf13 jnz 0x0bca0014 ->1
0bcadf19 add edx, -0x58
0bcadf1c mov [0x405d84b0], edx
0bcadf23 mov esi, 0x405e1ee8
0bcadf28 call 0x0041f850 ->lj_tab_dup
0bcadf2d mov [rsp+0x18], eax
0bcadf31 mov edi, [0x405d84ac]
0bcadf38 mov esi, 0x405e3708
0bcadf3d call 0x0041f850 ->lj_tab_dup
0bcadf42 mov ebx, eax
0bcadf44 mov edi, [0x405d84ac]
0bcadf4b mov edx, [0x405d84b0]
0bcadf52 mov eax, [rsp+0x18]
0bcadf56 cmp dword [rdx+0x24], -0x0c
0bcadf5a jnz 0x0bca0018 ->2
0bcadf60 mov r14d, [rdx+0x20]
0bcadf64 mov r15d, [rbx+0x8]
0bcadf68 mov dword [r15+0x14], 0xfffffff4
0bcadf70 mov [r15+0x10], r14d
0bcadf74 cmp dword [rdx+0x34], 0xfffeffff
0bcadf7b jnb 0x0bca001c ->3
0bcadf81 movsd xmm7, [rdx+0x30]
0bcadf86 movsd [r15+0x18], xmm7
0bcadf8c mov eax, [rax+0x8]
0bcadf8f mov dword [rax+0x14], 0xfffffff4
0bcadf96 mov [rax+0x10], ebx
0bcadf99 cmp dword [rdx+0x44], 0xfffeffff
0bcadfa0 jnb 0x0bca0020 ->4
0bcadfa6 movsd xmm7, [rdx+0x40]
0bcadfab movsd [rax+0x18], xmm7
0bcadfb0 ucomisd xmm7, [0x401f5ce0]
0bcadfb9 jpe 0x0bcadfc1
0bcadfbb jz 0x0bca0024 ->5
0bcadfc1 ucomisd xmm7, [0x401f5cf0]
0bcadfca jpe 0x0bca0028 ->6
0bcadfd0 jnz 0x0bca0028 ->6
0bcadfd6 mov esi, 0x40be9a48
0bcadfdb call 0x0041f850 ->lj_tab_dup
0bcadfe0 mov ebx, eax
0bcadfe2 mov [rsp+0xc], ebx
0bcadfe6 mov edi, [0x405d84ac]
0bcadfed mov edx, [0x405d84b0]
0bcadff4 mov eax, [rsp+0x18]
0bcadff8 mov ebx, [rbx+0x8]
0bcadffb mov dword [rbx+0x14], 0xfffffff4
0bcae002 mov [rbx+0x10], eax
0bcae005 cmp dword [rdx-0x4], 0x40b58ae4
0bcae00c jnz 0x0bca0030 ->8
0bcae012 add edx, -0x18
0bcae015 mov [0x405d84b0], edx
0bcae01c mov r15d, [rdx-0x8]
0bcae020 mov esi, [r15+0x14]
0bcae024 cmp byte [rsi+0x6], 0x1
0bcae028 jnz 0x0bca0034 ->9
0bcae02e lea ebx, [rsi+0x8]
0bcae031 cmp dword [rbx+0x4], -0x09
0bcae035 jnz 0x0bca0034 ->9
0bcae03b cmp dword [rdx+0x4], -0x0c
0bcae03f jnz 0x0bca0034 ->9
0bcae045 mov r14d, [rdx]
0bcae048 cmp dword [r14+0x18], +0x03
0bcae04d jbe 0x0bca0034 ->9
0bcae053 mov r14d, [r14+0x8]
0bcae057 cmp dword [r14+0x1c], 0xfffeffff
0bcae05f jnb 0x0bca0034 ->9
0bcae065 movsd xmm7, [r14+0x18]
0bcae06b movsd [rsp+0x10], xmm7
0bcae071 cmp dword [rdx+0xc], -0x05
0bcae075 jnz 0x0bca0034 ->9
0bcae07b cmp dword [rbx], 0x40b41f28
0bcae081 jnz 0x0bca0034 ->9
0bcae087 mov r12d, [0x40b41f30]
0bcae08f mov ebx, [r12+0x1c]
0bcae094 and ebx, 0xce2b6183
0bcae09a lea ebx, [rbx+rbx*2]
0bcae09d shl ebx, 0x03
0bcae0a0 add ebx, [r12+0x14]
0bcae0a5 cmp dword [rbx+0xc], -0x05
0bcae0a9 jnz 0x0bcae0b8
0bcae0ab cmp dword [rbx+0x8], 0x405dad18
0bcae0b2 jz 0x0bca0034 ->9
0bcae0b8 mov ebx, [rbx+0x10]
0bcae0bb test ebx, ebx
0bcae0bd jnz 0x0bcae0a5
0bcae0bf mov ebx, 0x405d8420
0bcae0c4 mov ebx, [r12+0x10]
0bcae0c9 test ebx, ebx
0bcae0cb jz 0x0bca0034 ->9
0bcae0d1 cmp dword [rbx+0x1c], +0x01
0bcae0d5 jnz 0x0bca0034 ->9
0bcae0db mov ebx, [rbx+0x14]
0bcae0de mov rsi, 0xfffffffb405da430
0bcae0e8 cmp rsi, [rbx+0x20]
0bcae0ec jnz 0x0bca0034 ->9
0bcae0f2 cmp dword [rbx+0x1c], -0x0c
0bcae0f6 jnz 0x0bca0034 ->9
0bcae0fc mov ebx, [rbx+0x18]
0bcae0ff cmp dword [rbx+0x1c], +0x3f
0bcae103 jnz 0x0bca0034 ->9
0bcae109 mov ebx, [rbx+0x14]
0bcae10c mov rsi, 0xfffffffb405dad18
0bcae116 cmp rsi, [rbx+0x50]
0bcae11a jnz 0x0bca0034 ->9
0bcae120 cmp dword [rbx+0x4c], -0x09
0bcae124 jnz 0x0bca0034 ->9
0bcae12a cmp dword [rbx+0x48], 0x405dacf0
0bcae131 jnz 0x0bca0034 ->9
0bcae137 mov r13d, [r12+0x1c]
0bcae13c and r13d, 0x798a813c
0bcae143 lea r13d, [r13+r13*2+0x0]
0bcae148 shl r13d, 0x03
0bcae14c add r13d, [r12+0x14]
0bcae151 cmp dword [r13+0xc], -0x05
0bcae156 jnz 0x0bcae166
0bcae158 cmp dword [r13+0x8], 0x405daf18
0bcae160 jz 0x0bca0034 ->9
0bcae166 mov r13d, [r13+0x10]
0bcae16a test r13d, r13d
0bcae16d jnz 0x0bcae151
0bcae16f mov r13d, 0x405d8420
0bcae175 mov rsi, 0xfffffffb405daf18
0bcae17f cmp rsi, [rbx+0x5a8]
0bcae186 jnz 0x0bca0034 ->9
0bcae18c cmp dword [rbx+0x5a4], -0x09
0bcae193 jnz 0x0bca0034 ->9
0bcae199 cmp dword [rbx+0x5a0], 0x405dae80
0bcae1a3 jnz 0x0bca0034 ->9
0bcae1a9 xor esi, esi
0bcae1ab call 0x0041f7e0 ->lj_tab_new1
0bcae1b0 mov [rsp+0x8], eax
0bcae1b4 mov edi, [0x405d84ac]
0bcae1bb mov esi, 0x4
0bcae1c0 call 0x0041f7e0 ->lj_tab_new1
0bcae1c5 mov ebx, eax
0bcae1c7 mov edi, [0x405d84ac]
0bcae1ce mov eax, [rsp+0xc]
0bcae1d2 movsd xmm7, [rsp+0x10]
0bcae1d8 cmp dword [r14+0xc], -0x05
0bcae1dd jnz 0x0bca0034 ->9
0bcae1e3 mov r14d, [r14+0x8]
0bcae1e7 mov dword [rbx+0x2c], 0xfffffffb
0bcae1ee mov [rbx+0x28], r14d
0bcae1f2 mov dword [rbx+0x34], 0xfffffff4
0bcae1f9 mov [rbx+0x30], eax
0bcae1fc movsd [rbx+0x38], xmm7
0bcae201 cmp r15d, 0x40b420e8
0bcae208 jnz 0x0bca0038 ->10
0bcae20e xor esi, esi
0bcae210 call 0x0041f7e0 ->lj_tab_new1
0bcae215 mov r15d, eax
0bcae218 mov edx, [0x405d84b0]
0bcae21f mov eax, [rsp+0x8]
0bcae223 movsd xmm7, [0x401f5ce0]
0bcae22c mov r14d, [0x40b42660]
0bcae234 mov r13d, [r14+0x1c]
0bcae238 and r13d, 0x644f2e12
0bcae23f lea r13d, [r13+r13*2+0x0]
0bcae244 shl r13d, 0x03
0bcae248 add r13d, [r14+0x14]
0bcae24c cmp dword [r13+0xc], -0x05
0bcae251 jnz 0x0bcae261
0bcae253 cmp dword [r13+0x8], 0x405db028
0bcae25b jz 0x0bca0038 ->10
0bcae261 mov r13d, [r13+0x10]
0bcae265 test r13d, r13d
0bcae268 jnz 0x0bcae24c
0bcae26a mov r13d, 0x405d8420
0bcae270 mov r14d, [r14+0x10]
0bcae274 test r14d, r14d
0bcae277 jz 0x0bca0038 ->10
0bcae27d cmp dword [r14+0x1c], +0x01
0bcae282 jnz 0x0bca0038 ->10
0bcae288 mov r14d, [r14+0x14]
0bcae28c mov rdi, 0xfffffffb405da430
0bcae296 cmp rdi, [r14+0x20]
0bcae29a jnz 0x0bca0038 ->10
0bcae2a0 cmp dword [r14+0x1c], -0x0c
0bcae2a5 jnz 0x0bca0038 ->10
0bcae2ab mov r14d, [r14+0x18]
0bcae2af cmp dword [r14+0x1c], +0x3f
0bcae2b4 jnz 0x0bca0038 ->10
0bcae2ba mov r14d, [r14+0x14]
0bcae2be mov rdi, 0xfffffffb405db028
0bcae2c8 cmp rdi, [r14+0x1b8]
0bcae2cf jnz 0x0bca0038 ->10
0bcae2d5 cmp dword [r14+0x1b4], -0x09
0bcae2dd jnz 0x0bca0038 ->10
0bcae2e3 cmp dword [r14+0x1b0], 0x405daff8
0bcae2ee jnz 0x0bca0038 ->10
0bcae2f4 cmp dword [rbp+0x18], +0x01
0bcae2f8 jbe 0x0bca0038 ->10
0bcae2fe mov r14d, [rbp+0x8]
0bcae302 cmp dword [r14+0xc], -0x0c
0bcae307 jnz 0x0bca0038 ->10
0bcae30d mov r14d, [r14+0x8]
0bcae311 mov dword [rdx+0x7c], 0xfffffff4
0bcae318 mov [rdx+0x78], r14d
0bcae31c movsd [rdx+0x70], xmm7
0bcae321 movsd [rdx+0x68], xmm7
0bcae326 mov dword [rdx+0x64], 0xfffffff4
0bcae32d mov [rdx+0x60], ebp
0bcae330 mov dword [rdx+0x5c], 0xfffffff7
0bcae337 mov dword [rdx+0x58], 0x405dafd0
0bcae33e mov dword [rdx+0x54], 0xfffffff4
0bcae345 mov [rdx+0x50], r15d
0bcae349 mov dword [rdx+0x4c], 0xfffffff4
0bcae350 mov [rdx+0x48], eax
0bcae353 mov dword [rdx+0x44], 0xfffffff4
0bcae35a mov [rdx+0x40], ebp
0bcae35d mov dword [rdx+0x3c], 0x40b58b18
0bcae364 mov dword [rdx+0x38], 0x40b42658
0bcae36b mov dword [rdx+0x34], 0xfffffff4
0bcae372 mov [rdx+0x30], ebx
0bcae375 mov dword [rdx+0x2c], 0xfffffff4
0bcae37c mov [rdx+0x28], eax
0bcae37f mov dword [rdx+0x1c], 0xfffffff4
0bcae386 mov [rdx+0x18], ebp
0bcae389 mov dword [rdx-0x8], 0x40b420e8
0bcae390 add edx, +0x40
0bcae393 mov [0x405d84b0], edx
0bcae39a add rsp, +0x10
0bcae39e jmp 0x0bcafcc1
---- TRACE 12 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 13 start expand.lua:632
0001 GGET 2 0 ; "assert"
0002 MOV 3 0
0003 CALL 2 1 2
0000 . FUNCC ; assert
0004 GGET 2 1 ; "type"
0005 MOV 3 0
0006 CALL 2 2 2
0000 . FUNCC ; type
0007 ISEQS 2 2 ; "number"
0008 JMP 2 => 0011
0009 ISNES 0 3 ; "len"
0010 JMP 2 => 0014
0014 TGETB 2 0 1
0015 UGET 3 0 ; binops
0016 TGETV 3 3 2
0017 ISF 3
0018 JMP 4 => 0048
0048 GGET 3 0 ; "assert"
0049 ISNES 2 7 ; "[]"
0050 JMP 4 => 0053
0053 KPRI 4 2
0054 KSTR 5 8 ; "expr has already been expanded?"
0055 CALL 3 1 3
0000 . FUNCC ; assert
0056 GGET 3 0 ; "assert"
0057 MOV 5 2
0058 TGETS 4 2 9 ; "match"
0059 KSTR 6 10 ; "^%[(.+)%]$"
0060 CALL 4 2 3
0000 . FUNCC ; string.match
---- TRACE 13 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 13 start 6/2 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0068 UCLO 0 =&gt; 0069
---- TRACE 13 abort expand.lua:617 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 13 start 6/2 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0068 UCLO 0 =&gt; 0069
---- TRACE 13 abort expand.lua:617 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 13 start 10/1 utils.lua:41
0024 RET1 2 2
0088 TDUP 11 15
0089 TDUP 12 16
0090 TSETB 4 12 2
0091 TSETB 6 12 3
0092 TSETB 12 11 2
0093 TSETB 8 11 3
0094 ISNEN 8 0 ; 1
0095 JMP 12 => 0099
0099 ISNEN 8 1 ; 2
0100 JMP 12 => 0105
0101 TDUP 12 17
0102 TSETB 11 12 2
0103 MOV 13 10
0104 RET 12 3
0005 UGET 4 0 ; expand_arith
0006 TGETB 5 0 3
0007 MOV 6 1
0008 CALL 4 3 3
0000 . FUNCF 14 ; expand.lua:632
0001 . GGET 2 0 ; "assert"
0002 . MOV 3 0
0003 . CALL 2 1 2
0000 . . FUNCC ; assert
0004 . GGET 2 1 ; "type"
0005 . MOV 3 0
0006 . CALL 2 2 2
0000 . . FUNCC ; type
0007 . ISEQS 2 2 ; "number"
0008 . JMP 2 => 0011
0011 . MOV 2 0
0012 . TNEW 3 0
0013 . RET 2 3
0009 TNEW 6 4
0010 TGETB 7 0 1
0011 TSETB 7 6 1
0012 TSETB 2 6 2
0013 TSETB 4 6 3
0014 UGET 7 1 ; concat
0015 MOV 8 3
0016 MOV 9 5
0017 CALL 7 0 3
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 13 IR
0001 > <span class="irt_tab">tab</span> SLOAD #3 T
0002 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b54c08</span> <span class="irt_p32">[0x40b54da8]</span>
0003 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x405e1ee8}</span>
0004 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x405e3708}</span>
0005 > <span class="irt_num">num</span> SLOAD #5 T
0006 <span class="irt_p32">p32</span> FLOAD 0004 tab.array
0007 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+2 </span>
0008 <span class="irt_num">num</span> ASTORE 0007 0005
0009 > <span class="irt_num">num</span> SLOAD #7 T
0010 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+3 </span>
0011 <span class="irt_num">num</span> ASTORE 0010 0009
0012 <span class="irt_p32">p32</span> FLOAD 0003 tab.array
0013 <span class="irt_p32">p32</span> AREF 0012 <span class="irt_int">+2 </span>
0014 <span class="irt_tab">tab</span> ASTORE 0013 0004
0015 > <span class="irt_num">num</span> SLOAD #9 T
0016 <span class="irt_p32">p32</span> AREF 0012 <span class="irt_int">+3 </span>
0017 <span class="irt_num">num</span> ASTORE 0016 0015
0018 > <span class="irt_num">num</span> NE 0015 <span class="irt_num">+1 </span>
0019 > <span class="irt_num">num</span> EQ 0015 <span class="irt_num">+2 </span>
0020 > <span class="irt_tab">tab</span> TDUP <span class="irt_tab">{0x40be9a48}</span>
0021 <span class="irt_p32">p32</span> FLOAD 0020 tab.array
0022 <span class="irt_p32">p32</span> AREF 0021 <span class="irt_int">+2 </span>
0023 <span class="irt_tab">tab</span> ASTORE 0022 0003
0024 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b58a90</span> <span class="irt_p32">[0x40b58ae4]</span>
0025 <span class="irt_fun">fun</span> SLOAD #0 R
0026 > <span class="irt_p32">p32</span> UREFC 0025 #0
0027 > <span class="irt_fun">fun</span> ULOAD 0026
0028 > <span class="irt_tab">tab</span> SLOAD #1 T
0029 <span class="irt_int">int</span> FLOAD 0028 tab.asize
0030 > <span class="irt_int">int</span> ABC 0029 <span class="irt_int">+3 </span>
0031 <span class="irt_p32">p32</span> FLOAD 0028 tab.array
0032 <span class="irt_p32">p32</span> AREF 0031 <span class="irt_int">+3 </span>
0033 > <span class="irt_num">num</span> ALOAD 0032
0034 > <span class="irt_str">str</span> SLOAD #2 T
0035 > <span class="irt_fun">fun</span> EQ 0027 <span class="irt_fun">expand.lua:632</span>
0036 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">expand.lua:632</span> func.env
0037 <span class="irt_p32">p32</span> HREF 0036 <span class="irt_str">"assert"</span>
0038 > <span class="irt_p32">p32</span> EQ 0037 <span class="irt_p32">[0x405d8420]</span>
0039 <span class="irt_tab">tab</span> FLOAD 0036 tab.meta
0040 > <span class="irt_tab">tab</span> NE 0039 <span class="irt_tab">[NULL]</span>
0041 <span class="irt_int">int</span> FLOAD 0039 tab.hmask
0042 > <span class="irt_int">int</span> EQ 0041 <span class="irt_int">+1 </span>
0043 <span class="irt_p32">p32</span> FLOAD 0039 tab.node
0044 > <span class="irt_p32">p32</span> HREFK 0043 <span class="irt_str">"__index"</span> @1
0045 > <span class="irt_tab">tab</span> HLOAD 0044
0046 <span class="irt_int">int</span> FLOAD 0045 tab.hmask
0047 > <span class="irt_int">int</span> EQ 0046 <span class="irt_int">+63 </span>
0048 <span class="irt_p32">p32</span> FLOAD 0045 tab.node
0049 > <span class="irt_p32">p32</span> HREFK 0048 <span class="irt_str">"assert"</span> @3
0050 > <span class="irt_fun">fun</span> HLOAD 0049
0051 > <span class="irt_fun">fun</span> EQ 0050 <span class="irt_fun">assert</span>
0052 <span class="irt_p32">p32</span> HREF 0036 <span class="irt_str">"type"</span>
0053 > <span class="irt_p32">p32</span> EQ 0052 <span class="irt_p32">[0x405d8420]</span>
0054 > <span class="irt_p32">p32</span> HREFK 0048 <span class="irt_str">"type"</span> @60
0055 > <span class="irt_fun">fun</span> HLOAD 0054
0056 > <span class="irt_fun">fun</span> EQ 0055 <span class="irt_fun">type</span>
0057 > <span class="irt_tab">tab</span> TNEW #0 #0
0058 > <span class="irt_tab">tab</span> TNEW #4 #0
0059 <span class="irt_p32">p32</span> AREF 0031 <span class="irt_int">+1 </span>
0060 > <span class="irt_str">str</span> ALOAD 0059
0061 <span class="irt_p32">p32</span> FLOAD 0058 tab.array
0062 <span class="irt_p32">p32</span> AREF 0061 <span class="irt_int">+1 </span>
0063 <span class="irt_str">str</span> ASTORE 0062 0060
0064 <span class="irt_p32">p32</span> AREF 0061 <span class="irt_int">+2 </span>
0065 <span class="irt_tab">tab</span> ASTORE 0064 0020
0066 <span class="irt_p32">p32</span> AREF 0061 <span class="irt_int">+3 </span>
0067 <span class="irt_num">num</span> ASTORE 0066 0033
0068 > <span class="irt_fun">fun</span> EQ 0025 <span class="irt_fun">expand.lua:664</span>
0069 > <span class="irt_tab">tab</span> TNEW #0 #0
0070 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0071 <span class="irt_p32">p32</span> HREF 0070 <span class="irt_str">"ipairs"</span>
0072 > <span class="irt_p32">p32</span> EQ 0071 <span class="irt_p32">[0x405d8420]</span>
0073 <span class="irt_tab">tab</span> FLOAD 0070 tab.meta
0074 > <span class="irt_tab">tab</span> NE 0073 <span class="irt_tab">[NULL]</span>
0075 <span class="irt_int">int</span> FLOAD 0073 tab.hmask
0076 > <span class="irt_int">int</span> EQ 0075 <span class="irt_int">+1 </span>
0077 <span class="irt_p32">p32</span> FLOAD 0073 tab.node
0078 > <span class="irt_p32">p32</span> HREFK 0077 <span class="irt_str">"__index"</span> @1
0079 > <span class="irt_tab">tab</span> HLOAD 0078
0080 <span class="irt_int">int</span> FLOAD 0079 tab.hmask
0081 > <span class="irt_int">int</span> EQ 0080 <span class="irt_int">+63 </span>
0082 <span class="irt_p32">p32</span> FLOAD 0079 tab.node
0083 > <span class="irt_p32">p32</span> HREFK 0082 <span class="irt_str">"ipairs"</span> @18
0084 > <span class="irt_fun">fun</span> HLOAD 0083
0085 > <span class="irt_fun">fun</span> EQ 0084 <span class="irt_fun">ipairs</span>
0086 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0087 > <span class="irt_int">int</span> ABC 0086 <span class="irt_int">+1 </span>
0088 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0089 <span class="irt_p32">p32</span> AREF 0088 <span class="irt_int">+1 </span>
0090 > <span class="irt_tab">tab</span> ALOAD 0089
---- TRACE 13 mcode 1250
0bcad98a mov dword [0x405d84a0], 0xd
0bcad995 mov edi, [0x405d83d8]
0bcad99c cmp edi, [0x405d83dc]
0bcad9a3 jb 0x0bcad9bc
0bcad9a5 mov esi, 0x6
0bcad9aa mov edi, 0x405d83b8
0bcad9af call 0x0041f3d0 ->lj_gc_step_jit
0bcad9b4 test eax, eax
0bcad9b6 jnz 0x0bca0010 ->0
0bcad9bc mov edi, [0x405d84ac]
0bcad9c3 mov edx, [0x405d84b0]
0bcad9ca cmp dword [rdx+0x14], -0x0c
0bcad9ce jnz 0x0bca0010 ->0
0bcad9d4 mov ebp, [rdx+0x10]
0bcad9d7 cmp dword [rdx-0x4], 0x40b54da8
0bcad9de jnz 0x0bca0014 ->1
0bcad9e4 add edx, -0x58
0bcad9e7 mov [0x405d84b0], edx
0bcad9ee mov esi, 0x405e1ee8
0bcad9f3 call 0x0041f850 ->lj_tab_dup
0bcad9f8 mov [rsp+0x18], eax
0bcad9fc mov edi, [0x405d84ac]
0bcada03 mov esi, 0x405e3708
0bcada08 call 0x0041f850 ->lj_tab_dup
0bcada0d mov ebx, eax
0bcada0f mov edi, [0x405d84ac]
0bcada16 mov edx, [0x405d84b0]
0bcada1d mov eax, [rsp+0x18]
0bcada21 cmp dword [rdx+0x24], 0xfffeffff
0bcada28 jnb 0x0bca0018 ->2
0bcada2e movsd xmm7, [rdx+0x20]
0bcada33 mov r15d, [rbx+0x8]
0bcada37 movsd [r15+0x10], xmm7
0bcada3d cmp dword [rdx+0x34], 0xfffeffff
0bcada44 jnb 0x0bca001c ->3
0bcada4a movsd xmm7, [rdx+0x30]
0bcada4f movsd [r15+0x18], xmm7
0bcada55 mov eax, [rax+0x8]
0bcada58 mov dword [rax+0x14], 0xfffffff4
0bcada5f mov [rax+0x10], ebx
0bcada62 cmp dword [rdx+0x44], 0xfffeffff
0bcada69 jnb 0x0bca0020 ->4
0bcada6f movsd xmm7, [rdx+0x40]
0bcada74 movsd [rax+0x18], xmm7
0bcada79 ucomisd xmm7, [0x401f5ce0]
0bcada82 jpe 0x0bcada8a
0bcada84 jz 0x0bca0024 ->5
0bcada8a ucomisd xmm7, [0x401f5cf0]
0bcada93 jpe 0x0bca0028 ->6
0bcada99 jnz 0x0bca0028 ->6
0bcada9f mov esi, 0x40be9a48
0bcadaa4 call 0x0041f850 ->lj_tab_dup
0bcadaa9 mov ebx, eax
0bcadaab mov [rsp+0xc], ebx
0bcadaaf mov edi, [0x405d84ac]
0bcadab6 mov edx, [0x405d84b0]
0bcadabd mov eax, [rsp+0x18]
0bcadac1 mov ebx, [rbx+0x8]
0bcadac4 mov dword [rbx+0x14], 0xfffffff4
0bcadacb mov [rbx+0x10], eax
0bcadace cmp dword [rdx-0x4], 0x40b58ae4
0bcadad5 jnz 0x0bca0030 ->8
0bcadadb add edx, -0x18
0bcadade mov [0x405d84b0], edx
0bcadae5 mov r15d, [rdx-0x8]
0bcadae9 mov esi, [r15+0x14]
0bcadaed cmp byte [rsi+0x6], 0x1
0bcadaf1 jnz 0x0bca0034 ->9
0bcadaf7 lea ebx, [rsi+0x8]
0bcadafa cmp dword [rbx+0x4], -0x09
0bcadafe jnz 0x0bca0034 ->9
0bcadb04 cmp dword [rdx+0x4], -0x0c
0bcadb08 jnz 0x0bca0034 ->9
0bcadb0e mov r14d, [rdx]
0bcadb11 cmp dword [r14+0x18], +0x03
0bcadb16 jbe 0x0bca0034 ->9
0bcadb1c mov r14d, [r14+0x8]
0bcadb20 cmp dword [r14+0x1c], 0xfffeffff
0bcadb28 jnb 0x0bca0034 ->9
0bcadb2e movsd xmm7, [r14+0x18]
0bcadb34 movsd [rsp+0x10], xmm7
0bcadb3a cmp dword [rdx+0xc], -0x05
0bcadb3e jnz 0x0bca0034 ->9
0bcadb44 cmp dword [rbx], 0x40b41f28
0bcadb4a jnz 0x0bca0034 ->9
0bcadb50 mov r12d, [0x40b41f30]
0bcadb58 mov ebx, [r12+0x1c]
0bcadb5d and ebx, 0xce2b6183
0bcadb63 lea ebx, [rbx+rbx*2]
0bcadb66 shl ebx, 0x03
0bcadb69 add ebx, [r12+0x14]
0bcadb6e cmp dword [rbx+0xc], -0x05
0bcadb72 jnz 0x0bcadb81
0bcadb74 cmp dword [rbx+0x8], 0x405dad18
0bcadb7b jz 0x0bca0034 ->9
0bcadb81 mov ebx, [rbx+0x10]
0bcadb84 test ebx, ebx
0bcadb86 jnz 0x0bcadb6e
0bcadb88 mov ebx, 0x405d8420
0bcadb8d mov ebx, [r12+0x10]
0bcadb92 test ebx, ebx
0bcadb94 jz 0x0bca0034 ->9
0bcadb9a cmp dword [rbx+0x1c], +0x01
0bcadb9e jnz 0x0bca0034 ->9
0bcadba4 mov ebx, [rbx+0x14]
0bcadba7 mov rsi, 0xfffffffb405da430
0bcadbb1 cmp rsi, [rbx+0x20]
0bcadbb5 jnz 0x0bca0034 ->9
0bcadbbb cmp dword [rbx+0x1c], -0x0c
0bcadbbf jnz 0x0bca0034 ->9
0bcadbc5 mov ebx, [rbx+0x18]
0bcadbc8 cmp dword [rbx+0x1c], +0x3f
0bcadbcc jnz 0x0bca0034 ->9
0bcadbd2 mov ebx, [rbx+0x14]
0bcadbd5 mov rsi, 0xfffffffb405dad18
0bcadbdf cmp rsi, [rbx+0x50]
0bcadbe3 jnz 0x0bca0034 ->9
0bcadbe9 cmp dword [rbx+0x4c], -0x09
0bcadbed jnz 0x0bca0034 ->9
0bcadbf3 cmp dword [rbx+0x48], 0x405dacf0
0bcadbfa jnz 0x0bca0034 ->9
0bcadc00 mov r13d, [r12+0x1c]
0bcadc05 and r13d, 0x798a813c
0bcadc0c lea r13d, [r13+r13*2+0x0]
0bcadc11 shl r13d, 0x03
0bcadc15 add r13d, [r12+0x14]
0bcadc1a cmp dword [r13+0xc], -0x05
0bcadc1f jnz 0x0bcadc2f
0bcadc21 cmp dword [r13+0x8], 0x405daf18
0bcadc29 jz 0x0bca0034 ->9
0bcadc2f mov r13d, [r13+0x10]
0bcadc33 test r13d, r13d
0bcadc36 jnz 0x0bcadc1a
0bcadc38 mov r13d, 0x405d8420
0bcadc3e mov rsi, 0xfffffffb405daf18
0bcadc48 cmp rsi, [rbx+0x5a8]
0bcadc4f jnz 0x0bca0034 ->9
0bcadc55 cmp dword [rbx+0x5a4], -0x09
0bcadc5c jnz 0x0bca0034 ->9
0bcadc62 cmp dword [rbx+0x5a0], 0x405dae80
0bcadc6c jnz 0x0bca0034 ->9
0bcadc72 xor esi, esi
0bcadc74 call 0x0041f7e0 ->lj_tab_new1
0bcadc79 mov [rsp+0x8], eax
0bcadc7d mov edi, [0x405d84ac]
0bcadc84 mov esi, 0x4
0bcadc89 call 0x0041f7e0 ->lj_tab_new1
0bcadc8e mov ebx, eax
0bcadc90 mov edi, [0x405d84ac]
0bcadc97 mov eax, [rsp+0xc]
0bcadc9b movsd xmm7, [rsp+0x10]
0bcadca1 cmp dword [r14+0xc], -0x05
0bcadca6 jnz 0x0bca0034 ->9
0bcadcac mov r14d, [r14+0x8]
0bcadcb0 mov dword [rbx+0x2c], 0xfffffffb
0bcadcb7 mov [rbx+0x28], r14d
0bcadcbb mov dword [rbx+0x34], 0xfffffff4
0bcadcc2 mov [rbx+0x30], eax
0bcadcc5 movsd [rbx+0x38], xmm7
0bcadcca cmp r15d, 0x40b420e8
0bcadcd1 jnz 0x0bca0038 ->10
0bcadcd7 xor esi, esi
0bcadcd9 call 0x0041f7e0 ->lj_tab_new1
0bcadcde mov r15d, eax
0bcadce1 mov edx, [0x405d84b0]
0bcadce8 mov eax, [rsp+0x8]
0bcadcec movsd xmm7, [0x401f5ce0]
0bcadcf5 mov r14d, [0x40b42660]
0bcadcfd mov r13d, [r14+0x1c]
0bcadd01 and r13d, 0x644f2e12
0bcadd08 lea r13d, [r13+r13*2+0x0]
0bcadd0d shl r13d, 0x03
0bcadd11 add r13d, [r14+0x14]
0bcadd15 cmp dword [r13+0xc], -0x05
0bcadd1a jnz 0x0bcadd2a
0bcadd1c cmp dword [r13+0x8], 0x405db028
0bcadd24 jz 0x0bca0038 ->10
0bcadd2a mov r13d, [r13+0x10]
0bcadd2e test r13d, r13d
0bcadd31 jnz 0x0bcadd15
0bcadd33 mov r13d, 0x405d8420
0bcadd39 mov r14d, [r14+0x10]
0bcadd3d test r14d, r14d
0bcadd40 jz 0x0bca0038 ->10
0bcadd46 cmp dword [r14+0x1c], +0x01
0bcadd4b jnz 0x0bca0038 ->10
0bcadd51 mov r14d, [r14+0x14]
0bcadd55 mov rdi, 0xfffffffb405da430
0bcadd5f cmp rdi, [r14+0x20]
0bcadd63 jnz 0x0bca0038 ->10
0bcadd69 cmp dword [r14+0x1c], -0x0c
0bcadd6e jnz 0x0bca0038 ->10
0bcadd74 mov r14d, [r14+0x18]
0bcadd78 cmp dword [r14+0x1c], +0x3f
0bcadd7d jnz 0x0bca0038 ->10
0bcadd83 mov r14d, [r14+0x14]
0bcadd87 mov rdi, 0xfffffffb405db028
0bcadd91 cmp rdi, [r14+0x1b8]
0bcadd98 jnz 0x0bca0038 ->10
0bcadd9e cmp dword [r14+0x1b4], -0x09
0bcadda6 jnz 0x0bca0038 ->10
0bcaddac cmp dword [r14+0x1b0], 0x405daff8
0bcaddb7 jnz 0x0bca0038 ->10
0bcaddbd cmp dword [rbp+0x18], +0x01
0bcaddc1 jbe 0x0bca0038 ->10
0bcaddc7 mov r14d, [rbp+0x8]
0bcaddcb cmp dword [r14+0xc], -0x0c
0bcaddd0 jnz 0x0bca0038 ->10
0bcaddd6 mov r14d, [r14+0x8]
0bcaddda mov dword [rdx+0x7c], 0xfffffff4
0bcadde1 mov [rdx+0x78], r14d
0bcadde5 movsd [rdx+0x70], xmm7
0bcaddea movsd [rdx+0x68], xmm7
0bcaddef mov dword [rdx+0x64], 0xfffffff4
0bcaddf6 mov [rdx+0x60], ebp
0bcaddf9 mov dword [rdx+0x5c], 0xfffffff7
0bcade00 mov dword [rdx+0x58], 0x405dafd0
0bcade07 mov dword [rdx+0x54], 0xfffffff4
0bcade0e mov [rdx+0x50], r15d
0bcade12 mov dword [rdx+0x4c], 0xfffffff4
0bcade19 mov [rdx+0x48], eax
0bcade1c mov dword [rdx+0x44], 0xfffffff4
0bcade23 mov [rdx+0x40], ebp
0bcade26 mov dword [rdx+0x3c], 0x40b58b18
0bcade2d mov dword [rdx+0x38], 0x40b42658
0bcade34 mov dword [rdx+0x34], 0xfffffff4
0bcade3b mov [rdx+0x30], ebx
0bcade3e mov dword [rdx+0x2c], 0xfffffff4
0bcade45 mov [rdx+0x28], eax
0bcade48 mov dword [rdx+0x1c], 0xfffffff4
0bcade4f mov [rdx+0x18], ebp
0bcade52 mov dword [rdx-0x8], 0x40b420e8
0bcade59 add edx, +0x40
0bcade5c mov [0x405d84b0], edx
0bcade63 add rsp, +0x20
0bcade67 jmp 0x0bcafcc1
---- TRACE 13 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 14 start 6/2 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0068 UCLO 0 =&gt; 0069
---- TRACE 14 abort expand.lua:617 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 14 start utils.lua:37
0001 TNEW 2 0
0002 GGET 3 0 ; "ipairs"
0003 MOV 4 0
0004 CALL 3 4 2
0000 . FUNCC ; ipairs
0005 JMP 6 =&gt; 0011
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
---- TRACE 14 abort utils.lua:39 -- inner loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 14 start 6/2 utils.lua:40
0017 GGET 8 1 ; "table"
0018 TGETS 8 8 2 ; "insert"
0019 MOV 9 2
0020 MOV 10 7
0021 CALL 8 1 3
0000 . FUNCC ; table.insert
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0068 UCLO 0 =&gt; 0069
---- TRACE 14 abort expand.lua:617 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 14 start 6/2 utils.lua:40
---- TRACE 14 IR
0001 <span class="irt_int">int</span> SLOAD #6 PI
0002 <span class="irt_tab">tab</span> SLOAD #8 PI
0003 <span class="irt_num">num</span> CONV 0001 <span class="irt_num">num</span>.<span class="irt_int">int</span>
---- TRACE 14 mcode 68
0bcad943 mov dword [0x405d84a0], 0xe
0bcad94e mov edx, [0x405d84b0]
0bcad955 xorps xmm7, xmm7
0bcad958 cvtsi2sd xmm7, ebp
0bcad95c mov dword [rdx+0x3c], 0xfffffff4
0bcad963 mov [rdx+0x38], r14d
0bcad967 movsd [rdx+0x30], xmm7
0bcad96c movsd [rdx+0x28], xmm7
0bcad971 xor eax, eax
0bcad973 mov ebx, 0x40bed52c
0bcad978 mov r14d, 0x405d8f78
0bcad97e add rsp, +0x20
0bcad982 jmp 0x0041d9f8
---- TRACE 14 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 15 start 5/0 utils.lua:39
0011 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0012 JITERL 6 1
0013 GGET 3 0 ; "ipairs"
0014 MOV 4 1
0015 CALL 3 4 2
0000 . FUNCC ; ipairs
0016 JMP 6 =&gt; 0022
0022 ITERC 6 3 3
0000 . FUNCC ; ipairs_aux
0023 JITERL 6 4
0024 RET1 2 2
0085 TNEW 12 3
0086 TSETB 9 12 1
0087 CALL 10 2 3
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 15 IR
0001 <span class="irt_int">int</span> SLOAD #6 PI
0002 <span class="irt_tab">tab</span> SLOAD #8 PI
0003 > <span class="irt_fun">fun</span> SLOAD #4 T
0004 > <span class="irt_tab">tab</span> SLOAD #5 T
0005 > <span class="irt_fun">fun</span> EQ 0003 <span class="irt_fun">ipairs_aux</span>
0006 <span class="irt_int">int</span> ADD 0001 <span class="irt_int">+1 </span>
0007 <span class="irt_int">int</span> FLOAD 0004 tab.asize
0008 > <span class="irt_int">int</span> ULE 0007 0006
0009 <span class="irt_int">int</span> FLOAD 0004 tab.hmask
0010 > <span class="irt_int">int</span> EQ 0009 <span class="irt_int">+0 </span>
0011 <span class="irt_fun">fun</span> SLOAD #0 R
0012 <span class="irt_tab">tab</span> FLOAD 0011 func.env
0013 <span class="irt_p32">p32</span> HREF 0012 <span class="irt_str">"ipairs"</span>
0014 > <span class="irt_p32">p32</span> EQ 0013 <span class="irt_p32">[0x405d8420]</span>
0015 <span class="irt_tab">tab</span> FLOAD 0012 tab.meta
0016 > <span class="irt_tab">tab</span> NE 0015 <span class="irt_tab">[NULL]</span>
0017 <span class="irt_int">int</span> FLOAD 0015 tab.hmask
0018 > <span class="irt_int">int</span> EQ 0017 <span class="irt_int">+1 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0015 tab.node
0020 > <span class="irt_p32">p32</span> HREFK 0019 <span class="irt_str">"__index"</span> @1
0021 > <span class="irt_tab">tab</span> HLOAD 0020
0022 <span class="irt_int">int</span> FLOAD 0021 tab.hmask
0023 > <span class="irt_int">int</span> EQ 0022 <span class="irt_int">+63 </span>
0024 <span class="irt_p32">p32</span> FLOAD 0021 tab.node
0025 > <span class="irt_p32">p32</span> HREFK 0024 <span class="irt_str">"ipairs"</span> @18
0026 > <span class="irt_fun">fun</span> HLOAD 0025
0027 > <span class="irt_tab">tab</span> SLOAD #2 T
0028 > <span class="irt_fun">fun</span> EQ 0026 <span class="irt_fun">ipairs</span>
0029 <span class="irt_int">int</span> FLOAD 0027 tab.asize
0030 > <span class="irt_int">int</span> ULE 0029 <span class="irt_int">+1 </span>
0031 <span class="irt_int">int</span> FLOAD 0027 tab.hmask
0032 > <span class="irt_int">int</span> EQ 0031 <span class="irt_int">+0 </span>
0033 > <span class="irt_tab">tab</span> SLOAD #3 T
0034 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b54c08</span> <span class="irt_p32">[0x40b54d9c]</span>
0035 > <span class="irt_tab">tab</span> TNEW #3 #0
0036 > <span class="irt_tab">tab</span> SLOAD #10 T
0037 <span class="irt_p32">p32</span> FLOAD 0035 tab.array
0038 <span class="irt_p32">p32</span> AREF 0037 <span class="irt_int">+1 </span>
0039 <span class="irt_tab">tab</span> ASTORE 0038 0036
0040 > <span class="irt_fun">fun</span> SLOAD #11 T
0041 > <span class="irt_fun">fun</span> EQ 0040 <span class="irt_fun">utils.lua:37</span>
0042 > <span class="irt_tab">tab</span> TNEW #0 #0
0043 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0044 <span class="irt_p32">p32</span> HREF 0043 <span class="irt_str">"ipairs"</span>
0045 > <span class="irt_p32">p32</span> EQ 0044 <span class="irt_p32">[0x405d8420]</span>
0046 <span class="irt_tab">tab</span> FLOAD 0043 tab.meta
0047 > <span class="irt_tab">tab</span> NE 0046 <span class="irt_tab">[NULL]</span>
0048 <span class="irt_int">int</span> FLOAD 0046 tab.hmask
0049 > <span class="irt_int">int</span> EQ 0048 <span class="irt_int">+1 </span>
0050 <span class="irt_p32">p32</span> FLOAD 0046 tab.node
0051 > <span class="irt_p32">p32</span> HREFK 0050 <span class="irt_str">"__index"</span> @1
0052 > <span class="irt_tab">tab</span> HLOAD 0051
0053 <span class="irt_int">int</span> FLOAD 0052 tab.hmask
0054 > <span class="irt_int">int</span> EQ 0053 <span class="irt_int">+63 </span>
0055 <span class="irt_p32">p32</span> FLOAD 0052 tab.node
0056 > <span class="irt_p32">p32</span> HREFK 0055 <span class="irt_str">"ipairs"</span> @18
0057 > <span class="irt_fun">fun</span> HLOAD 0056
0058 > <span class="irt_fun">fun</span> EQ 0057 <span class="irt_fun">ipairs</span>
0059 <span class="irt_int">int</span> FLOAD 0033 tab.asize
0060 > <span class="irt_int">int</span> ABC 0059 <span class="irt_int">+1 </span>
0061 <span class="irt_p32">p32</span> FLOAD 0033 tab.array
0062 <span class="irt_p32">p32</span> AREF 0061 <span class="irt_int">+1 </span>
0063 > <span class="irt_tab">tab</span> ALOAD 0062
---- TRACE 15 mcode 820
0bcad60c mov dword [0x405d84a0], 0xf
0bcad617 mov edi, [0x405d83d8]
0bcad61e cmp edi, [0x405d83dc]
0bcad625 jb 0x0bcad63e
0bcad627 mov esi, 0x2
0bcad62c mov edi, 0x405d83b8
0bcad631 call 0x0041f3d0 ->lj_gc_step_jit
0bcad636 test eax, eax
0bcad638 jnz 0x0bca0010 ->0
0bcad63e mov edi, [0x405d84ac]
0bcad645 mov edx, [0x405d84b0]
0bcad64c cmp dword [rdx+0x1c], -0x09
0bcad650 jnz 0x0bca0010 ->0
0bcad656 cmp dword [rdx+0x24], -0x0c
0bcad65a jnz 0x0bca0010 ->0
0bcad660 mov ebp, [rdx+0x20]
0bcad663 cmp dword [rdx+0x18], 0x405dafd0
0bcad66a jnz 0x0bca0010 ->0
0bcad670 lea ebx, [r15+0x1]
0bcad674 cmp ebx, [rbp+0x18]
0bcad677 jb 0x0bca0010 ->0
0bcad67d cmp dword [rbp+0x1c], +0x00
0bcad681 jnz 0x0bca0010 ->0
0bcad687 mov ebp, [rdx-0x8]
0bcad68a mov ebp, [rbp+0x8]
0bcad68d mov ebx, [rbp+0x1c]
0bcad690 and ebx, 0x644f2e12
0bcad696 lea ebx, [rbx+rbx*2]
0bcad699 shl ebx, 0x03
0bcad69c add ebx, [rbp+0x14]
0bcad69f cmp dword [rbx+0xc], -0x05
0bcad6a3 jnz 0x0bcad6b2
0bcad6a5 cmp dword [rbx+0x8], 0x405db028
0bcad6ac jz 0x0bca0010 ->0
0bcad6b2 mov ebx, [rbx+0x10]
0bcad6b5 test ebx, ebx
0bcad6b7 jnz 0x0bcad69f
0bcad6b9 mov ebx, 0x405d8420
0bcad6be mov ebp, [rbp+0x10]
0bcad6c1 test ebp, ebp
0bcad6c3 jz 0x0bca0010 ->0
0bcad6c9 cmp dword [rbp+0x1c], +0x01
0bcad6cd jnz 0x0bca0010 ->0
0bcad6d3 mov ebp, [rbp+0x14]
0bcad6d6 mov rsi, 0xfffffffb405da430
0bcad6e0 cmp rsi, [rbp+0x20]
0bcad6e4 jnz 0x0bca0010 ->0
0bcad6ea cmp dword [rbp+0x1c], -0x0c
0bcad6ee jnz 0x0bca0010 ->0
0bcad6f4 mov ebp, [rbp+0x18]
0bcad6f7 cmp dword [rbp+0x1c], +0x3f
0bcad6fb jnz 0x0bca0010 ->0
0bcad701 mov ebx, [rbp+0x14]
0bcad704 mov rsi, 0xfffffffb405db028
0bcad70e cmp rsi, [rbx+0x1b8]
0bcad715 jnz 0x0bca0010 ->0
0bcad71b cmp dword [rbx+0x1b4], -0x09
0bcad722 jnz 0x0bca0010 ->0
0bcad728 cmp dword [rdx+0xc], -0x0c
0bcad72c jnz 0x0bca0010 ->0
0bcad732 mov ebp, [rdx+0x8]
0bcad735 cmp dword [rbx+0x1b0], 0x405daff8
0bcad73f jnz 0x0bca0010 ->0
0bcad745 cmp dword [rbp+0x18], +0x01
0bcad749 ja 0x0bca0010 ->0
0bcad74f cmp dword [rbp+0x1c], +0x00
0bcad753 jnz 0x0bca0010 ->0
0bcad759 cmp dword [rdx+0x14], -0x0c
0bcad75d jnz 0x0bca0010 ->0
0bcad763 mov ebp, [rdx+0x10]
0bcad766 cmp dword [rdx-0x4], 0x40b54d9c
0bcad76d jnz 0x0bca0014 ->1
0bcad773 add edx, -0x60
0bcad776 mov [0x405d84b0], edx
0bcad77d mov esi, 0x3
0bcad782 call 0x0041f7e0 ->lj_tab_new1
0bcad787 mov [rsp+0x8], eax
0bcad78b mov edi, [0x405d84ac]
0bcad792 mov edx, [0x405d84b0]
0bcad799 cmp dword [rdx+0x4c], -0x0c
0bcad79d jnz 0x0bca0018 ->2
0bcad7a3 mov ebx, [rdx+0x48]
0bcad7a6 mov dword [rax+0x2c], 0xfffffff4
0bcad7ad mov [rax+0x28], ebx
0bcad7b0 cmp dword [rdx+0x54], -0x09
0bcad7b4 jnz 0x0bca001c ->3
0bcad7ba cmp dword [rdx+0x50], 0x40b42658
0bcad7c1 jnz 0x0bca001c ->3
0bcad7c7 xor esi, esi
0bcad7c9 call 0x0041f7e0 ->lj_tab_new1
0bcad7ce mov ebx, eax
0bcad7d0 mov edx, [0x405d84b0]
0bcad7d7 mov eax, [rsp+0x8]
0bcad7db movsd xmm7, [0x401f5ce0]
0bcad7e4 mov r15d, [0x40b42660]
0bcad7ec mov r14d, [r15+0x1c]
0bcad7f0 and r14d, 0x644f2e12
0bcad7f7 lea r14d, [r14+r14*2]
0bcad7fb shl r14d, 0x03
0bcad7ff add r14d, [r15+0x14]
0bcad803 cmp dword [r14+0xc], -0x05
0bcad808 jnz 0x0bcad818
0bcad80a cmp dword [r14+0x8], 0x405db028
0bcad812 jz 0x0bca001c ->3
0bcad818 mov r14d, [r14+0x10]
0bcad81c test r14d, r14d
0bcad81f jnz 0x0bcad803
0bcad821 mov r14d, 0x405d8420
0bcad827 mov r15d, [r15+0x10]
0bcad82b test r15d, r15d
0bcad82e jz 0x0bca001c ->3
0bcad834 cmp dword [r15+0x1c], +0x01
0bcad839 jnz 0x0bca001c ->3
0bcad83f mov r15d, [r15+0x14]
0bcad843 mov rdi, 0xfffffffb405da430
0bcad84d cmp rdi, [r15+0x20]
0bcad851 jnz 0x0bca001c ->3
0bcad857 cmp dword [r15+0x1c], -0x0c
0bcad85c jnz 0x0bca001c ->3
0bcad862 mov r15d, [r15+0x18]
0bcad866 cmp dword [r15+0x1c], +0x3f
0bcad86b jnz 0x0bca001c ->3
0bcad871 mov r15d, [r15+0x14]
0bcad875 mov rdi, 0xfffffffb405db028
0bcad87f cmp rdi, [r15+0x1b8]
0bcad886 jnz 0x0bca001c ->3
0bcad88c cmp dword [r15+0x1b4], -0x09
0bcad894 jnz 0x0bca001c ->3
0bcad89a cmp dword [r15+0x1b0], 0x405daff8
0bcad8a5 jnz 0x0bca001c ->3
0bcad8ab cmp dword [rbp+0x18], +0x01
0bcad8af jbe 0x0bca001c ->3
0bcad8b5 mov r15d, [rbp+0x8]
0bcad8b9 cmp dword [r15+0xc], -0x0c
0bcad8be jnz 0x0bca001c ->3
0bcad8c4 mov r15d, [r15+0x8]
0bcad8c8 mov dword [rdx+0x94], 0xfffffff4
0bcad8d2 mov [rdx+0x90], r15d
0bcad8d9 movsd [rdx+0x88], xmm7
0bcad8e1 movsd [rdx+0x80], xmm7
0bcad8e9 mov dword [rdx+0x7c], 0xfffffff4
0bcad8f0 mov [rdx+0x78], ebp
0bcad8f3 mov dword [rdx+0x74], 0xfffffff7
0bcad8fa mov dword [rdx+0x70], 0x405dafd0
0bcad901 mov dword [rdx+0x6c], 0xfffffff4
0bcad908 mov [rdx+0x68], ebx
0bcad90b mov dword [rdx+0x64], 0xfffffff4
0bcad912 mov [rdx+0x60], eax
0bcad915 mov dword [rdx+0x5c], 0xfffffff4
0bcad91c mov [rdx+0x58], ebp
0bcad91f mov dword [rdx+0x54], 0x40b54da8
0bcad926 mov dword [rdx+0x50], 0x40b42658
0bcad92d add edx, +0x58
0bcad930 mov [0x405d84b0], edx
0bcad937 add rsp, +0x20
0bcad93b jmp 0x0bcafcc1
---- TRACE 15 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 16 start 13/5 expand.lua:658
0096 MOV 12 11
0097 MOV 13 10
0098 RET 12 3
0005 UGET 4 0 ; expand_arith
0006 TGETB 5 0 3
0007 MOV 6 1
0008 CALL 4 3 3
0000 . FUNCF 14 ; expand.lua:632
0001 . GGET 2 0 ; "assert"
0002 . MOV 3 0
0003 . CALL 2 1 2
0000 . . FUNCC ; assert
0004 . GGET 2 1 ; "type"
0005 . MOV 3 0
0006 . CALL 2 2 2
0000 . . FUNCC ; type
0007 . ISEQS 2 2 ; "number"
0008 . JMP 2 => 0011
0011 . MOV 2 0
0012 . TNEW 3 0
0013 . RET 2 3
0009 TNEW 6 4
0010 TGETB 7 0 1
0011 TSETB 7 6 1
0012 TSETB 2 6 2
0013 TSETB 4 6 3
0014 UGET 7 1 ; concat
0015 MOV 8 3
0016 MOV 9 5
0017 CALL 7 0 3
0000 . FUNCF 11 ; utils.lua:37
0001 . TNEW 2 0
0002 . GGET 3 0 ; "ipairs"
0003 . MOV 4 0
0004 . CALL 3 4 2
0000 . . FUNCC ; ipairs
0005 . JMP 6 =&gt; 0011
0011 . ITERC 6 3 3
0000 . . FUNCC ; ipairs_aux
0012 . JITERL 6 1
---- TRACE 16 IR
0001 <span class="irt_tab">tab</span> SLOAD #11 PI
0002 <span class="irt_tab">tab</span> SLOAD #12 PI
0004 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b58a90</span> <span class="irt_p32">[0x40b58ae4]</span>
0005 <span class="irt_fun">fun</span> SLOAD #0 R
0006 > <span class="irt_p32">p32</span> UREFC 0005 #0
0007 > <span class="irt_fun">fun</span> ULOAD 0006
0008 > <span class="irt_tab">tab</span> SLOAD #1 T
0009 <span class="irt_int">int</span> FLOAD 0008 tab.asize
0010 > <span class="irt_int">int</span> ABC 0009 <span class="irt_int">+3 </span>
0011 <span class="irt_p32">p32</span> FLOAD 0008 tab.array
0012 <span class="irt_p32">p32</span> AREF 0011 <span class="irt_int">+3 </span>
0013 > <span class="irt_num">num</span> ALOAD 0012
0014 > <span class="irt_str">str</span> SLOAD #2 T
0015 > <span class="irt_fun">fun</span> EQ 0007 <span class="irt_fun">expand.lua:632</span>
0016 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">expand.lua:632</span> func.env
0017 <span class="irt_p32">p32</span> HREF 0016 <span class="irt_str">"assert"</span>
0018 > <span class="irt_p32">p32</span> EQ 0017 <span class="irt_p32">[0x405d8420]</span>
0019 <span class="irt_tab">tab</span> FLOAD 0016 tab.meta
0020 > <span class="irt_tab">tab</span> NE 0019 <span class="irt_tab">[NULL]</span>
0021 <span class="irt_int">int</span> FLOAD 0019 tab.hmask
0022 > <span class="irt_int">int</span> EQ 0021 <span class="irt_int">+1 </span>
0023 <span class="irt_p32">p32</span> FLOAD 0019 tab.node
0024 > <span class="irt_p32">p32</span> HREFK 0023 <span class="irt_str">"__index"</span> @1
0025 > <span class="irt_tab">tab</span> HLOAD 0024
0026 <span class="irt_int">int</span> FLOAD 0025 tab.hmask
0027 > <span class="irt_int">int</span> EQ 0026 <span class="irt_int">+63 </span>
0028 <span class="irt_p32">p32</span> FLOAD 0025 tab.node
0029 > <span class="irt_p32">p32</span> HREFK 0028 <span class="irt_str">"assert"</span> @3
0030 > <span class="irt_fun">fun</span> HLOAD 0029
0031 > <span class="irt_fun">fun</span> EQ 0030 <span class="irt_fun">assert</span>
0032 <span class="irt_p32">p32</span> HREF 0016 <span class="irt_str">"type"</span>
0033 > <span class="irt_p32">p32</span> EQ 0032 <span class="irt_p32">[0x405d8420]</span>
0034 > <span class="irt_p32">p32</span> HREFK 0028 <span class="irt_str">"type"</span> @60
0035 > <span class="irt_fun">fun</span> HLOAD 0034
0036 > <span class="irt_fun">fun</span> EQ 0035 <span class="irt_fun">type</span>
0037 > <span class="irt_tab">tab</span> TNEW #0 #0
0038 > <span class="irt_tab">tab</span> TNEW #4 #0
0039 <span class="irt_p32">p32</span> AREF 0011 <span class="irt_int">+1 </span>
0040 > <span class="irt_str">str</span> ALOAD 0039
0041 <span class="irt_p32">p32</span> FLOAD 0038 tab.array
0042 <span class="irt_p32">p32</span> AREF 0041 <span class="irt_int">+1 </span>
0043 <span class="irt_str">str</span> ASTORE 0042 0040
0044 <span class="irt_p32">p32</span> AREF 0041 <span class="irt_int">+2 </span>
0045 <span class="irt_tab">tab</span> ASTORE 0044 0002
0046 <span class="irt_p32">p32</span> AREF 0041 <span class="irt_int">+3 </span>
0047 <span class="irt_num">num</span> ASTORE 0046 0013
0048 > <span class="irt_fun">fun</span> EQ 0005 <span class="irt_fun">expand.lua:664</span>
0049 > <span class="irt_tab">tab</span> TNEW #0 #0
0050 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">utils.lua:37</span> func.env
0051 <span class="irt_p32">p32</span> HREF 0050 <span class="irt_str">"ipairs"</span>
0052 > <span class="irt_p32">p32</span> EQ 0051 <span class="irt_p32">[0x405d8420]</span>
0053 <span class="irt_tab">tab</span> FLOAD 0050 tab.meta
0054 > <span class="irt_tab">tab</span> NE 0053 <span class="irt_tab">[NULL]</span>
0055 <span class="irt_int">int</span> FLOAD 0053 tab.hmask
0056 > <span class="irt_int">int</span> EQ 0055 <span class="irt_int">+1 </span>
0057 <span class="irt_p32">p32</span> FLOAD 0053 tab.node
0058 > <span class="irt_p32">p32</span> HREFK 0057 <span class="irt_str">"__index"</span> @1
0059 > <span class="irt_tab">tab</span> HLOAD 0058
0060 <span class="irt_int">int</span> FLOAD 0059 tab.hmask
0061 > <span class="irt_int">int</span> EQ 0060 <span class="irt_int">+63 </span>
0062 <span class="irt_p32">p32</span> FLOAD 0059 tab.node
0063 > <span class="irt_p32">p32</span> HREFK 0062 <span class="irt_str">"ipairs"</span> @18
0064 > <span class="irt_fun">fun</span> HLOAD 0063
0065 > <span class="irt_fun">fun</span> EQ 0064 <span class="irt_fun">ipairs</span>
0066 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0067 > <span class="irt_int">int</span> ABC 0066 <span class="irt_int">+1 </span>
0068 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0069 <span class="irt_p32">p32</span> AREF 0068 <span class="irt_int">+1 </span>
0070 > <span class="irt_tab">tab</span> ALOAD 0069
---- TRACE 16 mcode 1014
0bcad213 mov eax, [0x405d84ac]
0bcad21a mov eax, [rax+0x20]
0bcad21d sub eax, [0x405d84b0]
0bcad224 cmp eax, 0x80
0bcad22a jb 0x0bca0024 ->5
0bcad230 mov r14d, [rsp+0x18]
0bcad235 mov dword [0x405d84a0], 0x10
0bcad240 mov edi, [0x405d83d8]
0bcad247 cmp edi, [0x405d83dc]
0bcad24e jb 0x0bcad267
0bcad250 mov esi, 0x3
0bcad255 mov edi, 0x405d83b8
0bcad25a call 0x0041f3d0 ->lj_gc_step_jit
0bcad25f test eax, eax
0bcad261 jnz 0x0bca0010 ->0
0bcad267 mov edi, [0x405d84ac]
0bcad26e mov edx, [0x405d84b0]
0bcad275 cmp dword [rdx-0x4], 0x40b58ae4
0bcad27c jnz 0x0bca0014 ->1
0bcad282 add edx, -0x18
0bcad285 mov [0x405d84b0], edx
0bcad28c mov r15d, [rdx-0x8]
0bcad290 mov esi, [r15+0x14]
0bcad294 cmp byte [rsi+0x6], 0x1
0bcad298 jnz 0x0bca0018 ->2
0bcad29e lea ebx, [rsi+0x8]
0bcad2a1 cmp dword [rbx+0x4], -0x09
0bcad2a5 jnz 0x0bca0018 ->2
0bcad2ab cmp dword [rdx+0x4], -0x0c
0bcad2af jnz 0x0bca0018 ->2
0bcad2b5 mov r13d, [rdx]
0bcad2b8 cmp dword [r13+0x18], +0x03
0bcad2bd jbe 0x0bca0018 ->2
0bcad2c3 mov r13d, [r13+0x8]
0bcad2c7 cmp dword [r13+0x1c], 0xfffeffff
0bcad2cf jnb 0x0bca0018 ->2
0bcad2d5 movsd xmm7, [r13+0x18]
0bcad2db movsd [rsp+0x10], xmm7
0bcad2e1 cmp dword [rdx+0xc], -0x05
0bcad2e5 jnz 0x0bca0018 ->2
0bcad2eb cmp dword [rbx], 0x40b41f28
0bcad2f1 jnz 0x0bca0018 ->2
0bcad2f7 mov esi, [0x40b41f30]
0bcad2fe mov ebx, [rsi+0x1c]
0bcad301 and ebx, 0xce2b6183
0bcad307 lea ebx, [rbx+rbx*2]
0bcad30a shl ebx, 0x03
0bcad30d add ebx, [rsi+0x14]
0bcad310 cmp dword [rbx+0xc], -0x05
0bcad314 jnz 0x0bcad323
0bcad316 cmp dword [rbx+0x8], 0x405dad18
0bcad31d jz 0x0bca0018 ->2
0bcad323 mov ebx, [rbx+0x10]
0bcad326 test ebx, ebx
0bcad328 jnz 0x0bcad310
0bcad32a mov ebx, 0x405d8420
0bcad32f mov ebx, [rsi+0x10]
0bcad332 test ebx, ebx
0bcad334 jz 0x0bca0018 ->2
0bcad33a cmp dword [rbx+0x1c], +0x01
0bcad33e jnz 0x0bca0018 ->2
0bcad344 mov ebx, [rbx+0x14]
0bcad347 mov rdx, 0xfffffffb405da430
0bcad351 cmp rdx, [rbx+0x20]
0bcad355 jnz 0x0bca0018 ->2
0bcad35b cmp dword [rbx+0x1c], -0x0c
0bcad35f jnz 0x0bca0018 ->2
0bcad365 mov ebx, [rbx+0x18]
0bcad368 cmp dword [rbx+0x1c], +0x3f
0bcad36c jnz 0x0bca0018 ->2
0bcad372 mov ebx, [rbx+0x14]
0bcad375 mov rdx, 0xfffffffb405dad18
0bcad37f cmp rdx, [rbx+0x50]
0bcad383 jnz 0x0bca0018 ->2
0bcad389 cmp dword [rbx+0x4c], -0x09
0bcad38d jnz 0x0bca0018 ->2
0bcad393 cmp dword [rbx+0x48], 0x405dacf0
0bcad39a jnz 0x0bca0018 ->2
0bcad3a0 mov r12d, [rsi+0x1c]
0bcad3a4 and r12d, 0x798a813c
0bcad3ab lea r12d, [r12+r12*2]
0bcad3af shl r12d, 0x03
0bcad3b3 add r12d, [rsi+0x14]
0bcad3b7 cmp dword [r12+0xc], -0x05
0bcad3bd jnz 0x0bcad3ce
0bcad3bf cmp dword [r12+0x8], 0x405daf18
0bcad3c8 jz 0x0bca0018 ->2
0bcad3ce mov r12d, [r12+0x10]
0bcad3d3 test r12d, r12d
0bcad3d6 jnz 0x0bcad3b7
0bcad3d8 mov r12d, 0x405d8420
0bcad3de mov rsi, 0xfffffffb405daf18
0bcad3e8 cmp rsi, [rbx+0x5a8]
0bcad3ef jnz 0x0bca0018 ->2
0bcad3f5 cmp dword [rbx+0x5a4], -0x09
0bcad3fc jnz 0x0bca0018 ->2
0bcad402 cmp dword [rbx+0x5a0], 0x405dae80
0bcad40c jnz 0x0bca0018 ->2
0bcad412 xor esi, esi
0bcad414 call 0x0041f7e0 ->lj_tab_new1
0bcad419 mov [rsp+0x8], eax
0bcad41d mov edi, [0x405d84ac]
0bcad424 mov esi, 0x4
0bcad429 call 0x0041f7e0 ->lj_tab_new1
0bcad42e mov ebx, eax
0bcad430 mov edi, [0x405d84ac]
0bcad437 movsd xmm7, [rsp+0x10]
0bcad43d cmp dword [r13+0xc], -0x05
0bcad442 jnz 0x0bca0018 ->2
0bcad448 mov r13d, [r13+0x8]
0bcad44c mov dword [rbx+0x2c], 0xfffffffb
0bcad453 mov [rbx+0x28], r13d
0bcad457 mov dword [rbx+0x34], 0xfffffff4
0bcad45e mov [rbx+0x30], r14d
0bcad462 movsd [rbx+0x38], xmm7
0bcad467 cmp r15d, 0x40b420e8
0bcad46e jnz 0x0bca001c ->3
0bcad474 xor esi, esi
0bcad476 call 0x0041f7e0 ->lj_tab_new1
0bcad47b mov r15d, eax
0bcad47e mov edx, [0x405d84b0]
0bcad485 mov eax, [rsp+0x8]
0bcad489 movsd xmm7, [0x401f5ce0]
0bcad492 mov r14d, [0x40b42660]
0bcad49a mov r13d, [r14+0x1c]
0bcad49e and r13d, 0x644f2e12
0bcad4a5 lea r13d, [r13+r13*2+0x0]
0bcad4aa shl r13d, 0x03
0bcad4ae add r13d, [r14+0x14]
0bcad4b2 cmp dword [r13+0xc], -0x05
0bcad4b7 jnz 0x0bcad4c7
0bcad4b9 cmp dword [r13+0x8], 0x405db028
0bcad4c1 jz 0x0bca001c ->3
0bcad4c7 mov r13d, [r13+0x10]
0bcad4cb test r13d, r13d
0bcad4ce jnz 0x0bcad4b2
0bcad4d0 mov r13d, 0x405d8420
0bcad4d6 mov r14d, [r14+0x10]
0bcad4da test r14d, r14d
0bcad4dd jz 0x0bca001c ->3
0bcad4e3 cmp dword [r14+0x1c], +0x01
0bcad4e8 jnz 0x0bca001c ->3
0bcad4ee mov r14d, [r14+0x14]
0bcad4f2 mov rdi, 0xfffffffb405da430
0bcad4fc cmp rdi, [r14+0x20]
0bcad500 jnz 0x0bca001c ->3
0bcad506 cmp dword [r14+0x1c], -0x0c
0bcad50b jnz 0x0bca001c ->3
0bcad511 mov r14d, [r14+0x18]
0bcad515 cmp dword [r14+0x1c], +0x3f
0bcad51a jnz 0x0bca001c ->3
0bcad520 mov r14d, [r14+0x14]
0bcad524 mov rdi, 0xfffffffb405db028
0bcad52e cmp rdi, [r14+0x1b8]
0bcad535 jnz 0x0bca001c ->3
0bcad53b cmp dword [r14+0x1b4], -0x09
0bcad543 jnz 0x0bca001c ->3
0bcad549 cmp dword [r14+0x1b0], 0x405daff8
0bcad554 jnz 0x0bca001c ->3
0bcad55a cmp dword [rbp+0x18], +0x01
0bcad55e jbe 0x0bca001c ->3
0bcad564 mov r14d, [rbp+0x8]
0bcad568 cmp dword [r14+0xc], -0x0c
0bcad56d jnz 0x0bca001c ->3
0bcad573 mov r14d, [r14+0x8]
0bcad577 mov dword [rdx+0x7c], 0xfffffff4
0bcad57e mov [rdx+0x78], r14d
0bcad582 movsd [rdx+0x70], xmm7
0bcad587 movsd [rdx+0x68], xmm7
0bcad58c mov dword [rdx+0x64], 0xfffffff4
0bcad593 mov [rdx+0x60], ebp
0bcad596 mov dword [rdx+0x5c], 0xfffffff7
0bcad59d mov dword [rdx+0x58], 0x405dafd0
0bcad5a4 mov dword [rdx+0x54], 0xfffffff4
0bcad5ab mov [rdx+0x50], r15d
0bcad5af mov dword [rdx+0x4c], 0xfffffff4
0bcad5b6 mov [rdx+0x48], eax
0bcad5b9 mov dword [rdx+0x44], 0xfffffff4
0bcad5c0 mov [rdx+0x40], ebp
0bcad5c3 mov dword [rdx+0x3c], 0x40b58b18
0bcad5ca mov dword [rdx+0x38], 0x40b42658
0bcad5d1 mov dword [rdx+0x34], 0xfffffff4
0bcad5d8 mov [rdx+0x30], ebx
0bcad5db mov dword [rdx+0x2c], 0xfffffff4
0bcad5e2 mov [rdx+0x28], eax
0bcad5e5 mov dword [rdx+0x1c], 0xfffffff4
0bcad5ec mov [rdx+0x18], ebp
0bcad5ef mov dword [rdx-0x8], 0x40b420e8
0bcad5f6 add edx, +0x40
0bcad5f9 mov [0x405d84b0], edx
0bcad600 add rsp, +0x20
0bcad604 jmp 0x0bcafcc1
---- TRACE 16 stop -> 1
</pre>
<pre class="ljdump">
---- TRACE 17 start 8/6 expand.lua:688
0092 RET1 2 2
0037 TSETB 3 2 2
0038 UGET 3 0 ; expand_bool
0039 TGETB 4 0 3
0040 MOV 5 1
0041 CALL 3 2 3
0000 . FUNCF 8 ; expand.lua:670
0001 . GGET 2 0 ; "assert"
0002 . GGET 3 1 ; "type"
0003 . MOV 4 0
0004 . CALL 3 2 2
0000 . . FUNCC ; type
0005 . ISEQS 3 2 ; "table"
0006 . JMP 3 => 0009
0009 . KPRI 3 2
0010 . KSTR 4 3 ; "logical expression must be a table"
0011 . CALL 2 1 3
0000 . . FUNCC ; assert
0012 . TGETB 2 0 1
0013 . ISEQS 2 4 ; "not"
0014 . JMP 2 => 0018
0015 . TGETB 2 0 1
0016 . ISNES 2 5 ; "!"
0017 . JMP 2 => 0026
0026 . TGETB 2 0 1
0027 . ISEQS 2 7 ; "and"
0028 . JMP 2 => 0032
0029 . TGETB 2 0 1
0030 . ISNES 2 8 ; "&amp;&amp;"
0031 . JMP 2 => 0047
0047 . TGETB 2 0 1
0048 . ISEQS 2 11 ; "or"
0049 . JMP 2 => 0053
0050 . TGETB 2 0 1
0051 . ISNES 2 12 ; "||"
0052 . JMP 2 => 0068
0068 . UGET 2 1 ; relops
0069 . TGETB 3 0 1
0070 . TGETV 2 2 3
0071 . ISF 2
0072 . JMP 3 => 0094
0073 . UGET 2 2 ; expand_relop
0074 . MOV 3 0
0075 . MOV 4 1
0076 . CALL 2 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . FUNCF 14 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 17 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 17 start 8/6 expand.lua:688
0092 RET1 2 2
0042 TSETB 3 2 3
0043 TDUP 3 10
0044 TSETB 3 2 4
0045 RET1 2 2
---- TRACE 17 abort expand.lua:677 -- down-recursion, restarting
</pre>
<pre class="ljdump">
---- TRACE 17 start expand.lua:677
0045 RET1 2 2
0065 TSETM 3 1 ; 4
---- TRACE 17 abort expand.lua:681 -- NYI: bytecode 60
</pre>
<pre class="ljdump">
---- TRACE 17 start 11/1 utils.lua:41
0024 RET1 2 2
0007 UGET 3 1 ; assert_expr
0008 UGET 4 3 ; has_ether_protocol_min_payload
0009 MOV 5 0
0010 CALL 4 0 2
0000 . FUNCF 5 ; expand.lua:94
0001 . UGET 1 0 ; has_proto_min_payload
0002 . UGET 2 1 ; ether_min_payloads
0003 . MOV 3 0
0004 . KSTR 4 0 ; "[ether*]"
0005 . CALLT 1 4
0000 . FUNCF 7 ; expand.lua:86
0001 . GGET 3 0 ; "assert"
0002 . TGETV 4 0 1
0003 . CALL 3 2 2
0000 . . FUNCC ; assert
0004 . TDUP 4 1
0005 . TDUP 5 2
0006 . TSETB 2 5 1
0007 . SUBVN 6 3 0 ; 1
0008 . TSETB 6 5 2
0009 . TSETB 5 4 3
0010 . RET1 4 2
0011 CALLM 3 0 0
0000 . FUNCF 6 ; expand.lua:565
0001 . UGET 1 0 ; expand_relop
0002 . MOV 2 0
0003 . UGET 3 1 ; dlt
0004 . CALL 1 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . FUNCF 14 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0011 . . . MOV 2 0
0012 . . . TNEW 3 0
0013 . . . RET 2 3
0005 . . UGET 4 0 ; expand_arith
0006 . . TGETB 5 0 3
0007 . . MOV 6 1
0008 . . CALL 4 3 3
0000 . . . FUNCF 14 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 17 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 17 start expand.lua:632
0001 GGET 2 0 ; "assert"
0002 MOV 3 0
0003 CALL 2 1 2
0000 . FUNCC ; assert
0004 GGET 2 1 ; "type"
0005 MOV 3 0
0006 CALL 2 2 2
0000 . FUNCC ; type
0007 ISEQS 2 2 ; "number"
0008 JMP 2 => 0011
0011 MOV 2 0
0012 TNEW 3 0
0013 RET 2 3
---- TRACE 17 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"assert"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"assert"</span> @3
0016 > <span class="irt_fun">fun</span> HLOAD 0015
0017 > <span class="irt_num">num</span> SLOAD #1 T
0018 > <span class="irt_fun">fun</span> EQ 0016 <span class="irt_fun">assert</span>
0019 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"type"</span>
0020 > <span class="irt_p32">p32</span> EQ 0019 <span class="irt_p32">[0x405d8420]</span>
0021 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"type"</span> @60
0022 > <span class="irt_fun">fun</span> HLOAD 0021
0023 > <span class="irt_fun">fun</span> EQ 0022 <span class="irt_fun">type</span>
0024 > <span class="irt_tab">tab</span> TNEW #0 #0
---- TRACE 17 mcode 416
0bcad06c mov dword [0x405d84a0], 0x11
0bcad077 mov edi, [0x405d83d8]
0bcad07e cmp edi, [0x405d83dc]
0bcad085 jb 0x0bcad09e
0bcad087 mov esi, 0x1
0bcad08c mov edi, 0x405d83b8
0bcad091 call 0x0041f3d0 ->lj_gc_step_jit
0bcad096 test eax, eax
0bcad098 jnz 0x0bca0010 ->0
0bcad09e mov edi, [0x405d84ac]
0bcad0a5 mov edx, [0x405d84b0]
0bcad0ac mov ebp, [rdx-0x8]
0bcad0af mov r15d, [rbp+0x8]
0bcad0b3 mov ebp, [r15+0x1c]
0bcad0b7 and ebp, 0xce2b6183
0bcad0bd lea ebp, [rbp+rbp*2+0x0]
0bcad0c1 shl ebp, 0x03
0bcad0c4 add ebp, [r15+0x14]
0bcad0c8 cmp dword [rbp+0xc], -0x05
0bcad0cc jnz 0x0bcad0db
0bcad0ce cmp dword [rbp+0x8], 0x405dad18
0bcad0d5 jz 0x0bca0010 ->0
0bcad0db mov ebp, [rbp+0x10]
0bcad0de test ebp, ebp
0bcad0e0 jnz 0x0bcad0c8
0bcad0e2 mov ebp, 0x405d8420
0bcad0e7 mov ebp, [r15+0x10]
0bcad0eb test ebp, ebp
0bcad0ed jz 0x0bca0010 ->0
0bcad0f3 cmp dword [rbp+0x1c], +0x01
0bcad0f7 jnz 0x0bca0010 ->0
0bcad0fd mov ebp, [rbp+0x14]
0bcad100 mov rsi, 0xfffffffb405da430
0bcad10a cmp rsi, [rbp+0x20]
0bcad10e jnz 0x0bca0010 ->0
0bcad114 cmp dword [rbp+0x1c], -0x0c
0bcad118 jnz 0x0bca0010 ->0
0bcad11e mov ebp, [rbp+0x18]
0bcad121 cmp dword [rbp+0x1c], +0x3f
0bcad125 jnz 0x0bca0010 ->0
0bcad12b mov ebp, [rbp+0x14]
0bcad12e mov rsi, 0xfffffffb405dad18
0bcad138 cmp rsi, [rbp+0x50]
0bcad13c jnz 0x0bca0010 ->0
0bcad142 cmp dword [rbp+0x4c], -0x09
0bcad146 jnz 0x0bca0010 ->0
0bcad14c cmp dword [rdx+0x4], 0xfffeffff
0bcad153 jnb 0x0bca0010 ->0
0bcad159 movsd xmm7, [rdx]
0bcad15d movsd [rsp+0x8], xmm7
0bcad163 cmp dword [rbp+0x48], 0x405dacf0
0bcad16a jnz 0x0bca0010 ->0
0bcad170 mov ebx, [r15+0x1c]
0bcad174 and ebx, 0x798a813c
0bcad17a lea ebx, [rbx+rbx*2]
0bcad17d shl ebx, 0x03
0bcad180 add ebx, [r15+0x14]
0bcad184 cmp dword [rbx+0xc], -0x05
0bcad188 jnz 0x0bcad197
0bcad18a cmp dword [rbx+0x8], 0x405daf18
0bcad191 jz 0x0bca0010 ->0
0bcad197 mov ebx, [rbx+0x10]
0bcad19a test ebx, ebx
0bcad19c jnz 0x0bcad184
0bcad19e mov ebx, 0x405d8420
0bcad1a3 mov rsi, 0xfffffffb405daf18
0bcad1ad cmp rsi, [rbp+0x5a8]
0bcad1b4 jnz 0x0bca0010 ->0
0bcad1ba cmp dword [rbp+0x5a4], -0x09
0bcad1c1 jnz 0x0bca0010 ->0
0bcad1c7 cmp dword [rbp+0x5a0], 0x405dae80
0bcad1d1 jnz 0x0bca0010 ->0
0bcad1d7 xor esi, esi
0bcad1d9 call 0x0041f7e0 ->lj_tab_new1
0bcad1de mov edx, [0x405d84b0]
0bcad1e5 movsd xmm7, [rsp+0x8]
0bcad1eb mov dword [rdx+0x1c], 0xfffffff4
0bcad1f2 mov [rdx+0x18], eax
0bcad1f5 movsd [rdx+0x10], xmm7
0bcad1fa xor eax, eax
0bcad1fc mov ebx, 0x40b54c7c
0bcad201 mov r14d, 0x405d8f78
0bcad207 jmp 0x0041d9f8
---- TRACE 17 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 18 start 8/6 expand.lua:688
0092 RET1 2 2
0037 TSETB 3 2 2
0038 UGET 3 0 ; expand_bool
0039 TGETB 4 0 3
0040 MOV 5 1
0041 CALL 3 2 3
0000 . FUNCF 8 ; expand.lua:670
0001 . GGET 2 0 ; "assert"
0002 . GGET 3 1 ; "type"
0003 . MOV 4 0
0004 . CALL 3 2 2
0000 . . FUNCC ; type
0005 . ISEQS 3 2 ; "table"
0006 . JMP 3 => 0009
0009 . KPRI 3 2
0010 . KSTR 4 3 ; "logical expression must be a table"
0011 . CALL 2 1 3
0000 . . FUNCC ; assert
0012 . TGETB 2 0 1
0013 . ISEQS 2 4 ; "not"
0014 . JMP 2 => 0018
0015 . TGETB 2 0 1
0016 . ISNES 2 5 ; "!"
0017 . JMP 2 => 0026
0026 . TGETB 2 0 1
0027 . ISEQS 2 7 ; "and"
0028 . JMP 2 => 0032
0029 . TGETB 2 0 1
0030 . ISNES 2 8 ; "&amp;&amp;"
0031 . JMP 2 => 0047
0047 . TGETB 2 0 1
0048 . ISEQS 2 11 ; "or"
0049 . JMP 2 => 0053
0050 . TGETB 2 0 1
0051 . ISNES 2 12 ; "||"
0052 . JMP 2 => 0068
0068 . UGET 2 1 ; relops
0069 . TGETB 3 0 1
0070 . TGETV 2 2 3
0071 . ISF 2
0072 . JMP 3 => 0094
0073 . UGET 2 2 ; expand_relop
0074 . MOV 3 0
0075 . MOV 4 1
0076 . CALL 2 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 18 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 18 start 11/1 utils.lua:41
0024 RET1 2 2
0007 UGET 3 1 ; assert_expr
0008 UGET 4 3 ; has_ether_protocol_min_payload
0009 MOV 5 0
0010 CALL 4 0 2
0000 . FUNCF 5 ; expand.lua:94
0001 . UGET 1 0 ; has_proto_min_payload
0002 . UGET 2 1 ; ether_min_payloads
0003 . MOV 3 0
0004 . KSTR 4 0 ; "[ether*]"
0005 . CALLT 1 4
0000 . FUNCF 7 ; expand.lua:86
0001 . GGET 3 0 ; "assert"
0002 . TGETV 4 0 1
0003 . CALL 3 2 2
0000 . . FUNCC ; assert
0004 . TDUP 4 1
0005 . TDUP 5 2
0006 . TSETB 2 5 1
0007 . SUBVN 6 3 0 ; 1
0008 . TSETB 6 5 2
0009 . TSETB 5 4 3
0010 . RET1 4 2
0011 CALLM 3 0 0
0000 . FUNCF 6 ; expand.lua:565
0001 . UGET 1 0 ; expand_relop
0002 . MOV 2 0
0003 . UGET 3 1 ; dlt
0004 . CALL 1 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0011 . . . MOV 2 0
0012 . . . TNEW 3 0
0013 . . . RET 2 3
0005 . . UGET 4 0 ; expand_arith
0006 . . TGETB 5 0 3
0007 . . MOV 6 1
0008 . . CALL 4 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 18 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 18 start 9/3 expand.lua:667
0018 RETM 6 1
0077 LEN 4 3
0078 ISEQN 4 2 ; 0
0079 JMP 4 => 0092
0080 JLOOP 4 8
---- TRACE 18 IR
0001 <span class="irt_tab">tab</span> SLOAD #8 PI
0002 > <span class="irt_tab">tab</span> SLOAD #7 T
0003 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x405f22a0</span> <span class="irt_p32">[0x405f2414]</span>
0004 <span class="irt_int">int</span> CALLL lj_tab_len (0001)
0005 > <span class="irt_int">int</span> NE 0004 <span class="irt_int">+0 </span>
---- TRACE 18 mcode 107
0bcacffe mov ebx, ebp
0bcad000 mov dword [0x405d84a0], 0x12
0bcad00b mov edx, [0x405d84b0]
0bcad012 cmp dword [rdx+0x34], -0x0c
0bcad016 jnz 0x0bca0010 ->0
0bcad01c mov ebp, [rdx+0x30]
0bcad01f cmp dword [rdx-0x4], 0x405f2414
0bcad026 jnz 0x0bca0014 ->1
0bcad02c add edx, -0x18
0bcad02f mov [0x405d84b0], edx
0bcad036 mov edi, ebx
0bcad038 call 0x00420530 ->lj_tab_len
0bcad03d mov edx, [0x405d84b0]
0bcad044 test eax, eax
0bcad046 jz 0x0bca0018 ->2
0bcad04c mov dword [rdx+0x1c], 0xfffffff4
0bcad053 mov [rdx+0x18], ebx
0bcad056 mov dword [rdx+0x14], 0xfffffff4
0bcad05d mov [rdx+0x10], ebp
0bcad060 add rsp, +0x20
0bcad064 jmp 0x0bcaeb6e
---- TRACE 18 stop -> 8
</pre>
<pre class="ljdump">
---- TRACE 19 start 8/6 expand.lua:688
0092 RET1 2 2
0042 TSETB 3 2 3
0043 TDUP 3 10
0044 TSETB 3 2 4
0045 RET1 2 2
---- TRACE 19 abort expand.lua:677 -- down-recursion, restarting
</pre>
<pre class="ljdump">
---- TRACE 19 start expand.lua:677
0045 RET1 2 2
0058 TSETB 3 2 2
0059 TDUP 3 14
0060 TSETB 3 2 3
0061 UGET 3 0 ; expand_bool
0062 TGETB 4 0 3
0063 MOV 5 1
0064 CALL 3 0 3
0000 . FUNCF 8 ; expand.lua:670
0001 . GGET 2 0 ; "assert"
0002 . GGET 3 1 ; "type"
0003 . MOV 4 0
0004 . CALL 3 2 2
0000 . . FUNCC ; type
0005 . ISEQS 3 2 ; "table"
0006 . JMP 3 => 0009
0009 . KPRI 3 2
0010 . KSTR 4 3 ; "logical expression must be a table"
0011 . CALL 2 1 3
0000 . . FUNCC ; assert
0012 . TGETB 2 0 1
0013 . ISEQS 2 4 ; "not"
0014 . JMP 2 => 0018
0015 . TGETB 2 0 1
0016 . ISNES 2 5 ; "!"
0017 . JMP 2 => 0026
0026 . TGETB 2 0 1
0027 . ISEQS 2 7 ; "and"
0028 . JMP 2 => 0032
0032 . TDUP 2 9
0033 . UGET 3 0 ; expand_bool
0034 . TGETB 4 0 2
0035 . MOV 5 1
0036 . CALL 3 2 3
0000 . . FUNCF 8 ; expand.lua:670
0001 . . GGET 2 0 ; "assert"
0002 . . GGET 3 1 ; "type"
0003 . . MOV 4 0
0004 . . CALL 3 2 2
0000 . . . FUNCC ; type
0005 . . ISEQS 3 2 ; "table"
0006 . . JMP 3 => 0009
0009 . . KPRI 3 2
0010 . . KSTR 4 3 ; "logical expression must be a table"
0011 . . CALL 2 1 3
0000 . . . FUNCC ; assert
0012 . . TGETB 2 0 1
0013 . . ISEQS 2 4 ; "not"
0014 . . JMP 2 => 0018
0015 . . TGETB 2 0 1
0016 . . ISNES 2 5 ; "!"
0017 . . JMP 2 => 0026
0026 . . TGETB 2 0 1
0027 . . ISEQS 2 7 ; "and"
0028 . . JMP 2 => 0032
0029 . . TGETB 2 0 1
0030 . . ISNES 2 8 ; "&amp;&amp;"
0031 . . JMP 2 => 0047
0047 . . TGETB 2 0 1
0048 . . ISEQS 2 11 ; "or"
0049 . . JMP 2 => 0053
0050 . . TGETB 2 0 1
0051 . . ISNES 2 12 ; "||"
0052 . . JMP 2 => 0068
0068 . . UGET 2 1 ; relops
0069 . . TGETB 3 0 1
0070 . . TGETV 2 2 3
0071 . . ISF 2
0072 . . JMP 3 => 0094
0073 . . UGET 2 2 ; expand_relop
0074 . . MOV 3 0
0075 . . MOV 4 1
0076 . . CALL 2 3 3
0000 . . . FUNCF 10 ; expand.lua:664
0001 . . . UGET 2 0 ; expand_arith
0002 . . . TGETB 3 0 2
0003 . . . MOV 4 1
0004 . . . CALL 2 3 3
0000 . . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . . GGET 2 0 ; "assert"
0002 . . . . MOV 3 0
0003 . . . . CALL 2 1 2
0000 . . . . . FUNCC ; assert
0004 . . . . GGET 2 1 ; "type"
0005 . . . . MOV 3 0
0006 . . . . CALL 2 2 2
0000 . . . . . FUNCC ; type
0007 . . . . ISEQS 2 2 ; "number"
0008 . . . . JMP 2 => 0011
0011 . . . . MOV 2 0
0012 . . . . TNEW 3 0
0013 . . . . RET 2 3
0005 . . . UGET 4 0 ; expand_arith
0006 . . . TGETB 5 0 3
0007 . . . MOV 6 1
0008 . . . CALL 4 3 3
0000 . . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . . GGET 2 0 ; "assert"
0002 . . . . MOV 3 0
0003 . . . . CALL 2 1 2
0000 . . . . . FUNCC ; assert
0004 . . . . GGET 2 1 ; "type"
0005 . . . . MOV 3 0
0006 . . . . CALL 2 2 2
0000 . . . . . FUNCC ; type
0007 . . . . ISEQS 2 2 ; "number"
0008 . . . . JMP 2 => 0011
0009 . . . . ISNES 0 3 ; "len"
0010 . . . . JMP 2 => 0014
0014 . . . . TGETB 2 0 1
0015 . . . . UGET 3 0 ; binops
0016 . . . . TGETV 3 3 2
0017 . . . . ISF 3
0018 . . . . JMP 4 => 0048
0048 . . . . GGET 3 0 ; "assert"
0049 . . . . ISNES 2 7 ; "[]"
0050 . . . . JMP 4 => 0053
0053 . . . . KPRI 4 2
0054 . . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . . CALL 3 1 3
0000 . . . . . FUNCC ; assert
0056 . . . . GGET 3 0 ; "assert"
0057 . . . . MOV 5 2
0058 . . . . TGETS 4 2 9 ; "match"
0059 . . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . . CALL 4 2 3
0000 . . . . . FUNCC ; string.match
---- TRACE 19 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 19 start expand.lua:563
0001 GGET 2 0 ; "assert"
0002 ISEQS 1 1 ; "EN10MB"
0003 JMP 3 => 0006
0006 KPRI 3 2
0007 KSTR 4 2 ; "Encapsulation other than EN10MB unimplem"~
0008 CALL 2 1 3
0000 . FUNCC ; assert
0009 FNEW 2 3 ; expand.lua:565
---- TRACE 19 abort expand.lua:568 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 19 start 11/1 utils.lua:41
0024 RET1 2 2
0007 UGET 3 1 ; assert_expr
0008 UGET 4 3 ; has_ether_protocol_min_payload
0009 MOV 5 0
0010 CALL 4 0 2
0000 . FUNCF 5 ; expand.lua:94
0001 . UGET 1 0 ; has_proto_min_payload
0002 . UGET 2 1 ; ether_min_payloads
0003 . MOV 3 0
0004 . KSTR 4 0 ; "[ether*]"
0005 . CALLT 1 4
0000 . FUNCF 7 ; expand.lua:86
0001 . GGET 3 0 ; "assert"
0002 . TGETV 4 0 1
0003 . CALL 3 2 2
0000 . . FUNCC ; assert
0004 . TDUP 4 1
0005 . TDUP 5 2
0006 . TSETB 2 5 1
0007 . SUBVN 6 3 0 ; 1
0008 . TSETB 6 5 2
0009 . TSETB 5 4 3
0010 . RET1 4 2
0011 CALLM 3 0 0
0000 . FUNCF 6 ; expand.lua:565
0001 . UGET 1 0 ; expand_relop
0002 . MOV 2 0
0003 . UGET 3 1 ; dlt
0004 . CALL 1 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0011 . . . MOV 2 0
0012 . . . TNEW 3 0
0013 . . . RET 2 3
0005 . . UGET 4 0 ; expand_arith
0006 . . TGETB 5 0 3
0007 . . MOV 6 1
0008 . . CALL 4 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 19 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
<pre class="ljdump">
---- TRACE 19 start 8/6 expand.lua:688
---- TRACE 19 IR
0001 <span class="irt_tab">tab</span> SLOAD #3 PI
---- TRACE 19 mcode 54
0bcacfc5 mov ebp, [rsp+0x8]
0bcacfc9 mov dword [0x405d84a0], 0x13
0bcacfd4 mov edx, [0x405d84b0]
0bcacfdb mov dword [rdx+0x14], 0xfffffff4
0bcacfe2 mov [rdx+0x10], ebp
0bcacfe5 xor eax, eax
0bcacfe7 mov ebx, 0x405f2450
0bcacfec mov r14d, 0x405d8f78
0bcacff2 add rsp, +0x10
0bcacff6 jmp 0x0041d9f8
---- TRACE 19 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 20 start 11/1 utils.lua:41
0024 RET1 2 2
0007 UGET 3 1 ; assert_expr
0008 UGET 4 3 ; has_ether_protocol_min_payload
0009 MOV 5 0
0010 CALL 4 0 2
0000 . FUNCF 5 ; expand.lua:94
0001 . UGET 1 0 ; has_proto_min_payload
0002 . UGET 2 1 ; ether_min_payloads
0003 . MOV 3 0
0004 . KSTR 4 0 ; "[ether*]"
0005 . CALLT 1 4
0000 . FUNCF 7 ; expand.lua:86
0001 . GGET 3 0 ; "assert"
0002 . TGETV 4 0 1
0003 . CALL 3 2 2
0000 . . FUNCC ; assert
0004 . TDUP 4 1
0005 . TDUP 5 2
0006 . TSETB 2 5 1
0007 . SUBVN 6 3 0 ; 1
0008 . TSETB 6 5 2
0009 . TSETB 5 4 3
0010 . RET1 4 2
0011 CALLM 3 0 0
0000 . FUNCF 6 ; expand.lua:565
0001 . UGET 1 0 ; expand_relop
0002 . MOV 2 0
0003 . UGET 3 1 ; dlt
0004 . CALL 1 3 3
0000 . . FUNCF 10 ; expand.lua:664
0001 . . UGET 2 0 ; expand_arith
0002 . . TGETB 3 0 2
0003 . . MOV 4 1
0004 . . CALL 2 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0011 . . . MOV 2 0
0012 . . . TNEW 3 0
0013 . . . RET 2 3
0005 . . UGET 4 0 ; expand_arith
0006 . . TGETB 5 0 3
0007 . . MOV 6 1
0008 . . CALL 4 3 3
0000 . . . JFUNCF 14 17 ; expand.lua:632
0001 . . . GGET 2 0 ; "assert"
0002 . . . MOV 3 0
0003 . . . CALL 2 1 2
0000 . . . . FUNCC ; assert
0004 . . . GGET 2 1 ; "type"
0005 . . . MOV 3 0
0006 . . . CALL 2 2 2
0000 . . . . FUNCC ; type
0007 . . . ISEQS 2 2 ; "number"
0008 . . . JMP 2 => 0011
0009 . . . ISNES 0 3 ; "len"
0010 . . . JMP 2 => 0014
0014 . . . TGETB 2 0 1
0015 . . . UGET 3 0 ; binops
0016 . . . TGETV 3 3 2
0017 . . . ISF 3
0018 . . . JMP 4 => 0048
0048 . . . GGET 3 0 ; "assert"
0049 . . . ISNES 2 7 ; "[]"
0050 . . . JMP 4 => 0053
0053 . . . KPRI 4 2
0054 . . . KSTR 5 8 ; "expr has already been expanded?"
0055 . . . CALL 3 1 3
0000 . . . . FUNCC ; assert
0056 . . . GGET 3 0 ; "assert"
0057 . . . MOV 5 2
0058 . . . TGETS 4 2 9 ; "match"
0059 . . . KSTR 6 10 ; "^%[(.+)%]$"
0060 . . . CALL 4 2 3
0000 . . . . FUNCC ; string.match
---- TRACE 20 abort expand.lua:651 -- NYI: FastFunc string.match
</pre>
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "fail" } },
{ "if",
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
9 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
<pre class="ljdump">
---- TRACE 20 start utils.lua:65
0001 IST 1
0002 JMP 3 => 0004
0004 IST 2
0005 JMP 3 => 0007
0007 GGET 3 1 ; "type"
0008 MOV 4 0
0009 CALL 3 2 2
0000 . FUNCC ; type
0010 ISNES 3 2 ; "number"
0011 JMP 3 => 0019
0012 GGET 3 3 ; "print"
0013 MOV 4 1
0014 MOV 5 0
0015 MOV 6 2
0016 CAT 4 4 6
---- TRACE 20 abort utils.lua:69 -- NYI: bytecode 36
</pre>
9 },
1 },
6 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
<pre class="ljdump">
---- TRACE 20 start utils.lua:80
0081 GGET 7 14 ; "pp"
0082 TGETV 8 0 6
0083 MOV 9 1
0084 KSTR 10 15 ; ","
0085 CALL 7 1 4
0000 . FUNCF 11 ; utils.lua:65
0001 . IST 1
0002 . JMP 3 => 0004
0004 . IST 2
0005 . JMP 3 => 0007
0007 . GGET 3 1 ; "type"
0008 . MOV 4 0
0009 . CALL 3 2 2
0000 . . FUNCC ; type
0010 . ISNES 3 2 ; "number"
0011 . JMP 3 => 0019
0019 . GGET 3 1 ; "type"
0020 . MOV 4 0
0021 . CALL 3 2 2
0000 . . FUNCC ; type
0022 . ISNES 3 4 ; "string"
0023 . JMP 3 => 0033
0033 . GGET 3 1 ; "type"
0034 . MOV 4 0
0035 . CALL 3 2 2
0000 . . FUNCC ; type
0036 . ISNES 3 6 ; "boolean"
0037 . JMP 3 => 0049
0049 . GGET 3 1 ; "type"
0050 . MOV 4 0
0051 . CALL 3 2 2
0000 . . FUNCC ; type
0052 . ISNES 3 9 ; "table"
0053 . JMP 3 => 0096
0054 . LEN 3 0
0055 . ISNEN 3 0 ; 1
0056 . JMP 3 => 0066
0066 . GGET 3 3 ; "print"
0067 . MOV 4 1
0068 . KSTR 5 10 ; "{ ""
0069 . TGETB 6 0 1
0070 . KSTR 7 12 ; "","
0071 . CAT 4 4 7
---- TRACE 20 abort utils.lua:78 -- NYI: bytecode 36
</pre>
{ "if",
{ "<=",
{ "+",
{ "+",
14,
9 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
9 },
1 },
17 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "true" },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
<pre class="ljdump">
---- TRACE 20 start utils.lua:65
0001 IST 1
0002 JMP 3 => 0004
0004 IST 2
0005 JMP 3 => 0007
0007 GGET 3 1 ; "type"
0008 MOV 4 0
0009 CALL 3 2 2
0000 . FUNCC ; type
0010 ISNES 3 2 ; "number"
0011 JMP 3 => 0019
0019 GGET 3 1 ; "type"
0020 MOV 4 0
0021 CALL 3 2 2
0000 . FUNCC ; type
0022 ISNES 3 4 ; "string"
0023 JMP 3 => 0033
0033 GGET 3 1 ; "type"
0034 MOV 4 0
0035 CALL 3 2 2
0000 . FUNCC ; type
0036 ISNES 3 6 ; "boolean"
0037 JMP 3 => 0049
0049 GGET 3 1 ; "type"
0050 MOV 4 0
0051 CALL 3 2 2
0000 . FUNCC ; type
0052 ISNES 3 9 ; "table"
0053 JMP 3 => 0096
0054 LEN 3 0
0055 ISNEN 3 0 ; 1
0056 JMP 3 => 0066
0066 GGET 3 3 ; "print"
0067 MOV 4 1
0068 KSTR 5 10 ; "{ ""
0069 TGETB 6 0 1
0070 KSTR 7 12 ; "","
0071 CAT 4 4 7
---- TRACE 20 abort utils.lua:78 -- NYI: bytecode 36
</pre>
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
9 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
9 },
1 },
<pre class="ljdump">
---- TRACE 20 start utils.lua:80
0087 GGET 3 14 ; "pp"
---- TRACE 20 abort utils.lua:81 -- leaving loop in root trace
</pre>
132 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } } } },
{ "if",
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
2 },
"len" },
{ "if",
{ "=",
{ "uint32",
{ "&",
{ "ntohs",
{ "[]",
{ "+",
14,
6 },
2 } },
8191 } },
0 },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
0 },
<pre class="ljdump">
---- TRACE 20 start utils.lua:65
0001 IST 1
0002 JMP 3 => 0004
0004 IST 2
0005 JMP 3 => 0007
0007 GGET 3 1 ; "type"
0008 MOV 4 0
0009 CALL 3 2 2
0000 . FUNCC ; type
0010 ISNES 3 2 ; "number"
0011 JMP 3 => 0019
0012 GGET 3 3 ; "print"
0013 MOV 4 1
0014 MOV 5 0
0015 MOV 6 2
0016 CAT 4 4 6
---- TRACE 20 abort utils.lua:69 -- NYI: bytecode 36
</pre>
2 },
"len" },
{ "<=",
0,
{ "ntohs",
{ "[]",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
0 },
2 } } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
<pre class="ljdump">
---- TRACE 20 start utils.lua:80
0087 GGET 3 14 ; "pp"
---- TRACE 20 abort utils.lua:81 -- leaving loop in root trace
</pre>
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
2 },
"len" },
{ "if",
{ "=",
{ "uint32",
{ "&",
{ "ntohs",
{ "[]",
{ "+",
14,
6 },
2 } },
8191 } },
0 },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
0 },
2 },
"len" },
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
0 },
2 } },
6000 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
2 },
"len" },
{ "if",
{ "=",
{ "uint32",
{ "&",
{ "ntohs",
{ "[]",
{ "+",
14,
6 },
2 } },
8191 } },
0 },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
2 },
2 },
"len" },
{ "<=",
0,
{ "ntohs",
{ "[]",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
2 },
2 } } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
<pre class="ljdump">
---- TRACE 20 start utils.lua:65
0001 IST 1
0002 JMP 3 => 0004
0004 IST 2
0005 JMP 3 => 0007
0007 GGET 3 1 ; "type"
0008 MOV 4 0
0009 CALL 3 2 2
0000 . FUNCC ; type
0010 ISNES 3 2 ; "number"
0011 JMP 3 => 0019
0019 GGET 3 1 ; "type"
0020 MOV 4 0
0021 CALL 3 2 2
0000 . FUNCC ; type
0022 ISNES 3 4 ; "string"
0023 JMP 3 => 0033
0033 GGET 3 1 ; "type"
0034 MOV 4 0
0035 CALL 3 2 2
0000 . FUNCC ; type
0036 ISNES 3 6 ; "boolean"
0037 JMP 3 => 0049
0049 GGET 3 1 ; "type"
0050 MOV 4 0
0051 CALL 3 2 2
0000 . FUNCC ; type
0052 ISNES 3 9 ; "table"
0053 JMP 3 => 0096
0054 LEN 3 0
0055 ISNEN 3 0 ; 1
0056 JMP 3 => 0066
0066 GGET 3 3 ; "print"
0067 MOV 4 1
0068 KSTR 5 10 ; "{ ""
0069 TGETB 6 0 1
0070 KSTR 7 12 ; "","
0071 CAT 4 4 7
---- TRACE 20 abort utils.lua:78 -- NYI: bytecode 36
</pre>
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
2048 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
19 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
<pre class="ljdump">
---- TRACE 20 start utils.lua:80
0087 GGET 3 14 ; "pp"
---- TRACE 20 abort utils.lua:81 -- leaving loop in root trace
</pre>
19 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
2 },
"len" },
{ "if",
{ "=",
{ "uint32",
{ "&",
{ "ntohs",
{ "[]",
{ "+",
14,
6 },
2 } },
8191 } },
0 },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
2 },
2 },
"len" },
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
2 },
2 } },
6000 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } } },
{ "false" } },
{ "if",
{ "if",
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
6 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
44 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
40 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
40 },
1 },
6 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } } },
{ "true" },
{ "if",
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
17 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
44 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
40 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
40 },
1 },
17 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
132 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
6 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
6 },
1 },
44 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
<pre class="ljdump">
---- TRACE 20 start utils.lua:65
0001 IST 1
0002 JMP 3 => 0004
0004 IST 2
0005 JMP 3 => 0007
0007 GGET 3 1 ; "type"
0008 MOV 4 0
0009 CALL 3 2 2
0000 . FUNCC ; type
0010 ISNES 3 2 ; "number"
0011 JMP 3 => 0019
0019 GGET 3 1 ; "type"
0020 MOV 4 0
0021 CALL 3 2 2
0000 . FUNCC ; type
0022 ISNES 3 4 ; "string"
0023 JMP 3 => 0033
0024 GGET 3 3 ; "print"
0025 MOV 4 1
0026 KSTR 5 5 ; """
0027 MOV 6 0
0028 KSTR 7 5 ; """
0029 MOV 8 2
0030 CAT 4 4 8
---- TRACE 20 abort utils.lua:71 -- NYI: bytecode 36
</pre>
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
40 },
1 },
"len" },
{ "=",
{ "[]",
{ "+",
14,
40 },
1 },
132 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } } } } },
{ "if",
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
14,
<pre class="ljdump">
---- TRACE 20 start utils.lua:80
0087 GGET 3 14 ; "pp"
---- TRACE 20 abort utils.lua:81 -- leaving loop in root trace
</pre>
40 },
0 },
2 },
"len" },
{ "<=",
0,
{ "ntohs",
{ "[]",
{ "+",
{ "+",
14,
40 },
0 },
2 } } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
14,
40 },
0 },
2 },
"len" },
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "+",
14,
40 },
0 },
2 } },
6000 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } },
{ "true" },
{ "if",
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
14,
40 },
2 },
2 },
"len" },
{ "<=",
0,
{ "ntohs",
{ "[]",
{ "+",
{ "+",
14,
40 },
2 },
2 } } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "if",
{ "<=",
{ "+",
{ "+",
0,
12 },
2 },
"len" },
{ "if",
{ "=",
{ "ntohs",
{ "[]",
{ "+",
0,
12 },
2 } },
34525 },
{ "if",
{ "<=",
{ "+",
{ "+",
14,
39 },
1 },
"len" },
{ "if",
{ "<=",
0,
{ "[]",
{ "+",
14,
39 },
1 } },
{ "if",
{ "<=",
{ "+",
{ "+",
{ "+",
14,
40 },
2 },
2 },
"len" },
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "+",
14,
40 },
2 },
2 } },
6000 },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "fail" } },
{ "false" } } },
{ "false" } } }
<pre class="ljdump">
---- TRACE 20 start optimize.lua:54
0001 UGET 1 0 ; cache
0002 TGETV 1 1 0
0003 ISNEP 1 0
0004 JMP 2 => 0011
0011 RET1 1 2
---- TRACE 20 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 > <span class="irt_p32">p32</span> UREFC 0001 #0
0003 > <span class="irt_tab">tab</span> ULOAD 0002
0004 > <span class="irt_tab">tab</span> SLOAD #1 T
0005 <span class="irt_p32">p32</span> HREF 0003 0004
0006 > <span class="irt_str">str</span> HLOAD 0005
---- TRACE 20 mcode 161
0bcacf1d mov dword [0x405d84a0], 0x14
0bcacf28 mov ebp, [rdx-0x8]
0bcacf2b mov edi, [rbp+0x14]
0bcacf2e cmp byte [rdi+0x6], 0x1
0bcacf32 jnz 0x0bca0010 ->0
0bcacf38 lea ebp, [rdi+0x8]
0bcacf3b cmp dword [rbp+0x4], -0x0c
0bcacf3f jnz 0x0bca0010 ->0
0bcacf45 mov ebx, [rbp+0x0]
0bcacf48 cmp dword [rdx+0x4], -0x0c
0bcacf4c jnz 0x0bca0010 ->0
0bcacf52 mov r15d, [rdx]
0bcacf55 lea ebp, [r15-0x4c11db7]
0bcacf5c mov edi, r15d
0bcacf5f xor edi, ebp
0bcacf61 rol ebp, 0x0e
0bcacf64 sub edi, ebp
0bcacf66 rol ebp, 0x05
0bcacf69 xor ebp, edi
0bcacf6b rol edi, 0x0d
0bcacf6e sub ebp, edi
0bcacf70 and ebp, [rbx+0x1c]
0bcacf73 lea ebp, [rbp+rbp*2+0x0]
0bcacf77 shl ebp, 0x03
0bcacf7a add ebp, [rbx+0x14]
0bcacf7d cmp dword [rbp+0xc], -0x0c
0bcacf81 jnz 0x0bcacf89
0bcacf83 cmp r15d, [rbp+0x8]
0bcacf87 jz 0x0bcacf95
0bcacf89 mov ebp, [rbp+0x10]
0bcacf8c test ebp, ebp
0bcacf8e jnz 0x0bcacf7d
0bcacf90 mov ebp, 0x405d8420
0bcacf95 cmp dword [rbp+0x4], -0x05
0bcacf99 jnz 0x0bca0010 ->0
0bcacf9f mov ebp, [rbp+0x0]
0bcacfa2 mov dword [rdx+0xc], 0xfffffffb
0bcacfa9 mov [rdx+0x8], ebp
0bcacfac xor eax, eax
0bcacfae mov ebx, 0x40b58f1c
0bcacfb3 mov r14d, 0x405d8f78
0bcacfb9 jmp 0x0041d9f8
---- TRACE 20 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 21 start 20/0 optimize.lua:55
0001 UGET 1 0 ; cache
0002 TGETV 1 1 0
0003 ISNEP 1 0
0004 JMP 2 => 0011
0011 RET1 1 2
0010 CAT 1 1 2
---- TRACE 21 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 21 start 20/0 optimize.lua:55
0001 UGET 1 0 ; cache
0002 TGETV 1 1 0
0003 ISNEP 1 0
0004 JMP 2 => 0011
0005 UGET 2 1 ; f
0006 MOV 3 0
0007 CALL 2 2 2
0000 . FUNCF 10 ; optimize.lua:66
0001 . GGET 1 0 ; "type"
0002 . MOV 2 0
0003 . CALL 1 2 2
0000 . . FUNCC ; type
0004 . ISNES 1 1 ; "table"
0005 . JMP 1 => 0027
0006 . KSTR 1 2 ; "table("
0007 . UGET 2 0 ; cfkey
0008 . TGETB 3 0 1
0009 . CALL 2 2 2
0000 . . JFUNCF 4 20 ; optimize.lua:54
0001 . . UGET 1 0 ; cache
0002 . . TGETV 1 1 0
0003 . . ISNEP 1 0
0004 . . JMP 2 => 0011
0011 . . RET1 1 2
0010 . CAT 1 1 2
---- TRACE 21 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 21 start 20/0 optimize.lua:55
0001 UGET 1 0 ; cache
0002 TGETV 1 1 0
0003 ISNEP 1 0
0004 JMP 2 => 0011
0005 UGET 2 1 ; f
0006 MOV 3 0
0007 CALL 2 2 2
0000 . FUNCF 10 ; optimize.lua:66
0001 . GGET 1 0 ; "type"
0002 . MOV 2 0
0003 . CALL 1 2 2
0000 . . FUNCC ; type
0004 . ISNES 1 1 ; "table"
0005 . JMP 1 => 0027
0006 . KSTR 1 2 ; "table("
0007 . UGET 2 0 ; cfkey
0008 . TGETB 3 0 1
0009 . CALL 2 2 2
0000 . . JFUNCF 4 20 ; optimize.lua:54
0001 . . UGET 1 0 ; cache
0002 . . TGETV 1 1 0
0003 . . ISNEP 1 0
0004 . . JMP 2 => 0011
0011 . . RET1 1 2
0010 . CAT 1 1 2
---- TRACE 21 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 21 start 20/0 optimize.lua:55
0001 UGET 1 0 ; cache
0002 TGETV 1 1 0
0003 ISNEP 1 0
0004 JMP 2 => 0011
0011 RET1 1 2
0020 CAT 1 6 8
---- TRACE 21 abort optimize.lua:69 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 21 start 20/0 optimize.lua:55
---- TRACE 21 IR
---- TRACE 21 mcode 29
0bcacef9 mov dword [0x405d84a0], 0x15
0bcacf04 xor eax, eax
0bcacf06 mov ebx, 0x40b58ef4
0bcacf0b mov r14d, 0x405d8f78
0bcacf11 jmp 0x0041d9f8
---- TRACE 21 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:69
0015 MOV 6 1
0016 KSTR 7 3 ; " "
0017 UGET 8 0 ; cfkey
0018 TGETV 9 0 5
0019 CALL 8 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0020 CAT 1 6 8
---- TRACE 22 abort optimize.lua:69 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0006 KSTR 1 2 ; "table("
0007 UGET 2 0 ; cfkey
0008 TGETB 3 0 1
0009 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0010 CAT 1 1 2
---- TRACE 22 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:69
0015 MOV 6 1
0016 KSTR 7 3 ; " "
0017 UGET 8 0 ; cfkey
0018 TGETV 9 0 5
0019 CALL 8 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0020 CAT 1 6 8
---- TRACE 22 abort optimize.lua:69 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0007 TGETB 1 0 1
0008 FNEW 2 2 ; optimize.lua:127
---- TRACE 22 abort optimize.lua:133 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0006 UCLO 0 =&gt; 0308
---- TRACE 22 abort optimize.lua:125 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0027 GGET 1 0 ; "type"
0028 MOV 2 0
0029 CALL 1 2 2
0000 . FUNCC ; type
0030 KSTR 2 5 ; "("
0031 GGET 3 6 ; "tostring"
0032 MOV 4 0
0033 CALL 3 2 2
0000 . FUNCC ; tostring
0034 KSTR 4 4 ; ")"
0035 CAT 1 1 4
---- TRACE 22 abort optimize.lua:72 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:69
0015 MOV 6 1
0016 KSTR 7 3 ; " "
0017 UGET 8 0 ; cfkey
0018 TGETV 9 0 5
0019 CALL 8 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0020 CAT 1 6 8
---- TRACE 22 abort optimize.lua:69 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 22 start optimize.lua:82
0001 GGET 3 0 ; "assert"
0002 GGET 4 1 ; "type"
0003 MOV 5 2
0004 CALL 4 2 2
0000 . FUNCC ; type
0005 ISNES 4 2 ; "number"
0006 JMP 4 => 0012
0007 GGET 4 1 ; "type"
0008 MOV 5 1
0009 CALL 4 2 2
0000 . FUNCC ; type
0010 ISNES 4 2 ; "number"
0011 JMP 4 => 0014
0014 KPRI 4 2
0015 CALL 3 1 2
0000 . FUNCC ; assert
0016 TGETB 3 1 1
0017 ISEQS 0 3 ; "="
0018 JMP 4 => 0023
0019 ISEQS 0 4 ; "!="
0020 JMP 4 => 0023
0021 KPRI 4 1
0022 JMP 5 =&gt; 0024
0024 UGET 5 0 ; bswap_ops
0025 TGETV 5 5 3
0026 ISF 5
0027 JMP 6 => 0062
0062 ISNES 3 5 ; "uint32"
0063 JMP 5 => 0080
0080 ISNES 3 7 ; "int32"
0081 JMP 5 => 0096
0096 UGET 5 5 ; bitops
0097 TGETV 5 5 3
0098 ISF 5
0099 JMP 6 => 0161
0161 MOV 5 0
0162 MOV 6 1
0163 MOV 7 2
0164 RET 5 4
---- TRACE 22 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"assert"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"assert"</span> @3
0016 > <span class="irt_fun">fun</span> HLOAD 0015
0017 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"type"</span>
0018 > <span class="irt_p32">p32</span> EQ 0017 <span class="irt_p32">[0x405d8420]</span>
0019 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"type"</span> @60
0020 > <span class="irt_fun">fun</span> HLOAD 0019
0021 > <span class="irt_num">num</span> SLOAD #3 T
0022 > <span class="irt_fun">fun</span> EQ 0020 <span class="irt_fun">type</span>
0023 > <span class="irt_str">str</span> SLOAD #2 T
0024 > <span class="irt_fun">fun</span> EQ 0016 <span class="irt_fun">assert</span>
0025 <span class="irt_int">int</span> FLOAD <span class="irt_tab">{0x405dda28}</span> tab.hmask
0026 > <span class="irt_int">int</span> EQ 0025 <span class="irt_int">+1 </span>
0027 <span class="irt_p32">p32</span> FLOAD <span class="irt_tab">{0x405dda28}</span> tab.node
0028 > <span class="irt_p32">p32</span> HREFK 0027 <span class="irt_str">"__index"</span> @1
0029 > <span class="irt_tab">tab</span> HLOAD 0028
0030 <span class="irt_int">int</span> FLOAD 0029 tab.asize
0031 > <span class="irt_int">int</span> ULE 0030 <span class="irt_int">+1 </span>
0032 <span class="irt_p32">p32</span> HREF 0029 <span class="irt_num">+1 </span>
0033 > <span class="irt_p32">p32</span> EQ 0032 <span class="irt_p32">[0x405d8420]</span>
0034 <span class="irt_tab">tab</span> FLOAD 0029 tab.meta
0035 > <span class="irt_tab">tab</span> EQ 0034 <span class="irt_tab">[NULL]</span>
0036 > <span class="irt_str">str</span> SLOAD #1 T
0037 > <span class="irt_str">str</span> NE 0036 <span class="irt_str">"=" </span>
0038 > <span class="irt_str">str</span> NE 0036 <span class="irt_str">"!="</span>
0039 > <span class="irt_p32">p32</span> UREFC 0001 #0
0040 > <span class="irt_tab">tab</span> ULOAD 0039
0041 <span class="irt_tab">tab</span> FLOAD 0040 tab.meta
0042 > <span class="irt_tab">tab</span> EQ 0041 <span class="irt_tab">[NULL]</span>
0043 > <span class="irt_p32">p32</span> UREFC 0001 #5
0044 > <span class="irt_tab">tab</span> ULOAD 0043
0045 <span class="irt_tab">tab</span> FLOAD 0044 tab.meta
0046 > <span class="irt_tab">tab</span> EQ 0045 <span class="irt_tab">[NULL]</span>
---- TRACE 22 mcode 617
0bcacc89 mov dword [0x405d84a0], 0x16
0bcacc94 mov r15d, [rdx-0x8]
0bcacc98 mov r14d, [r15+0x8]
0bcacc9c mov ebp, [r14+0x1c]
0bcacca0 and ebp, 0xce2b6183
0bcacca6 lea ebp, [rbp+rbp*2+0x0]
0bcaccaa shl ebp, 0x03
0bcaccad add ebp, [r14+0x14]
0bcaccb1 cmp dword [rbp+0xc], -0x05
0bcaccb5 jnz 0x0bcaccc4
0bcaccb7 cmp dword [rbp+0x8], 0x405dad18
0bcaccbe jz 0x0bca0010 ->0
0bcaccc4 mov ebp, [rbp+0x10]
0bcaccc7 test ebp, ebp
0bcaccc9 jnz 0x0bcaccb1
0bcacccb mov ebp, 0x405d8420
0bcaccd0 mov ebp, [r14+0x10]
0bcaccd4 test ebp, ebp
0bcaccd6 jz 0x0bca0010 ->0
0bcaccdc cmp dword [rbp+0x1c], +0x01
0bcacce0 jnz 0x0bca0010 ->0
0bcacce6 mov ebp, [rbp+0x14]
0bcacce9 mov rdi, 0xfffffffb405da430
0bcaccf3 cmp rdi, [rbp+0x20]
0bcaccf7 jnz 0x0bca0010 ->0
0bcaccfd cmp dword [rbp+0x1c], -0x0c
0bcacd01 jnz 0x0bca0010 ->0
0bcacd07 mov ebp, [rbp+0x18]
0bcacd0a cmp dword [rbp+0x1c], +0x3f
0bcacd0e jnz 0x0bca0010 ->0
0bcacd14 mov ebp, [rbp+0x14]
0bcacd17 mov rdi, 0xfffffffb405dad18
0bcacd21 cmp rdi, [rbp+0x50]
0bcacd25 jnz 0x0bca0010 ->0
0bcacd2b cmp dword [rbp+0x4c], -0x09
0bcacd2f jnz 0x0bca0010 ->0
0bcacd35 mov ebx, [r14+0x1c]
0bcacd39 and ebx, 0x798a813c
0bcacd3f lea ebx, [rbx+rbx*2]
0bcacd42 shl ebx, 0x03
0bcacd45 add ebx, [r14+0x14]
0bcacd49 cmp dword [rbx+0xc], -0x05
0bcacd4d jnz 0x0bcacd5c
0bcacd4f cmp dword [rbx+0x8], 0x405daf18
0bcacd56 jz 0x0bca0010 ->0
0bcacd5c mov ebx, [rbx+0x10]
0bcacd5f test ebx, ebx
0bcacd61 jnz 0x0bcacd49
0bcacd63 mov ebx, 0x405d8420
0bcacd68 mov rdi, 0xfffffffb405daf18
0bcacd72 cmp rdi, [rbp+0x5a8]
0bcacd79 jnz 0x0bca0010 ->0
0bcacd7f cmp dword [rbp+0x5a4], -0x09
0bcacd86 jnz 0x0bca0010 ->0
0bcacd8c cmp dword [rdx+0x14], 0xfffeffff
0bcacd93 jnb 0x0bca0010 ->0
0bcacd99 movsd xmm7, [rdx+0x10]
0bcacd9e cmp dword [rbp+0x5a0], 0x405dae80
0bcacda8 jnz 0x0bca0010 ->0
0bcacdae cmp dword [rdx+0xc], -0x05
0bcacdb2 jnz 0x0bca0010 ->0
0bcacdb8 mov ebx, [rdx+0x8]
0bcacdbb cmp dword [rbp+0x48], 0x405dacf0
0bcacdc2 jnz 0x0bca0010 ->0
0bcacdc8 cmp dword [0x405dda44], +0x01
0bcacdd0 jnz 0x0bca0010 ->0
0bcacdd6 mov ebp, [0x405dda3c]
0bcacddd mov rdi, 0xfffffffb405da430
0bcacde7 cmp rdi, [rbp+0x20]
0bcacdeb jnz 0x0bca0010 ->0
0bcacdf1 cmp dword [rbp+0x1c], -0x0c
0bcacdf5 jnz 0x0bca0010 ->0
0bcacdfb mov ebp, [rbp+0x18]
0bcacdfe cmp dword [rbp+0x18], +0x01
0bcace02 ja 0x0bca0010 ->0
0bcace08 mov r14d, [rbp+0x1c]
0bcace0c and r14d, 0x83db0f0d
0bcace13 lea r14d, [r14+r14*2]
0bcace17 shl r14d, 0x03
0bcace1b add r14d, [rbp+0x14]
0bcace1f cmp dword [r14+0xc], 0x3ff00000
0bcace27 jnz 0x0bcace34
0bcace29 cmp dword [r14+0x8], +0x00
0bcace2e jz 0x0bca0010 ->0
0bcace34 mov r14d, [r14+0x10]
0bcace38 test r14d, r14d
0bcace3b jnz 0x0bcace1f
0bcace3d mov r14d, 0x405d8420
0bcace43 cmp dword [rbp+0x10], +0x00
0bcace47 jnz 0x0bca0010 ->0
0bcace4d cmp dword [rdx+0x4], -0x05
0bcace51 jnz 0x0bca0010 ->0
0bcace57 mov ebp, [rdx]
0bcace59 cmp ebp, 0x40bddbb8
0bcace5f jz 0x0bca0014 ->1
0bcace65 cmp ebp, 0x405f3f58
0bcace6b jz 0x0bca0018 ->2
0bcace71 mov edi, [r15+0x14]
0bcace75 cmp byte [rdi+0x6], 0x1
0bcace79 jnz 0x0bca001c ->3
0bcace7f lea r14d, [rdi+0x8]
0bcace83 cmp dword [r14+0x4], -0x0c
0bcace88 jnz 0x0bca001c ->3
0bcace8e mov r14d, [r14]
0bcace91 cmp dword [r14+0x10], +0x00
0bcace96 jnz 0x0bca001c ->3
0bcace9c mov edi, [r15+0x28]
0bcacea0 cmp byte [rdi+0x6], 0x1
0bcacea4 jnz 0x0bca001c ->3
0bcaceaa lea r15d, [rdi+0x8]
0bcaceae cmp dword [r15+0x4], -0x0c
0bcaceb3 jnz 0x0bca001c ->3
0bcaceb9 mov r15d, [r15]
0bcacebc cmp dword [r15+0x10], +0x00
0bcacec1 jnz 0x0bca001c ->3
0bcacec7 movsd [rdx+0x38], xmm7
0bcacecc mov dword [rdx+0x34], 0xfffffffb
0bcaced3 mov [rdx+0x30], ebx
0bcaced6 mov dword [rdx+0x2c], 0xfffffffb
0bcacedd mov [rdx+0x28], ebp
0bcacee0 xor eax, eax
0bcacee2 mov ebx, 0x40bec430
0bcacee7 mov r14d, 0x405d8f78
0bcaceed jmp 0x0041d9f8
---- TRACE 22 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 23 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0007 TGETB 1 0 1
0008 FNEW 2 2 ; optimize.lua:127
---- TRACE 23 abort optimize.lua:133 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 23 start optimize.lua:182
0305 UCLO 0 =&gt; 0306
---- TRACE 23 abort optimize.lua:183 -- leaving loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 23 start optimize.lua:127
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0014
0006 TGETB 1 0 1
0007 ISEQS 1 2 ; "uint32"
0008 JMP 1 => 0012
0009 TGETB 1 0 1
0010 ISNES 1 3 ; "int32"
0011 JMP 1 => 0014
0014 RET1 0 2
---- TRACE 23 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"type"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"type"</span> @60
0016 > <span class="irt_fun">fun</span> HLOAD 0015
0017 > <span class="irt_tab">tab</span> SLOAD #1 T
0018 > <span class="irt_fun">fun</span> EQ 0016 <span class="irt_fun">type</span>
0019 <span class="irt_int">int</span> FLOAD 0017 tab.asize
0020 > <span class="irt_int">int</span> ABC 0019 <span class="irt_int">+1 </span>
0021 <span class="irt_p32">p32</span> FLOAD 0017 tab.array
0022 <span class="irt_p32">p32</span> AREF 0021 <span class="irt_int">+1 </span>
0023 > <span class="irt_str">str</span> ALOAD 0022
0024 > <span class="irt_str">str</span> NE 0023 <span class="irt_str">"uint32"</span>
0025 > <span class="irt_str">str</span> NE 0023 <span class="irt_str">"int32"</span>
---- TRACE 23 mcode 268
0bcacb76 mov dword [0x405d84a0], 0x17
0bcacb81 mov ebp, [rdx-0x8]
0bcacb84 mov ebp, [rbp+0x8]
0bcacb87 mov ebx, [rbp+0x1c]
0bcacb8a and ebx, 0x798a813c
0bcacb90 lea ebx, [rbx+rbx*2]
0bcacb93 shl ebx, 0x03
0bcacb96 add ebx, [rbp+0x14]
0bcacb99 cmp dword [rbx+0xc], -0x05
0bcacb9d jnz 0x0bcacbac
0bcacb9f cmp dword [rbx+0x8], 0x405daf18
0bcacba6 jz 0x0bca0010 ->0
0bcacbac mov ebx, [rbx+0x10]
0bcacbaf test ebx, ebx
0bcacbb1 jnz 0x0bcacb99
0bcacbb3 mov ebx, 0x405d8420
0bcacbb8 mov ebp, [rbp+0x10]
0bcacbbb test ebp, ebp
0bcacbbd jz 0x0bca0010 ->0
0bcacbc3 cmp dword [rbp+0x1c], +0x01
0bcacbc7 jnz 0x0bca0010 ->0
0bcacbcd mov ebp, [rbp+0x14]
0bcacbd0 mov rdi, 0xfffffffb405da430
0bcacbda cmp rdi, [rbp+0x20]
0bcacbde jnz 0x0bca0010 ->0
0bcacbe4 cmp dword [rbp+0x1c], -0x0c
0bcacbe8 jnz 0x0bca0010 ->0
0bcacbee mov ebp, [rbp+0x18]
0bcacbf1 cmp dword [rbp+0x1c], +0x3f
0bcacbf5 jnz 0x0bca0010 ->0
0bcacbfb mov ebx, [rbp+0x14]
0bcacbfe mov rdi, 0xfffffffb405daf18
0bcacc08 cmp rdi, [rbx+0x5a8]
0bcacc0f jnz 0x0bca0010 ->0
0bcacc15 cmp dword [rbx+0x5a4], -0x09
0bcacc1c jnz 0x0bca0010 ->0
0bcacc22 cmp dword [rdx+0x4], -0x0c
0bcacc26 jnz 0x0bca0010 ->0
0bcacc2c mov ebp, [rdx]
0bcacc2e cmp dword [rbx+0x5a0], 0x405dae80
0bcacc38 jnz 0x0bca0010 ->0
0bcacc3e cmp dword [rbp+0x18], +0x01
0bcacc42 jbe 0x0bca0010 ->0
0bcacc48 mov ebp, [rbp+0x8]
0bcacc4b cmp dword [rbp+0xc], -0x05
0bcacc4f jnz 0x0bca0010 ->0
0bcacc55 mov ebp, [rbp+0x8]
0bcacc58 cmp ebp, 0x40bef0e8
0bcacc5e jz 0x0bca0014 ->1
0bcacc64 cmp ebp, 0x40bd77d0
0bcacc6a jz 0x0bca0018 ->2
0bcacc70 xor eax, eax
0bcacc72 mov ebx, 0x40bdefb8
0bcacc77 mov r14d, 0x405d8f78
0bcacc7d jmp 0x0041d9f8
---- TRACE 23 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 24 start optimize.lua:69
0015 MOV 6 1
0016 KSTR 7 3 ; " "
0017 UGET 8 0 ; cfkey
0018 TGETV 9 0 5
0019 CALL 8 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0027 . . GGET 1 0 ; "type"
0028 . . MOV 2 0
0029 . . CALL 1 2 2
0000 . . . FUNCC ; type
0030 . . KSTR 2 5 ; "("
0031 . . GGET 3 6 ; "tostring"
0032 . . MOV 4 0
0033 . . CALL 3 2 2
0000 . . . FUNCC ; tostring
0034 . . KSTR 4 4 ; ")"
0035 . . CAT 1 1 4
---- TRACE 24 abort optimize.lua:72 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 24 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0006 KSTR 1 2 ; "table("
0007 UGET 2 0 ; cfkey
0008 TGETB 3 0 1
0009 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0010 CAT 1 1 2
---- TRACE 24 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 24 start 22/0 optimize.lua:83
0001 GGET 3 0 ; "assert"
0002 GGET 4 1 ; "type"
0003 MOV 5 2
0004 CALL 4 2 2
0000 . FUNCC ; type
0005 ISNES 4 2 ; "number"
0006 JMP 4 => 0012
0007 GGET 4 1 ; "type"
0008 MOV 5 1
0009 CALL 4 2 2
0000 . FUNCC ; type
0010 ISNES 4 2 ; "number"
0011 JMP 4 => 0014
0014 KPRI 4 2
0015 CALL 3 1 2
0000 . FUNCC ; assert
0016 TGETB 3 1 1
0017 ISEQS 0 3 ; "="
0018 JMP 4 => 0023
0019 ISEQS 0 4 ; "!="
0020 JMP 4 => 0023
0021 KPRI 4 1
0022 JMP 5 =&gt; 0024
0024 UGET 5 0 ; bswap_ops
0025 TGETV 5 5 3
0026 ISF 5
0027 JMP 6 => 0062
0062 ISNES 3 5 ; "uint32"
0063 JMP 5 => 0080
0080 ISNES 3 7 ; "int32"
0081 JMP 5 => 0096
0096 UGET 5 5 ; bitops
0097 TGETV 5 5 3
0098 ISF 5
0099 JMP 6 => 0161
0161 MOV 5 0
0162 MOV 6 1
0163 MOV 7 2
0164 RET 5 4
0224 MOV 4 7
0225 MOV 3 6
0226 MOV 1 5
0227 JMP 5 =&gt; 0241
0241 TNEW 5 4
0242 TSETB 1 5 1
0243 TSETB 3 5 2
0244 TSETB 4 5 3
0245 UCLO 0 =&gt; 0246
---- TRACE 24 abort optimize.lua:171 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 24 start 22/0 optimize.lua:83
0001 GGET 3 0 ; "assert"
0002 GGET 4 1 ; "type"
0003 MOV 5 2
0004 CALL 4 2 2
0000 . FUNCC ; type
0005 ISNES 4 2 ; "number"
0006 JMP 4 => 0012
0007 GGET 4 1 ; "type"
0008 MOV 5 1
0009 CALL 4 2 2
0000 . FUNCC ; type
0010 ISNES 4 2 ; "number"
0011 JMP 4 => 0014
0014 KPRI 4 2
0015 CALL 3 1 2
0000 . FUNCC ; assert
0016 TGETB 3 1 1
0017 ISEQS 0 3 ; "="
0018 JMP 4 => 0023
0023 KPRI 4 2
0024 UGET 5 0 ; bswap_ops
0025 TGETV 5 5 3
0026 ISF 5
0027 JMP 6 => 0062
0028 ISF 4
0029 JMP 5 => 0062
0030 TGETB 5 1 2
0031 UGET 6 1 ; int32ops
0032 TGETB 7 5 1
0033 TGETV 6 6 7
0034 ISF 6
0035 JMP 7 => 0046
0046 UGET 6 3 ; uint32ops
0047 TGETB 7 5 1
0048 TGETV 6 6 7
0049 ISF 6
0050 JMP 7 => 0161
0051 MOV 6 0
0052 MOV 7 5
0053 GGET 8 0 ; "assert"
0054 UGET 9 2 ; folders
0055 TGETV 9 9 3
0056 CALL 8 2 2
0000 . FUNCC ; assert
0057 MOV 9 2
0058 CALL 8 2 2
0000 . FUNCF 4 ; optimize.lua:40
0001 . UGET 1 0 ; bit
0002 . TGETS 1 1 0 ; "rshift"
0003 . UGET 2 0 ; bit
0004 . TGETS 2 2 1 ; "bswap"
0005 . MOV 3 0
0006 . CALL 2 2 2
0000 . . FUNCC ; bit.bswap
0007 . KSHORT 3 16
0008 . CALLT 1 3
0000 . FUNCC ; bit.rshift
0059 MODVN 8 8 0 ; 4294967296
0060 RET 6 4
0238 MOV 4 7
0239 MOV 3 6
0240 MOV 1 5
0241 TNEW 5 4
0242 TSETB 1 5 1
0243 TSETB 3 5 2
0244 TSETB 4 5 3
0245 UCLO 0 =&gt; 0246
---- TRACE 24 abort optimize.lua:171 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 24 start 22/0 optimize.lua:83
0001 GGET 3 0 ; "assert"
0002 GGET 4 1 ; "type"
0003 MOV 5 2
0004 CALL 4 2 2
0000 . FUNCC ; type
0005 ISNES 4 2 ; "number"
0006 JMP 4 => 0012
0007 GGET 4 1 ; "type"
0008 MOV 5 1
0009 CALL 4 2 2
0000 . FUNCC ; type
0010 ISNES 4 2 ; "number"
0011 JMP 4 => 0014
0014 KPRI 4 2
0015 CALL 3 1 2
0000 . FUNCC ; assert
0016 TGETB 3 1 1
0017 ISEQS 0 3 ; "="
0018 JMP 4 => 0023
0019 ISEQS 0 4 ; "!="
0020 JMP 4 => 0023
0021 KPRI 4 1
0022 JMP 5 =&gt; 0024
0024 UGET 5 0 ; bswap_ops
0025 TGETV 5 5 3
0026 ISF 5
0027 JMP 6 => 0062
0062 ISNES 3 5 ; "uint32"
0063 JMP 5 => 0080
0080 ISNES 3 7 ; "int32"
0081 JMP 5 => 0096
0096 UGET 5 5 ; bitops
0097 TGETV 5 5 3
0098 ISF 5
0099 JMP 6 => 0161
0161 MOV 5 0
0162 MOV 6 1
0163 MOV 7 2
0164 RET 5 4
0224 MOV 4 7
0225 MOV 3 6
0226 MOV 1 5
0227 JMP 5 =&gt; 0241
0241 TNEW 5 4
0242 TSETB 1 5 1
0243 TSETB 3 5 2
0244 TSETB 4 5 3
0245 UCLO 0 =&gt; 0246
---- TRACE 24 abort optimize.lua:171 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 24 start 22/0 optimize.lua:83
0001 GGET 3 0 ; "assert"
0002 GGET 4 1 ; "type"
0003 MOV 5 2
0004 CALL 4 2 2
0000 . FUNCC ; type
0005 ISNES 4 2 ; "number"
0006 JMP 4 => 0012
0007 GGET 4 1 ; "type"
0008 MOV 5 1
0009 CALL 4 2 2
0000 . FUNCC ; type
0010 ISNES 4 2 ; "number"
0011 JMP 4 => 0014
0014 KPRI 4 2
0015 CALL 3 1 2
0000 . FUNCC ; assert
0016 TGETB 3 1 1
0017 ISEQS 0 3 ; "="
0018 JMP 4 => 0023
0023 KPRI 4 2
0024 UGET 5 0 ; bswap_ops
0025 TGETV 5 5 3
0026 ISF 5
0027 JMP 6 => 0062
0062 ISNES 3 5 ; "uint32"
0063 JMP 5 => 0080
0064 ISF 4
0065 JMP 5 => 0080
0066 TGETB 5 1 2
0067 UGET 6 1 ; int32ops
0068 TGETB 7 5 1
0069 TGETV 6 6 7
0070 ISF 6
0071 JMP 7 => 0161
0072 MOV 6 0
0073 MOV 7 5
0074 UGET 8 4 ; bit
0075 TGETS 8 8 6 ; "tobit"
0076 MOV 9 2
0077 CALL 8 0 2
0000 . FUNCC ; bit.tobit
0078 RETM 6 2
0238 MOV 4 7
0239 MOV 3 6
0240 MOV 1 5
0241 TNEW 5 4
0242 TSETB 1 5 1
0243 TSETB 3 5 2
0244 TSETB 4 5 3
0245 UCLO 0 =&gt; 0246
---- TRACE 24 abort optimize.lua:171 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 24 start 22/0 optimize.lua:83
---- TRACE 24 IR
---- TRACE 24 mcode 29
0bcacb52 mov dword [0x405d84a0], 0x18
0bcacb5d xor eax, eax
0bcacb5f mov ebx, 0x40bec1a4
0bcacb64 mov r14d, 0x405d8f78
0bcacb6a jmp 0x0041d9f8
---- TRACE 24 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 25 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0007 TGETB 1 0 1
0008 FNEW 2 2 ; optimize.lua:127
---- TRACE 25 abort optimize.lua:133 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 25 start optimize.lua:69
0022 MOV 2 1
---- TRACE 25 abort optimize.lua:70 -- leaving loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 25 start optimize.lua:187
0001 TGETB 3 0 1
0002 ISNES 3 0 ; "not"
0003 JMP 4 => 0010
0010 ISNES 3 1 ; "true"
0011 JMP 4 => 0014
0014 ISNES 3 2 ; "false"
0015 JMP 4 => 0018
0018 ISNES 3 3 ; "fail"
0019 JMP 4 => 0022
0022 TGETB 4 1 1
0023 ISNES 4 1 ; "true"
0024 JMP 4 => 0030
0030 ISNES 3 4 ; "if"
0031 JMP 4 => 0142
0142 TGETB 4 2 1
0143 ISNES 4 4 ; "if"
0144 JMP 4 => 0167
0167 TGETB 4 1 1
0168 ISNES 4 4 ; "if"
0169 JMP 4 => 0192
0170 UGET 4 1 ; cfkey
0171 MOV 5 2
0172 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0006 . . KSTR 1 2 ; "table("
0007 . . UGET 2 0 ; cfkey
0008 . . TGETB 3 0 1
0009 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0010 . . CAT 1 1 2
---- TRACE 25 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 25 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0006 KSTR 1 2 ; "table("
0007 UGET 2 0 ; cfkey
0008 TGETB 3 0 1
0009 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0010 CAT 1 1 2
---- TRACE 25 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 25 start optimize.lua:31
0001 ADDVV 2 0 1
0002 RET1 2 2
---- TRACE 25 IR
0001 > <span class="irt_num">num</span> SLOAD #1 T
0002 > <span class="irt_num">num</span> SLOAD #2 T
0003 <span class="irt_num">num</span> ADD 0002 0001
---- TRACE 25 mcode 69
0bcacb06 mov dword [0x405d84a0], 0x19
0bcacb11 cmp dword [rdx+0x4], 0xfffeffff
0bcacb18 jnb 0x0bca0010 ->0
0bcacb1e movsd xmm7, [rdx]
0bcacb22 cmp dword [rdx+0xc], 0xfffeffff
0bcacb29 jnb 0x0bca0010 ->0
0bcacb2f addsd xmm7, [rdx+0x8]
0bcacb34 movsd [rdx+0x10], xmm7
0bcacb39 xor eax, eax
0bcacb3b mov ebx, 0x405f75a8
0bcacb40 mov r14d, 0x405d8f78
0bcacb46 jmp 0x0041d9f8
---- TRACE 25 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:187
0001 TGETB 3 0 1
0002 ISNES 3 0 ; "not"
0003 JMP 4 => 0010
0010 ISNES 3 1 ; "true"
0011 JMP 4 => 0014
0014 ISNES 3 2 ; "false"
0015 JMP 4 => 0018
0018 ISNES 3 3 ; "fail"
0019 JMP 4 => 0022
0022 TGETB 4 1 1
0023 ISNES 4 1 ; "true"
0024 JMP 4 => 0030
0030 ISNES 3 4 ; "if"
0031 JMP 4 => 0142
0142 TGETB 4 2 1
0143 ISNES 4 4 ; "if"
0144 JMP 4 => 0167
0167 TGETB 4 1 1
0168 ISNES 4 4 ; "if"
0169 JMP 4 => 0192
0170 UGET 4 1 ; cfkey
0171 MOV 5 2
0172 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0006 . . KSTR 1 2 ; "table("
0007 . . UGET 2 0 ; cfkey
0008 . . TGETB 3 0 1
0009 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0010 . . CAT 1 1 2
---- TRACE 26 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0006 UCLO 0 =&gt; 0308
---- TRACE 26 abort optimize.lua:125 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:238
0001 GGET 2 0 ; "type"
0002 MOV 3 0
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISEQS 2 1 ; "table"
0005 JMP 2 => 0007
0007 TGETB 2 0 1
0008 UGET 3 0 ; binops
0009 TGETV 3 3 2
0010 ISF 3
0011 JMP 4 => 0014
0014 UGET 3 1 ; unops
0015 TGETV 3 3 2
0016 ISF 3
0017 JMP 4 => 0020
0020 UGET 3 2 ; relops
0021 TGETV 3 3 2
0022 ISF 3
0023 JMP 4 => 0042
0042 ISNES 2 4 ; "not"
0043 JMP 3 => 0081
0081 ISNES 2 7 ; "if"
0082 JMP 3 => 0142
0083 UGET 3 4 ; cfold
0084 TGETB 4 0 2
0085 MOV 5 1
0086 CALL 3 2 3
0000 . FUNCF 11 ; optimize.lua:238
0001 . GGET 2 0 ; "type"
0002 . MOV 3 0
0003 . CALL 2 2 2
0000 . . FUNCC ; type
0004 . ISEQS 2 1 ; "table"
0005 . JMP 2 => 0007
0007 . TGETB 2 0 1
0008 . UGET 3 0 ; binops
0009 . TGETV 3 3 2
0010 . ISF 3
0011 . JMP 4 => 0014
0014 . UGET 3 1 ; unops
0015 . TGETV 3 3 2
0016 . ISF 3
0017 . JMP 4 => 0020
0020 . UGET 3 2 ; relops
0021 . TGETV 3 3 2
0022 . ISF 3
0023 . JMP 4 => 0042
0024 . UGET 3 3 ; cfkey
0025 . MOV 4 0
0026 . CALL 3 2 2
0000 . . JFUNCF 4 20 ; optimize.lua:54
0001 . . UGET 1 0 ; cache
0002 . . TGETV 1 1 0
0003 . . ISNEP 1 0
0004 . . JMP 2 => 0011
0011 . . RET1 1 2
0027 . TGETV 4 1 3
0028 . ISEQP 4 0
0029 . JMP 4 => 0040
0030 . TNEW 4 3
0031 . TGETV 5 1 3
0032 . ISF 5
0033 . JMP 6 => 0036
0034 . KSTR 5 2 ; "true"
0035 . JMP 6 =&gt; 0037
0037 . TSETB 5 4 1
0038 . RET1 4 2
0087 UGET 4 3 ; cfkey
0088 MOV 5 3
0089 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0006 . . KSTR 1 2 ; "table("
0007 . . UGET 2 0 ; cfkey
0008 . . TGETB 3 0 1
0009 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0010 . . CAT 1 1 2
---- TRACE 26 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:238
0001 GGET 2 0 ; "type"
0002 MOV 3 0
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISEQS 2 1 ; "table"
0005 JMP 2 => 0007
0007 TGETB 2 0 1
0008 UGET 3 0 ; binops
0009 TGETV 3 3 2
0010 ISF 3
0011 JMP 4 => 0014
0014 UGET 3 1 ; unops
0015 TGETV 3 3 2
0016 ISF 3
0017 JMP 4 => 0020
0020 UGET 3 2 ; relops
0021 TGETV 3 3 2
0022 ISF 3
0023 JMP 4 => 0042
0042 ISNES 2 4 ; "not"
0043 JMP 3 => 0081
0081 ISNES 2 7 ; "if"
0082 JMP 3 => 0142
0083 UGET 3 4 ; cfold
0084 TGETB 4 0 2
0085 MOV 5 1
0086 CALL 3 2 3
0000 . FUNCF 11 ; optimize.lua:238
0001 . GGET 2 0 ; "type"
0002 . MOV 3 0
0003 . CALL 2 2 2
0000 . . FUNCC ; type
0004 . ISEQS 2 1 ; "table"
0005 . JMP 2 => 0007
0007 . TGETB 2 0 1
0008 . UGET 3 0 ; binops
0009 . TGETV 3 3 2
0010 . ISF 3
0011 . JMP 4 => 0014
0014 . UGET 3 1 ; unops
0015 . TGETV 3 3 2
0016 . ISF 3
0017 . JMP 4 => 0020
0020 . UGET 3 2 ; relops
0021 . TGETV 3 3 2
0022 . ISF 3
0023 . JMP 4 => 0042
0024 . UGET 3 3 ; cfkey
0025 . MOV 4 0
0026 . CALL 3 2 2
0000 . . JFUNCF 4 20 ; optimize.lua:54
0001 . . UGET 1 0 ; cache
0002 . . TGETV 1 1 0
0003 . . ISNEP 1 0
0004 . . JMP 2 => 0011
0011 . . RET1 1 2
0027 . TGETV 4 1 3
0028 . ISEQP 4 0
0029 . JMP 4 => 0040
0030 . TNEW 4 3
0031 . TGETV 5 1 3
0032 . ISF 5
0033 . JMP 6 => 0036
0034 . KSTR 5 2 ; "true"
0035 . JMP 6 =&gt; 0037
0037 . TSETB 5 4 1
0038 . RET1 4 2
0087 UGET 4 3 ; cfkey
0088 MOV 5 3
0089 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0006 . . KSTR 1 2 ; "table("
0007 . . UGET 2 0 ; cfkey
0008 . . TGETB 3 0 1
0009 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0010 . . CAT 1 1 2
---- TRACE 26 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 26 start 23/0 optimize.lua:128
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0014
0014 RET1 0 2
0120 MOV 4 6
0121 MOV 3 5
0122 TNEW 5 4
0123 TSETB 1 5 1
0124 TSETB 3 5 2
0125 TSETB 4 5 3
0126 UCLO 0 =&gt; 0127
---- TRACE 26 abort optimize.lua:152 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 26 start 23/0 optimize.lua:128
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0014
0014 RET1 0 2
0120 MOV 4 6
0121 MOV 3 5
0122 TNEW 5 4
0123 TSETB 1 5 1
0124 TSETB 3 5 2
0125 TSETB 4 5 3
0126 UCLO 0 =&gt; 0127
---- TRACE 26 abort optimize.lua:152 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 26 start 23/0 optimize.lua:128
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0014
0014 RET1 0 2
0120 MOV 4 6
0121 MOV 3 5
0122 TNEW 5 4
0123 TSETB 1 5 1
0124 TSETB 3 5 2
0125 TSETB 4 5 3
0126 UCLO 0 =&gt; 0127
---- TRACE 26 abort optimize.lua:152 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 26 start 23/0 optimize.lua:128
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0014
0014 RET1 0 2
0120 MOV 4 6
0121 MOV 3 5
0122 TNEW 5 4
0123 TSETB 1 5 1
0124 TSETB 3 5 2
0125 TSETB 4 5 3
0126 UCLO 0 =&gt; 0127
---- TRACE 26 abort optimize.lua:152 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:69
0015 MOV 6 1
0016 KSTR 7 3 ; " "
0017 UGET 8 0 ; cfkey
0018 TGETV 9 0 5
0019 CALL 8 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0020 CAT 1 6 8
---- TRACE 26 abort optimize.lua:69 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0006 KSTR 1 2 ; "table("
0007 UGET 2 0 ; cfkey
0008 TGETB 3 0 1
0009 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0010 CAT 1 1 2
---- TRACE 26 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 26 start optimize.lua:394
0001 TGETB 1 0 1
0002 RET1 1 2
---- TRACE 26 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+1 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_tab">tab</span> ALOAD 0005
---- TRACE 26 mcode 77
0bcacab2 mov dword [0x405d84a0], 0x1a
0bcacabd cmp dword [rdx+0x4], -0x0c
0bcacac1 jnz 0x0bca0010 ->0
0bcacac7 mov ebp, [rdx]
0bcacac9 cmp dword [rbp+0x18], +0x01
0bcacacd jbe 0x0bca0010 ->0
0bcacad3 mov ebp, [rbp+0x8]
0bcacad6 cmp dword [rbp+0xc], -0x0c
0bcacada jnz 0x0bca0010 ->0
0bcacae0 mov ebp, [rbp+0x8]
0bcacae3 mov dword [rdx+0xc], 0xfffffff4
0bcacaea mov [rdx+0x8], ebp
0bcacaed xor eax, eax
0bcacaef mov ebx, 0x40b4d058
0bcacaf4 mov r14d, 0x405d8f78
0bcacafa jmp 0x0041d9f8
---- TRACE 26 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 27 start optimize.lua:401
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0023 UGET 4 3 ; cdr
0024 MOV 5 0
0025 CALL 4 2 2
0000 . FUNCF 2 ; optimize.lua:395
0001 . TGETB 1 0 2
0002 . RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0015 LOOP 3 =&gt; 0028
---- TRACE 27 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">optimize.lua:398</span>
0003 > <span class="irt_tab">tab</span> SLOAD #1 T
0004 <span class="irt_int">int</span> FLOAD 0003 tab.asize
0005 > <span class="irt_int">int</span> ABC 0004 <span class="irt_int">+2 </span>
0006 <span class="irt_p32">p32</span> FLOAD 0003 tab.array
0007 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+1 </span>
0008 > <span class="irt_tab">tab</span> ALOAD 0007
0009 > <span class="irt_str">str</span> SLOAD #3 T
0010 <span class="irt_int">int</span> FLOAD 0008 tab.hmask
0011 > <span class="irt_int">int</span> EQ 0010 <span class="irt_int">+0 </span>
0012 <span class="irt_tab">tab</span> FLOAD 0008 tab.meta
0013 > <span class="irt_tab">tab</span> EQ 0012 <span class="irt_tab">[NULL]</span>
0014 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+2 </span>
0015 >+ <span class="irt_tab">tab</span> ALOAD 0014
0016 ------ LOOP ------------
0017 <span class="irt_int">int</span> FLOAD 0015 tab.asize
0018 > <span class="irt_int">int</span> ABC 0017 <span class="irt_int">+2 </span>
0019 <span class="irt_p32">p32</span> FLOAD 0015 tab.array
0020 <span class="irt_p32">p32</span> AREF 0019 <span class="irt_int">+1 </span>
0021 > <span class="irt_tab">tab</span> ALOAD 0020
0022 <span class="irt_int">int</span> FLOAD 0021 tab.hmask
0023 > <span class="irt_int">int</span> EQ 0022 <span class="irt_int">+0 </span>
0024 <span class="irt_tab">tab</span> FLOAD 0021 tab.meta
0025 > <span class="irt_tab">tab</span> EQ 0024 <span class="irt_tab">[NULL]</span>
0026 <span class="irt_p32">p32</span> AREF 0019 <span class="irt_int">+2 </span>
0027 >+ <span class="irt_tab">tab</span> ALOAD 0026
0028 <span class="irt_tab">tab</span> PHI 0015 0027
---- TRACE 27 mcode 171
0bcaca07 mov dword [0x405d84a0], 0x1b
0bcaca12 cmp dword [rdx-0x8], 0x41fba2b0
0bcaca19 jnz 0x0bca0010 ->0
0bcaca1f cmp dword [rdx+0x4], -0x0c
0bcaca23 jnz 0x0bca0010 ->0
0bcaca29 mov esi, [rdx]
0bcaca2b cmp dword [rsi+0x18], +0x02
0bcaca2f jbe 0x0bca0010 ->0
0bcaca35 mov eax, [rsi+0x8]
0bcaca38 cmp dword [rax+0xc], -0x0c
0bcaca3c jnz 0x0bca0010 ->0
0bcaca42 mov ecx, [rax+0x8]
0bcaca45 cmp dword [rdx+0x14], -0x05
0bcaca49 jnz 0x0bca0010 ->0
0bcaca4f cmp dword [rcx+0x1c], +0x00
0bcaca53 jnz 0x0bca0010 ->0
0bcaca59 cmp dword [rcx+0x10], +0x00
0bcaca5d jnz 0x0bca0010 ->0
0bcaca63 cmp dword [rax+0x14], -0x0c
0bcaca67 jnz 0x0bca0010 ->0
0bcaca6d mov ebp, [rax+0x10]
->LOOP:
0bcaca70 mov ebx, ebp
0bcaca72 cmp dword [rbx+0x18], +0x02
0bcaca76 jbe 0x0bca0014 ->1
0bcaca7c mov ebp, [rbx+0x8]
0bcaca7f cmp dword [rbp+0xc], -0x0c
0bcaca83 jnz 0x0bca0014 ->1
0bcaca89 mov r15d, [rbp+0x8]
0bcaca8d cmp dword [r15+0x1c], +0x00
0bcaca92 jnz 0x0bca0014 ->1
0bcaca98 cmp dword [r15+0x10], +0x00
0bcaca9d jnz 0x0bca0014 ->1
0bcacaa3 cmp dword [rbp+0x14], -0x0c
0bcacaa7 jnz 0x0bca0014 ->1
0bcacaad mov ebp, [rbp+0x10]
0bcacab0 jmp 0x0bcaca70 ->LOOP
---- TRACE 27 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 28 start optimize.lua:281
0001 TGETS 1 0 0 ; "min_"
0002 RET1 1 2
---- TRACE 28 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.hmask
0003 > <span class="irt_int">int</span> EQ 0002 <span class="irt_int">+31 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.node
0005 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"min_"</span> @30
0006 > <span class="irt_num">num</span> HLOAD 0005
---- TRACE 28 mcode 106
0bcac996 mov dword [0x405d84a0], 0x1c
0bcac9a1 cmp dword [rdx+0x4], -0x0c
0bcac9a5 jnz 0x0bca0010 ->0
0bcac9ab mov ebp, [rdx]
0bcac9ad cmp dword [rbp+0x1c], +0x1f
0bcac9b1 jnz 0x0bca0010 ->0
0bcac9b7 mov ebp, [rbp+0x14]
0bcac9ba mov rdi, 0xfffffffb40bdc7b8
0bcac9c4 cmp rdi, [rbp+0x2d8]
0bcac9cb jnz 0x0bca0010 ->0
0bcac9d1 cmp dword [rbp+0x2d4], 0xfffeffff
0bcac9db jnb 0x0bca0010 ->0
0bcac9e1 movsd xmm7, [rbp+0x2d0]
0bcac9e9 movsd [rdx+0x8], xmm7
0bcac9ee xor eax, eax
0bcac9f0 mov ebx, 0x40bdcfe0
0bcac9f5 mov r14d, 0x405d8f78
0bcac9fb jmp 0x0041d9f8
---- TRACE 28 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 29 start 27/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0008 MOV 7 6
0009 TGETS 6 6 0 ; "restrict"
0010 MOV 8 2
0011 CALL 6 0 3
0000 . FUNCF 8 ; optimize.lua:293
0001 . UGET 2 0 ; Range
0002 . GGET 3 0 ; "math"
0003 . TGETS 3 3 1 ; "max"
0004 . MOV 5 0
0005 . TGETS 4 0 2 ; "min"
0006 . CALL 4 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0007 . MOV 6 1
0008 . TGETS 5 1 2 ; "min"
0009 . CALL 5 0 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0010 . CALLM 3 2 1
0000 . . FUNCC ; math.max
0011 . GGET 4 0 ; "math"
0012 . TGETS 4 4 2 ; "min"
0013 . MOV 6 0
0014 . TGETS 5 0 1 ; "max"
0015 . CALL 5 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0016 . MOV 7 1
0017 . TGETS 6 1 1 ; "max"
0018 . CALL 6 0 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0019 . CALLM 4 0 1
0000 . . FUNCC ; math.min
0020 . CALLMT 2 1
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 29 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 29 start 27/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0008 MOV 7 6
0009 TGETS 6 6 0 ; "restrict"
0010 MOV 8 2
0011 CALL 6 0 3
0000 . FUNCF 8 ; optimize.lua:293
0001 . UGET 2 0 ; Range
0002 . GGET 3 0 ; "math"
0003 . TGETS 3 3 1 ; "max"
0004 . MOV 5 0
0005 . TGETS 4 0 2 ; "min"
0006 . CALL 4 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0007 . MOV 6 1
0008 . TGETS 5 1 2 ; "min"
0009 . CALL 5 0 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0010 . CALLM 3 2 1
0000 . . FUNCC ; math.max
0011 . GGET 4 0 ; "math"
0012 . TGETS 4 4 2 ; "min"
0013 . MOV 6 0
0014 . TGETS 5 0 1 ; "max"
0015 . CALL 5 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0016 . MOV 7 1
0017 . TGETS 6 1 1 ; "max"
0018 . CALL 6 0 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0019 . CALLM 4 0 1
0000 . . FUNCC ; math.min
0020 . CALLMT 2 1
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 29 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 29 start optimize.lua:398
0001 GGET 2 0 ; "type"
0002 MOV 3 1
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISNES 2 1 ; "number"
0005 JMP 2 => 0010
0006 UGET 2 0 ; Range
0007 MOV 3 1
0008 MOV 4 1
0009 CALLT 2 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 29 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 29 start optimize.lua:48
0001 ISLE 1 0
0002 JMP 2 => 0005
0005 KPRI 2 2
0006 RET1 2 2
---- TRACE 29 IR
0001 > <span class="irt_num">num</span> SLOAD #2 T
0002 > <span class="irt_num">num</span> SLOAD #1 T
0003 > <span class="irt_num">num</span> GE 0002 0001
---- TRACE 29 mcode 77
0bcac942 mov dword [0x405d84a0], 0x1d
0bcac94d cmp dword [rdx+0xc], 0xfffeffff
0bcac954 jnb 0x0bca0010 ->0
0bcac95a cmp dword [rdx+0x4], 0xfffeffff
0bcac961 jnb 0x0bca0010 ->0
0bcac967 movsd xmm7, [rdx]
0bcac96b ucomisd xmm7, [rdx+0x8]
0bcac970 jb 0x0bca0014 ->1
0bcac976 mov dword [rdx+0x14], 0xfffffffd
0bcac97d xor eax, eax
0bcac97f mov ebx, 0x40b4b8e8
0bcac984 mov r14d, 0x405d8f78
0bcac98a jmp 0x0041d9f8
---- TRACE 29 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 30 start 27/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0023 UGET 4 3 ; cdr
0024 MOV 5 0
0025 CALL 4 2 2
0000 . FUNCF 2 ; optimize.lua:395
0001 . TGETB 1 0 2
0002 . RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0028 UGET 3 0 ; Range
0029 UGET 4 4 ; Inf
0030 UNM 4 4
0031 UGET 5 4 ; Inf
0032 CALLT 3 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 30 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 30 start 27/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0444 UGET 10 6 ; lookup
0445 MOV 11 6
0446 MOV 12 8
0447 CALL 10 2 3
0000 . FUNCF 6 ; optimize.lua:398
0001 . GGET 2 0 ; "type"
0002 . MOV 3 1
0003 . CALL 2 2 2
0000 . . FUNCC ; type
0004 . ISNES 2 1 ; "number"
0005 . JMP 2 => 0010
0006 . UGET 2 0 ; Range
0007 . MOV 3 1
0008 . MOV 4 1
0009 . CALLT 2 3
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 30 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 30 start 27/0 optimize.lua:402
---- TRACE 30 IR
---- TRACE 30 mcode 29
0bcac91e mov dword [0x405d84a0], 0x1e
0bcac929 xor eax, eax
0bcac92b mov ebx, 0x405ebc38
0bcac930 mov r14d, 0x405d8f78
0bcac936 jmp 0x0041d9f8
---- TRACE 30 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 31 start 27/1 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0023 UGET 4 3 ; cdr
0024 MOV 5 0
0025 CALL 4 2 2
0000 . FUNCF 2 ; optimize.lua:395
0001 . TGETB 1 0 2
0002 . RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0015 JLOOP 3 27
---- TRACE 31 IR
0001 <span class="irt_tab">tab</span> SLOAD #1 PI
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+2 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_tab">tab</span> ALOAD 0005
0007 > <span class="irt_str">str</span> SLOAD #3 T
0008 <span class="irt_p32">p32</span> HREF 0006 0007
0009 > <span class="irt_p32">p32</span> EQ 0008 <span class="irt_p32">[0x405d8420]</span>
0010 <span class="irt_tab">tab</span> FLOAD 0006 tab.meta
0011 > <span class="irt_tab">tab</span> EQ 0010 <span class="irt_tab">[NULL]</span>
0012 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+2 </span>
0013 > <span class="irt_tab">tab</span> ALOAD 0012
---- TRACE 31 mcode 149
0bcac882 mov dword [0x405d84a0], 0x1f
0bcac88d cmp dword [rbx+0x18], +0x02
0bcac891 jbe 0x0bca0010 ->0
0bcac897 mov ebp, [rbx+0x8]
0bcac89a cmp dword [rbp+0xc], -0x0c
0bcac89e jnz 0x0bca0010 ->0
0bcac8a4 mov r15d, [rbp+0x8]
0bcac8a8 cmp dword [rdx+0x14], -0x05
0bcac8ac jnz 0x0bca0010 ->0
0bcac8b2 mov r13d, [rdx+0x10]
0bcac8b6 mov r14d, [r15+0x1c]
0bcac8ba and r14d, [r13+0x8]
0bcac8be lea r14d, [r14+r14*2]
0bcac8c2 shl r14d, 0x03
0bcac8c6 add r14d, [r15+0x14]
0bcac8ca cmp dword [r14+0xc], -0x05
0bcac8cf jnz 0x0bcac8db
0bcac8d1 cmp r13d, [r14+0x8]
0bcac8d5 jz 0x0bca0010 ->0
0bcac8db mov r14d, [r14+0x10]
0bcac8df test r14d, r14d
0bcac8e2 jnz 0x0bcac8ca
0bcac8e4 mov r14d, 0x405d8420
0bcac8ea cmp dword [r15+0x10], +0x00
0bcac8ef jnz 0x0bca0010 ->0
0bcac8f5 cmp dword [rbp+0x14], -0x0c
0bcac8f9 jnz 0x0bca0010 ->0
0bcac8ff mov ebp, [rbp+0x10]
0bcac902 mov dword [rdx+0x4], 0xfffffff4
0bcac909 mov [rdx], ebp
0bcac90b mov dword [rdx-0x8], 0x41fba2b0
0bcac912 jmp 0x0bcaca07
---- TRACE 31 stop -> 27
</pre>
<pre class="ljdump">
---- TRACE 32 start optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 32 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 32 start optimize.lua:395
0001 TGETB 1 0 2
0002 RET1 1 2
---- TRACE 32 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+2 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+2 </span>
0006 > <span class="irt_tab">tab</span> ALOAD 0005
---- TRACE 32 mcode 77
0bcac82e mov dword [0x405d84a0], 0x20
0bcac839 cmp dword [rdx+0x4], -0x0c
0bcac83d jnz 0x0bca0010 ->0
0bcac843 mov ebp, [rdx]
0bcac845 cmp dword [rbp+0x18], +0x02
0bcac849 jbe 0x0bca0010 ->0
0bcac84f mov ebp, [rbp+0x8]
0bcac852 cmp dword [rbp+0x14], -0x0c
0bcac856 jnz 0x0bca0010 ->0
0bcac85c mov ebp, [rbp+0x10]
0bcac85f mov dword [rdx+0xc], 0xfffffff4
0bcac866 mov [rdx+0x8], ebp
0bcac869 xor eax, eax
0bcac86b mov ebx, 0x40bd7658
0bcac870 mov r14d, 0x405d8f78
0bcac876 jmp 0x0041d9f8
---- TRACE 32 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 33 start 31/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0008 MOV 7 6
0009 TGETS 6 6 0 ; "restrict"
0010 MOV 8 2
0011 CALL 6 0 3
0000 . FUNCF 8 ; optimize.lua:293
0001 . UGET 2 0 ; Range
0002 . GGET 3 0 ; "math"
0003 . TGETS 3 3 1 ; "max"
0004 . MOV 5 0
0005 . TGETS 4 0 2 ; "min"
0006 . CALL 4 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0007 . MOV 6 1
0008 . TGETS 5 1 2 ; "min"
0009 . CALL 5 0 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0010 . CALLM 3 2 1
0000 . . FUNCC ; math.max
0011 . GGET 4 0 ; "math"
0012 . TGETS 4 4 2 ; "min"
0013 . MOV 6 0
0014 . TGETS 5 0 1 ; "max"
0015 . CALL 5 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0016 . MOV 7 1
0017 . TGETS 6 1 1 ; "max"
0018 . CALL 6 0 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0019 . CALLM 4 0 1
0000 . . FUNCC ; math.min
0020 . CALLMT 2 1
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 33 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 33 start 31/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0324 MOV 12 11
0325 TGETS 11 11 18 ; "restrict"
0326 UGET 13 12 ; Range
0327 KSHORT 14 0
0328 MOV 15 10
0329 CALL 13 0 3
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 33 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 33 start 31/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0008 MOV 7 6
0009 TGETS 6 6 0 ; "restrict"
0010 MOV 8 2
0011 CALL 6 0 3
0000 . FUNCF 8 ; optimize.lua:293
0001 . UGET 2 0 ; Range
0002 . GGET 3 0 ; "math"
0003 . TGETS 3 3 1 ; "max"
0004 . MOV 5 0
0005 . TGETS 4 0 2 ; "min"
0006 . CALL 4 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0007 . MOV 6 1
0008 . TGETS 5 1 2 ; "min"
0009 . CALL 5 0 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0010 . CALLM 3 2 1
0000 . . FUNCC ; math.max
0011 . GGET 4 0 ; "math"
0012 . TGETS 4 4 2 ; "min"
0013 . MOV 6 0
0014 . TGETS 5 0 1 ; "max"
0015 . CALL 5 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0016 . MOV 7 1
0017 . TGETS 6 1 1 ; "max"
0018 . CALL 6 0 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0019 . CALLM 4 0 1
0000 . . FUNCC ; math.min
0020 . CALLMT 2 1
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 33 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 33 start 31/0 optimize.lua:402
0016 UGET 3 2 ; car
0017 MOV 4 0
0018 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0019 TGETV 3 3 2
0020 ISF 3
0021 JMP 4 => 0023
0022 RET1 3 2
0324 MOV 12 11
0325 TGETS 11 11 18 ; "restrict"
0326 UGET 13 12 ; Range
0327 KSHORT 14 0
0328 MOV 15 10
0329 CALL 13 0 3
0000 . FUNCF 4 ; optimize.lua:276
0001 . ISGE 1 0
0002 . JMP 2 => 0006
0006 . TDUP 2 0
0007 . TSETS 0 2 1 ; "min_"
0008 . TSETS 1 2 2 ; "max_"
0009 . FNEW 3 4 ; optimize.lua:281
---- TRACE 33 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 33 start 31/0 optimize.lua:402
---- TRACE 33 IR
0001 <span class="irt_tab">tab</span> SLOAD #1 PI
---- TRACE 33 mcode 45
0bcac7fa mov dword [0x405d84a0], 0x21
0bcac805 mov dword [rdx+0x4], 0xfffffff4
0bcac80c mov [rdx], ebx
0bcac80e mov dword [rdx-0x8], 0x41fba2b0
0bcac815 xor eax, eax
0bcac817 mov ebx, 0x405ebc38
0bcac81c mov r14d, 0x405d8f78
0bcac822 jmp 0x0041d9f8
---- TRACE 33 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 34 start optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 34 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 34 start optimize.lua:398
0001 GGET 2 0 ; "type"
0002 MOV 3 1
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISNES 2 1 ; "number"
0005 JMP 2 => 0010
0010 UGET 2 1 ; cfkey
0011 MOV 3 1
0012 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0013 ISF 0
0014 JMP 3 => 0028
0015 JLOOP 3 27
---- TRACE 34 abort optimize.lua:402 -- inner loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 34 start optimize.lua:293
0001 UGET 2 0 ; Range
0002 GGET 3 0 ; "math"
0003 TGETS 3 3 1 ; "max"
0004 MOV 5 0
0005 TGETS 4 0 2 ; "min"
0006 CALL 4 2 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0007 MOV 6 1
0008 TGETS 5 1 2 ; "min"
0009 CALL 5 0 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0010 CALLM 3 2 1
0000 . FUNCC ; math.max
0011 GGET 4 0 ; "math"
0012 TGETS 4 4 2 ; "min"
0013 MOV 6 0
0014 TGETS 5 0 1 ; "max"
0015 CALL 5 2 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0016 MOV 7 1
0017 TGETS 6 1 1 ; "max"
0018 CALL 6 0 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0019 CALLM 4 0 1
0000 . FUNCC ; math.min
0020 CALLMT 2 1
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 34 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 34 start optimize.lua:397
0001 UGET 1 0 ; cons
0002 TNEW 2 0
0003 MOV 3 0
0004 CALLT 1 3
0000 FUNCF 3 ; optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
---- TRACE 34 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">optimize.lua:397</span>
0003 > <span class="irt_tab">tab</span> TNEW #0 #0
0004 > <span class="irt_tab">tab</span> SLOAD #1 T
0005 > <span class="irt_tab">tab</span> TNEW #3 #0
0006 <span class="irt_p32">p32</span> FLOAD 0005 tab.array
0007 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+1 </span>
0008 <span class="irt_tab">tab</span> ASTORE 0007 0003
0009 <span class="irt_p32">p32</span> AREF 0006 <span class="irt_int">+2 </span>
0010 <span class="irt_tab">tab</span> ASTORE 0009 0004
---- TRACE 34 mcode 205
0bcac726 mov dword [0x405d84a0], 0x22
0bcac731 mov edi, [0x405d83d8]
0bcac738 cmp edi, [0x405d83dc]
0bcac73f jb 0x0bcac758
0bcac741 mov esi, 0x2
0bcac746 mov edi, 0x405d83b8
0bcac74b call 0x0041f3d0 ->lj_gc_step_jit
0bcac750 test eax, eax
0bcac752 jnz 0x0bca0010 ->0
0bcac758 mov edi, [0x405d84ac]
0bcac75f mov edx, [0x405d84b0]
0bcac766 cmp dword [rdx-0x8], 0x403c87b8
0bcac76d jnz 0x0bca0010 ->0
0bcac773 xor esi, esi
0bcac775 call 0x0041f7e0 ->lj_tab_new1
0bcac77a mov ebx, eax
0bcac77c mov edi, [0x405d84ac]
0bcac783 mov edx, [0x405d84b0]
0bcac78a cmp dword [rdx+0x4], -0x0c
0bcac78e jnz 0x0bca0010 ->0
0bcac794 mov ebp, [rdx]
0bcac796 mov esi, 0x3
0bcac79b call 0x0041f7e0 ->lj_tab_new1
0bcac7a0 mov edx, [0x405d84b0]
0bcac7a7 mov dword [rax+0x2c], 0xfffffff4
0bcac7ae mov [rax+0x28], ebx
0bcac7b1 mov dword [rax+0x34], 0xfffffff4
0bcac7b8 mov [rax+0x30], ebp
0bcac7bb mov ecx, [0x405d84ac]
0bcac7c2 mov ecx, [rcx+0x20]
0bcac7c5 sub ecx, edx
0bcac7c7 cmp ecx, +0x18
0bcac7ca jb 0x0bca0014 ->1
0bcac7d0 mov dword [rdx+0x14], 0xfffffff4
0bcac7d7 mov [rdx+0x10], eax
0bcac7da mov dword [rdx-0x8], 0x409d2a78
0bcac7e1 xor eax, eax
0bcac7e3 mov ebx, 0x40b46ee0
0bcac7e8 mov r14d, 0x405d8f78
0bcac7ee jmp 0x0041d9f8
---- TRACE 34 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 35 start optimize.lua:284
0001 MOV 2 0
0002 TGETS 1 0 0 ; "min"
0003 CALL 1 2 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0004 MOV 3 0
0005 TGETS 2 0 1 ; "max"
0006 CALL 2 2 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0007 ISNEV 1 2
0008 JMP 1 => 0012
0012 RET0 0 1
---- TRACE 35 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.hmask
0003 > <span class="irt_int">int</span> EQ 0002 <span class="irt_int">+31 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.node
0005 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"min"</span> @22
0006 > <span class="irt_fun">fun</span> HLOAD 0005
0007 <span class="irt_p32">p32</span> FLOAD 0006 func.pc
0008 > <span class="irt_p32">p32</span> EQ 0007 <span class="irt_p32">[0x40bdcfd8]</span>
0009 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"min_"</span> @30
0010 > <span class="irt_num">num</span> HLOAD 0009
0011 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"max"</span> @16
0012 > <span class="irt_fun">fun</span> HLOAD 0011
0013 <span class="irt_p32">p32</span> FLOAD 0012 func.pc
0014 > <span class="irt_p32">p32</span> EQ 0013 <span class="irt_p32">[0x40bdc8b0]</span>
0015 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"max_"</span> @18
0016 > <span class="irt_num">num</span> HLOAD 0015
0017 > <span class="irt_num">num</span> NE 0016 0010
---- TRACE 35 mcode 266
0bcac615 mov dword [0x405d84a0], 0x23
0bcac620 cmp dword [rdx+0x4], -0x0c
0bcac624 jnz 0x0bca0010 ->0
0bcac62a mov ebp, [rdx]
0bcac62c cmp dword [rbp+0x1c], +0x1f
0bcac630 jnz 0x0bca0010 ->0
0bcac636 mov ebp, [rbp+0x14]
0bcac639 mov rdi, 0xfffffffb405de540
0bcac643 cmp rdi, [rbp+0x218]
0bcac64a jnz 0x0bca0010 ->0
0bcac650 cmp dword [rbp+0x214], -0x09
0bcac657 jnz 0x0bca0010 ->0
0bcac65d mov ebx, [rbp+0x210]
0bcac663 cmp dword [rbx+0x10], 0x40bdcfd8
0bcac66a jnz 0x0bca0010 ->0
0bcac670 mov rdi, 0xfffffffb40bdc7b8
0bcac67a cmp rdi, [rbp+0x2d8]
0bcac681 jnz 0x0bca0010 ->0
0bcac687 cmp dword [rbp+0x2d4], 0xfffeffff
0bcac691 jnb 0x0bca0010 ->0
0bcac697 mov rdi, 0xfffffffb405de588
0bcac6a1 cmp rdi, [rbp+0x188]
0bcac6a8 jnz 0x0bca0010 ->0
0bcac6ae cmp dword [rbp+0x184], -0x09
0bcac6b5 jnz 0x0bca0010 ->0
0bcac6bb mov ebx, [rbp+0x180]
0bcac6c1 cmp dword [rbx+0x10], 0x40bdc8b0
0bcac6c8 jnz 0x0bca0010 ->0
0bcac6ce mov rdi, 0xfffffffb405e7640
0bcac6d8 cmp rdi, [rbp+0x1b8]
0bcac6df jnz 0x0bca0010 ->0
0bcac6e5 cmp dword [rbp+0x1b4], 0xfffeffff
0bcac6ef jnb 0x0bca0010 ->0
0bcac6f5 movsd xmm7, [rbp+0x1b0]
0bcac6fd ucomisd xmm7, [rbp+0x2d0]
0bcac705 jpe 0x0bcac70d
0bcac707 jz 0x0bca0014 ->1
0bcac70d xor eax, eax
0bcac70f mov ebx, 0x40b4ad30
0bcac714 mov r14d, 0x405d8f78
0bcac71a jmp 0x0041d9f8
---- TRACE 35 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 36 start 32/0 optimize.lua:395
0001 TGETB 1 0 2
0002 RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0028 UGET 3 0 ; Range
0029 UGET 4 4 ; Inf
0030 UNM 4 4
0031 UGET 5 4 ; Inf
0032 CALLT 3 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 36 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 36 start optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 36 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 36 start 32/0 optimize.lua:395
0001 TGETB 1 0 2
0002 RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0028 UGET 3 0 ; Range
0029 UGET 4 4 ; Inf
0030 UNM 4 4
0031 UGET 5 4 ; Inf
0032 CALLT 3 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 36 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 36 start 32/0 optimize.lua:395
0001 TGETB 1 0 2
0002 RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0028 UGET 3 0 ; Range
0029 UGET 4 4 ; Inf
0030 UNM 4 4
0031 UGET 5 4 ; Inf
0032 CALLT 3 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 36 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 36 start 35/1 optimize.lua:285
0009 MOV 2 0
0010 TGETS 1 0 0 ; "min"
0011 CALLT 1 2
0000 JFUNCF 2 28 ; optimize.lua:281
0001 TGETS 1 0 0 ; "min_"
0002 RET1 1 2
0017 ISF 3
0018 JMP 4 => 0022
0019 MOV 4 2
0020 TGETS 3 2 3 ; "min"
0021 CALLT 3 2
0000 JFUNCF 2 28 ; optimize.lua:281
0001 TGETS 1 0 0 ; "min_"
0002 RET1 1 2
0109 UGET 16 8 ; restrict
0110 MOV 17 2
0111 MOV 18 7
0112 MOV 19 13
0113 CALL 16 1 4
0000 . FUNCF 9 ; optimize.lua:414
0001 . UGET 3 0 ; define
0002 . MOV 4 0
0003 . MOV 5 1
0004 . UGET 6 1 ; lookup
0005 . MOV 7 0
0006 . MOV 8 1
0007 . CALL 6 2 3
0000 . . FUNCF 6 ; optimize.lua:398
0001 . . GGET 2 0 ; "type"
0002 . . MOV 3 1
0003 . . CALL 2 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 2 1 ; "number"
0005 . . JMP 2 => 0010
0010 . . UGET 2 1 ; cfkey
0011 . . MOV 3 1
0012 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0013 . . ISF 0
0014 . . JMP 3 => 0028
0015 . . JLOOP 3 27
---- TRACE 36 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.hmask
0003 > <span class="irt_int">int</span> EQ 0002 <span class="irt_int">+31 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.node
0005 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"min"</span> @22
0006 > <span class="irt_fun">fun</span> HLOAD 0005
0007 <span class="irt_p32">p32</span> FLOAD 0006 func.pc
0008 > <span class="irt_p32">p32</span> EQ 0007 <span class="irt_p32">[0x40bdcfd8]</span>
0009 > <span class="irt_p32">p32</span> HREFK 0004 <span class="irt_str">"min_"</span> @30
0010 > <span class="irt_num">num</span> HLOAD 0009
0011 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40bdfc10</span> <span class="irt_p32">[0x40bdfc94]</span>
0012 > <span class="irt_tab">tab</span> SLOAD #3 T
0013 <span class="irt_int">int</span> FLOAD 0012 tab.hmask
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+31 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0012 tab.node
0016 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"min"</span> @22
0017 > <span class="irt_fun">fun</span> HLOAD 0016
0018 <span class="irt_p32">p32</span> FLOAD 0017 func.pc
0019 > <span class="irt_p32">p32</span> EQ 0018 <span class="irt_p32">[0x40bdcfd8]</span>
0020 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"min_"</span> @30
0021 > <span class="irt_num">num</span> HLOAD 0020
0022 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b579f8</span> <span class="irt_p32">[0x40b57bec]</span>
0023 <span class="irt_fun">fun</span> SLOAD #0 R
0024 > <span class="irt_fun">fun</span> EQ 0023 <span class="irt_fun">optimize.lua:488</span>
0025 > <span class="irt_tab">tab</span> SLOAD #3 T
0026 > <span class="irt_tab">tab</span> SLOAD #8 T
0027 > <span class="irt_tab">tab</span> SLOAD #14 T
0028 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">optimize.lua:398</span> func.env
0029 <span class="irt_p32">p32</span> HREF 0028 <span class="irt_str">"type"</span>
0030 > <span class="irt_p32">p32</span> EQ 0029 <span class="irt_p32">[0x405d8420]</span>
0031 <span class="irt_tab">tab</span> FLOAD 0028 tab.meta
0032 > <span class="irt_tab">tab</span> NE 0031 <span class="irt_tab">[NULL]</span>
0033 <span class="irt_int">int</span> FLOAD 0031 tab.hmask
0034 > <span class="irt_int">int</span> EQ 0033 <span class="irt_int">+1 </span>
0035 <span class="irt_p32">p32</span> FLOAD 0031 tab.node
0036 > <span class="irt_p32">p32</span> HREFK 0035 <span class="irt_str">"__index"</span> @1
0037 > <span class="irt_tab">tab</span> HLOAD 0036
0038 <span class="irt_int">int</span> FLOAD 0037 tab.hmask
0039 > <span class="irt_int">int</span> EQ 0038 <span class="irt_int">+63 </span>
0040 <span class="irt_p32">p32</span> FLOAD 0037 tab.node
0041 > <span class="irt_p32">p32</span> HREFK 0040 <span class="irt_str">"type"</span> @60
0042 > <span class="irt_fun">fun</span> HLOAD 0041
0043 > <span class="irt_fun">fun</span> EQ 0042 <span class="irt_fun">type</span>
0044 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:398</span> #1
0045 > <span class="irt_fun">fun</span> ULOAD 0044
0046 > <span class="irt_fun">fun</span> EQ 0045 <span class="irt_fun">optimize.lua:54</span>
0047 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:54</span> #0
0048 > <span class="irt_tab">tab</span> ULOAD 0047
0049 <span class="irt_p32">p32</span> HREF 0048 0026
0050 > <span class="irt_str">str</span> HLOAD 0049
---- TRACE 36 mcode 952
0bcac256 mov eax, [0x405d84ac]
0bcac25d mov eax, [rax+0x20]
0bcac260 sub eax, edx
0bcac262 cmp eax, +0x48
0bcac265 jb 0x0bca0014 ->1
0bcac26b mov dword [0x405d84a0], 0x24
0bcac276 cmp dword [rdx+0x4], -0x0c
0bcac27a jnz 0x0bca0010 ->0
0bcac280 mov ebp, [rdx]
0bcac282 cmp dword [rbp+0x1c], +0x1f
0bcac286 jnz 0x0bca0010 ->0
0bcac28c mov ebx, [rbp+0x14]
0bcac28f mov rdi, 0xfffffffb405de540
0bcac299 cmp rdi, [rbx+0x218]
0bcac2a0 jnz 0x0bca0010 ->0
0bcac2a6 cmp dword [rbx+0x214], -0x09
0bcac2ad jnz 0x0bca0010 ->0
0bcac2b3 mov ebp, [rbx+0x210]
0bcac2b9 cmp dword [rbp+0x10], 0x40bdcfd8
0bcac2c0 jnz 0x0bca0010 ->0
0bcac2c6 mov rdi, 0xfffffffb40bdc7b8
0bcac2d0 cmp rdi, [rbx+0x2d8]
0bcac2d7 jnz 0x0bca0010 ->0
0bcac2dd cmp dword [rbx+0x2d4], 0xfffeffff
0bcac2e7 jnb 0x0bca0010 ->0
0bcac2ed movsd xmm6, [rbx+0x2d0]
0bcac2f5 cmp dword [rdx-0x4], 0x40bdfc94
0bcac2fc jnz 0x0bca0014 ->1
0bcac302 add edx, -0x20
0bcac305 mov [0x405d84b0], edx
0bcac30c cmp dword [rdx+0x14], -0x0c
0bcac310 jnz 0x0bca0018 ->2
0bcac316 mov ebx, [rdx+0x10]
0bcac319 cmp dword [rbx+0x1c], +0x1f
0bcac31d jnz 0x0bca0018 ->2
0bcac323 mov r15d, [rbx+0x14]
0bcac327 mov rdi, 0xfffffffb405de540
0bcac331 cmp rdi, [r15+0x218]
0bcac338 jnz 0x0bca0018 ->2
0bcac33e cmp dword [r15+0x214], -0x09
0bcac346 jnz 0x0bca0018 ->2
0bcac34c mov ebp, [r15+0x210]
0bcac353 cmp dword [rbp+0x10], 0x40bdcfd8
0bcac35a jnz 0x0bca0018 ->2
0bcac360 mov rdi, 0xfffffffb40bdc7b8
0bcac36a cmp rdi, [r15+0x2d8]
0bcac371 jnz 0x0bca0018 ->2
0bcac377 cmp dword [r15+0x2d4], 0xfffeffff
0bcac382 jnb 0x0bca0018 ->2
0bcac388 movsd xmm7, [r15+0x2d0]
0bcac391 cmp dword [rdx-0x4], 0x40b57bec
0bcac398 jnz 0x0bca001c ->3
0bcac39e add edx, 0xffffff78
0bcac3a4 mov [0x405d84b0], edx
0bcac3ab cmp dword [rdx-0x8], 0x409a3d78
0bcac3b2 jnz 0x0bca0020 ->4
0bcac3b8 cmp dword [rdx+0x14], -0x0c
0bcac3bc jnz 0x0bca0020 ->4
0bcac3c2 mov ebp, [rdx+0x10]
0bcac3c5 cmp dword [rdx+0x3c], -0x0c
0bcac3c9 jnz 0x0bca0020 ->4
0bcac3cf mov ebx, [rdx+0x38]
0bcac3d2 cmp dword [rdx+0x6c], -0x0c
0bcac3d6 jnz 0x0bca0020 ->4
0bcac3dc mov r15d, [rdx+0x68]
0bcac3e0 mov r14d, [0x41fba2b8]
0bcac3e8 mov r13d, [r14+0x1c]
0bcac3ec and r13d, 0x798a813c
0bcac3f3 lea r13d, [r13+r13*2+0x0]
0bcac3f8 shl r13d, 0x03
0bcac3fc add r13d, [r14+0x14]
0bcac400 cmp dword [r13+0xc], -0x05
0bcac405 jnz 0x0bcac415
0bcac407 cmp dword [r13+0x8], 0x405daf18
0bcac40f jz 0x0bca0020 ->4
0bcac415 mov r13d, [r13+0x10]
0bcac419 test r13d, r13d
0bcac41c jnz 0x0bcac400
0bcac41e mov r13d, 0x405d8420
0bcac424 mov r14d, [r14+0x10]
0bcac428 test r14d, r14d
0bcac42b jz 0x0bca0020 ->4
0bcac431 cmp dword [r14+0x1c], +0x01
0bcac436 jnz 0x0bca0020 ->4
0bcac43c mov r14d, [r14+0x14]
0bcac440 mov rdi, 0xfffffffb405da430
0bcac44a cmp rdi, [r14+0x20]
0bcac44e jnz 0x0bca0020 ->4
0bcac454 cmp dword [r14+0x1c], -0x0c
0bcac459 jnz 0x0bca0020 ->4
0bcac45f mov r14d, [r14+0x18]
0bcac463 cmp dword [r14+0x1c], +0x3f
0bcac468 jnz 0x0bca0020 ->4
0bcac46e mov r14d, [r14+0x14]
0bcac472 mov rdi, 0xfffffffb405daf18
0bcac47c cmp rdi, [r14+0x5a8]
0bcac483 jnz 0x0bca0020 ->4
0bcac489 cmp dword [r14+0x5a4], -0x09
0bcac491 jnz 0x0bca0020 ->4
0bcac497 cmp dword [r14+0x5a0], 0x405dae80
0bcac4a2 jnz 0x0bca0020 ->4
0bcac4a8 cmp dword [0x40b3fa3c], -0x09
0bcac4b0 jnz 0x0bca0020 ->4
0bcac4b6 cmp dword [0x40b3fa38], 0x40b3fa78
0bcac4c1 jnz 0x0bca0020 ->4
0bcac4c7 cmp dword [0x40b3faac], -0x0c
0bcac4cf jnz 0x0bca0020 ->4
0bcac4d5 mov r13d, [0x40b3faa8]
0bcac4dd lea r14d, [rbx-0x4c11db7]
0bcac4e4 mov edi, ebx
0bcac4e6 xor edi, r14d
0bcac4e9 rol r14d, 0x0e
0bcac4ed sub edi, r14d
0bcac4f0 rol r14d, 0x05
0bcac4f4 xor r14d, edi
0bcac4f7 rol edi, 0x0d
0bcac4fa sub r14d, edi
0bcac4fd and r14d, [r13+0x1c]
0bcac501 lea r14d, [r14+r14*2]
0bcac505 shl r14d, 0x03
0bcac509 add r14d, [r13+0x14]
0bcac50d cmp dword [r14+0xc], -0x0c
0bcac512 jnz 0x0bcac51a
0bcac514 cmp ebx, [r14+0x8]
0bcac518 jz 0x0bcac529
0bcac51a mov r14d, [r14+0x10]
0bcac51e test r14d, r14d
0bcac521 jnz 0x0bcac50d
0bcac523 mov r14d, 0x405d8420
0bcac529 cmp dword [r14+0x4], -0x05
0bcac52e jnz 0x0bca0020 ->4
0bcac534 mov r14d, [r14]
0bcac537 mov dword [rdx+0xd4], 0xfffffffb
0bcac541 mov [rdx+0xd0], r14d
0bcac548 mov dword [rdx+0xcc], 0xfffffff4
0bcac552 mov [rdx+0xc8], ebx
0bcac558 mov dword [rdx+0xc4], 0xfffffff4
0bcac562 mov [rdx+0xc0], ebp
0bcac568 mov dword [rdx+0xbc], 0x40bd65d0
0bcac572 mov dword [rdx+0xb8], 0x41fba2b0
0bcac57c mov dword [rdx+0xb4], 0xfffffff4
0bcac586 mov [rdx+0xb0], ebx
0bcac58c mov dword [rdx+0xac], 0xfffffff4
0bcac596 mov [rdx+0xa8], ebp
0bcac59c mov dword [rdx+0xa4], 0xfffffff7
0bcac5a6 mov dword [rdx+0xa0], 0x405f6578
0bcac5b0 mov dword [rdx+0x9c], 0xfffffff4
0bcac5ba mov [rdx+0x98], r15d
0bcac5c1 mov dword [rdx+0x94], 0xfffffff4
0bcac5cb mov [rdx+0x90], ebx
0bcac5d1 mov dword [rdx+0x8c], 0xfffffff4
0bcac5db mov [rdx+0x88], ebp
0bcac5e1 mov dword [rdx+0x84], 0x40b57c00
0bcac5eb mov dword [rdx+0x80], 0x4099b030
0bcac5f5 mov dword [rdx-0x8], 0x409a3d78
0bcac5fc add edx, 0xc0
0bcac602 mov [0x405d84b0], edx
0bcac609 jmp 0x0bcaca07
---- TRACE 36 stop -> 27
</pre>
<pre class="ljdump">
---- TRACE 37 start optimize.lua:293
0001 UGET 2 0 ; Range
0002 GGET 3 0 ; "math"
0003 TGETS 3 3 1 ; "max"
0004 MOV 5 0
0005 TGETS 4 0 2 ; "min"
0006 CALL 4 2 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0007 MOV 6 1
0008 TGETS 5 1 2 ; "min"
0009 CALL 5 0 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0010 CALLM 3 2 1
0000 . FUNCC ; math.max
0011 GGET 4 0 ; "math"
0012 TGETS 4 4 2 ; "min"
0013 MOV 6 0
0014 TGETS 5 0 1 ; "max"
0015 CALL 5 2 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0016 MOV 7 1
0017 TGETS 6 1 1 ; "max"
0018 CALL 6 0 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0019 CALLM 4 0 1
0000 . FUNCC ; math.min
0020 CALLMT 2 1
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 37 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 37 start 32/0 optimize.lua:395
0001 TGETB 1 0 2
0002 RET1 1 2
0026 MOV 0 4
0027 JMP 3 =&gt; 0013
0013 ISF 0
0014 JMP 3 => 0028
0028 UGET 3 0 ; Range
0029 UGET 4 4 ; Inf
0030 UNM 4 4
0031 UGET 5 4 ; Inf
0032 CALLT 3 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 37 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 37 start optimize.lua:398
0001 GGET 2 0 ; "type"
0002 MOV 3 1
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISNES 2 1 ; "number"
0005 JMP 2 => 0010
0010 UGET 2 1 ; cfkey
0011 MOV 3 1
0012 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0013 ISF 0
0014 JMP 3 => 0028
0015 JLOOP 3 27
---- TRACE 37 abort optimize.lua:402 -- inner loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 37 start 32/0 optimize.lua:395
---- TRACE 37 IR
---- TRACE 37 mcode 29
0bcac232 mov dword [0x405d84a0], 0x25
0bcac23d xor eax, eax
0bcac23f mov ebx, 0x40bd7654
0bcac244 mov r14d, 0x405d8f78
0bcac24a jmp 0x0041d9f8
---- TRACE 37 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 38 start optimize.lua:408
0001 GGET 3 0 ; "type"
0002 MOV 4 1
0003 CALL 3 2 2
0000 . FUNCC ; type
0004 ISNES 3 1 ; "number"
0005 JMP 3 => 0007
0007 UGET 3 0 ; car
0008 MOV 4 0
0009 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0010 UGET 4 1 ; cfkey
0011 MOV 5 1
0012 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0013 TSETV 2 3 4
0014 MOV 4 2
0015 TGETS 3 2 2 ; "fold"
0016 CALL 3 2 2
0000 . JFUNCF 4 35 ; optimize.lua:284
0001 . MOV 2 0
0002 . TGETS 1 0 0 ; "min"
0003 . CALL 1 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0004 . MOV 3 0
0005 . TGETS 2 0 1 ; "max"
0006 . CALL 2 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0007 . ISNEV 1 2
0008 . JMP 1 => 0012
0012 . RET0 0 1
0017 ISF 3
0018 JMP 4 => 0022
0022 RET1 1 2
---- TRACE 38 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 <span class="irt_tab">tab</span> FLOAD 0001 func.env
0003 <span class="irt_p32">p32</span> HREF 0002 <span class="irt_str">"type"</span>
0004 > <span class="irt_p32">p32</span> EQ 0003 <span class="irt_p32">[0x405d8420]</span>
0005 <span class="irt_tab">tab</span> FLOAD 0002 tab.meta
0006 > <span class="irt_tab">tab</span> NE 0005 <span class="irt_tab">[NULL]</span>
0007 <span class="irt_int">int</span> FLOAD 0005 tab.hmask
0008 > <span class="irt_int">int</span> EQ 0007 <span class="irt_int">+1 </span>
0009 <span class="irt_p32">p32</span> FLOAD 0005 tab.node
0010 > <span class="irt_p32">p32</span> HREFK 0009 <span class="irt_str">"__index"</span> @1
0011 > <span class="irt_tab">tab</span> HLOAD 0010
0012 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0013 > <span class="irt_int">int</span> EQ 0012 <span class="irt_int">+63 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0015 > <span class="irt_p32">p32</span> HREFK 0014 <span class="irt_str">"type"</span> @60
0016 > <span class="irt_fun">fun</span> HLOAD 0015
0017 > <span class="irt_tab">tab</span> SLOAD #2 T
0018 > <span class="irt_fun">fun</span> EQ 0016 <span class="irt_fun">type</span>
0019 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">optimize.lua:408</span>
0020 > <span class="irt_tab">tab</span> SLOAD #1 T
0021 <span class="irt_int">int</span> FLOAD 0020 tab.asize
0022 > <span class="irt_int">int</span> ABC 0021 <span class="irt_int">+1 </span>
0023 <span class="irt_p32">p32</span> FLOAD 0020 tab.array
0024 <span class="irt_p32">p32</span> AREF 0023 <span class="irt_int">+1 </span>
0025 > <span class="irt_tab">tab</span> ALOAD 0024
0026 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:408</span> #1
0027 > <span class="irt_fun">fun</span> ULOAD 0026
0028 > <span class="irt_fun">fun</span> EQ 0027 <span class="irt_fun">optimize.lua:54</span>
0029 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:54</span> #0
0030 > <span class="irt_tab">tab</span> ULOAD 0029
0031 <span class="irt_p32">p32</span> HREF 0030 0017
0032 > <span class="irt_str">str</span> HLOAD 0031
0033 > <span class="irt_tab">tab</span> SLOAD #3 T
0034 <span class="irt_p32">p32</span> HREF 0025 0032
0035 > <span class="irt_p32">p32</span> NE 0034 <span class="irt_p32">[0x405d8420]</span>
0036 <span class="irt_tab">tab</span> FLOAD 0025 tab.meta
0037 > <span class="irt_tab">tab</span> EQ 0036 <span class="irt_tab">[NULL]</span>
0038 <span class="irt_tab">tab</span> HSTORE 0034 0033
0039 <span class="irt_nil">nil</span> TBAR 0025
0040 <span class="irt_p32">p32</span> FREF 0025 tab.nomm
0041 <span class="irt_u8 ">u8 </span> FSTORE 0040 <span class="irt_int">+0 </span>
0042 <span class="irt_int">int</span> FLOAD 0033 tab.hmask
0043 > <span class="irt_int">int</span> EQ 0042 <span class="irt_int">+31 </span>
0044 <span class="irt_p32">p32</span> FLOAD 0033 tab.node
0045 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"fold"</span> @23
0046 > <span class="irt_fun">fun</span> HLOAD 0045
0047 <span class="irt_p32">p32</span> FLOAD 0046 func.pc
0048 > <span class="irt_p32">p32</span> EQ 0047 <span class="irt_p32">[0x40b4ad00]</span>
0049 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"min"</span> @22
0050 > <span class="irt_fun">fun</span> HLOAD 0049
0051 <span class="irt_p32">p32</span> FLOAD 0050 func.pc
0052 > <span class="irt_p32">p32</span> EQ 0051 <span class="irt_p32">[0x40bdcfd8]</span>
0053 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"min_"</span> @30
0054 > <span class="irt_num">num</span> HLOAD 0053
0055 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"max"</span> @16
0056 > <span class="irt_fun">fun</span> HLOAD 0055
0057 <span class="irt_p32">p32</span> FLOAD 0056 func.pc
0058 > <span class="irt_p32">p32</span> EQ 0057 <span class="irt_p32">[0x40bdc8b0]</span>
0059 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"max_"</span> @18
0060 > <span class="irt_num">num</span> HLOAD 0059
0061 > <span class="irt_num">num</span> NE 0060 0054
---- TRACE 38 mcode 846
0bcabedd mov dword [0x405d84a0], 0x26
0bcabee8 mov ebp, [rdx-0x8]
0bcabeeb mov ebx, [rbp+0x8]
0bcabeee mov r15d, [rbx+0x1c]
0bcabef2 and r15d, 0x798a813c
0bcabef9 lea r15d, [r15+r15*2]
0bcabefd shl r15d, 0x03
0bcabf01 add r15d, [rbx+0x14]
0bcabf05 cmp dword [r15+0xc], -0x05
0bcabf0a jnz 0x0bcabf1a
0bcabf0c cmp dword [r15+0x8], 0x405daf18
0bcabf14 jz 0x0bca0010 ->0
0bcabf1a mov r15d, [r15+0x10]
0bcabf1e test r15d, r15d
0bcabf21 jnz 0x0bcabf05
0bcabf23 mov r15d, 0x405d8420
0bcabf29 mov ebx, [rbx+0x10]
0bcabf2c test ebx, ebx
0bcabf2e jz 0x0bca0010 ->0
0bcabf34 cmp dword [rbx+0x1c], +0x01
0bcabf38 jnz 0x0bca0010 ->0
0bcabf3e mov ebx, [rbx+0x14]
0bcabf41 mov rdi, 0xfffffffb405da430
0bcabf4b cmp rdi, [rbx+0x20]
0bcabf4f jnz 0x0bca0010 ->0
0bcabf55 cmp dword [rbx+0x1c], -0x0c
0bcabf59 jnz 0x0bca0010 ->0
0bcabf5f mov ebx, [rbx+0x18]
0bcabf62 cmp dword [rbx+0x1c], +0x3f
0bcabf66 jnz 0x0bca0010 ->0
0bcabf6c mov ebx, [rbx+0x14]
0bcabf6f mov rdi, 0xfffffffb405daf18
0bcabf79 cmp rdi, [rbx+0x5a8]
0bcabf80 jnz 0x0bca0010 ->0
0bcabf86 cmp dword [rbx+0x5a4], -0x09
0bcabf8d jnz 0x0bca0010 ->0
0bcabf93 cmp dword [rdx+0xc], -0x0c
0bcabf97 jnz 0x0bca0010 ->0
0bcabf9d mov r15d, [rdx+0x8]
0bcabfa1 cmp dword [rbx+0x5a0], 0x405dae80
0bcabfab jnz 0x0bca0010 ->0
0bcabfb1 cmp ebp, 0x405f6578
0bcabfb7 jnz 0x0bca0010 ->0
0bcabfbd cmp dword [rdx+0x4], -0x0c
0bcabfc1 jnz 0x0bca0010 ->0
0bcabfc7 mov ebp, [rdx]
0bcabfc9 cmp dword [rbp+0x18], +0x01
0bcabfcd jbe 0x0bca0010 ->0
0bcabfd3 mov ebp, [rbp+0x8]
0bcabfd6 cmp dword [rbp+0xc], -0x0c
0bcabfda jnz 0x0bca0010 ->0
0bcabfe0 mov r14d, [rbp+0x8]
0bcabfe4 cmp dword [0x40b3fa3c], -0x09
0bcabfec jnz 0x0bca0010 ->0
0bcabff2 cmp dword [0x40b3fa38], 0x40b3fa78
0bcabffd jnz 0x0bca0010 ->0
0bcac003 cmp dword [0x40b3faac], -0x0c
0bcac00b jnz 0x0bca0010 ->0
0bcac011 mov ebx, [0x40b3faa8]
0bcac018 lea ebp, [r15-0x4c11db7]
0bcac01f mov edi, r15d
0bcac022 xor edi, ebp
0bcac024 rol ebp, 0x0e
0bcac027 sub edi, ebp
0bcac029 rol ebp, 0x05
0bcac02c xor ebp, edi
0bcac02e rol edi, 0x0d
0bcac031 sub ebp, edi
0bcac033 and ebp, [rbx+0x1c]
0bcac036 lea ebp, [rbp+rbp*2+0x0]
0bcac03a shl ebp, 0x03
0bcac03d add ebp, [rbx+0x14]
0bcac040 cmp dword [rbp+0xc], -0x0c
0bcac044 jnz 0x0bcac04c
0bcac046 cmp r15d, [rbp+0x8]
0bcac04a jz 0x0bcac058
0bcac04c mov ebp, [rbp+0x10]
0bcac04f test ebp, ebp
0bcac051 jnz 0x0bcac040
0bcac053 mov ebp, 0x405d8420
0bcac058 cmp dword [rbp+0x4], -0x05
0bcac05c jnz 0x0bca0010 ->0
0bcac062 mov r15d, [rbp+0x0]
0bcac066 cmp dword [rdx+0x14], -0x0c
0bcac06a jnz 0x0bca0014 ->1
0bcac070 mov ebx, [rdx+0x10]
0bcac073 mov ebp, [r14+0x1c]
0bcac077 and ebp, [r15+0x8]
0bcac07b lea ebp, [rbp+rbp*2+0x0]
0bcac07f shl ebp, 0x03
0bcac082 add ebp, [r14+0x14]
0bcac086 cmp dword [rbp+0xc], -0x05
0bcac08a jnz 0x0bcac092
0bcac08c cmp r15d, [rbp+0x8]
0bcac090 jz 0x0bcac09f
0bcac092 mov ebp, [rbp+0x10]
0bcac095 test ebp, ebp
0bcac097 jnz 0x0bcac086
0bcac099 jz 0x0bca0014 ->1
0bcac09f cmp dword [r14+0x10], +0x00
0bcac0a4 jnz 0x0bca0014 ->1
0bcac0aa mov dword [rbp+0x4], 0xfffffff4
0bcac0b1 mov [rbp+0x0], ebx
0bcac0b4 test byte [r14+0x4], 0x4
0bcac0b9 jz 0x0bcac0d3
0bcac0bb and byte [r14+0x4], 0xfb
0bcac0c0 mov edi, [0x405d83f4]
0bcac0c7 mov [0x405d83f4], r14d
0bcac0cf mov [r14+0xc], edi
0bcac0d3 mov byte [r14+0x6], 0x0
0bcac0d8 cmp dword [rbx+0x1c], +0x1f
0bcac0dc jnz 0x0bca0018 ->2
0bcac0e2 mov r15d, [rbx+0x14]
0bcac0e6 mov rdi, 0xfffffffb40b4d200
0bcac0f0 cmp rdi, [r15+0x230]
0bcac0f7 jnz 0x0bca0018 ->2
0bcac0fd cmp dword [r15+0x22c], -0x09
0bcac105 jnz 0x0bca0018 ->2
0bcac10b mov ebp, [r15+0x228]
0bcac112 cmp dword [rbp+0x10], 0x40b4ad00
0bcac119 jnz 0x0bca0018 ->2
0bcac11f mov rdi, 0xfffffffb405de540
0bcac129 cmp rdi, [r15+0x218]
0bcac130 jnz 0x0bca0018 ->2
0bcac136 cmp dword [r15+0x214], -0x09
0bcac13e jnz 0x0bca0018 ->2
0bcac144 mov r13d, [r15+0x210]
0bcac14b cmp dword [r13+0x10], 0x40bdcfd8
0bcac153 jnz 0x0bca0018 ->2
0bcac159 mov rdi, 0xfffffffb40bdc7b8
0bcac163 cmp rdi, [r15+0x2d8]
0bcac16a jnz 0x0bca0018 ->2
0bcac170 cmp dword [r15+0x2d4], 0xfffeffff
0bcac17b jnb 0x0bca0018 ->2
0bcac181 mov rdi, 0xfffffffb405de588
0bcac18b cmp rdi, [r15+0x188]
0bcac192 jnz 0x0bca0018 ->2
0bcac198 cmp dword [r15+0x184], -0x09
0bcac1a0 jnz 0x0bca0018 ->2
0bcac1a6 mov r13d, [r15+0x180]
0bcac1ad cmp dword [r13+0x10], 0x40bdc8b0
0bcac1b5 jnz 0x0bca0018 ->2
0bcac1bb mov rdi, 0xfffffffb405e7640
0bcac1c5 cmp rdi, [r15+0x1b8]
0bcac1cc jnz 0x0bca0018 ->2
0bcac1d2 cmp dword [r15+0x1b4], 0xfffeffff
0bcac1dd jnb 0x0bca0018 ->2
0bcac1e3 movsd xmm7, [r15+0x1b0]
0bcac1ec ucomisd xmm7, [r15+0x2d0]
0bcac1f5 jpe 0x0bcac1fd
0bcac1f7 jz 0x0bca001c ->3
0bcac1fd mov eax, [0x405d84ac]
0bcac204 mov eax, [rax+0x20]
0bcac207 sub eax, edx
0bcac209 cmp eax, +0x30
0bcac20c jb 0x0bca0020 ->4
0bcac212 mov dword [rdx-0x8], 0x405f6578
0bcac219 xor eax, eax
0bcac21b mov ebx, 0x40bdfca8
0bcac220 mov r14d, 0x405d8f78
0bcac226 jmp 0x0041d9f8
---- TRACE 38 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 39 start 23/0 optimize.lua:128
---- TRACE 39 IR
---- TRACE 39 mcode 29
0bcabeb9 mov dword [0x405d84a0], 0x27
0bcabec4 xor eax, eax
0bcabec6 mov ebx, 0x40bdef84
0bcabecb mov r14d, 0x405d8f78
0bcabed1 jmp 0x0041d9f8
---- TRACE 39 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 40 start optimize.lua:182
0305 UCLO 0 =&gt; 0306
---- TRACE 40 abort optimize.lua:183 -- leaving loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 40 start optimize.lua:187
0001 TGETB 3 0 1
0002 ISNES 3 0 ; "not"
0003 JMP 4 => 0010
0010 ISNES 3 1 ; "true"
0011 JMP 4 => 0014
0014 ISNES 3 2 ; "false"
0015 JMP 4 => 0018
0018 ISNES 3 3 ; "fail"
0019 JMP 4 => 0022
0022 TGETB 4 1 1
0023 ISNES 4 1 ; "true"
0024 JMP 4 => 0030
0025 TGETB 4 2 1
0026 ISNES 4 2 ; "false"
0027 JMP 4 => 0030
0030 ISNES 3 4 ; "if"
0031 JMP 4 => 0142
0142 TGETB 4 2 1
0143 ISNES 4 4 ; "if"
0144 JMP 4 => 0167
0145 UGET 4 1 ; cfkey
0146 MOV 5 1
0147 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0005 . UGET 2 1 ; f
0006 . MOV 3 0
0007 . CALL 2 2 2
0000 . . FUNCF 10 ; optimize.lua:66
0001 . . GGET 1 0 ; "type"
0002 . . MOV 2 0
0003 . . CALL 1 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 1 1 ; "table"
0005 . . JMP 1 => 0027
0006 . . KSTR 1 2 ; "table("
0007 . . UGET 2 0 ; cfkey
0008 . . TGETB 3 0 1
0009 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0010 . . CAT 1 1 2
---- TRACE 40 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 40 start optimize.lua:66
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISNES 1 1 ; "table"
0005 JMP 1 => 0027
0006 KSTR 1 2 ; "table("
0007 UGET 2 0 ; cfkey
0008 TGETB 3 0 1
0009 CALL 2 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0010 CAT 1 1 2
---- TRACE 40 abort optimize.lua:68 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 40 start optimize.lua:606
0001 TGETB 3 0 1
0002 ISNES 3 0 ; "true"
0003 JMP 3 => 0005
0004 RET1 1 2
---- TRACE 40 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+1 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_str">str</span> ALOAD 0005
0007 > <span class="irt_str">str</span> EQ 0006 <span class="irt_str">"true"</span>
0008 > <span class="irt_nil">nil</span> SLOAD #2 T
---- TRACE 40 mcode 94
0bcabe54 mov dword [0x405d84a0], 0x28
0bcabe5f cmp dword [rdx+0x4], -0x0c
0bcabe63 jnz 0x0bca0010 ->0
0bcabe69 mov ebp, [rdx]
0bcabe6b cmp dword [rbp+0x18], +0x01
0bcabe6f jbe 0x0bca0010 ->0
0bcabe75 mov ebp, [rbp+0x8]
0bcabe78 cmp dword [rbp+0xc], -0x05
0bcabe7c jnz 0x0bca0010 ->0
0bcabe82 cmp dword [rbp+0x8], 0x405da980
0bcabe89 jnz 0x0bca0014 ->1
0bcabe8f cmp dword [rdx+0xc], -0x01
0bcabe93 jnz 0x0bca0018 ->2
0bcabe99 mov dword [rdx+0xc], 0xffffffff
0bcabea0 xor eax, eax
0bcabea2 mov ebx, 0x40b4ba58
0bcabea7 mov r14d, 0x405d8f78
0bcabead jmp 0x0041d9f8
---- TRACE 40 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 41 start 40/1 optimize.lua:608
0005 TGETB 3 0 1
0006 ISNES 3 1 ; "false"
0007 JMP 3 => 0009
0009 TGETB 3 0 1
0010 ISNES 3 2 ; "fail"
0011 JMP 3 => 0014
0014 KPRI 3 0
0015 RET1 3 2
0016 ISNES 0 0 ; "REJECT"
0017 JMP 0 => 0021
0021 UGET 0 1 ; t
0022 TGETB 0 0 1
0023 ISNES 0 1 ; "true"
0024 JMP 0 => 0027
0025 UGET 0 5 ; f_min_f
0026 USETV 8 0 ; t_min_f
0027 UGET 0 6 ; f
0028 TGETB 0 0 1
0029 ISNES 0 1 ; "true"
0030 JMP 0 => 0033
0033 UGET 0 1 ; t
0034 TGETB 0 0 1
0035 ISNES 0 2 ; "false"
0036 JMP 0 => 0039
0039 UGET 0 6 ; f
0040 TGETB 0 0 1
0041 ISNES 0 2 ; "false"
0042 JMP 0 => 0045
0045 GGET 0 3 ; "math"
0046 TGETS 0 0 4 ; "min"
0047 UGET 1 7 ; t_min_t
0048 UGET 2 4 ; f_min_t
0049 CALL 0 2 3
0000 . FUNCC ; math.min
0050 GGET 1 3 ; "math"
0051 TGETS 1 1 4 ; "min"
0052 UGET 2 4 ; f_min_t
0053 UGET 3 4 ; f_min_t
0054 CALL 1 0 3
0000 . FUNCC ; math.min
0055 RETM 0 1
0062 MOV 21 3
0063 MOV 22 19
0064 MOV 23 20
0065 TNEW 24 5
0066 TSETB 5 24 1
0067 TSETB 9 24 2
0068 TSETB 10 24 3
0069 TSETB 11 24 4
0070 UCLO 0 =&gt; 0071
---- TRACE 41 abort optimize.lua:643 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 41 start 40/1 optimize.lua:608
0005 TGETB 3 0 1
0006 ISNES 3 1 ; "false"
0007 JMP 3 => 0009
0009 TGETB 3 0 1
0010 ISNES 3 2 ; "fail"
0011 JMP 3 => 0014
0014 KPRI 3 0
0015 RET1 3 2
0038 CALLM 9 2 2
0000 . FUNCF 25 ; optimize.lua:617
0001 . FNEW 3 0 ; optimize.lua:618
---- TRACE 41 abort optimize.lua:618 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 41 start 40/1 optimize.lua:608
0005 TGETB 3 0 1
0006 ISNES 3 1 ; "false"
0007 JMP 3 => 0009
0009 TGETB 3 0 1
0010 ISNES 3 2 ; "fail"
0011 JMP 3 => 0014
0014 KPRI 3 0
0015 RET1 3 2
0038 CALLM 9 2 2
0000 . FUNCF 25 ; optimize.lua:617
0001 . FNEW 3 0 ; optimize.lua:618
---- TRACE 41 abort optimize.lua:618 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 41 start 40/1 optimize.lua:608
0005 TGETB 3 0 1
0006 ISNES 3 1 ; "false"
0007 JMP 3 => 0009
0009 TGETB 3 0 1
0010 ISNES 3 2 ; "fail"
0011 JMP 3 => 0014
0014 KPRI 3 0
0015 RET1 3 2
0033 UGET 12 1 ; eta
0034 MOV 13 8
0035 MOV 14 1
0036 MOV 15 2
0037 CALL 12 0 4
0000 . JFUNCF 4 40 ; optimize.lua:606
0001 . TGETB 3 0 1
0002 . ISNES 3 0 ; "true"
0003 . JMP 3 => 0005
0005 . TGETB 3 0 1
0006 . ISNES 3 1 ; "false"
0007 . JMP 3 => 0009
0008 . RET1 2 2
0038 CALLM 9 2 2
0000 . FUNCF 25 ; optimize.lua:617
0001 . FNEW 3 0 ; optimize.lua:618
---- TRACE 41 abort optimize.lua:618 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 41 start 40/1 optimize.lua:608
---- TRACE 41 IR
---- TRACE 41 mcode 29
0bcabe30 mov dword [0x405d84a0], 0x29
0bcabe3b xor eax, eax
0bcabe3d mov ebx, 0x40b4ba5c
0bcabe42 mov r14d, 0x405d8f78
0bcabe48 jmp 0x0041d9f8
---- TRACE 41 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 42 start optimize.lua:652
0001 TGETB 2 0 1
0002 TGETB 3 0 2
0003 TGETB 4 0 3
0004 ISGE 1 2
0005 JMP 5 => 0026
0026 TGETB 5 4 1
0027 ISNES 5 5 ; "if"
0028 JMP 6 => 0065
0065 RET1 4 2
---- TRACE 42 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+3 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_num">num</span> ALOAD 0005
0007 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+2 </span>
0008 > <span class="irt_num">num</span> ALOAD 0007
0009 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+3 </span>
0010 > <span class="irt_tab">tab</span> ALOAD 0009
0011 > <span class="irt_num">num</span> SLOAD #2 T
0012 > <span class="irt_num">num</span> UGE 0011 0006
0013 <span class="irt_int">int</span> FLOAD 0010 tab.asize
0014 > <span class="irt_int">int</span> ABC 0013 <span class="irt_int">+1 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0010 tab.array
0016 <span class="irt_p32">p32</span> AREF 0015 <span class="irt_int">+1 </span>
0017 > <span class="irt_str">str</span> ALOAD 0016
0018 > <span class="irt_str">str</span> NE 0017 <span class="irt_str">"if"</span>
---- TRACE 42 mcode 175
0bcabd7a mov dword [0x405d84a0], 0x2a
0bcabd85 cmp dword [rdx+0x4], -0x0c
0bcabd89 jnz 0x0bca0010 ->0
0bcabd8f mov ebp, [rdx]
0bcabd91 cmp dword [rbp+0x18], +0x03
0bcabd95 jbe 0x0bca0010 ->0
0bcabd9b mov ebp, [rbp+0x8]
0bcabd9e cmp dword [rbp+0xc], 0xfffeffff
0bcabda5 jnb 0x0bca0010 ->0
0bcabdab movsd xmm7, [rbp+0x8]
0bcabdb0 cmp dword [rbp+0x14], 0xfffeffff
0bcabdb7 jnb 0x0bca0010 ->0
0bcabdbd movsd xmm6, [rbp+0x10]
0bcabdc2 cmp dword [rbp+0x1c], -0x0c
0bcabdc6 jnz 0x0bca0010 ->0
0bcabdcc mov ebp, [rbp+0x18]
0bcabdcf cmp dword [rdx+0xc], 0xfffeffff
0bcabdd6 jnb 0x0bca0010 ->0
0bcabddc ucomisd xmm7, [rdx+0x8]
0bcabde1 ja 0x0bca0014 ->1
0bcabde7 cmp dword [rbp+0x18], +0x01
0bcabdeb jbe 0x0bca0018 ->2
0bcabdf1 mov ebx, [rbp+0x8]
0bcabdf4 cmp dword [rbx+0xc], -0x05
0bcabdf8 jnz 0x0bca0018 ->2
0bcabdfe mov ebx, [rbx+0x8]
0bcabe01 cmp ebx, 0x405da860
0bcabe07 jz 0x0bca001c ->3
0bcabe0d mov dword [rdx+0x24], 0xfffffff4
0bcabe14 mov [rdx+0x20], ebp
0bcabe17 xor eax, eax
0bcabe19 mov ebx, 0x40b51d24
0bcabe1e mov r14d, 0x405d8f78
0bcabe24 jmp 0x0041d9f8
---- TRACE 42 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 43 start optimize.lua:124
0001 GGET 1 0 ; "type"
0002 MOV 2 0
0003 CALL 1 2 2
0000 . FUNCC ; type
0004 ISEQS 1 1 ; "table"
0005 JMP 1 => 0007
0007 TGETB 1 0 1
0008 FNEW 2 2 ; optimize.lua:127
---- TRACE 43 abort optimize.lua:133 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 43 start 38/0 optimize.lua:409
0001 GGET 3 0 ; "type"
0002 MOV 4 1
0003 CALL 3 2 2
0000 . FUNCC ; type
0004 ISNES 3 1 ; "number"
0005 JMP 3 => 0007
0007 UGET 3 0 ; car
0008 MOV 4 0
0009 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0010 UGET 4 1 ; cfkey
0011 MOV 5 1
0012 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0013 TSETV 2 3 4
0014 MOV 4 2
0015 TGETS 3 2 2 ; "fold"
0016 CALL 3 2 2
0000 . JFUNCF 4 35 ; optimize.lua:284
0001 . MOV 2 0
0002 . TGETS 1 0 0 ; "min"
0003 . CALL 1 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0004 . MOV 3 0
0005 . TGETS 2 0 1 ; "max"
0006 . CALL 2 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0007 . ISNEV 1 2
0008 . JMP 1 => 0012
0012 . RET0 0 1
0017 ISF 3
0018 JMP 4 => 0022
0022 RET1 1 2
0114 UGET 16 8 ; restrict
0115 MOV 17 1
0116 MOV 18 8
0117 MOV 19 14
0118 CALL 16 1 4
0000 . FUNCF 9 ; optimize.lua:414
0001 . UGET 3 0 ; define
0002 . MOV 4 0
0003 . MOV 5 1
0004 . UGET 6 1 ; lookup
0005 . MOV 7 0
0006 . MOV 8 1
0007 . CALL 6 2 3
0000 . . FUNCF 6 ; optimize.lua:398
0001 . . GGET 2 0 ; "type"
0002 . . MOV 3 1
0003 . . CALL 2 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 2 1 ; "number"
0005 . . JMP 2 => 0010
0006 . . UGET 2 0 ; Range
0007 . . MOV 3 1
0008 . . MOV 4 1
0009 . . CALLT 2 3
0000 . . FUNCF 4 ; optimize.lua:276
0001 . . ISGE 1 0
0002 . . JMP 2 => 0006
0006 . . TDUP 2 0
0007 . . TSETS 0 2 1 ; "min_"
0008 . . TSETS 1 2 2 ; "max_"
0009 . . FNEW 3 4 ; optimize.lua:281
---- TRACE 43 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 43 start 38/0 optimize.lua:409
0001 GGET 3 0 ; "type"
0002 MOV 4 1
0003 CALL 3 2 2
0000 . FUNCC ; type
0004 ISNES 3 1 ; "number"
0005 JMP 3 => 0007
0006 RET1 1 2
0119 UGET 16 8 ; restrict
0120 MOV 17 2
0121 MOV 18 8
0122 MOV 19 15
0123 CALL 16 1 4
0000 . FUNCF 9 ; optimize.lua:414
0001 . UGET 3 0 ; define
0002 . MOV 4 0
0003 . MOV 5 1
0004 . UGET 6 1 ; lookup
0005 . MOV 7 0
0006 . MOV 8 1
0007 . CALL 6 2 3
0000 . . FUNCF 6 ; optimize.lua:398
0001 . . GGET 2 0 ; "type"
0002 . . MOV 3 1
0003 . . CALL 2 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 2 1 ; "number"
0005 . . JMP 2 => 0010
0006 . . UGET 2 0 ; Range
0007 . . MOV 3 1
0008 . . MOV 4 1
0009 . . CALLT 2 3
0000 . . FUNCF 4 ; optimize.lua:276
0001 . . ISGE 1 0
0002 . . JMP 2 => 0006
0006 . . TDUP 2 0
0007 . . TSETS 0 2 1 ; "min_"
0008 . . TSETS 1 2 2 ; "max_"
0009 . . FNEW 3 4 ; optimize.lua:281
---- TRACE 43 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 43 start 38/0 optimize.lua:409
0001 GGET 3 0 ; "type"
0002 MOV 4 1
0003 CALL 3 2 2
0000 . FUNCC ; type
0004 ISNES 3 1 ; "number"
0005 JMP 3 => 0007
0006 RET1 1 2
0124 TNEW 16 4
0125 TSETB 5 16 1
0126 TSETB 7 16 2
0127 TSETB 8 16 3
0128 UCLO 0 =&gt; 0129
---- TRACE 43 abort optimize.lua:521 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 43 start 34/0 optimize.lua:397
0001 UGET 1 0 ; cons
0002 TNEW 2 0
0003 MOV 3 0
0004 CALLT 1 3
0000 FUNCF 3 ; optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
0163 UGET 10 1 ; push
0164 MOV 11 1
0165 CALL 10 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0166 UGET 11 9 ; eta
0167 MOV 12 7
0168 MOV 13 3
0169 MOV 14 4
0170 CALL 11 2 4
0000 . FUNCF 4 ; optimize.lua:427
0001 . TGETB 3 0 1
0002 . ISNES 3 0 ; "true"
0003 . JMP 3 => 0005
0005 . TGETB 3 0 1
0006 . ISNES 3 1 ; "false"
0007 . JMP 3 => 0009
0009 . TGETB 3 0 1
0010 . ISNES 3 2 ; "fail"
0011 . JMP 3 => 0014
0014 . KPRI 3 0
0015 . RET1 3 2
0171 UGET 12 9 ; eta
0172 MOV 13 8
0173 MOV 14 3
0174 MOV 15 4
0175 CALL 12 2 4
0000 . FUNCF 4 ; optimize.lua:427
0001 . TGETB 3 0 1
0002 . ISNES 3 0 ; "true"
0003 . JMP 3 => 0005
0005 . TGETB 3 0 1
0006 . ISNES 3 1 ; "false"
0007 . JMP 3 => 0009
0009 . TGETB 3 0 1
0010 . ISNES 3 2 ; "fail"
0011 . JMP 3 => 0014
0014 . KPRI 3 0
0015 . RET1 3 2
0176 UGET 13 2 ; visit
0177 MOV 14 6
0178 MOV 15 9
0179 MOV 16 10
0180 MOV 17 11
0181 MOV 18 12
0182 CALL 13 2 6
0000 . FUNCF 25 ; optimize.lua:488
0001 . GGET 5 0 ; "type"
0002 . MOV 6 0
0003 . CALL 5 2 2
0000 . . FUNCC ; type
0004 . ISEQS 5 1 ; "table"
0005 . JMP 5 => 0007
0007 . TGETB 5 0 1
0008 . UGET 6 0 ; relops
0009 . TGETV 6 6 5
0010 . ISF 6
0011 . JMP 7 => 0131
0012 . UGET 6 1 ; push
0013 . MOV 7 1
0014 . CALL 6 2 2
0000 . . JFUNCF 4 34 ; optimize.lua:397
0001 . . UGET 1 0 ; cons
0002 . . TNEW 2 0
0003 . . MOV 3 0
0004 . . CALLT 1 3
0000 . . FUNCF 3 ; optimize.lua:393
0001 . . TNEW 2 3
0002 . . TSETB 0 2 1
0003 . . TSETB 1 2 2
0004 . . RET1 2 2
0015 . UGET 7 2 ; visit
0016 . TGETB 8 0 2
0017 . MOV 9 6
0018 . CALL 7 2 3
0000 . . FUNCF 25 ; optimize.lua:488
0001 . . GGET 5 0 ; "type"
0002 . . MOV 6 0
0003 . . CALL 5 2 2
0000 . . . FUNCC ; type
0004 . . ISEQS 5 1 ; "table"
0005 . . JMP 5 => 0007
0007 . . TGETB 5 0 1
0008 . . UGET 6 0 ; relops
0009 . . TGETV 6 6 5
0010 . . ISF 6
0011 . . JMP 7 => 0131
0131 . . ISEQS 5 11 ; "false"
0132 . . JMP 6 => 0137
0133 . . ISEQS 5 12 ; "true"
0134 . . JMP 6 => 0137
0135 . . ISNES 5 13 ; "fail"
0136 . . JMP 6 => 0140
0140 . . ISNES 5 14 ; "not"
0141 . . JMP 6 => 0155
0155 . . ISNES 5 15 ; "if"
0156 . . JMP 6 => 0298
0298 . . MOV 6 1
0299 . . ISNES 5 17 ; "[]"
0300 . . JMP 7 => 0338
0301 . . UGET 7 2 ; visit
0302 . . TGETB 8 0 2
0303 . . MOV 9 6
0304 . . CALL 7 2 3
0000 . . . FUNCF 25 ; optimize.lua:488
0001 . . . GGET 5 0 ; "type"
0002 . . . MOV 6 0
0003 . . . CALL 5 2 2
0000 . . . . FUNCC ; type
0004 . . . ISEQS 5 1 ; "table"
0005 . . . JMP 5 => 0007
0006 . . . UCLO 0 =&gt; 0470
---- TRACE 43 abort optimize.lua:489 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 43 start 38/0 optimize.lua:409
0001 GGET 3 0 ; "type"
0002 MOV 4 1
0003 CALL 3 2 2
0000 . FUNCC ; type
0004 ISNES 3 1 ; "number"
0005 JMP 3 => 0007
0007 UGET 3 0 ; car
0008 MOV 4 0
0009 CALL 3 2 2
0000 . JFUNCF 2 26 ; optimize.lua:394
0001 . TGETB 1 0 1
0002 . RET1 1 2
0010 UGET 4 1 ; cfkey
0011 MOV 5 1
0012 CALL 4 2 2
0000 . JFUNCF 4 20 ; optimize.lua:54
0001 . UGET 1 0 ; cache
0002 . TGETV 1 1 0
0003 . ISNEP 1 0
0004 . JMP 2 => 0011
0011 . RET1 1 2
0013 TSETV 2 3 4
0014 MOV 4 2
0015 TGETS 3 2 2 ; "fold"
0016 CALL 3 2 2
0000 . JFUNCF 4 35 ; optimize.lua:284
0001 . MOV 2 0
0002 . TGETS 1 0 0 ; "min"
0003 . CALL 1 2 2
0000 . . JFUNCF 2 28 ; optimize.lua:281
0001 . . TGETS 1 0 0 ; "min_"
0002 . . RET1 1 2
0004 . MOV 3 0
0005 . TGETS 2 0 1 ; "max"
0006 . CALL 2 2 2
0000 . . FUNCF 2 ; optimize.lua:282
0001 . . TGETS 1 0 0 ; "max_"
0002 . . RET1 1 2
0007 . ISNEV 1 2
0008 . JMP 1 => 0012
0012 . RET0 0 1
0017 ISF 3
0018 JMP 4 => 0022
0022 RET1 1 2
0019 UGET 8 2 ; visit
0020 TGETB 9 0 3
0021 MOV 10 6
0022 CALL 8 2 3
0000 . FUNCF 25 ; optimize.lua:488
0001 . GGET 5 0 ; "type"
0002 . MOV 6 0
0003 . CALL 5 2 2
0000 . . FUNCC ; type
0004 . ISEQS 5 1 ; "table"
0005 . JMP 5 => 0007
0006 . UCLO 0 =&gt; 0470
---- TRACE 43 abort optimize.lua:489 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 43 start 38/0 optimize.lua:409
---- TRACE 43 IR
---- TRACE 43 mcode 29
0bcabd56 mov dword [0x405d84a0], 0x2b
0bcabd61 xor eax, eax
0bcabd63 mov ebx, 0x40bdfc54
0bcabd68 mov r14d, 0x405d8f78
0bcabd6e jmp 0x0041d9f8
---- TRACE 43 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 44 start 34/0 optimize.lua:397
0001 UGET 1 0 ; cons
0002 TNEW 2 0
0003 MOV 3 0
0004 CALLT 1 3
0000 FUNCF 3 ; optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
0187 UGET 14 1 ; push
0188 MOV 15 9
0189 CALL 14 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0190 UGET 15 1 ; push
0191 MOV 16 10
0192 CALL 15 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0193 UGET 16 1 ; push
0194 MOV 17 10
0195 CALL 16 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0196 UGET 17 2 ; visit
0197 MOV 18 7
0198 MOV 19 13
0199 MOV 20 14
0200 MOV 21 3
0201 MOV 22 4
0202 CALL 17 2 6
0000 . FUNCF 25 ; optimize.lua:488
0001 . GGET 5 0 ; "type"
0002 . MOV 6 0
0003 . CALL 5 2 2
0000 . . FUNCC ; type
0004 . ISEQS 5 1 ; "table"
0005 . JMP 5 => 0007
0007 . TGETB 5 0 1
0008 . UGET 6 0 ; relops
0009 . TGETV 6 6 5
0010 . ISF 6
0011 . JMP 7 => 0131
0131 . ISEQS 5 11 ; "false"
0132 . JMP 6 => 0137
0133 . ISEQS 5 12 ; "true"
0134 . JMP 6 => 0137
0135 . ISNES 5 13 ; "fail"
0136 . JMP 6 => 0140
0140 . ISNES 5 14 ; "not"
0141 . JMP 6 => 0155
0155 . ISNES 5 15 ; "if"
0156 . JMP 6 => 0298
0157 . TGETB 6 0 2
0158 . TGETB 7 0 3
0159 . TGETB 8 0 4
0160 . UGET 9 1 ; push
0161 . MOV 10 1
0162 . CALL 9 2 2
0000 . . JFUNCF 4 34 ; optimize.lua:397
0001 . . UGET 1 0 ; cons
0002 . . TNEW 2 0
0003 . . MOV 3 0
0004 . . CALLT 1 3
0000 . . FUNCF 3 ; optimize.lua:393
0001 . . TNEW 2 3
0002 . . TSETB 0 2 1
0003 . . TSETB 1 2 2
0004 . . RET1 2 2
0163 . UGET 10 1 ; push
0164 . MOV 11 1
0165 . CALL 10 2 2
0000 . . JFUNCF 4 34 ; optimize.lua:397
0001 . . UGET 1 0 ; cons
0002 . . TNEW 2 0
0003 . . MOV 3 0
0004 . . CALLT 1 3
0000 . . FUNCF 3 ; optimize.lua:393
0001 . . TNEW 2 3
0002 . . TSETB 0 2 1
0003 . . TSETB 1 2 2
0004 . . RET1 2 2
0166 . UGET 11 9 ; eta
0167 . MOV 12 7
0168 . MOV 13 3
0169 . MOV 14 4
0170 . CALL 11 2 4
0000 . . FUNCF 4 ; optimize.lua:427
0001 . . TGETB 3 0 1
0002 . . ISNES 3 0 ; "true"
0003 . . JMP 3 => 0005
0005 . . TGETB 3 0 1
0006 . . ISNES 3 1 ; "false"
0007 . . JMP 3 => 0009
0009 . . TGETB 3 0 1
0010 . . ISNES 3 2 ; "fail"
0011 . . JMP 3 => 0014
0014 . . KPRI 3 0
0015 . . RET1 3 2
0171 . UGET 12 9 ; eta
0172 . MOV 13 8
0173 . MOV 14 3
0174 . MOV 15 4
0175 . CALL 12 2 4
0000 . . FUNCF 4 ; optimize.lua:427
0001 . . TGETB 3 0 1
0002 . . ISNES 3 0 ; "true"
0003 . . JMP 3 => 0005
0005 . . TGETB 3 0 1
0006 . . ISNES 3 1 ; "false"
0007 . . JMP 3 => 0009
0008 . . RET1 2 2
0176 . UGET 13 2 ; visit
0177 . MOV 14 6
0178 . MOV 15 9
0179 . MOV 16 10
0180 . MOV 17 11
0181 . MOV 18 12
0182 . CALL 13 2 6
0000 . . FUNCF 25 ; optimize.lua:488
0001 . . GGET 5 0 ; "type"
0002 . . MOV 6 0
0003 . . CALL 5 2 2
0000 . . . FUNCC ; type
0004 . . ISEQS 5 1 ; "table"
0005 . . JMP 5 => 0007
0007 . . TGETB 5 0 1
0008 . . UGET 6 0 ; relops
0009 . . TGETV 6 6 5
0010 . . ISF 6
0011 . . JMP 7 => 0131
0131 . . ISEQS 5 11 ; "false"
0132 . . JMP 6 => 0137
0133 . . ISEQS 5 12 ; "true"
0134 . . JMP 6 => 0137
0135 . . ISNES 5 13 ; "fail"
0136 . . JMP 6 => 0140
0140 . . ISNES 5 14 ; "not"
0141 . . JMP 6 => 0155
0155 . . ISNES 5 15 ; "if"
0156 . . JMP 6 => 0298
0157 . . TGETB 6 0 2
0158 . . TGETB 7 0 3
0159 . . TGETB 8 0 4
0160 . . UGET 9 1 ; push
0161 . . MOV 10 1
0162 . . CALL 9 2 2
0000 . . . JFUNCF 4 34 ; optimize.lua:397
0001 . . . UGET 1 0 ; cons
0002 . . . TNEW 2 0
0003 . . . MOV 3 0
0004 . . . CALLT 1 3
0000 . . . FUNCF 3 ; optimize.lua:393
0001 . . . TNEW 2 3
0002 . . . TSETB 0 2 1
0003 . . . TSETB 1 2 2
0004 . . . RET1 2 2
0163 . . UGET 10 1 ; push
0164 . . MOV 11 1
0165 . . CALL 10 2 2
0000 . . . JFUNCF 4 34 ; optimize.lua:397
0001 . . . UGET 1 0 ; cons
0002 . . . TNEW 2 0
0003 . . . MOV 3 0
0004 . . . CALLT 1 3
0000 . . . FUNCF 3 ; optimize.lua:393
0001 . . . TNEW 2 3
0002 . . . TSETB 0 2 1
0003 . . . TSETB 1 2 2
0004 . . . RET1 2 2
0166 . . UGET 11 9 ; eta
0167 . . MOV 12 7
0168 . . MOV 13 3
0169 . . MOV 14 4
0170 . . CALL 11 2 4
0000 . . . FUNCF 4 ; optimize.lua:427
0001 . . . TGETB 3 0 1
0002 . . . ISNES 3 0 ; "true"
0003 . . . JMP 3 => 0005
0004 . . . RET1 1 2
0171 . . UGET 12 9 ; eta
0172 . . MOV 13 8
0173 . . MOV 14 3
0174 . . MOV 15 4
0175 . . CALL 12 2 4
0000 . . . FUNCF 4 ; optimize.lua:427
0001 . . . TGETB 3 0 1
0002 . . . ISNES 3 0 ; "true"
0003 . . . JMP 3 => 0005
0005 . . . TGETB 3 0 1
0006 . . . ISNES 3 1 ; "false"
0007 . . . JMP 3 => 0009
0009 . . . TGETB 3 0 1
0010 . . . ISNES 3 2 ; "fail"
0011 . . . JMP 3 => 0014
0014 . . . KPRI 3 0
0015 . . . RET1 3 2
0176 . . UGET 13 2 ; visit
0177 . . MOV 14 6
0178 . . MOV 15 9
0179 . . MOV 16 10
0180 . . MOV 17 11
0181 . . MOV 18 12
0182 . . CALL 13 2 6
0000 . . . FUNCF 25 ; optimize.lua:488
0001 . . . GGET 5 0 ; "type"
0002 . . . MOV 6 0
0003 . . . CALL 5 2 2
0000 . . . . FUNCC ; type
0004 . . . ISEQS 5 1 ; "table"
0005 . . . JMP 5 => 0007
0007 . . . TGETB 5 0 1
0008 . . . UGET 6 0 ; relops
0009 . . . TGETV 6 6 5
0010 . . . ISF 6
0011 . . . JMP 7 => 0131
0012 . . . UGET 6 1 ; push
0013 . . . MOV 7 1
0014 . . . CALL 6 2 2
0000 . . . . JFUNCF 4 34 ; optimize.lua:397
0001 . . . . UGET 1 0 ; cons
0002 . . . . TNEW 2 0
0003 . . . . MOV 3 0
0004 . . . . CALLT 1 3
0000 . . . . FUNCF 3 ; optimize.lua:393
0001 . . . . TNEW 2 3
0002 . . . . TSETB 0 2 1
0003 . . . . TSETB 1 2 2
0004 . . . . RET1 2 2
0015 . . . UGET 7 2 ; visit
0016 . . . TGETB 8 0 2
0017 . . . MOV 9 6
0018 . . . CALL 7 2 3
0000 . . . . FUNCF 25 ; optimize.lua:488
---- TRACE 44 abort optimize.lua:488 -- call unroll limit reached
</pre>
<pre class="ljdump">
---- TRACE 44 start 34/0 optimize.lua:397
0001 UGET 1 0 ; cons
0002 TNEW 2 0
0003 MOV 3 0
0004 CALLT 1 3
0000 FUNCF 3 ; optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
0187 UGET 14 1 ; push
0188 MOV 15 9
0189 CALL 14 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0190 UGET 15 1 ; push
0191 MOV 16 10
0192 CALL 15 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0193 UGET 16 1 ; push
0194 MOV 17 10
0195 CALL 16 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0196 UGET 17 2 ; visit
0197 MOV 18 7
0198 MOV 19 13
0199 MOV 20 14
0200 MOV 21 3
0201 MOV 22 4
0202 CALL 17 2 6
0000 . FUNCF 25 ; optimize.lua:488
0001 . GGET 5 0 ; "type"
0002 . MOV 6 0
0003 . CALL 5 2 2
0000 . . FUNCC ; type
0004 . ISEQS 5 1 ; "table"
0005 . JMP 5 => 0007
0007 . TGETB 5 0 1
0008 . UGET 6 0 ; relops
0009 . TGETV 6 6 5
0010 . ISF 6
0011 . JMP 7 => 0131
0131 . ISEQS 5 11 ; "false"
0132 . JMP 6 => 0137
0133 . ISEQS 5 12 ; "true"
0134 . JMP 6 => 0137
0137 . UCLO 0 =&gt; 0138
---- TRACE 44 abort optimize.lua:523 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 44 start 34/0 optimize.lua:397
0001 UGET 1 0 ; cons
0002 TNEW 2 0
0003 MOV 3 0
0004 CALLT 1 3
0000 FUNCF 3 ; optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
0163 UGET 10 1 ; push
0164 MOV 11 1
0165 CALL 10 2 2
0000 . JFUNCF 4 34 ; optimize.lua:397
0001 . UGET 1 0 ; cons
0002 . TNEW 2 0
0003 . MOV 3 0
0004 . CALLT 1 3
0000 . FUNCF 3 ; optimize.lua:393
0001 . TNEW 2 3
0002 . TSETB 0 2 1
0003 . TSETB 1 2 2
0004 . RET1 2 2
0166 UGET 11 9 ; eta
0167 MOV 12 7
0168 MOV 13 3
0169 MOV 14 4
0170 CALL 11 2 4
0000 . FUNCF 4 ; optimize.lua:427
0001 . TGETB 3 0 1
0002 . ISNES 3 0 ; "true"
0003 . JMP 3 => 0005
0004 . RET1 1 2
0171 UGET 12 9 ; eta
0172 MOV 13 8
0173 MOV 14 3
0174 MOV 15 4
0175 CALL 12 2 4
0000 . FUNCF 4 ; optimize.lua:427
0001 . TGETB 3 0 1
0002 . ISNES 3 0 ; "true"
0003 . JMP 3 => 0005
0005 . TGETB 3 0 1
0006 . ISNES 3 1 ; "false"
0007 . JMP 3 => 0009
0009 . TGETB 3 0 1
0010 . ISNES 3 2 ; "fail"
0011 . JMP 3 => 0014
0014 . KPRI 3 0
0015 . RET1 3 2
0176 UGET 13 2 ; visit
0177 MOV 14 6
0178 MOV 15 9
0179 MOV 16 10
0180 MOV 17 11
0181 MOV 18 12
0182 CALL 13 2 6
0000 . FUNCF 25 ; optimize.lua:488
0001 . GGET 5 0 ; "type"
0002 . MOV 6 0
0003 . CALL 5 2 2
0000 . . FUNCC ; type
0004 . ISEQS 5 1 ; "table"
0005 . JMP 5 => 0007
0007 . TGETB 5 0 1
0008 . UGET 6 0 ; relops
0009 . TGETV 6 6 5
0010 . ISF 6
0011 . JMP 7 => 0131
0012 . UGET 6 1 ; push
0013 . MOV 7 1
0014 . CALL 6 2 2
0000 . . JFUNCF 4 34 ; optimize.lua:397
0001 . . UGET 1 0 ; cons
0002 . . TNEW 2 0
0003 . . MOV 3 0
0004 . . CALLT 1 3
0000 . . FUNCF 3 ; optimize.lua:393
0001 . . TNEW 2 3
0002 . . TSETB 0 2 1
0003 . . TSETB 1 2 2
0004 . . RET1 2 2
0015 . UGET 7 2 ; visit
0016 . TGETB 8 0 2
0017 . MOV 9 6
0018 . CALL 7 2 3
0000 . . FUNCF 25 ; optimize.lua:488
0001 . . GGET 5 0 ; "type"
0002 . . MOV 6 0
0003 . . CALL 5 2 2
0000 . . . FUNCC ; type
0004 . . ISEQS 5 1 ; "table"
0005 . . JMP 5 => 0007
0007 . . TGETB 5 0 1
0008 . . UGET 6 0 ; relops
0009 . . TGETV 6 6 5
0010 . . ISF 6
0011 . . JMP 7 => 0131
0131 . . ISEQS 5 11 ; "false"
0132 . . JMP 6 => 0137
0133 . . ISEQS 5 12 ; "true"
0134 . . JMP 6 => 0137
0135 . . ISNES 5 13 ; "fail"
0136 . . JMP 6 => 0140
0140 . . ISNES 5 14 ; "not"
0141 . . JMP 6 => 0155
0155 . . ISNES 5 15 ; "if"
0156 . . JMP 6 => 0298
0298 . . MOV 6 1
0299 . . ISNES 5 17 ; "[]"
0300 . . JMP 7 => 0338
0301 . . UGET 7 2 ; visit
0302 . . TGETB 8 0 2
0303 . . MOV 9 6
0304 . . CALL 7 2 3
0000 . . . FUNCF 25 ; optimize.lua:488
0001 . . . GGET 5 0 ; "type"
0002 . . . MOV 6 0
0003 . . . CALL 5 2 2
0000 . . . . FUNCC ; type
0004 . . . ISEQS 5 1 ; "table"
0005 . . . JMP 5 => 0007
0006 . . . UCLO 0 =&gt; 0470
---- TRACE 44 abort optimize.lua:489 -- NYI: bytecode 48
</pre>
<pre class="ljdump">
---- TRACE 44 start 34/0 optimize.lua:397
---- TRACE 44 IR
---- TRACE 44 mcode 36
0bcabd2b mov dword [0x405d84a0], 0x2c
0bcabd36 mov edx, [0x405d84b0]
0bcabd3d xor eax, eax
0bcabd3f mov ebx, 0x40bed9c4
0bcabd44 mov r14d, 0x405d8f78
0bcabd4a jmp 0x0041d9f8
---- TRACE 44 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 45 start optimize.lua:393
0001 TNEW 2 3
0002 TSETB 0 2 1
0003 TSETB 1 2 2
0004 RET1 2 2
---- TRACE 45 IR
0001 > <span class="irt_tab">tab</span> TNEW #3 #0
0002 > <span class="irt_tab">tab</span> SLOAD #1 T
0003 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0004 <span class="irt_p32">p32</span> AREF 0003 <span class="irt_int">+1 </span>
0005 <span class="irt_tab">tab</span> ASTORE 0004 0002
0006 > <span class="irt_tab">tab</span> SLOAD #2 T
0007 <span class="irt_p32">p32</span> AREF 0003 <span class="irt_int">+2 </span>
0008 <span class="irt_tab">tab</span> ASTORE 0007 0006
---- TRACE 45 mcode 147
0bcabc91 mov dword [0x405d84a0], 0x2d
0bcabc9c mov edi, [0x405d83d8]
0bcabca3 cmp edi, [0x405d83dc]
0bcabcaa jb 0x0bcabcc3
0bcabcac mov esi, 0x1
0bcabcb1 mov edi, 0x405d83b8
0bcabcb6 call 0x0041f3d0 ->lj_gc_step_jit
0bcabcbb test eax, eax
0bcabcbd jnz 0x0bca0010 ->0
0bcabcc3 mov edi, [0x405d84ac]
0bcabcca mov esi, 0x3
0bcabccf call 0x0041f7e0 ->lj_tab_new1
0bcabcd4 mov edx, [0x405d84b0]
0bcabcdb cmp dword [rdx+0x4], -0x0c
0bcabcdf jnz 0x0bca0010 ->0
0bcabce5 mov ebp, [rdx]
0bcabce7 mov dword [rax+0x2c], 0xfffffff4
0bcabcee mov [rax+0x28], ebp
0bcabcf1 cmp dword [rdx+0xc], -0x0c
0bcabcf5 jnz 0x0bca0014 ->1
0bcabcfb mov ebp, [rdx+0x8]
0bcabcfe mov dword [rax+0x34], 0xfffffff4
0bcabd05 mov [rax+0x30], ebp
0bcabd08 mov dword [rdx+0x14], 0xfffffff4
0bcabd0f mov [rdx+0x10], eax
0bcabd12 xor eax, eax
0bcabd14 mov ebx, 0x40b46ee0
0bcabd19 mov r14d, 0x405d8f78
0bcabd1f jmp 0x0041d9f8
---- TRACE 45 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 46 start optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 46 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 46 start optimize.lua:420
0001 GGET 3 0 ; "pairs"
0002 MOV 4 1
0003 CALL 3 4 2
0000 . FUNCC ; pairs
---- TRACE 46 abort optimize.lua:421 -- NYI: FastFunc pairs
</pre>
<pre class="ljdump">
---- TRACE 46 start 36/4 optimize.lua:518
0109 UGET 16 8 ; restrict
0110 MOV 17 2
0111 MOV 18 7
0112 MOV 19 13
0113 CALL 16 1 4
0000 . FUNCF 9 ; optimize.lua:414
0001 . UGET 3 0 ; define
0002 . MOV 4 0
0003 . MOV 5 1
0004 . UGET 6 1 ; lookup
0005 . MOV 7 0
0006 . MOV 8 1
0007 . CALL 6 2 3
0000 . . FUNCF 6 ; optimize.lua:398
0001 . . GGET 2 0 ; "type"
0002 . . MOV 3 1
0003 . . CALL 2 2 2
0000 . . . FUNCC ; type
0004 . . ISNES 2 1 ; "number"
0005 . . JMP 2 => 0010
0010 . . UGET 2 1 ; cfkey
0011 . . MOV 3 1
0012 . . CALL 2 2 2
0000 . . . JFUNCF 4 20 ; optimize.lua:54
0001 . . . UGET 1 0 ; cache
0002 . . . TGETV 1 1 0
0003 . . . ISNEP 1 0
0004 . . . JMP 2 => 0011
0011 . . . RET1 1 2
0013 . . ISF 0
0014 . . JMP 3 => 0028
0015 . . JLOOP 3 27
---- TRACE 46 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 > <span class="irt_fun">fun</span> EQ 0001 <span class="irt_fun">optimize.lua:488</span>
0003 > <span class="irt_tab">tab</span> SLOAD #3 T
0004 > <span class="irt_tab">tab</span> SLOAD #8 T
0005 > <span class="irt_tab">tab</span> SLOAD #14 T
0006 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">optimize.lua:398</span> func.env
0007 <span class="irt_p32">p32</span> HREF 0006 <span class="irt_str">"type"</span>
0008 > <span class="irt_p32">p32</span> EQ 0007 <span class="irt_p32">[0x405d8420]</span>
0009 <span class="irt_tab">tab</span> FLOAD 0006 tab.meta
0010 > <span class="irt_tab">tab</span> NE 0009 <span class="irt_tab">[NULL]</span>
0011 <span class="irt_int">int</span> FLOAD 0009 tab.hmask
0012 > <span class="irt_int">int</span> EQ 0011 <span class="irt_int">+1 </span>
0013 <span class="irt_p32">p32</span> FLOAD 0009 tab.node
0014 > <span class="irt_p32">p32</span> HREFK 0013 <span class="irt_str">"__index"</span> @1
0015 > <span class="irt_tab">tab</span> HLOAD 0014
0016 <span class="irt_int">int</span> FLOAD 0015 tab.hmask
0017 > <span class="irt_int">int</span> EQ 0016 <span class="irt_int">+63 </span>
0018 <span class="irt_p32">p32</span> FLOAD 0015 tab.node
0019 > <span class="irt_p32">p32</span> HREFK 0018 <span class="irt_str">"type"</span> @60
0020 > <span class="irt_fun">fun</span> HLOAD 0019
0021 > <span class="irt_fun">fun</span> EQ 0020 <span class="irt_fun">type</span>
0022 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:398</span> #1
0023 > <span class="irt_fun">fun</span> ULOAD 0022
0024 > <span class="irt_fun">fun</span> EQ 0023 <span class="irt_fun">optimize.lua:54</span>
0025 > <span class="irt_p32">p32</span> UREFC <span class="irt_fun">optimize.lua:54</span> #0
0026 > <span class="irt_tab">tab</span> ULOAD 0025
0027 <span class="irt_p32">p32</span> HREF 0026 0004
0028 > <span class="irt_str">str</span> HLOAD 0027
---- TRACE 46 mcode 658
0bcab9f8 mov eax, [0x405d84ac]
0bcab9ff mov eax, [rax+0x20]
0bcaba02 sub eax, [0x405d84b0]
0bcaba09 cmp eax, 0xf0
0bcaba0f jb 0x0bca0020 ->4
0bcaba15 mov dword [0x405d84a0], 0x2e
0bcaba20 mov edx, [0x405d84b0]
0bcaba27 cmp dword [rdx-0x8], 0x41555b98
0bcaba2e jnz 0x0bca0010 ->0
0bcaba34 cmp dword [rdx+0x14], -0x0c
0bcaba38 jnz 0x0bca0010 ->0
0bcaba3e mov ebp, [rdx+0x10]
0bcaba41 cmp dword [rdx+0x3c], -0x0c
0bcaba45 jnz 0x0bca0010 ->0
0bcaba4b mov ebx, [rdx+0x38]
0bcaba4e cmp dword [rdx+0x6c], -0x0c
0bcaba52 jnz 0x0bca0010 ->0
0bcaba58 mov r15d, [rdx+0x68]
0bcaba5c mov r14d, [0x41555a00]
0bcaba64 mov r13d, [r14+0x1c]
0bcaba68 and r13d, 0x798a813c
0bcaba6f lea r13d, [r13+r13*2+0x0]
0bcaba74 shl r13d, 0x03
0bcaba78 add r13d, [r14+0x14]
0bcaba7c cmp dword [r13+0xc], -0x05
0bcaba81 jnz 0x0bcaba91
0bcaba83 cmp dword [r13+0x8], 0x405daf18
0bcaba8b jz 0x0bca0010 ->0
0bcaba91 mov r13d, [r13+0x10]
0bcaba95 test r13d, r13d
0bcaba98 jnz 0x0bcaba7c
0bcaba9a mov r13d, 0x405d8420
0bcabaa0 mov r14d, [r14+0x10]
0bcabaa4 test r14d, r14d
0bcabaa7 jz 0x0bca0010 ->0
0bcabaad cmp dword [r14+0x1c], +0x01
0bcabab2 jnz 0x0bca0010 ->0
0bcabab8 mov r14d, [r14+0x14]
0bcababc mov rdi, 0xfffffffb405da430
0bcabac6 cmp rdi, [r14+0x20]
0bcabaca jnz 0x0bca0010 ->0
0bcabad0 cmp dword [r14+0x1c], -0x0c
0bcabad5 jnz 0x0bca0010 ->0
0bcabadb mov r14d, [r14+0x18]
0bcabadf cmp dword [r14+0x1c], +0x3f
0bcabae4 jnz 0x0bca0010 ->0
0bcabaea mov r14d, [r14+0x14]
0bcabaee mov rdi, 0xfffffffb405daf18
0bcabaf8 cmp rdi, [r14+0x5a8]
0bcabaff jnz 0x0bca0010 ->0
0bcabb05 cmp dword [r14+0x5a4], -0x09
0bcabb0d jnz 0x0bca0010 ->0
0bcabb13 cmp dword [r14+0x5a0], 0x405dae80
0bcabb1e jnz 0x0bca0010 ->0
0bcabb24 cmp dword [0x40b3fa3c], -0x09
0bcabb2c jnz 0x0bca0010 ->0
0bcabb32 cmp dword [0x40b3fa38], 0x40b3fa78
0bcabb3d jnz 0x0bca0010 ->0
0bcabb43 cmp dword [0x40b3faac], -0x0c
0bcabb4b jnz 0x0bca0010 ->0
0bcabb51 mov r13d, [0x40b3faa8]
0bcabb59 lea r14d, [rbx-0x4c11db7]
0bcabb60 mov edi, ebx
0bcabb62 xor edi, r14d
0bcabb65 rol r14d, 0x0e
0bcabb69 sub edi, r14d
0bcabb6c rol r14d, 0x05
0bcabb70 xor r14d, edi
0bcabb73 rol edi, 0x0d
0bcabb76 sub r14d, edi
0bcabb79 and r14d, [r13+0x1c]
0bcabb7d lea r14d, [r14+r14*2]
0bcabb81 shl r14d, 0x03
0bcabb85 add r14d, [r13+0x14]
0bcabb89 cmp dword [r14+0xc], -0x0c
0bcabb8e jnz 0x0bcabb96
0bcabb90 cmp ebx, [r14+0x8]
0bcabb94 jz 0x0bcabba5
0bcabb96 mov r14d, [r14+0x10]
0bcabb9a test r14d, r14d
0bcabb9d jnz 0x0bcabb89
0bcabb9f mov r14d, 0x405d8420
0bcabba5 cmp dword [r14+0x4], -0x05
0bcabbaa jnz 0x0bca0010 ->0
0bcabbb0 mov r14d, [r14]
0bcabbb3 mov dword [rdx+0xd4], 0xfffffffb
0bcabbbd mov [rdx+0xd0], r14d
0bcabbc4 mov dword [rdx+0xcc], 0xfffffff4
0bcabbce mov [rdx+0xc8], ebx
0bcabbd4 mov dword [rdx+0xc4], 0xfffffff4
0bcabbde mov [rdx+0xc0], ebp
0bcabbe4 mov dword [rdx+0xbc], 0x40bd65d0
0bcabbee mov dword [rdx+0xb8], 0x415559f8
0bcabbf8 mov dword [rdx+0xb4], 0xfffffff4
0bcabc02 mov [rdx+0xb0], ebx
0bcabc08 mov dword [rdx+0xac], 0xfffffff4
0bcabc12 mov [rdx+0xa8], ebp
0bcabc18 mov dword [rdx+0xa4], 0xfffffff7
0bcabc22 mov dword [rdx+0xa0], 0x41555a48
0bcabc2c mov dword [rdx+0x9c], 0xfffffff4
0bcabc36 mov [rdx+0x98], r15d
0bcabc3d mov dword [rdx+0x94], 0xfffffff4
0bcabc47 mov [rdx+0x90], ebx
0bcabc4d mov dword [rdx+0x8c], 0xfffffff4
0bcabc57 mov [rdx+0x88], ebp
0bcabc5d mov dword [rdx+0x84], 0x40b57c00
0bcabc67 mov dword [rdx+0x80], 0x41555a70
0bcabc71 mov dword [rdx-0x8], 0x41555b98
0bcabc78 add edx, 0xc0
0bcabc7e mov [0x405d84b0], edx
0bcabc85 jmp 0x0bcaca07
---- TRACE 46 stop -> 27
</pre>
<pre class="ljdump">
---- TRACE 47 start optimize.lua:398
0001 GGET 2 0 ; "type"
0002 MOV 3 1
0003 CALL 2 2 2
0000 . FUNCC ; type
0004 ISNES 2 1 ; "number"
0005 JMP 2 => 0010
0006 UGET 2 0 ; Range
0007 MOV 3 1
0008 MOV 4 1
0009 CALLT 2 3
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 47 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 47 start optimize.lua:293
0001 UGET 2 0 ; Range
0002 GGET 3 0 ; "math"
0003 TGETS 3 3 1 ; "max"
0004 MOV 5 0
0005 TGETS 4 0 2 ; "min"
0006 CALL 4 2 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0007 MOV 6 1
0008 TGETS 5 1 2 ; "min"
0009 CALL 5 0 2
0000 . JFUNCF 2 28 ; optimize.lua:281
0001 . TGETS 1 0 0 ; "min_"
0002 . RET1 1 2
0010 CALLM 3 2 1
0000 . FUNCC ; math.max
0011 GGET 4 0 ; "math"
0012 TGETS 4 4 2 ; "min"
0013 MOV 6 0
0014 TGETS 5 0 1 ; "max"
0015 CALL 5 2 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0016 MOV 7 1
0017 TGETS 6 1 1 ; "max"
0018 CALL 6 0 2
0000 . FUNCF 2 ; optimize.lua:282
0001 . TGETS 1 0 0 ; "max_"
0002 . RET1 1 2
0019 CALLM 4 0 1
0000 . FUNCC ; math.min
0020 CALLMT 2 1
0000 FUNCF 4 ; optimize.lua:276
0001 ISGE 1 0
0002 JMP 2 => 0006
0006 TDUP 2 0
0007 TSETS 0 2 1 ; "min_"
0008 TSETS 1 2 2 ; "max_"
0009 FNEW 3 4 ; optimize.lua:281
---- TRACE 47 abort optimize.lua:281 -- NYI: bytecode 49
</pre>
<pre class="ljdump">
---- TRACE 47 start optimize.lua:69
0022 MOV 2 1
---- TRACE 47 abort optimize.lua:70 -- leaving loop in root trace
</pre>
<pre class="ljdump">
---- TRACE 47 start optimize.lua:619
0001 TGETB 2 0 1
0002 TGETB 3 0 1
0003 GGET 4 0 ; "math"
0004 TGETS 4 4 1 ; "max"
0005 MOV 5 2
0006 MOV 6 1
0007 CALL 4 2 3
0000 . FUNCC ; math.max
0008 GGET 5 0 ; "math"
0009 TGETS 5 5 1 ; "max"
0010 MOV 6 3
0011 MOV 7 1
0012 CALL 5 0 3
0000 . FUNCC ; math.max
0013 RETM 4 1
---- TRACE 47 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+1 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_num">num</span> ALOAD 0005
0007 <span class="irt_fun">fun</span> SLOAD #0 R
0008 <span class="irt_tab">tab</span> FLOAD 0007 func.env
0009 <span class="irt_p32">p32</span> HREF 0008 <span class="irt_str">"math"</span>
0010 > <span class="irt_p32">p32</span> EQ 0009 <span class="irt_p32">[0x405d8420]</span>
0011 <span class="irt_tab">tab</span> FLOAD 0008 tab.meta
0012 > <span class="irt_tab">tab</span> NE 0011 <span class="irt_tab">[NULL]</span>
0013 <span class="irt_int">int</span> FLOAD 0011 tab.hmask
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+1 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0011 tab.node
0016 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"__index"</span> @1
0017 > <span class="irt_tab">tab</span> HLOAD 0016
0018 <span class="irt_int">int</span> FLOAD 0017 tab.hmask
0019 > <span class="irt_int">int</span> EQ 0018 <span class="irt_int">+63 </span>
0020 <span class="irt_p32">p32</span> FLOAD 0017 tab.node
0021 > <span class="irt_p32">p32</span> HREFK 0020 <span class="irt_str">"math"</span> @54
0022 > <span class="irt_tab">tab</span> HLOAD 0021
0023 <span class="irt_int">int</span> FLOAD 0022 tab.hmask
0024 > <span class="irt_int">int</span> EQ 0023 <span class="irt_int">+31 </span>
0025 <span class="irt_p32">p32</span> FLOAD 0022 tab.node
0026 > <span class="irt_p32">p32</span> HREFK 0025 <span class="irt_str">"max"</span> @11
0027 > <span class="irt_fun">fun</span> HLOAD 0026
0028 > <span class="irt_num">num</span> SLOAD #2 T
0029 > <span class="irt_fun">fun</span> EQ 0027 <span class="irt_fun">math.max</span>
0030 <span class="irt_num">num</span> MAX 0028 0006
---- TRACE 47 mcode 335
0bcab8a2 mov dword [0x405d84a0], 0x2f
0bcab8ad cmp dword [rdx+0x4], -0x0c
0bcab8b1 jnz 0x0bca0010 ->0
0bcab8b7 mov ebp, [rdx]
0bcab8b9 cmp dword [rbp+0x18], +0x01
0bcab8bd jbe 0x0bca0010 ->0
0bcab8c3 mov ebp, [rbp+0x8]
0bcab8c6 cmp dword [rbp+0xc], 0xfffeffff
0bcab8cd jnb 0x0bca0010 ->0
0bcab8d3 movsd xmm7, [rbp+0x8]
0bcab8d8 mov ebp, [rdx-0x8]
0bcab8db mov ebp, [rbp+0x8]
0bcab8de mov ebx, [rbp+0x1c]
0bcab8e1 and ebx, 0xf44381f6
0bcab8e7 lea ebx, [rbx+rbx*2]
0bcab8ea shl ebx, 0x03
0bcab8ed add ebx, [rbp+0x14]
0bcab8f0 cmp dword [rbx+0xc], -0x05
0bcab8f4 jnz 0x0bcab903
0bcab8f6 cmp dword [rbx+0x8], 0x405ddab0
0bcab8fd jz 0x0bca0010 ->0
0bcab903 mov ebx, [rbx+0x10]
0bcab906 test ebx, ebx
0bcab908 jnz 0x0bcab8f0
0bcab90a mov ebx, 0x405d8420
0bcab90f mov ebp, [rbp+0x10]
0bcab912 test ebp, ebp
0bcab914 jz 0x0bca0010 ->0
0bcab91a cmp dword [rbp+0x1c], +0x01
0bcab91e jnz 0x0bca0010 ->0
0bcab924 mov ebp, [rbp+0x14]
0bcab927 mov rdi, 0xfffffffb405da430
0bcab931 cmp rdi, [rbp+0x20]
0bcab935 jnz 0x0bca0010 ->0
0bcab93b cmp dword [rbp+0x1c], -0x0c
0bcab93f jnz 0x0bca0010 ->0
0bcab945 mov ebp, [rbp+0x18]
0bcab948 cmp dword [rbp+0x1c], +0x3f
0bcab94c jnz 0x0bca0010 ->0
0bcab952 mov ebp, [rbp+0x14]
0bcab955 mov rdi, 0xfffffffb405ddab0
0bcab95f cmp rdi, [rbp+0x518]
0bcab966 jnz 0x0bca0010 ->0
0bcab96c cmp dword [rbp+0x514], -0x0c
0bcab973 jnz 0x0bca0010 ->0
0bcab979 mov ebp, [rbp+0x510]
0bcab97f cmp dword [rbp+0x1c], +0x1f
0bcab983 jnz 0x0bca0010 ->0
0bcab989 mov ebp, [rbp+0x14]
0bcab98c mov rdi, 0xfffffffb405de588
0bcab996 cmp rdi, [rbp+0x110]
0bcab99d jnz 0x0bca0010 ->0
0bcab9a3 cmp dword [rbp+0x10c], -0x09
0bcab9aa jnz 0x0bca0010 ->0
0bcab9b0 cmp dword [rdx+0xc], 0xfffeffff
0bcab9b7 jnb 0x0bca0010 ->0
0bcab9bd cmp dword [rbp+0x108], 0x405de560
0bcab9c7 jnz 0x0bca0010 ->0
0bcab9cd maxsd xmm7, [rdx+0x8]
0bcab9d2 movsd [rdx+0x28], xmm7
0bcab9d7 movsd [rdx+0x20], xmm7
0bcab9dc mov eax, 0x2
0bcab9e1 mov ebx, 0x405f729c
0bcab9e6 mov r14d, 0x405d8f78
0bcab9ec jmp 0x0041d9f8
---- TRACE 47 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 48 start 42/3 optimize.lua:661
0029 UGET 6 0 ; reduce
0030 TGETB 7 4 2
0031 MOV 8 1
0032 CALL 6 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0033 UGET 7 0 ; reduce
0034 TGETB 8 4 3
0035 MOV 9 1
0036 CALL 7 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0037 UGET 8 0 ; reduce
0038 TGETB 9 4 4
0039 MOV 10 1
0040 CALL 8 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0041 TGETB 9 6 1
0042 ISNES 9 6 ; "&gt;="
0043 JMP 9 => 0058
0058 TNEW 9 5
0059 TSETB 5 9 1
0060 TSETB 6 9 2
0061 TSETB 7 9 3
0062 TSETB 8 9 4
0063 RET1 9 2
0041 TGETB 9 6 1
0042 ISNES 9 6 ; "&gt;="
0043 JMP 9 => 0058
0058 TNEW 9 5
0059 TSETB 5 9 1
0060 TSETB 6 9 2
0061 TSETB 7 9 3
0062 TSETB 8 9 4
0063 RET1 9 2
---- TRACE 48 abort optimize.lua:665 -- down-recursion, restarting
</pre>
<pre class="ljdump">
---- TRACE 48 start optimize.lua:665
0063 RET1 9 2
0037 UGET 8 0 ; reduce
0038 TGETB 9 4 4
0039 MOV 10 1
0040 CALL 8 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0041 TGETB 9 6 1
0042 ISNES 9 6 ; "&gt;="
0043 JMP 9 => 0058
0058 TNEW 9 5
0059 TSETB 5 9 1
0060 TSETB 6 9 2
0061 TSETB 7 9 3
0062 TSETB 8 9 4
0063 RET1 9 2
0037 UGET 8 0 ; reduce
0038 TGETB 9 4 4
0039 MOV 10 1
0040 CALL 8 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0041 TGETB 9 6 1
0042 ISNES 9 6 ; "&gt;="
0043 JMP 9 => 0058
0058 TNEW 9 5
0059 TSETB 5 9 1
0060 TSETB 6 9 2
0061 TSETB 7 9 3
0062 TSETB 8 9 4
0063 RET1 9 2
0037 UGET 8 0 ; reduce
0038 TGETB 9 4 4
0039 MOV 10 1
0040 CALL 8 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0041 TGETB 9 6 1
0042 ISNES 9 6 ; "&gt;="
0043 JMP 9 => 0058
0058 TNEW 9 5
0059 TSETB 5 9 1
0060 TSETB 6 9 2
0061 TSETB 7 9 3
0062 TSETB 8 9 4
0063 RET1 9 2
---- TRACE 48 IR
0001 > <span class="irt_tab">tab</span> SLOAD #10 T
0002 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b51be0</span> <span class="irt_p32">[0x40b51cb4]</span>
0003 <span class="irt_fun">fun</span> SLOAD #0 R
0004 > <span class="irt_fun">fun</span> EQ 0003 <span class="irt_fun">optimize.lua:652</span>
0005 > <span class="irt_tab">tab</span> SLOAD #5 T
0006 <span class="irt_int">int</span> FLOAD 0005 tab.asize
0007 > <span class="irt_int">int</span> ABC 0006 <span class="irt_int">+4 </span>
0008 <span class="irt_p32">p32</span> FLOAD 0005 tab.array
0009 <span class="irt_p32">p32</span> AREF 0008 <span class="irt_int">+4 </span>
0010 > <span class="irt_tab">tab</span> ALOAD 0009
0011 > <span class="irt_num">num</span> SLOAD #2 T
0012 <span class="irt_int">int</span> FLOAD 0010 tab.asize
0013 > <span class="irt_int">int</span> ABC 0012 <span class="irt_int">+3 </span>
0014 <span class="irt_p32">p32</span> FLOAD 0010 tab.array
0015 <span class="irt_p32">p32</span> AREF 0014 <span class="irt_int">+1 </span>
0016 > <span class="irt_num">num</span> ALOAD 0015
0017 <span class="irt_p32">p32</span> AREF 0014 <span class="irt_int">+2 </span>
0018 > <span class="irt_num">num</span> ALOAD 0017
0019 <span class="irt_p32">p32</span> AREF 0014 <span class="irt_int">+3 </span>
0020 > <span class="irt_tab">tab</span> ALOAD 0019
0021 > <span class="irt_num">num</span> ULE 0016 0011
0022 <span class="irt_int">int</span> FLOAD 0020 tab.asize
0023 > <span class="irt_int">int</span> ABC 0022 <span class="irt_int">+1 </span>
0024 <span class="irt_p32">p32</span> FLOAD 0020 tab.array
0025 <span class="irt_p32">p32</span> AREF 0024 <span class="irt_int">+1 </span>
0026 > <span class="irt_str">str</span> ALOAD 0025
0027 > <span class="irt_str">str</span> NE 0026 <span class="irt_str">"if"</span>
0028 > <span class="irt_tab">tab</span> SLOAD #7 T
0029 <span class="irt_int">int</span> FLOAD 0028 tab.asize
0030 > <span class="irt_int">int</span> ABC 0029 <span class="irt_int">+1 </span>
0031 <span class="irt_p32">p32</span> FLOAD 0028 tab.array
0032 <span class="irt_p32">p32</span> AREF 0031 <span class="irt_int">+1 </span>
0033 > <span class="irt_str">str</span> ALOAD 0032
0034 > <span class="irt_str">str</span> NE 0033 <span class="irt_str">"&gt;="</span>
0035 > <span class="irt_tab">tab</span> TNEW #5 #0
0036 > <span class="irt_str">str</span> SLOAD #6 T
0037 <span class="irt_p32">p32</span> FLOAD 0035 tab.array
0038 <span class="irt_p32">p32</span> AREF 0037 <span class="irt_int">+1 </span>
0039 <span class="irt_str">str</span> ASTORE 0038 0036
0040 <span class="irt_p32">p32</span> AREF 0037 <span class="irt_int">+2 </span>
0041 <span class="irt_tab">tab</span> ASTORE 0040 0028
0042 <span class="irt_p32">p32</span> AREF 0037 <span class="irt_int">+3 </span>
0043 <span class="irt_tab">tab</span> ASTORE 0042 0001
0044 <span class="irt_p32">p32</span> AREF 0037 <span class="irt_int">+4 </span>
0045 <span class="irt_tab">tab</span> ASTORE 0044 0020
0046 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b51be0</span> <span class="irt_p32">[0x40b51cb4]</span>
0047 <span class="irt_fun">fun</span> SLOAD #0 R
0048 > <span class="irt_fun">fun</span> EQ 0047 <span class="irt_fun">optimize.lua:652</span>
0049 > <span class="irt_tab">tab</span> SLOAD #5 T
0050 <span class="irt_int">int</span> FLOAD 0049 tab.asize
0051 > <span class="irt_int">int</span> ABC 0050 <span class="irt_int">+4 </span>
0052 <span class="irt_p32">p32</span> FLOAD 0049 tab.array
0053 <span class="irt_p32">p32</span> AREF 0052 <span class="irt_int">+4 </span>
0054 > <span class="irt_tab">tab</span> ALOAD 0053
0055 > <span class="irt_num">num</span> SLOAD #2 T
0056 <span class="irt_int">int</span> FLOAD 0054 tab.asize
0057 > <span class="irt_int">int</span> ABC 0056 <span class="irt_int">+3 </span>
0058 <span class="irt_p32">p32</span> FLOAD 0054 tab.array
0059 <span class="irt_p32">p32</span> AREF 0058 <span class="irt_int">+1 </span>
0060 > <span class="irt_num">num</span> ALOAD 0059
0061 <span class="irt_p32">p32</span> AREF 0058 <span class="irt_int">+2 </span>
0062 > <span class="irt_num">num</span> ALOAD 0061
0063 <span class="irt_p32">p32</span> AREF 0058 <span class="irt_int">+3 </span>
0064 > <span class="irt_tab">tab</span> ALOAD 0063
0065 > <span class="irt_num">num</span> ULE 0060 0055
0066 <span class="irt_int">int</span> FLOAD 0064 tab.asize
0067 > <span class="irt_int">int</span> ABC 0066 <span class="irt_int">+1 </span>
0068 <span class="irt_p32">p32</span> FLOAD 0064 tab.array
0069 <span class="irt_p32">p32</span> AREF 0068 <span class="irt_int">+1 </span>
0070 > <span class="irt_str">str</span> ALOAD 0069
0071 > <span class="irt_str">str</span> NE 0070 <span class="irt_str">"if"</span>
0072 > <span class="irt_tab">tab</span> SLOAD #7 T
0073 <span class="irt_int">int</span> FLOAD 0072 tab.asize
0074 > <span class="irt_int">int</span> ABC 0073 <span class="irt_int">+1 </span>
0075 <span class="irt_p32">p32</span> FLOAD 0072 tab.array
0076 <span class="irt_p32">p32</span> AREF 0075 <span class="irt_int">+1 </span>
0077 > <span class="irt_str">str</span> ALOAD 0076
0078 > <span class="irt_str">str</span> NE 0077 <span class="irt_str">"&gt;="</span>
0079 > <span class="irt_tab">tab</span> TNEW #5 #0
0080 > <span class="irt_str">str</span> SLOAD #6 T
0081 <span class="irt_p32">p32</span> FLOAD 0079 tab.array
0082 <span class="irt_p32">p32</span> AREF 0081 <span class="irt_int">+1 </span>
0083 <span class="irt_str">str</span> ASTORE 0082 0080
0084 <span class="irt_p32">p32</span> AREF 0081 <span class="irt_int">+2 </span>
0085 <span class="irt_tab">tab</span> ASTORE 0084 0072
0086 <span class="irt_p32">p32</span> AREF 0081 <span class="irt_int">+3 </span>
0087 <span class="irt_tab">tab</span> ASTORE 0086 0035
0088 <span class="irt_p32">p32</span> AREF 0081 <span class="irt_int">+4 </span>
0089 <span class="irt_tab">tab</span> ASTORE 0088 0064
0090 > <span class="irt_p32">p32</span> RETF <span class="irt_pro">proto: 0x40b51be0</span> <span class="irt_p32">[0x40b51cb4]</span>
0091 <span class="irt_fun">fun</span> SLOAD #0 R
0092 > <span class="irt_fun">fun</span> EQ 0091 <span class="irt_fun">optimize.lua:652</span>
0093 > <span class="irt_tab">tab</span> SLOAD #5 T
0094 <span class="irt_int">int</span> FLOAD 0093 tab.asize
0095 > <span class="irt_int">int</span> ABC 0094 <span class="irt_int">+4 </span>
0096 <span class="irt_p32">p32</span> FLOAD 0093 tab.array
0097 <span class="irt_p32">p32</span> AREF 0096 <span class="irt_int">+4 </span>
0098 > <span class="irt_tab">tab</span> ALOAD 0097
0099 > <span class="irt_num">num</span> SLOAD #2 T
0100 <span class="irt_int">int</span> FLOAD 0098 tab.asize
0101 > <span class="irt_int">int</span> ABC 0100 <span class="irt_int">+3 </span>
0102 <span class="irt_p32">p32</span> FLOAD 0098 tab.array
0103 <span class="irt_p32">p32</span> AREF 0102 <span class="irt_int">+1 </span>
0104 > <span class="irt_num">num</span> ALOAD 0103
0105 <span class="irt_p32">p32</span> AREF 0102 <span class="irt_int">+2 </span>
0106 > <span class="irt_num">num</span> ALOAD 0105
0107 <span class="irt_p32">p32</span> AREF 0102 <span class="irt_int">+3 </span>
0108 > <span class="irt_tab">tab</span> ALOAD 0107
0109 > <span class="irt_num">num</span> ULE 0104 0099
0110 <span class="irt_int">int</span> FLOAD 0108 tab.asize
0111 > <span class="irt_int">int</span> ABC 0110 <span class="irt_int">+1 </span>
0112 <span class="irt_p32">p32</span> FLOAD 0108 tab.array
0113 <span class="irt_p32">p32</span> AREF 0112 <span class="irt_int">+1 </span>
0114 > <span class="irt_str">str</span> ALOAD 0113
0115 > <span class="irt_str">str</span> NE 0114 <span class="irt_str">"if"</span>
0116 > <span class="irt_tab">tab</span> SLOAD #7 T
0117 <span class="irt_int">int</span> FLOAD 0116 tab.asize
0118 > <span class="irt_int">int</span> ABC 0117 <span class="irt_int">+1 </span>
0119 <span class="irt_p32">p32</span> FLOAD 0116 tab.array
0120 <span class="irt_p32">p32</span> AREF 0119 <span class="irt_int">+1 </span>
0121 > <span class="irt_str">str</span> ALOAD 0120
0122 > <span class="irt_str">str</span> NE 0121 <span class="irt_str">"&gt;="</span>
0123 > <span class="irt_tab">tab</span> TNEW #5 #0
0124 > <span class="irt_str">str</span> SLOAD #6 T
0125 <span class="irt_p32">p32</span> FLOAD 0123 tab.array
0126 <span class="irt_p32">p32</span> AREF 0125 <span class="irt_int">+1 </span>
0127 <span class="irt_str">str</span> ASTORE 0126 0124
0128 <span class="irt_p32">p32</span> AREF 0125 <span class="irt_int">+2 </span>
0129 <span class="irt_tab">tab</span> ASTORE 0128 0116
0130 <span class="irt_p32">p32</span> AREF 0125 <span class="irt_int">+3 </span>
0131 <span class="irt_tab">tab</span> ASTORE 0130 0079
0132 <span class="irt_p32">p32</span> AREF 0125 <span class="irt_int">+4 </span>
0133 <span class="irt_tab">tab</span> ASTORE 0132 0108
---- TRACE 48 mcode 1150
0bcab41d mov dword [0x405d84a0], 0x30
0bcab428 mov edi, [0x405d83d8]
0bcab42f cmp edi, [0x405d83dc]
0bcab436 jb 0x0bcab44f
0bcab438 mov esi, 0x3
0bcab43d mov edi, 0x405d83b8
0bcab442 call 0x0041f3d0 ->lj_gc_step_jit
0bcab447 test eax, eax
0bcab449 jnz 0x0bca0010 ->0
0bcab44f mov edi, [0x405d84ac]
0bcab456 mov edx, [0x405d84b0]
0bcab45d cmp dword [rdx+0x4c], -0x0c
0bcab461 jnz 0x0bca0010 ->0
0bcab467 mov ebx, [rdx+0x48]
0bcab46a cmp dword [rdx-0x4], 0x40b51cb4
0bcab471 jnz 0x0bca0014 ->1
0bcab477 add edx, -0x40
0bcab47a mov [0x405d84b0], edx
0bcab481 cmp dword [rdx-0x8], 0x4109c610
0bcab488 jnz 0x0bca0018 ->2
0bcab48e cmp dword [rdx+0x24], -0x0c
0bcab492 jnz 0x0bca0018 ->2
0bcab498 mov ebp, [rdx+0x20]
0bcab49b cmp dword [rbp+0x18], +0x04
0bcab49f jbe 0x0bca0018 ->2
0bcab4a5 mov ebp, [rbp+0x8]
0bcab4a8 cmp dword [rbp+0x24], -0x0c
0bcab4ac jnz 0x0bca0018 ->2
0bcab4b2 mov r15d, [rbp+0x20]
0bcab4b6 cmp dword [rdx+0xc], 0xfffeffff
0bcab4bd jnb 0x0bca0018 ->2
0bcab4c3 movsd xmm7, [rdx+0x8]
0bcab4c8 cmp dword [r15+0x18], +0x03
0bcab4cd jbe 0x0bca0018 ->2
0bcab4d3 mov ebp, [r15+0x8]
0bcab4d7 cmp dword [rbp+0xc], 0xfffeffff
0bcab4de jnb 0x0bca0018 ->2
0bcab4e4 movsd xmm6, [rbp+0x8]
0bcab4e9 cmp dword [rbp+0x14], 0xfffeffff
0bcab4f0 jnb 0x0bca0018 ->2
0bcab4f6 movsd xmm5, [rbp+0x10]
0bcab4fb cmp dword [rbp+0x1c], -0x0c
0bcab4ff jnz 0x0bca0018 ->2
0bcab505 mov ebp, [rbp+0x18]
0bcab508 ucomisd xmm6, xmm7
0bcab50c ja 0x0bca001c ->3
0bcab512 cmp dword [rbp+0x18], +0x01
0bcab516 jbe 0x0bca0020 ->4
0bcab51c mov r14d, [rbp+0x8]
0bcab520 cmp dword [r14+0xc], -0x05
0bcab525 jnz 0x0bca0020 ->4
0bcab52b mov r14d, [r14+0x8]
0bcab52f cmp r14d, 0x405da860
0bcab536 jz 0x0bca0024 ->5
0bcab53c cmp dword [rdx+0x34], -0x0c
0bcab540 jnz 0x0bca0028 ->6
0bcab546 mov r15d, [rdx+0x30]
0bcab54a cmp dword [r15+0x18], +0x01
0bcab54f jbe 0x0bca0028 ->6
0bcab555 mov r14d, [r15+0x8]
0bcab559 cmp dword [r14+0xc], -0x05
0bcab55e jnz 0x0bca0028 ->6
0bcab564 cmp dword [r14+0x8], 0x40be1f48
0bcab56c jz 0x0bca002c ->7
0bcab572 mov esi, 0x5
0bcab577 call 0x0041f7e0 ->lj_tab_new1
0bcab57c mov [rsp+0x8], eax
0bcab580 mov edi, [0x405d84ac]
0bcab587 mov edx, [0x405d84b0]
0bcab58e cmp dword [rdx+0x2c], -0x05
0bcab592 jnz 0x0bca0030 ->8
0bcab598 mov r14d, [rdx+0x28]
0bcab59c mov dword [rax+0x2c], 0xfffffffb
0bcab5a3 mov [rax+0x28], r14d
0bcab5a7 mov dword [rax+0x34], 0xfffffff4
0bcab5ae mov [rax+0x30], r15d
0bcab5b2 mov dword [rax+0x3c], 0xfffffff4
0bcab5b9 mov [rax+0x38], ebx
0bcab5bc mov dword [rax+0x44], 0xfffffff4
0bcab5c3 mov [rax+0x40], ebp
0bcab5c6 cmp dword [rdx-0x4], 0x40b51cb4
0bcab5cd jnz 0x0bca0034 ->9
0bcab5d3 add edx, -0x40
0bcab5d6 mov [0x405d84b0], edx
0bcab5dd cmp dword [rdx-0x8], 0x4109c610
0bcab5e4 jnz 0x0bca0038 ->10
0bcab5ea cmp dword [rdx+0x24], -0x0c
0bcab5ee jnz 0x0bca0038 ->10
0bcab5f4 mov ebp, [rdx+0x20]
0bcab5f7 cmp dword [rbp+0x18], +0x04
0bcab5fb jbe 0x0bca0038 ->10
0bcab601 mov ebp, [rbp+0x8]
0bcab604 cmp dword [rbp+0x24], -0x0c
0bcab608 jnz 0x0bca0038 ->10
0bcab60e mov ebx, [rbp+0x20]
0bcab611 cmp dword [rdx+0xc], 0xfffeffff
0bcab618 jnb 0x0bca0038 ->10
0bcab61e movsd xmm7, [rdx+0x8]
0bcab623 cmp dword [rbx+0x18], +0x03
0bcab627 jbe 0x0bca0038 ->10
0bcab62d mov ebp, [rbx+0x8]
0bcab630 cmp dword [rbp+0xc], 0xfffeffff
0bcab637 jnb 0x0bca0038 ->10
0bcab63d movsd xmm6, [rbp+0x8]
0bcab642 cmp dword [rbp+0x14], 0xfffeffff
0bcab649 jnb 0x0bca0038 ->10
0bcab64f movsd xmm5, [rbp+0x10]
0bcab654 cmp dword [rbp+0x1c], -0x0c
0bcab658 jnz 0x0bca0038 ->10
0bcab65e mov ebp, [rbp+0x18]
0bcab661 ucomisd xmm6, xmm7
0bcab665 ja 0x0bca003c ->11
0bcab66b cmp dword [rbp+0x18], +0x01
0bcab66f jbe 0x0bca0040 ->12
0bcab675 mov r15d, [rbp+0x8]
0bcab679 cmp dword [r15+0xc], -0x05
0bcab67e jnz 0x0bca0040 ->12
0bcab684 mov r15d, [r15+0x8]
0bcab688 cmp r15d, 0x405da860
0bcab68f jz 0x0bca0044 ->13
0bcab695 cmp dword [rdx+0x34], -0x0c
0bcab699 jnz 0x0bca0048 ->14
0bcab69f mov r15d, [rdx+0x30]
0bcab6a3 cmp dword [r15+0x18], +0x01
0bcab6a8 jbe 0x0bca0048 ->14
0bcab6ae mov ebx, [r15+0x8]
0bcab6b2 cmp dword [rbx+0xc], -0x05
0bcab6b6 jnz 0x0bca0048 ->14
0bcab6bc cmp dword [rbx+0x8], 0x40be1f48
0bcab6c3 jz 0x0bca004c ->15
0bcab6c9 mov esi, 0x5
0bcab6ce call 0x0041f7e0 ->lj_tab_new1
0bcab6d3 mov ebx, eax
0bcab6d5 mov edi, [0x405d84ac]
0bcab6dc mov edx, [0x405d84b0]
0bcab6e3 mov eax, [rsp+0x8]
0bcab6e7 cmp dword [rdx+0x2c], -0x05
0bcab6eb jnz 0x0bca0050 ->16
0bcab6f1 mov r14d, [rdx+0x28]
0bcab6f5 mov dword [rbx+0x2c], 0xfffffffb
0bcab6fc mov [rbx+0x28], r14d
0bcab700 mov dword [rbx+0x34], 0xfffffff4
0bcab707 mov [rbx+0x30], r15d
0bcab70b mov dword [rbx+0x3c], 0xfffffff4
0bcab712 mov [rbx+0x38], eax
0bcab715 mov dword [rbx+0x44], 0xfffffff4
0bcab71c mov [rbx+0x40], ebp
0bcab71f cmp dword [rdx-0x4], 0x40b51cb4
0bcab726 jnz 0x0bca0054 ->17
0bcab72c add edx, -0x40
0bcab72f mov [0x405d84b0], edx
0bcab736 cmp dword [rdx-0x8], 0x4109c610
0bcab73d jnz 0x0bca0058 ->18
0bcab743 cmp dword [rdx+0x24], -0x0c
0bcab747 jnz 0x0bca0058 ->18
0bcab74d mov ebp, [rdx+0x20]
0bcab750 cmp dword [rbp+0x18], +0x04
0bcab754 jbe 0x0bca0058 ->18
0bcab75a mov ebp, [rbp+0x8]
0bcab75d cmp dword [rbp+0x24], -0x0c
0bcab761 jnz 0x0bca0058 ->18
0bcab767 mov r15d, [rbp+0x20]
0bcab76b cmp dword [rdx+0xc], 0xfffeffff
0bcab772 jnb 0x0bca0058 ->18
0bcab778 movsd xmm7, [rdx+0x8]
0bcab77d cmp dword [r15+0x18], +0x03
0bcab782 jbe 0x0bca0058 ->18
0bcab788 mov ebp, [r15+0x8]
0bcab78c cmp dword [rbp+0xc], 0xfffeffff
0bcab793 jnb 0x0bca0058 ->18
0bcab799 movsd xmm6, [rbp+0x8]
0bcab79e cmp dword [rbp+0x14], 0xfffeffff
0bcab7a5 jnb 0x0bca0058 ->18
0bcab7ab movsd xmm5, [rbp+0x10]
0bcab7b0 cmp dword [rbp+0x1c], -0x0c
0bcab7b4 jnz 0x0bca0058 ->18
0bcab7ba mov ebp, [rbp+0x18]
0bcab7bd ucomisd xmm6, xmm7
0bcab7c1 ja 0x0bca005c ->19
0bcab7c7 cmp dword [rbp+0x18], +0x01
0bcab7cb jbe 0x0bca0060 ->20
0bcab7d1 mov r14d, [rbp+0x8]
0bcab7d5 cmp dword [r14+0xc], -0x05
0bcab7da jnz 0x0bca0060 ->20
0bcab7e0 mov r14d, [r14+0x8]
0bcab7e4 cmp r14d, 0x405da860
0bcab7eb jz 0x0bca0064 ->21
0bcab7f1 cmp dword [rdx+0x34], -0x0c
0bcab7f5 jnz 0x0bca0068 ->22
0bcab7fb mov r15d, [rdx+0x30]
0bcab7ff cmp dword [r15+0x18], +0x01
0bcab804 jbe 0x0bca0068 ->22
0bcab80a mov r14d, [r15+0x8]
0bcab80e cmp dword [r14+0xc], -0x05
0bcab813 jnz 0x0bca0068 ->22
0bcab819 cmp dword [r14+0x8], 0x40be1f48
0bcab821 jz 0x0bca006c ->23
0bcab827 mov esi, 0x5
0bcab82c call 0x0041f7e0 ->lj_tab_new1
0bcab831 mov edx, [0x405d84b0]
0bcab838 cmp dword [rdx+0x2c], -0x05
0bcab83c jnz 0x0bca0070 ->24
0bcab842 mov r14d, [rdx+0x28]
0bcab846 mov dword [rax+0x2c], 0xfffffffb
0bcab84d mov [rax+0x28], r14d
0bcab851 mov dword [rax+0x34], 0xfffffff4
0bcab858 mov [rax+0x30], r15d
0bcab85c mov dword [rax+0x3c], 0xfffffff4
0bcab863 mov [rax+0x38], ebx
0bcab866 mov dword [rax+0x44], 0xfffffff4
0bcab86d mov [rax+0x40], ebp
0bcab870 mov ecx, [0x405d84ac]
0bcab877 mov ecx, [rcx+0x20]
0bcab87a sub ecx, edx
0bcab87c cmp ecx, +0x58
0bcab87f jb 0x0bca0074 ->25
0bcab885 mov dword [rdx+0x4c], 0xfffffff4
0bcab88c mov [rdx+0x48], eax
0bcab88f mov dword [rdx-0x8], 0x4109c610
0bcab896 jmp 0x0bcab41d
---- TRACE 48 stop -> down-recursion
</pre>
<pre class="ljdump">
---- TRACE 49 start 42/3 optimize.lua:661
0029 UGET 6 0 ; reduce
0030 TGETB 7 4 2
0031 MOV 8 1
0032 CALL 6 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0065 . RET1 4 2
0033 UGET 7 0 ; reduce
0034 TGETB 8 4 3
0035 MOV 9 1
0036 CALL 7 2 3
0000 . JFUNCF 11 42 ; optimize.lua:652
0001 . TGETB 2 0 1
0002 . TGETB 3 0 2
0003 . TGETB 4 0 3
0004 . ISGE 1 2
0005 . JMP 5 => 0026
0026 . TGETB 5 4 1
0027 . ISNES 5 5 ; "if"
0028 . JMP 6 => 0065
0029 . UGET 6 0 ; reduce
0030 . TGETB 7 4 2
0031 . MOV 8 1
0032 . CALL 6 2 3
0000 . . JFUNCF 11 42 ; optimize.lua:652
0001 . . TGETB 2 0 1
0002 . . TGETB 3 0 2
0003 . . TGETB 4 0 3
0004 . . ISGE 1 2
0005 . . JMP 5 => 0026
0026 . . TGETB 5 4 1
0027 . . ISNES 5 5 ; "if"
0028 . . JMP 6 => 0065
0065 . . RET1 4 2
0033 . UGET 7 0 ; reduce
0034 . TGETB 8 4 3
0035 . MOV 9 1
0036 . CALL 7 2 3
0000 . . JFUNCF 11 42 ; optimize.lua:652
0001 . . TGETB 2 0 1
0002 . . TGETB 3 0 2
0003 . . TGETB 4 0 3
0004 . . ISGE 1 2
0005 . . JMP 5 => 0026
0026 . . TGETB 5 4 1
0027 . . ISNES 5 5 ; "if"
0028 . . JMP 6 => 0065
0029 . . UGET 6 0 ; reduce
0030 . . TGETB 7 4 2
0031 . . MOV 8 1
0032 . . CALL 6 2 3
0000 . . . JFUNCF 11 42 ; optimize.lua:652
0001 . . . TGETB 2 0 1
0002 . . . TGETB 3 0 2
0003 . . . TGETB 4 0 3
0004 . . . ISGE 1 2
0005 . . . JMP 5 => 0026
0026 . . . TGETB 5 4 1
0027 . . . ISNES 5 5 ; "if"
0028 . . . JMP 6 => 0065
0029 . . . UGET 6 0 ; reduce
0030 . . . TGETB 7 4 2
0031 . . . MOV 8 1
0032 . . . CALL 6 2 3
0000 . . . . JFUNCF 11 42 ; optimize.lua:652
---- TRACE 49 abort optimize.lua:652 -- call unroll limit reached
</pre>
<pre class="ljdump">
---- TRACE 49 start optimize.lua:652
0001 TGETB 2 0 1
0002 TGETB 3 0 2
0003 TGETB 4 0 3
0004 ISGE 1 2
0005 JMP 5 => 0026
0026 TGETB 5 4 1
0027 ISNES 5 5 ; "if"
0028 JMP 6 => 0065
0065 RET1 4 2
---- TRACE 49 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+3 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_num">num</span> ALOAD 0005
0007 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+2 </span>
0008 > <span class="irt_num">num</span> ALOAD 0007
0009 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+3 </span>
0010 > <span class="irt_tab">tab</span> ALOAD 0009
0011 > <span class="irt_num">num</span> SLOAD #2 T
0012 > <span class="irt_num">num</span> UGE 0011 0006
0013 <span class="irt_int">int</span> FLOAD 0010 tab.asize
0014 > <span class="irt_int">int</span> ABC 0013 <span class="irt_int">+1 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0010 tab.array
0016 <span class="irt_p32">p32</span> AREF 0015 <span class="irt_int">+1 </span>
0017 > <span class="irt_str">str</span> ALOAD 0016
0018 > <span class="irt_str">str</span> NE 0017 <span class="irt_str">"if"</span>
---- TRACE 49 mcode 175
0bcab367 mov dword [0x405d84a0], 0x31
0bcab372 cmp dword [rdx+0x4], -0x0c
0bcab376 jnz 0x0bca0010 ->0
0bcab37c mov ebp, [rdx]
0bcab37e cmp dword [rbp+0x18], +0x03
0bcab382 jbe 0x0bca0010 ->0
0bcab388 mov ebp, [rbp+0x8]
0bcab38b cmp dword [rbp+0xc], 0xfffeffff
0bcab392 jnb 0x0bca0010 ->0
0bcab398 movsd xmm7, [rbp+0x8]
0bcab39d cmp dword [rbp+0x14], 0xfffeffff
0bcab3a4 jnb 0x0bca0010 ->0
0bcab3aa movsd xmm6, [rbp+0x10]
0bcab3af cmp dword [rbp+0x1c], -0x0c
0bcab3b3 jnz 0x0bca0010 ->0
0bcab3b9 mov ebp, [rbp+0x18]
0bcab3bc cmp dword [rdx+0xc], 0xfffeffff
0bcab3c3 jnb 0x0bca0010 ->0
0bcab3c9 ucomisd xmm7, [rdx+0x8]
0bcab3ce ja 0x0bca0014 ->1
0bcab3d4 cmp dword [rbp+0x18], +0x01
0bcab3d8 jbe 0x0bca0018 ->2
0bcab3de mov ebx, [rbp+0x8]
0bcab3e1 cmp dword [rbx+0xc], -0x05
0bcab3e5 jnz 0x0bca0018 ->2
0bcab3eb mov ebx, [rbx+0x8]
0bcab3ee cmp ebx, 0x405da860
0bcab3f4 jz 0x0bca001c ->3
0bcab3fa mov dword [rdx+0x24], 0xfffffff4
0bcab401 mov [rdx+0x20], ebp
0bcab404 xor eax, eax
0bcab406 mov ebx, 0x40b51d24
0bcab40b mov r14d, 0x405d8f78
0bcab411 jmp 0x0041d9f8
---- TRACE 49 stop -> return
</pre>
{ "if",
{ ">=",
"len",
34 },
{ "if",
{ "=",
{ "[]",
12,
2 },
8 },
{ "if",
{ "if",
{ "=",
{ "[]",
23,
1 },
6 },
{ "true" },
{ "if",
{ "=",
{ "[]",
23,
1 },
17 },
{ "true" },
{ "=",
{ "[]",
23,
1 },
132 } } },
{ "if",
{ "=",
{ "&",
{ "[]",
20,
2 },
65311 },
0 },
{ "if",
{ "<=",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
16 },
"len" },
{ "if",
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
14 },
2 } },
6000 },
{ "true" },
{ "if",
{ "<=",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
18 },
"len" },
{ "<=",
{ "ntohs",
{ "[]",
{ "+",
{ "<<",
{ "&",
{ "[]",
14,
1 },
15 },
2 },
16 },
2 } },
6000 },
{ "fail" } } },
{ "fail" } },
{ "fail" } },
{ "false" } },
{ "if",
{ ">=",
"len",
56 },
{ "if",
{ "=",
{ "[]",
12,
2 },
56710 },
{ "if",
{ "if",
{ "if",
{ "=",
{ "[]",
20,
1 },
6 },
{ "true" },
{ "if",
{ "=",
{ "[]",
20,
1 },
44 },
{ "=",
{ "[]",
54,
1 },
6 },
{ "false" } } },
{ "true" },
{ "if",
{ "if",
{ "=",
{ "[]",
20,
1 },
17 },
{ "true" },
{ "if",
{ "=",
{ "[]",
20,
1 },
44 },
{ "=",
{ "[]",
54,
1 },
17 },
{ "false" } } },
{ "true" },
{ "if",
{ "=",
{ "[]",
20,
1 },
132 },
{ "true" },
{ "if",
{ "=",
{ "[]",
20,
1 },
44 },
{ "=",
{ "[]",
54,
1 },
132 },
{ "false" } } } } },
{ "if",
{ "<=",
{ "ntohs",
{ "[]",
54,
2 } },
6000 },
{ "true" },
{ "if",
{ ">=",
"len",
58 },
{ "<=",
{ "ntohs",
{ "[]",
56,
2 } },
6000 },
{ "fail" } } },
{ "false" } },
{ "fail" } },
{ "fail" } } },
{ "fail" } }
<pre class="ljdump">
---- TRACE 50 start codegen.lua:137
0001 TGETB 1 0 1
0002 ISNES 1 0 ; "false"
0003 JMP 1 => 0008
0008 TGETB 1 0 1
0009 ISNES 1 1 ; "true"
0010 JMP 1 => 0015
0015 TGETB 1 0 1
0016 ISNES 1 2 ; "fail"
0017 JMP 1 => 0022
0018 KSTR 1 3 ; "REJECT"
0019 KPRI 2 1
0020 RET 1 3
---- TRACE 50 IR
0001 > <span class="irt_tab">tab</span> SLOAD #1 T
0002 <span class="irt_int">int</span> FLOAD 0001 tab.asize
0003 > <span class="irt_int">int</span> ABC 0002 <span class="irt_int">+1 </span>
0004 <span class="irt_p32">p32</span> FLOAD 0001 tab.array
0005 <span class="irt_p32">p32</span> AREF 0004 <span class="irt_int">+1 </span>
0006 > <span class="irt_str">str</span> ALOAD 0005
0007 > <span class="irt_str">str</span> NE 0006 <span class="irt_str">"false"</span>
0008 > <span class="irt_str">str</span> NE 0006 <span class="irt_str">"true"</span>
0009 > <span class="irt_str">str</span> EQ 0006 <span class="irt_str">"fail"</span>
---- TRACE 50 mcode 124
0bcab2e4 mov dword [0x405d84a0], 0x32
0bcab2ef cmp dword [rdx+0x4], -0x0c
0bcab2f3 jnz 0x0bca0010 ->0
0bcab2f9 mov ebp, [rdx]
0bcab2fb cmp dword [rbp+0x18], +0x01
0bcab2ff jbe 0x0bca0010 ->0
0bcab305 mov ebp, [rbp+0x8]
0bcab308 cmp dword [rbp+0xc], -0x05
0bcab30c jnz 0x0bca0010 ->0
0bcab312 mov ebp, [rbp+0x8]
0bcab315 cmp ebp, 0x405da7d8
0bcab31b jz 0x0bca0014 ->1
0bcab321 cmp ebp, 0x405da980
0bcab327 jz 0x0bca0018 ->2
0bcab32d cmp ebp, 0x40bddbf8
0bcab333 jnz 0x0bca001c ->3
0bcab339 mov dword [rdx+0x14], 0xfffffffe
0bcab340 mov dword [rdx+0xc], 0xfffffffb
0bcab347 mov dword [rdx+0x8], 0x40beef40
0bcab34e xor eax, eax
0bcab350 mov ebx, 0x40b3e768
0bcab355 mov r14d, 0x405d8f78
0bcab35b jmp 0x0041d9f8
---- TRACE 50 stop -> return
</pre>
<pre class="ljdump">
---- TRACE 51 start 50/3 codegen.lua:141
0022 UGET 1 2 ; builder
0023 TGETS 1 1 4 ; "label"
0024 CALL 1 2 1
0000 . FUNCF 2 ; codegen.lua:45
0001 . UGET 0 0 ; lcount
0002 . ADDVN 0 0 0 ; 1
0003 . USETV 0 0 ; lcount
0004 . KSTR 0 0 ; "L"
0005 . UGET 1 0 ; lcount
0006 . CAT 0 0 1
---- TRACE 51 abort codegen.lua:47 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 51 start 50/3 codegen.lua:141
0022 UGET 1 2 ; builder
0023 TGETS 1 1 4 ; "label"
0024 CALL 1 2 1
0000 . FUNCF 2 ; codegen.lua:45
0001 . UGET 0 0 ; lcount
0002 . ADDVN 0 0 0 ; 1
0003 . USETV 0 0 ; lcount
0004 . KSTR 0 0 ; "L"
0005 . UGET 1 0 ; lcount
0006 . CAT 0 0 1
---- TRACE 51 abort codegen.lua:47 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 51 start 50/3 codegen.lua:141
0022 UGET 1 2 ; builder
0023 TGETS 1 1 4 ; "label"
0024 CALL 1 2 1
0000 . FUNCF 2 ; codegen.lua:45
0001 . UGET 0 0 ; lcount
0002 . ADDVN 0 0 0 ; 1
0003 . USETV 0 0 ; lcount
0004 . KSTR 0 0 ; "L"
0005 . UGET 1 0 ; lcount
0006 . CAT 0 0 1
---- TRACE 51 abort codegen.lua:47 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 51 start 50/3 codegen.lua:141
0022 UGET 1 2 ; builder
0023 TGETS 1 1 4 ; "label"
0024 CALL 1 2 1
0000 . FUNCF 2 ; codegen.lua:45
0001 . UGET 0 0 ; lcount
0002 . ADDVN 0 0 0 ; 1
0003 . USETV 0 0 ; lcount
0004 . KSTR 0 0 ; "L"
0005 . UGET 1 0 ; lcount
0006 . CAT 0 0 1
---- TRACE 51 abort codegen.lua:47 -- NYI: bytecode 36
</pre>
<pre class="ljdump">
---- TRACE 51 start 50/3 codegen.lua:141
---- TRACE 51 IR
---- TRACE 51 mcode 29
0bcab2c0 mov dword [0x405d84a0], 0x33
0bcab2cb xor eax, eax
0bcab2cd mov ebx, 0x40b3e770
0bcab2d2 mov r14d, 0x405d8f78
0bcab2d8 jmp 0x0041d9f8
---- TRACE 51 stop -> interpreter
</pre>
<pre class="ljdump">
---- TRACE 52 start codegen.lua:97
0001 ISNES 1 0 ; "len"
0002 JMP 2 => 0005
0005 GGET 2 2 ; "type"
0006 MOV 3 1
0007 CALL 2 2 2
0000 . FUNCC ; type
0008 ISNES 2 3 ; "number"
0009 JMP 2 => 0011
0010 RET1 1 2
---- TRACE 52 IR
0001 > <span class="irt_num">num</span> SLOAD #2 T
0002 <span class="irt_fun">fun</span> SLOAD #0 R
0003 <span class="irt_tab">tab</span> FLOAD 0002 func.env
0004 <span class="irt_p32">p32</span> HREF 0003 <span class="irt_str">"type"</span>
0005 > <span class="irt_p32">p32</span> EQ 0004 <span class="irt_p32">[0x405d8420]</span>
0006 <span class="irt_tab">tab</span> FLOAD 0003 tab.meta
0007 > <span class="irt_tab">tab</span> NE 0006 <span class="irt_tab">[NULL]</span>
0008 <span class="irt_int">int</span> FLOAD 0006 tab.hmask
0009 > <span class="irt_int">int</span> EQ 0008 <span class="irt_int">+1 </span>
0010 <span class="irt_p32">p32</span> FLOAD 0006 tab.node
0011 > <span class="irt_p32">p32</span> HREFK 0010 <span class="irt_str">"__index"</span> @1
0012 > <span class="irt_tab">tab</span> HLOAD 0011
0013 <span class="irt_int">int</span> FLOAD 0012 tab.hmask
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+63 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0012 tab.node
0016 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"type"</span> @60
0017 > <span class="irt_fun">fun</span> HLOAD 0016
0018 > <span class="irt_fun">fun</span> EQ 0017 <span class="irt_fun">type</span>
---- TRACE 52 mcode 219
0bcab1de mov dword [0x405d84a0], 0x34
0bcab1e9 cmp dword [rdx+0xc], 0xfffeffff
0bcab1f0 jnb 0x0bca0010 ->0
0bcab1f6 mov ebp, [rdx-0x8]
0bcab1f9 mov ebp, [rbp+0x8]
0bcab1fc mov ebx, [rbp+0x1c]
0bcab1ff and ebx, 0x798a813c
0bcab205 lea ebx, [rbx+rbx*2]
0bcab208 shl ebx, 0x03
0bcab20b add ebx, [rbp+0x14]
0bcab20e cmp dword [rbx+0xc], -0x05
0bcab212 jnz 0x0bcab221
0bcab214 cmp dword [rbx+0x8], 0x405daf18
0bcab21b jz 0x0bca0014 ->1
0bcab221 mov ebx, [rbx+0x10]
0bcab224 test ebx, ebx
0bcab226 jnz 0x0bcab20e
0bcab228 mov ebx, 0x405d8420
0bcab22d mov ebp, [rbp+0x10]
0bcab230 test ebp, ebp
0bcab232 jz 0x0bca0014 ->1
0bcab238 cmp dword [rbp+0x1c], +0x01
0bcab23c jnz 0x0bca0014 ->1
0bcab242 mov ebp, [rbp+0x14]
0bcab245 mov rdi, 0xfffffffb405da430
0bcab24f cmp rdi, [rbp+0x20]
0bcab253 jnz 0x0bca0014 ->1
0bcab259 cmp dword [rbp+0x1c], -0x0c
0bcab25d jnz 0x0bca0014 ->1
0bcab263 mov ebp, [rbp+0x18]
0bcab266 cmp dword [rbp+0x1c], +0x3f
0bcab26a jnz 0x0bca0014 ->1
0bcab270 mov ebp, [rbp+0x14]
0bcab273 mov rdi, 0xfffffffb405daf18
0bcab27d cmp rdi, [rbp+0x5a8]
0bcab284 jnz 0x0bca0014 ->1
0bcab28a cmp dword [rbp+0x5a4], -0x09
0bcab291 jnz 0x0bca0014 ->1
0bcab297 cmp dword [rbp+0x5a0], 0x405dae80
0bcab2a1 jnz 0x0bca0014 ->1
0bcab2a7 xor eax, eax
0bcab2a9 mov ebx, 0x403b18f0
0bcab2ae mov r14d, 0x405d8f78
0bcab2b4 jmp 0x0041d9f8
---- TRACE 52 stop -> return
</pre>
return function(P,length)
if not (length >= 34) then return false end
do
local v1 = ffi.cast("uint16_t*", P+12)[0]
if not (v1 == 8) then goto L3 end
do
local v2 = P[23]
if v2 == 6 then goto L4 end
do
if v2 == 17 then goto L4 end
do
if not (v2 == 132) then return false end
end
end
::L4::
do
local v3 = ffi.cast("uint16_t*", P+20)[0]
local v4 = bit.band(v3,65311)
if not (v4 == 0) then return false end
do
local v5 = P[14]
local v6 = bit.band(v5,15)
local v7 = bit.lshift(v6,2)
local v8 = v7+16
if not (v8 <= length) then return false end
do
local v9 = v7+14
local v10 = ffi.cast("uint16_t*", P+v9)[0]
local v11 = bit.rshift(bit.bswap(v10), 16)
if v11 <= 6000 then return true end
do
local v12 = v7+18
if not (v12 <= length) then return false end
do
local v13 = ffi.cast("uint16_t*", P+v8)[0]
local v14 = bit.rshift(bit.bswap(v13), 16)
do return v14 <= 6000 end
end
end
end
end
end
end
::L3::
do
if not (length >= 56) then return false end
do
if not (v1 == 56710) then return false end
do
local v15 = P[20]
if v15 == 6 then goto L13 end
do
if not (v15 == 44) then goto L14 end
do
local v16 = P[54]
if v16 == 6 then goto L13 end
end
end
::L14::
do
if v15 == 17 then goto L13 end
do
if not (v15 == 44) then goto L17 end
do
local v17 = P[54]
if v17 == 17 then goto L13 end
end
end
::L17::
do
if v15 == 132 then goto L13 end
do
if not (v15 == 44) then return false end
do
local v18 = P[54]
if not (v18 == 132) then return false end
end
end
end
end
::L13::
do
local v19 = ffi.cast("uint16_t*", P+54)[0]
local v20 = bit.rshift(bit.bswap(v19), 16)
if v20 <= 6000 then return true end
do
if not (length >= 58) then return false end
do
local v21 = ffi.cast("uint16_t*", P+56)[0]
local v22 = bit.rshift(bit.bswap(v21), 16)
do return v22 <= 6000 end
end
end
end
end
end
end
end
end
<pre class="ljdump">
---- TRACE 53 start pflua-match:12
0006 UGET 5 0 ; ffi
0007 TGETS 5 5 0 ; "cast"
0008 KSTR 6 1 ; "struct pcap_record *"
0009 MOV 7 0
0010 CALL 5 2 3
0000 . FUNCC ; ffi.cast
0011 UGET 6 0 ; ffi
0012 TGETS 6 6 0 ; "cast"
0013 KSTR 7 2 ; "unsigned char *"
0014 ADDVN 8 5 0 ; 1
0000 . . FUNCC ; ffi.meta.__add
0015 CALL 6 2 3
0000 . FUNCC ; ffi.cast
0016 TGETS 7 5 3 ; "incl_len"
0000 . . FUNCC ; ffi.meta.__index
0017 ADDVV 7 6 7
0000 . . FUNCC ; ffi.meta.__add
0018 MOV 8 2
0019 MOV 9 6
0020 TGETS 10 5 3 ; "incl_len"
0000 . . FUNCC ; ffi.meta.__index
0021 CALL 8 2 3
0000 . FUNCF 18 ; "portrange 0-6000":1
0001 . KSHORT 2 34
0002 . ISLE 2 1
0003 . JMP 2 => 0006
0006 . GGET 2 0 ; "ffi"
0007 . TGETS 2 2 1 ; "cast"
0008 . KSTR 3 2 ; "uint16_t*"
0009 . ADDVN 4 0 0 ; 12
0000 . . . FUNCC ; ffi.meta.__add
0010 . CALL 2 2 3
0000 . . FUNCC ; ffi.cast
0011 . TGETB 2 2 0
0000 . . . FUNCC ; ffi.meta.__index
0012 . ISEQN 2 1 ; 8
0013 . JMP 3 => 0015
0015 . TGETB 3 0 23
0000 . . . FUNCC ; ffi.meta.__index
0016 . ISNEN 3 2 ; 6
0017 . JMP 4 => 0019
0018 . JMP 4 =&gt; 0026
0026 . GGET 4 0 ; "ffi"
0027 . TGETS 4 4 1 ; "cast"
0028 . KSTR 5 2 ; "uint16_t*"
0029 . ADDVN 6 0 5 ; 20
0000 . . . FUNCC ; ffi.meta.__add
0030 . CALL 4 2 3
0000 . . FUNCC ; ffi.cast
0031 . TGETB 4 4 0
0000 . . . FUNCC ; ffi.meta.__index
0032 . GGET 5 3 ; "bit"
0033 . TGETS 5 5 4 ; "band"
0034 . MOV 6 4
0035 . KNUM 7 6 ; 65311
0036 . CALL 5 2 3
0000 . . FUNCC ; bit.band
0037 . ISEQN 5 7 ; 0
0038 . JMP 6 => 0041
0041 . TGETB 6 0 14
0000 . . . FUNCC ; ffi.meta.__index
0042 . GGET 7 3 ; "bit"
0043 . TGETS 7 7 4 ; "band"
0044 . MOV 8 6
0045 . KSHORT 9 15
0046 . CALL 7 2 3
0000 . . FUNCC ; bit.band
0047 . GGET 8 3 ; "bit"
0048 . TGETS 8 8 5 ; "lshift"
0049 . MOV 9 7
0050 . KSHORT 10 2
0051 . CALL 8 2 3
0000 . . FUNCC ; bit.lshift
0052 . ADDVN 9 8 8 ; 16
0053 . ISLE 9 1
0054 . JMP 10 => 0057
0057 . ADDVN 10 8 9 ; 14
0058 . GGET 11 0 ; "ffi"
0059 . TGETS 11 11 1 ; "cast"
0060 . KSTR 12 2 ; "uint16_t*"
0061 . ADDVV 13 0 10
0000 . . . FUNCC ; ffi.meta.__add
0062 . CALL 11 2 3
0000 . . FUNCC ; ffi.cast
0063 . TGETB 11 11 0
0000 . . . FUNCC ; ffi.meta.__index
0064 . GGET 12 3 ; "bit"
0065 . TGETS 12 12 6 ; "rshift"
0066 . GGET 13 3 ; "bit"
0067 . TGETS 13 13 7 ; "bswap"
0068 . MOV 14 11
0069 . CALL 13 2 2
0000 . . FUNCC ; bit.bswap
0070 . KSHORT 14 16
0071 . CALL 12 2 3
0000 . . FUNCC ; bit.rshift
0072 . KSHORT 13 6000
0073 . ISGT 12 13
0074 . JMP 13 => 0077
0075 . KPRI 13 2
0076 . RET1 13 2
0022 ISF 8
0023 JMP 9 => 0025
0024 ADDVN 4 4 0 ; 1
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 LOOP 5 =&gt; 0028
---- TRACE 53 IR
0001 <span class="irt_fun">fun</span> SLOAD #0 R
0002 > <span class="irt_p32">p32</span> UREFO 0001 #0
0003 > <span class="irt_tab">tab</span> ULOAD 0002
0004 <span class="irt_int">int</span> FLOAD 0003 tab.hmask
0005 > <span class="irt_int">int</span> EQ 0004 <span class="irt_int">+31 </span>
0006 <span class="irt_p32">p32</span> FLOAD 0003 tab.node
0007 > <span class="irt_p32">p32</span> HREFK 0006 <span class="irt_str">"cast"</span> @6
0008 > <span class="irt_fun">fun</span> HLOAD 0007
0009 > <span class="irt_cdt">cdt</span> SLOAD #1 T
0010 > <span class="irt_fun">fun</span> EQ 0008 <span class="irt_fun">ffi.cast</span>
0011 <span class="irt_u16">u16</span> FLOAD 0009 cdata.ctypeid
0012 > <span class="irt_int">int</span> EQ 0011 <span class="irt_int">+181</span>
0013 <span class="irt_p64">p64</span> FLOAD 0009 cdata.ptr
0014 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0013
0015 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+16 </span>
0017 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0015
0018 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+8 </span>
0019 <span class="irt_u32">u32</span> XLOAD 0018
0020 <span class="irt_num">num</span> CONV 0019 <span class="irt_num">num</span>.<span class="irt_u32">u32</span>
0021 + <span class="irt_p64">p64</span> ADD 0019 0015
0022 }+ <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0021
0023 > <span class="irt_fun">fun</span> SLOAD #3 T
0024 > <span class="irt_fun">fun</span> EQ 0023 <span class="irt_fun">"portrange 0-6000":1</span>
0025 > <span class="irt_num">num</span> GE 0020 <span class="irt_num">+34 </span>
0026 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">"portrange 0-6000":1</span> func.env
0027 <span class="irt_int">int</span> FLOAD 0026 tab.hmask
0028 > <span class="irt_int">int</span> EQ 0027 <span class="irt_int">+63 </span>
0029 <span class="irt_p32">p32</span> FLOAD 0026 tab.node
0030 > <span class="irt_p32">p32</span> HREFK 0029 <span class="irt_str">"ffi"</span> @33
0031 > <span class="irt_tab">tab</span> HLOAD 0030
0032 <span class="irt_int">int</span> FLOAD 0031 tab.hmask
0033 > <span class="irt_int">int</span> EQ 0032 <span class="irt_int">+31 </span>
0034 <span class="irt_p32">p32</span> FLOAD 0031 tab.node
0035 > <span class="irt_p32">p32</span> HREFK 0034 <span class="irt_str">"cast"</span> @6
0036 > <span class="irt_fun">fun</span> HLOAD 0035
0037 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+28 </span>
0039 > <span class="irt_fun">fun</span> EQ 0036 <span class="irt_fun">ffi.cast</span>
0041 <span class="irt_u16">u16</span> XLOAD 0037
0042 > <span class="irt_int">int</span> EQ 0041 <span class="irt_int">+8 </span>
0044 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+39 </span>
0045 <span class="irt_u8 ">u8 </span> XLOAD 0044
0046 > <span class="irt_int">int</span> EQ 0045 <span class="irt_int">+6 </span>
0047 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+36 </span>
0050 <span class="irt_u16">u16</span> XLOAD 0047
0051 > <span class="irt_p32">p32</span> HREFK 0029 <span class="irt_str">"bit"</span> @38
0052 > <span class="irt_tab">tab</span> HLOAD 0051
0053 <span class="irt_int">int</span> FLOAD 0052 tab.hmask
0054 > <span class="irt_int">int</span> EQ 0053 <span class="irt_int">+15 </span>
0055 <span class="irt_p32">p32</span> FLOAD 0052 tab.node
0056 > <span class="irt_p32">p32</span> HREFK 0055 <span class="irt_str">"band"</span> @15
0057 > <span class="irt_fun">fun</span> HLOAD 0056
0058 > <span class="irt_fun">fun</span> EQ 0057 <span class="irt_fun">bit.band</span>
0059 <span class="irt_int">int</span> BAND 0050 <span class="irt_int">+65311</span>
0060 > <span class="irt_int">int</span> EQ 0059 <span class="irt_int">+0 </span>
0062 <span class="irt_p64">p64</span> ADD 0013 <span class="irt_i64">+30 </span>
0063 <span class="irt_u8 ">u8 </span> XLOAD 0062
0064 <span class="irt_int">int</span> BAND 0063 <span class="irt_int">+15 </span>
0065 > <span class="irt_p32">p32</span> HREFK 0055 <span class="irt_str">"lshift"</span> @13
0066 > <span class="irt_fun">fun</span> HLOAD 0065
0067 > <span class="irt_fun">fun</span> EQ 0066 <span class="irt_fun">bit.lshift</span>
0068 <span class="irt_int">int</span> BSHL 0063 <span class="irt_int">+2 </span>
0069 <span class="irt_int">int</span> BAND 0068 <span class="irt_int">+60 </span>
0070 > <span class="irt_int">int</span> ADDOV 0069 <span class="irt_int">+16 </span>
0071 <span class="irt_num">num</span> CONV 0070 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0072 > <span class="irt_num">num</span> LE 0071 0020
0073 > <span class="irt_int">int</span> ADDOV 0069 <span class="irt_int">+14 </span>
0074 <span class="irt_i64">i64</span> CONV 0073 <span class="irt_i64">i64</span>.<span class="irt_int">int</span> sext
0075 <span class="irt_p64">p64</span> ADD 0074 0015
0078 <span class="irt_u16">u16</span> XLOAD 0075
0079 > <span class="irt_p32">p32</span> HREFK 0055 <span class="irt_str">"rshift"</span> @5
0080 > <span class="irt_fun">fun</span> HLOAD 0079
0081 > <span class="irt_p32">p32</span> HREFK 0055 <span class="irt_str">"bswap"</span> @7
0082 > <span class="irt_fun">fun</span> HLOAD 0081
0083 > <span class="irt_fun">fun</span> EQ 0082 <span class="irt_fun">bit.bswap</span>
0084 <span class="irt_int">int</span> BSWAP 0078
0085 > <span class="irt_fun">fun</span> EQ 0080 <span class="irt_fun">bit.rshift</span>
0086 <span class="irt_int">int</span> BSHR 0084 <span class="irt_int">+16 </span>
0087 > <span class="irt_int">int</span> LE 0086 <span class="irt_int">+6000</span>
0088 > <span class="irt_num">num</span> SLOAD #5 T
0089 + <span class="irt_num">num</span> ADD 0088 <span class="irt_num">+1 </span>
0090 > <span class="irt_num">num</span> SLOAD #4 T
0091 + <span class="irt_num">num</span> ADD 0090 <span class="irt_num">+1 </span>
0092 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0093 <span class="irt_u16">u16</span> FLOAD 0092 cdata.ctypeid
0094 > <span class="irt_int">int</span> EQ 0093 <span class="irt_int">+181</span>
0095 <span class="irt_p64">p64</span> FLOAD 0092 cdata.ptr
0096 > <span class="irt_p64">p64</span> UGT 0095 0021
0097 ------ LOOP ------------
0098 > <span class="irt_p32">p32</span> UREFO 0001 #0
0099 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0021
0100 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+16 </span>
0101 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0100
0102 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+8 </span>
0103 <span class="irt_u32">u32</span> XLOAD 0102
0104 <span class="irt_num">num</span> CONV 0103 <span class="irt_num">num</span>.<span class="irt_u32">u32</span>
0105 + <span class="irt_p64">p64</span> ADD 0103 0100
0106 }+ <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0105
0107 > <span class="irt_num">num</span> GE 0104 <span class="irt_num">+34 </span>
0108 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+28 </span>
0109 <span class="irt_u16">u16</span> XLOAD 0108
0110 > <span class="irt_int">int</span> EQ 0109 <span class="irt_int">+8 </span>
0111 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+39 </span>
0112 <span class="irt_u8 ">u8 </span> XLOAD 0111
0113 > <span class="irt_int">int</span> EQ 0112 <span class="irt_int">+6 </span>
0114 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+36 </span>
0115 <span class="irt_u16">u16</span> XLOAD 0114
0116 <span class="irt_int">int</span> BAND 0115 <span class="irt_int">+65311</span>
0117 > <span class="irt_int">int</span> EQ 0116 <span class="irt_int">+0 </span>
0118 <span class="irt_p64">p64</span> ADD 0021 <span class="irt_i64">+30 </span>
0119 <span class="irt_u8 ">u8 </span> XLOAD 0118
0120 <span class="irt_int">int</span> BAND 0119 <span class="irt_int">+15 </span>
0121 <span class="irt_int">int</span> BSHL 0119 <span class="irt_int">+2 </span>
0122 <span class="irt_int">int</span> BAND 0121 <span class="irt_int">+60 </span>
0123 > <span class="irt_int">int</span> ADDOV 0122 <span class="irt_int">+16 </span>
0124 <span class="irt_num">num</span> CONV 0123 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0125 > <span class="irt_num">num</span> LE 0124 0104
0126 > <span class="irt_int">int</span> ADDOV 0122 <span class="irt_int">+14 </span>
0127 <span class="irt_i64">i64</span> CONV 0126 <span class="irt_i64">i64</span>.<span class="irt_int">int</span> sext
0128 <span class="irt_p64">p64</span> ADD 0127 0100
0129 <span class="irt_u16">u16</span> XLOAD 0128
0130 <span class="irt_int">int</span> BSWAP 0129
0131 <span class="irt_int">int</span> BSHR 0130 <span class="irt_int">+16 </span>
0132 > <span class="irt_int">int</span> LE 0131 <span class="irt_int">+6000</span>
0133 + <span class="irt_num">num</span> ADD 0089 <span class="irt_num">+1 </span>
0134 + <span class="irt_num">num</span> ADD 0091 <span class="irt_num">+1 </span>
0135 > <span class="irt_p64">p64</span> ULT 0105 0095
0136 } <span class="irt_cdt">cdt</span> PHI 0022 0106
0137 <span class="irt_p64">p64</span> PHI 0021 0105
0138 <span class="irt_num">num</span> PHI 0089 0133
0139 <span class="irt_num">num</span> PHI 0091 0134
---- TRACE 53 mcode 1024
0bcaadde mov dword [0x405d84a0], 0x35
0bcaade9 mov eax, edx
0bcaadeb movsd xmm1, [0x401f5d40]
0bcaadf4 movsd xmm0, [0x401f5ce0]
0bcaadfd mov ecx, [rax-0x8]
0bcaae00 mov edi, [rcx+0x14]
0bcaae03 mov ecx, [rdi+0x10]
0bcaae06 cmp dword [rcx+0x4], -0x0c
0bcaae0a jnz 0x0bca0010 ->0
0bcaae10 mov ecx, [rcx]
0bcaae12 cmp dword [rcx+0x1c], +0x1f
0bcaae16 jnz 0x0bca0010 ->0
0bcaae1c mov edx, [rcx+0x14]
0bcaae1f mov rdi, 0xfffffffb405f6810
0bcaae29 cmp rdi, [rdx+0x98]
0bcaae30 jnz 0x0bca0010 ->0
0bcaae36 cmp dword [rdx+0x94], -0x09
0bcaae3d jnz 0x0bca0010 ->0
0bcaae43 cmp dword [rax+0x4], -0x0b
0bcaae47 jnz 0x0bca0010 ->0
0bcaae4d mov ecx, [rax]
0bcaae4f cmp dword [rdx+0x90], 0x405ed8a8
0bcaae59 jnz 0x0bca0010 ->0
0bcaae5f movzx edx, word [rcx+0x6]
0bcaae63 cmp edx, 0xb5
0bcaae69 jnz 0x0bca0010 ->0
0bcaae6f mov r9, [rcx+0x8]
0bcaae73 mov [rsp+0x8], r9
0bcaae78 mov rdx, r9
0bcaae7b add rdx, +0x10
0bcaae7f mov ebp, [r9+0x8]
0bcaae83 xorps xmm2, xmm2
0bcaae86 cvtsi2sd xmm2, rbp
0bcaae8b add rbp, rdx
0bcaae8e cmp dword [rax+0x14], -0x09
0bcaae92 jnz 0x0bca0010 ->0
0bcaae98 cmp dword [rax+0x10], 0x409d0948
0bcaae9f jnz 0x0bca0010 ->0
0bcaaea5 ucomisd xmm2, xmm1
0bcaaea9 jb 0x0bca0014 ->1
0bcaaeaf mov ecx, [0x409d0950]
0bcaaeb6 cmp dword [rcx+0x1c], +0x3f
0bcaaeba jnz 0x0bca0018 ->2
0bcaaec0 mov ecx, [rcx+0x14]
0bcaaec3 mov rdi, 0xfffffffb405dfc60
0bcaaecd cmp rdi, [rcx+0x320]
0bcaaed4 jnz 0x0bca0018 ->2
0bcaaeda cmp dword [rcx+0x31c], -0x0c
0bcaaee1 jnz 0x0bca0018 ->2
0bcaaee7 mov ebx, [rcx+0x318]
0bcaaeed cmp dword [rbx+0x1c], +0x1f
0bcaaef1 jnz 0x0bca0018 ->2
0bcaaef7 mov ebx, [rbx+0x14]
0bcaaefa mov rdi, 0xfffffffb405f6810
0bcaaf04 cmp rdi, [rbx+0x98]
0bcaaf0b jnz 0x0bca0018 ->2
0bcaaf11 cmp dword [rbx+0x94], -0x09
0bcaaf18 jnz 0x0bca0018 ->2
0bcaaf1e cmp dword [rbx+0x90], 0x405ed8a8
0bcaaf28 jnz 0x0bca0018 ->2
0bcaaf2e movzx ebx, word [r9+0x1c]
0bcaaf33 cmp ebx, +0x08
0bcaaf36 jnz 0x0bca001c ->3
0bcaaf3c movzx esi, byte [r9+0x27]
0bcaaf41 cmp esi, +0x06
0bcaaf44 jnz 0x0bca0020 ->4
0bcaaf4a movzx edi, word [r9+0x24]
0bcaaf4f mov r15, 0xfffffffb405decf0
0bcaaf59 cmp r15, [rcx+0x398]
0bcaaf60 jnz 0x0bca0024 ->5
0bcaaf66 cmp dword [rcx+0x394], -0x0c
0bcaaf6d jnz 0x0bca0024 ->5
0bcaaf73 mov ecx, [rcx+0x390]
0bcaaf79 cmp dword [rcx+0x1c], +0x0f
0bcaaf7d jnz 0x0bca0024 ->5
0bcaaf83 mov ecx, [rcx+0x14]
0bcaaf86 mov r15, 0xfffffffb405df128
0bcaaf90 cmp r15, [rcx+0x170]
0bcaaf97 jnz 0x0bca0024 ->5
0bcaaf9d cmp dword [rcx+0x16c], -0x09
0bcaafa4 jnz 0x0bca0024 ->5
0bcaafaa cmp dword [rcx+0x168], 0x405df100
0bcaafb4 jnz 0x0bca0024 ->5
0bcaafba mov r8d, edi
0bcaafbd and r8d, 0xff1f
0bcaafc4 jnz 0x0bca0028 ->6
0bcaafca movzx r9d, byte [r9+0x1e]
0bcaafcf mov r10d, r9d
0bcaafd2 and r10d, +0x0f
0bcaafd6 mov r15, 0xfffffffb405defc0
0bcaafe0 cmp r15, [rcx+0x140]
0bcaafe7 jnz 0x0bca002c ->7
0bcaafed cmp dword [rcx+0x13c], -0x09
0bcaaff4 jnz 0x0bca002c ->7
0bcaaffa cmp dword [rcx+0x138], 0x405def98
0bcab004 jnz 0x0bca002c ->7
0bcab00a mov r11d, r9d
0bcab00d shl r11d, 0x02
0bcab011 and r11d, +0x3c
0bcab015 mov r12d, r11d
0bcab018 add r12d, +0x10
0bcab01c jo 0x0bca002c ->7
0bcab022 xorps xmm3, xmm3
0bcab025 cvtsi2sd xmm3, r12d
0bcab02a ucomisd xmm2, xmm3
0bcab02e jb 0x0bca0030 ->8
0bcab034 mov r13d, r11d
0bcab037 add r13d, +0x0e
0bcab03b jo 0x0bca0034 ->9
0bcab041 movsxd r14, r13d
0bcab044 movzx r14d, word [r14+rdx]
0bcab049 mov r15, 0xfffffffb405df008
0bcab053 cmp r15, [rcx+0x80]
0bcab05a jnz 0x0bca0034 ->9
0bcab060 cmp dword [rcx+0x7c], -0x09
0bcab064 jnz 0x0bca0034 ->9
0bcab06a mov r15, 0xfffffffb405def78
0bcab074 cmp r15, [rcx+0xb0]
0bcab07b jnz 0x0bca0034 ->9
0bcab081 cmp dword [rcx+0xac], -0x09
0bcab088 jnz 0x0bca0034 ->9
0bcab08e cmp dword [rcx+0xa8], 0x405def50
0bcab098 jnz 0x0bca0034 ->9
0bcab09e mov r15d, r14d
0bcab0a1 bswap r15d
0bcab0a4 cmp dword [rcx+0x78], 0x405defe0
0bcab0ab jnz 0x0bca0034 ->9
0bcab0b1 shr r15d, 0x10
0bcab0b5 cmp r15d, 0x1770
0bcab0bc jg 0x0bca0038 ->10
0bcab0c2 cmp dword [rax+0x24], 0xfffeffff
0bcab0c9 jnb 0x0bca003c ->11
0bcab0cf movsd xmm6, [rax+0x20]
0bcab0d4 addsd xmm6, xmm0
0bcab0d8 cmp dword [rax+0x1c], 0xfffeffff
0bcab0df jnb 0x0bca003c ->11
0bcab0e5 movsd xmm7, [rax+0x18]
0bcab0ea addsd xmm7, xmm0
0bcab0ee cmp dword [rax+0xc], -0x0b
0bcab0f2 jnz 0x0bca003c ->11
0bcab0f8 mov eax, [rax+0x8]
0bcab0fb movzx ecx, word [rax+0x6]
0bcab0ff cmp ecx, 0xb5
0bcab105 jnz 0x0bca0040 ->12
0bcab10b mov rax, [rax+0x8]
0bcab10f cmp rbp, rax
0bcab112 jnb 0x0bca0040 ->12
->LOOP:
0bcab118 mov rbx, rbp
0bcab11b mov r15, rbx
0bcab11e add r15, +0x10
0bcab122 mov ebp, [rbx+0x8]
0bcab125 xorps xmm5, xmm5
0bcab128 cvtsi2sd xmm5, rbp
0bcab12d add rbp, r15
0bcab130 ucomisd xmm5, xmm1
0bcab134 jb 0x0bca0048 ->14
0bcab13a movzx r14d, word [rbx+0x1c]
0bcab13f cmp r14d, +0x08
0bcab143 jnz 0x0bca004c ->15
0bcab149 movzx r13d, byte [rbx+0x27]
0bcab14e cmp r13d, +0x06
0bcab152 jnz 0x0bca0050 ->16
0bcab158 movzx r12d, word [rbx+0x24]
0bcab15d mov edi, r12d
0bcab160 and edi, 0xff1f
0bcab166 jnz 0x0bca0054 ->17
0bcab16c movzx esi, byte [rbx+0x1e]
0bcab170 mov edx, esi
0bcab172 and edx, +0x0f
0bcab175 mov ecx, esi
0bcab177 shl ecx, 0x02
0bcab17a and ecx, +0x3c
0bcab17d mov r11d, ecx
0bcab180 add r11d, +0x10
0bcab184 jo 0x0bca0058 ->18
0bcab18a xorps xmm4, xmm4
0bcab18d cvtsi2sd xmm4, r11d
0bcab192 ucomisd xmm5, xmm4
0bcab196 jb 0x0bca005c ->19
0bcab19c mov r10d, ecx
0bcab19f add r10d, +0x0e
0bcab1a3 jo 0x0bca0060 ->20
0bcab1a9 movsxd r9, r10d
0bcab1ac movzx r9d, word [r9+r15]
0bcab1b1 mov r8d, r9d
0bcab1b4 bswap r8d
0bcab1b7 shr r8d, 0x10
0bcab1bb cmp r8d, 0x1770
0bcab1c2 jg 0x0bca0064 ->21
0bcab1c8 addsd xmm6, xmm0
0bcab1cc addsd xmm7, xmm0
0bcab1d0 cmp rbp, rax
0bcab1d3 jb 0x0bcab118 ->LOOP
0bcab1d9 jmp 0x0bca0068 ->22
---- TRACE 53 stop -> loop
</pre>
<pre class="ljdump">
---- TRACE 54 start 53/21 "portrange 0-6000":32
0077 . ADDVN 13 8 10 ; 18
0078 . ISLE 13 1
0079 . JMP 14 => 0082
0082 . GGET 14 0 ; "ffi"
0083 . TGETS 14 14 1 ; "cast"
0084 . KSTR 15 2 ; "uint16_t*"
0085 . ADDVV 16 0 9
0000 . . . FUNCC ; ffi.meta.__add
0086 . CALL 14 2 3
0000 . . FUNCC ; ffi.cast
0087 . TGETB 14 14 0
0000 . . . FUNCC ; ffi.meta.__index
0088 . GGET 15 3 ; "bit"
0089 . TGETS 15 15 6 ; "rshift"
0090 . GGET 16 3 ; "bit"
0091 . TGETS 16 16 7 ; "bswap"
0092 . MOV 17 14
0093 . CALL 16 2 2
0000 . . FUNCC ; bit.bswap
0094 . KSHORT 17 16
0095 . CALL 15 2 3
0000 . . FUNCC ; bit.rshift
0096 . KSHORT 16 6000
0097 . ISLE 15 16
0098 . JMP 16 => 0101
0101 . KPRI 16 2
0102 . RET1 16 2
0022 ISF 8
0023 JMP 9 => 0025
0024 ADDVN 4 4 0 ; 1
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 JLOOP 5 53
---- TRACE 54 IR
0001 <span class="irt_num">num</span> SLOAD #4 PI
0002 <span class="irt_num">num</span> SLOAD #5 PI
0003 <span class="irt_num">num</span> SLOAD #11 PI
0004 <span class="irt_u16">u16</span> SLOAD #12 PI
0005 <span class="irt_u8 ">u8 </span> SLOAD #13 PI
0006 <span class="irt_u16">u16</span> SLOAD #14 PI
0007 <span class="irt_int">int</span> SLOAD #15 PI
0008 <span class="irt_u8 ">u8 </span> SLOAD #16 PI
0009 <span class="irt_int">int</span> SLOAD #17 PI
0010 <span class="irt_int">int</span> SLOAD #18 PI
0011 <span class="irt_int">int</span> SLOAD #19 PI
0012 <span class="irt_int">int</span> SLOAD #20 PI
0013 <span class="irt_u16">u16</span> SLOAD #21 PI
0014 <span class="irt_int">int</span> SLOAD #22 PI
0015 <span class="irt_p64">p64</span> PVAL #21
0016 <span class="irt_p64">p64</span> PVAL #100
0017 <span class="irt_p64">p64</span> PVAL #105
0018 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0015
0019 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0015
0020 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0016
0021 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0017
0022 > <span class="irt_nil">nil</span> GCSTEP
0023 > <span class="irt_int">int</span> ADDOV 0010 <span class="irt_int">+18 </span>
0024 <span class="irt_num">num</span> CONV 0023 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0025 > <span class="irt_num">num</span> LE 0024 0003
0026 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">"portrange 0-6000":1</span> func.env
0027 <span class="irt_int">int</span> FLOAD 0026 tab.hmask
0028 > <span class="irt_int">int</span> EQ 0027 <span class="irt_int">+63 </span>
0029 <span class="irt_p32">p32</span> FLOAD 0026 tab.node
0030 > <span class="irt_p32">p32</span> HREFK 0029 <span class="irt_str">"ffi"</span> @33
0031 > <span class="irt_tab">tab</span> HLOAD 0030
0032 <span class="irt_int">int</span> FLOAD 0031 tab.hmask
0033 > <span class="irt_int">int</span> EQ 0032 <span class="irt_int">+31 </span>
0034 <span class="irt_p32">p32</span> FLOAD 0031 tab.node
0035 > <span class="irt_p32">p32</span> HREFK 0034 <span class="irt_str">"cast"</span> @6
0036 > <span class="irt_fun">fun</span> HLOAD 0035
0037 <span class="irt_i64">i64</span> CONV 0011 <span class="irt_i64">i64</span>.<span class="irt_int">int</span> sext
0038 <span class="irt_p64">p64</span> ADD 0037 0016
0039 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0038
0040 > <span class="irt_fun">fun</span> EQ 0036 <span class="irt_fun">ffi.cast</span>
0041 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+184</span> 0038
0042 <span class="irt_u16">u16</span> XLOAD 0038
0043 > <span class="irt_p32">p32</span> HREFK 0029 <span class="irt_str">"bit"</span> @38
0044 > <span class="irt_tab">tab</span> HLOAD 0043
0045 <span class="irt_int">int</span> FLOAD 0044 tab.hmask
0046 > <span class="irt_int">int</span> EQ 0045 <span class="irt_int">+15 </span>
0047 <span class="irt_p32">p32</span> FLOAD 0044 tab.node
0048 > <span class="irt_p32">p32</span> HREFK 0047 <span class="irt_str">"rshift"</span> @5
0049 > <span class="irt_fun">fun</span> HLOAD 0048
0050 > <span class="irt_p32">p32</span> HREFK 0047 <span class="irt_str">"bswap"</span> @7
0051 > <span class="irt_fun">fun</span> HLOAD 0050
0052 > <span class="irt_fun">fun</span> EQ 0051 <span class="irt_fun">bit.bswap</span>
0053 <span class="irt_int">int</span> BSWAP 0042
0054 > <span class="irt_fun">fun</span> EQ 0049 <span class="irt_fun">bit.rshift</span>
0055 <span class="irt_int">int</span> BSHR 0053 <span class="irt_int">+16 </span>
0056 > <span class="irt_int">int</span> LE 0055 <span class="irt_int">+6000</span>
0057 <span class="irt_num">num</span> ADD 0002 <span class="irt_num">+1 </span>
0058 <span class="irt_num">num</span> ADD 0001 <span class="irt_num">+1 </span>
0059 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0060 <span class="irt_u16">u16</span> FLOAD 0059 cdata.ctypeid
0061 > <span class="irt_int">int</span> EQ 0060 <span class="irt_int">+181</span>
0062 <span class="irt_p64">p64</span> FLOAD 0059 cdata.ptr
0063 > <span class="irt_p64">p64</span> UGT 0062 0017
---- TRACE 54 mcode 729
0bcaab02 mov eax, r13d
0bcaab05 mov r13, r15
0bcaab08 mov r15d, r14d
0bcaab0b mov r14, rbx
0bcaab0e mov ebx, eax
0bcaab10 add rsp, -0x50
0bcaab14 mov dword [0x405d84a0], 0x36
0bcaab1f movsd [rsp+0x30], xmm7
0bcaab25 movsd [rsp+0x28], xmm6
0bcaab2b movsd [rsp+0x38], xmm5
0bcaab31 mov [rsp+0x18], r15d
0bcaab36 mov [rsp+0x1c], ebx
0bcaab3a mov [rsp+0x20], r12d
0bcaab3f mov [rsp+0x48], edi
0bcaab43 mov [rsp+0x40], esi
0bcaab47 mov [rsp+0x44], edx
0bcaab4b mov [rsp+0x58], ecx
0bcaab4f mov [rsp+0x54], r11d
0bcaab54 mov [rsp+0x50], r10d
0bcaab59 mov [rsp+0x4c], r9d
0bcaab5e mov [rsp+0x8], r8d
0bcaab63 mov edi, [0x405d84ac]
0bcaab6a mov esi, 0x10
0bcaab6f call 0x0041f4e0 ->lj_mem_newgco
0bcaab74 movzx ecx, byte [0x405d83e0]
0bcaab7c and ecx, +0x03
0bcaab7f or ecx, 0x00b50a00
0bcaab85 mov [rax+0x4], ecx
0bcaab88 mov [rax+0x8], r14
0bcaab8c mov r15d, eax
0bcaab8f mov edi, [0x405d84ac]
0bcaab96 mov esi, 0x10
0bcaab9b call 0x0041f4e0 ->lj_mem_newgco
0bcaaba0 movzx ecx, byte [0x405d83e0]
0bcaaba8 and ecx, +0x03
0bcaabab or ecx, 0x00b50a00
0bcaabb1 mov [rax+0x4], ecx
0bcaabb4 mov [rax+0x8], rbp
0bcaabb8 mov [rsp+0x24], eax
0bcaabbc mov edi, [0x405d83d8]
0bcaabc3 cmp edi, [0x405d83dc]
0bcaabca jb 0x0bcaabe3
0bcaabcc mov esi, 0x2
0bcaabd1 mov edi, 0x405d83b8
0bcaabd6 call 0x0041f3d0 ->lj_gc_step_jit
0bcaabdb test eax, eax
0bcaabdd jnz 0x0bca0010 ->0
0bcaabe3 mov r11d, [rsp+0x58]
0bcaabe8 mov r10d, [rsp+0x54]
0bcaabed mov eax, [rsp+0x24]
0bcaabf1 movsd xmm7, [rsp+0x38]
0bcaabf7 movsd xmm5, [rsp+0x30]
0bcaabfd movsd xmm4, [rsp+0x28]
0bcaac03 movsd xmm3, [0x401f5ce0]
0bcaac0c mov ebx, r11d
0bcaac0f add ebx, +0x12
0bcaac12 jo 0x0bca0010 ->0
0bcaac18 mov [rsp+0xc], ebx
0bcaac1c xorps xmm6, xmm6
0bcaac1f cvtsi2sd xmm6, ebx
0bcaac23 ucomisd xmm7, xmm6
0bcaac27 jb 0x0bca0014 ->1
0bcaac2d mov ebx, [0x409d0950]
0bcaac34 cmp dword [rbx+0x1c], +0x3f
0bcaac38 jnz 0x0bca0018 ->2
0bcaac3e mov r12d, [rbx+0x14]
0bcaac42 mov rdi, 0xfffffffb405dfc60
0bcaac4c cmp rdi, [r12+0x320]
0bcaac54 jnz 0x0bca0018 ->2
0bcaac5a cmp dword [r12+0x31c], -0x0c
0bcaac63 jnz 0x0bca0018 ->2
0bcaac69 mov ebx, [r12+0x318]
0bcaac71 cmp dword [rbx+0x1c], +0x1f
0bcaac75 jnz 0x0bca0018 ->2
0bcaac7b mov edi, [rbx+0x14]
0bcaac7e mov rbx, 0xfffffffb405f6810
0bcaac88 cmp rbx, [rdi+0x98]
0bcaac8f jnz 0x0bca0018 ->2
0bcaac95 cmp dword [rdi+0x94], -0x09
0bcaac9c jnz 0x0bca0018 ->2
0bcaaca2 movsxd rbx, r10d
0bcaaca5 cmp dword [rdi+0x90], 0x405ed8a8
0bcaacaf jnz 0x0bca0018 ->2
0bcaacb5 movzx ebx, word [rbx+r13]
0bcaacba mov [rsp+0x10], ebx
0bcaacbe mov rdi, 0xfffffffb405decf0
0bcaacc8 cmp rdi, [r12+0x398]
0bcaacd0 jnz 0x0bca0018 ->2
0bcaacd6 cmp dword [r12+0x394], -0x0c
0bcaacdf jnz 0x0bca0018 ->2
0bcaace5 mov r12d, [r12+0x390]
0bcaaced cmp dword [r12+0x1c], +0x0f
0bcaacf3 jnz 0x0bca0018 ->2
0bcaacf9 mov r12d, [r12+0x14]
0bcaacfe mov rdi, 0xfffffffb405df008
0bcaad08 cmp rdi, [r12+0x80]
0bcaad10 jnz 0x0bca0018 ->2
0bcaad16 cmp dword [r12+0x7c], -0x09
0bcaad1c jnz 0x0bca0018 ->2
0bcaad22 mov rdi, 0xfffffffb405def78
0bcaad2c cmp rdi, [r12+0xb0]
0bcaad34 jnz 0x0bca0018 ->2
0bcaad3a cmp dword [r12+0xac], -0x09
0bcaad43 jnz 0x0bca0018 ->2
0bcaad49 cmp dword [r12+0xa8], 0x405def50
0bcaad55 jnz 0x0bca0018 ->2
0bcaad5b bswap ebx
0bcaad5d cmp dword [r12+0x78], 0x405defe0
0bcaad66 jnz 0x0bca0018 ->2
0bcaad6c shr ebx, 0x10
0bcaad6f mov [rsp+0x14], ebx
0bcaad73 cmp dword [rsp+0x14], 0x1770
0bcaad7b jg 0x0bca001c ->3
0bcaad81 mov edx, [0x405d84b0]
0bcaad88 movaps xmm6, xmm4
0bcaad8b addsd xmm6, xmm3
0bcaad8f movaps xmm7, xmm5
0bcaad92 addsd xmm7, xmm3
0bcaad96 cmp dword [rdx+0xc], -0x0b
0bcaad9a jnz 0x0bca0020 ->4
0bcaada0 mov ebx, [rdx+0x8]
0bcaada3 movzx r15d, word [rbx+0x6]
0bcaada8 cmp r15d, 0xb5
0bcaadaf jnz 0x0bca0024 ->5
0bcaadb5 cmp rbp, [rbx+0x8]
0bcaadb9 jnb 0x0bca0024 ->5
0bcaadbf movsd [rdx+0x20], xmm6
0bcaadc4 movsd [rdx+0x18], xmm7
0bcaadc9 mov dword [rdx+0x4], 0xfffffff5
0bcaadd0 mov [rdx], eax
0bcaadd2 add rsp, +0x50
0bcaadd6 jmp 0x0bcaadde
---- TRACE 54 stop -> 53
</pre>
<pre class="ljdump">
---- TRACE 55 start 53/10 "portrange 0-6000":32
0077 . ADDVN 13 8 10 ; 18
0078 . ISLE 13 1
0079 . JMP 14 => 0082
0082 . GGET 14 0 ; "ffi"
0083 . TGETS 14 14 1 ; "cast"
0084 . KSTR 15 2 ; "uint16_t*"
0085 . ADDVV 16 0 9
0000 . . . FUNCC ; ffi.meta.__add
0086 . CALL 14 2 3
0000 . . FUNCC ; ffi.cast
0087 . TGETB 14 14 0
0000 . . . FUNCC ; ffi.meta.__index
0088 . GGET 15 3 ; "bit"
0089 . TGETS 15 15 6 ; "rshift"
0090 . GGET 16 3 ; "bit"
0091 . TGETS 16 16 7 ; "bswap"
0092 . MOV 17 14
0093 . CALL 16 2 2
0000 . . FUNCC ; bit.bswap
0094 . KSHORT 17 16
0095 . CALL 15 2 3
0000 . . FUNCC ; bit.rshift
0096 . KSHORT 16 6000
0097 . ISLE 15 16
0098 . JMP 16 => 0101
0101 . KPRI 16 2
0102 . RET1 16 2
0022 ISF 8
0023 JMP 9 => 0025
0024 ADDVN 4 4 0 ; 1
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 JLOOP 5 53
---- TRACE 55 IR
0001 <span class="irt_num">num</span> SLOAD #11 PI
0002 <span class="irt_u16">u16</span> SLOAD #12 PI
0003 <span class="irt_u8 ">u8 </span> SLOAD #13 PI
0004 <span class="irt_u16">u16</span> SLOAD #14 PI
0005 <span class="irt_int">int</span> SLOAD #15 PI
0006 <span class="irt_u8 ">u8 </span> SLOAD #16 PI
0007 <span class="irt_int">int</span> SLOAD #17 PI
0008 <span class="irt_int">int</span> SLOAD #18 PI
0009 <span class="irt_int">int</span> SLOAD #19 PI
0010 <span class="irt_int">int</span> SLOAD #20 PI
0011 <span class="irt_u16">u16</span> SLOAD #21 PI
0012 <span class="irt_int">int</span> SLOAD #22 PI
0013 <span class="irt_p64">p64</span> PVAL #13
0014 <span class="irt_p64">p64</span> PVAL #15
0015 <span class="irt_p64">p64</span> PVAL #21
0016 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0013
0017 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0014
0018 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0015
0019 > <span class="irt_nil">nil</span> GCSTEP
0020 > <span class="irt_int">int</span> ADDOV 0008 <span class="irt_int">+18 </span>
0021 <span class="irt_num">num</span> CONV 0020 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0022 > <span class="irt_num">num</span> LE 0021 0001
0023 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">"portrange 0-6000":1</span> func.env
0024 <span class="irt_int">int</span> FLOAD 0023 tab.hmask
0025 > <span class="irt_int">int</span> EQ 0024 <span class="irt_int">+63 </span>
0026 <span class="irt_p32">p32</span> FLOAD 0023 tab.node
0027 > <span class="irt_p32">p32</span> HREFK 0026 <span class="irt_str">"ffi"</span> @33
0028 > <span class="irt_tab">tab</span> HLOAD 0027
0029 <span class="irt_int">int</span> FLOAD 0028 tab.hmask
0030 > <span class="irt_int">int</span> EQ 0029 <span class="irt_int">+31 </span>
0031 <span class="irt_p32">p32</span> FLOAD 0028 tab.node
0032 > <span class="irt_p32">p32</span> HREFK 0031 <span class="irt_str">"cast"</span> @6
0033 > <span class="irt_fun">fun</span> HLOAD 0032
0034 <span class="irt_i64">i64</span> CONV 0009 <span class="irt_i64">i64</span>.<span class="irt_int">int</span> sext
0035 <span class="irt_p64">p64</span> ADD 0034 0014
0036 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0035
0037 > <span class="irt_fun">fun</span> EQ 0033 <span class="irt_fun">ffi.cast</span>
0038 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+184</span> 0035
0039 <span class="irt_u16">u16</span> XLOAD 0035
0040 > <span class="irt_p32">p32</span> HREFK 0026 <span class="irt_str">"bit"</span> @38
0041 > <span class="irt_tab">tab</span> HLOAD 0040
0042 <span class="irt_int">int</span> FLOAD 0041 tab.hmask
0043 > <span class="irt_int">int</span> EQ 0042 <span class="irt_int">+15 </span>
0044 <span class="irt_p32">p32</span> FLOAD 0041 tab.node
0045 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"rshift"</span> @5
0046 > <span class="irt_fun">fun</span> HLOAD 0045
0047 > <span class="irt_p32">p32</span> HREFK 0044 <span class="irt_str">"bswap"</span> @7
0048 > <span class="irt_fun">fun</span> HLOAD 0047
0049 > <span class="irt_fun">fun</span> EQ 0048 <span class="irt_fun">bit.bswap</span>
0050 <span class="irt_int">int</span> BSWAP 0039
0051 > <span class="irt_fun">fun</span> EQ 0046 <span class="irt_fun">bit.rshift</span>
0052 <span class="irt_int">int</span> BSHR 0050 <span class="irt_int">+16 </span>
0053 > <span class="irt_int">int</span> LE 0052 <span class="irt_int">+6000</span>
0054 > <span class="irt_num">num</span> SLOAD #5 T
0055 <span class="irt_num">num</span> ADD 0054 <span class="irt_num">+1 </span>
0056 > <span class="irt_num">num</span> SLOAD #4 T
0057 <span class="irt_num">num</span> ADD 0056 <span class="irt_num">+1 </span>
0058 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0059 <span class="irt_u16">u16</span> FLOAD 0058 cdata.ctypeid
0060 > <span class="irt_int">int</span> EQ 0059 <span class="irt_int">+181</span>
0061 <span class="irt_p64">p64</span> FLOAD 0058 cdata.ptr
0062 > <span class="irt_p64">p64</span> UGT 0061 0015
---- TRACE 55 mcode 659
0bcaa86c mov ecx, ebx
0bcaa86e mov ebx, r15d
0bcaa871 mov r15, [rsp+0x8]
0bcaa876 add rsp, -0x40
0bcaa87a mov dword [0x405d84a0], 0x37
0bcaa885 movsd [rsp+0x20], xmm2
0bcaa88b mov [rsp+0x14], ecx
0bcaa88f mov [rsp+0x18], esi
0bcaa893 mov [rsp+0x1c], edi
0bcaa897 mov [rsp+0x38], r8d
0bcaa89c mov [rsp+0x3c], r9d
0bcaa8a1 mov [rsp+0x40], r10d
0bcaa8a6 mov [rsp+0x44], r11d
0bcaa8ab mov [rsp+0x2c], ebx
0bcaa8af mov [rsp+0x30], rdx
0bcaa8b4 mov edi, [0x405d84ac]
0bcaa8bb mov esi, 0x10
0bcaa8c0 call 0x0041f4e0 ->lj_mem_newgco
0bcaa8c5 movzx ecx, byte [0x405d83e0]
0bcaa8cd and ecx, +0x03
0bcaa8d0 or ecx, 0x00b50a00
0bcaa8d6 mov [rax+0x4], ecx
0bcaa8d9 mov [rax+0x8], rbp
0bcaa8dd mov [rsp+0x28], eax
0bcaa8e1 mov edi, [0x405d83d8]
0bcaa8e8 cmp edi, [0x405d83dc]
0bcaa8ef jb 0x0bcaa908
0bcaa8f1 mov esi, 0x1
0bcaa8f6 mov edi, 0x405d83b8
0bcaa8fb call 0x0041f3d0 ->lj_gc_step_jit
0bcaa900 test eax, eax
0bcaa902 jnz 0x0bca0010 ->0
0bcaa908 mov r11d, [rsp+0x44]
0bcaa90d mov rdx, [rsp+0x30]
0bcaa912 mov eax, [rsp+0x28]
0bcaa916 movsd xmm5, [0x401f5ce0]
0bcaa91f movsd xmm2, [rsp+0x20]
0bcaa925 mov ebx, r11d
0bcaa928 add ebx, +0x12
0bcaa92b jo 0x0bca0010 ->0
0bcaa931 mov [rsp+0x8], ebx
0bcaa935 xorps xmm7, xmm7
0bcaa938 cvtsi2sd xmm7, ebx
0bcaa93c ucomisd xmm2, xmm7
0bcaa940 jb 0x0bca0014 ->1
0bcaa946 mov ebx, [0x409d0950]
0bcaa94d cmp dword [rbx+0x1c], +0x3f
0bcaa951 jnz 0x0bca0018 ->2
0bcaa957 mov edi, [rbx+0x14]
0bcaa95a mov rsi, 0xfffffffb405dfc60
0bcaa964 cmp rsi, [rdi+0x320]
0bcaa96b jnz 0x0bca0018 ->2
0bcaa971 cmp dword [rdi+0x31c], -0x0c
0bcaa978 jnz 0x0bca0018 ->2
0bcaa97e mov ebx, [rdi+0x318]
0bcaa984 cmp dword [rbx+0x1c], +0x1f
0bcaa988 jnz 0x0bca0018 ->2
0bcaa98e mov esi, [rbx+0x14]
0bcaa991 mov rbx, 0xfffffffb405f6810
0bcaa99b cmp rbx, [rsi+0x98]
0bcaa9a2 jnz 0x0bca0018 ->2
0bcaa9a8 cmp dword [rsi+0x94], -0x09
0bcaa9af jnz 0x0bca0018 ->2
0bcaa9b5 movsxd rbx, r12d
0bcaa9b8 cmp dword [rsi+0x90], 0x405ed8a8
0bcaa9c2 jnz 0x0bca0018 ->2
0bcaa9c8 movzx ebx, word [rbx+rdx]
0bcaa9cc mov [rsp+0xc], ebx
0bcaa9d0 mov rsi, 0xfffffffb405decf0
0bcaa9da cmp rsi, [rdi+0x398]
0bcaa9e1 jnz 0x0bca0018 ->2
0bcaa9e7 cmp dword [rdi+0x394], -0x0c
0bcaa9ee jnz 0x0bca0018 ->2
0bcaa9f4 mov edi, [rdi+0x390]
0bcaa9fa cmp dword [rdi+0x1c], +0x0f
0bcaa9fe jnz 0x0bca0018 ->2
0bcaaa04 mov esi, [rdi+0x14]
0bcaaa07 mov rdi, 0xfffffffb405df008
0bcaaa11 cmp rdi, [rsi+0x80]
0bcaaa18 jnz 0x0bca0018 ->2
0bcaaa1e cmp dword [rsi+0x7c], -0x09
0bcaaa22 jnz 0x0bca0018 ->2
0bcaaa28 mov rdi, 0xfffffffb405def78
0bcaaa32 cmp rdi, [rsi+0xb0]
0bcaaa39 jnz 0x0bca0018 ->2
0bcaaa3f cmp dword [rsi+0xac], -0x09
0bcaaa46 jnz 0x0bca0018 ->2
0bcaaa4c cmp dword [rsi+0xa8], 0x405def50
0bcaaa56 jnz 0x0bca0018 ->2
0bcaaa5c bswap ebx
0bcaaa5e cmp dword [rsi+0x78], 0x405defe0
0bcaaa65 jnz 0x0bca0018 ->2
0bcaaa6b shr ebx, 0x10
0bcaaa6e mov [rsp+0x10], ebx
0bcaaa72 cmp dword [rsp+0x10], 0x1770
0bcaaa7a jg 0x0bca001c ->3
0bcaaa80 mov ebx, [0x405d84b0]
0bcaaa87 cmp dword [rbx+0x24], 0xfffeffff
0bcaaa8e jnb 0x0bca0020 ->4
0bcaaa94 movsd xmm6, [rbx+0x20]
0bcaaa99 addsd xmm6, xmm5
0bcaaa9d cmp dword [rbx+0x1c], 0xfffeffff
0bcaaaa4 jnb 0x0bca0020 ->4
0bcaaaaa movsd xmm7, [rbx+0x18]
0bcaaaaf addsd xmm7, xmm5
0bcaaab3 cmp dword [rbx+0xc], -0x0b
0bcaaab7 jnz 0x0bca0020 ->4
0bcaaabd mov ebx, [rbx+0x8]
0bcaaac0 mov edx, [0x405d84b0]
0bcaaac7 movzx r15d, word [rbx+0x6]
0bcaaacc cmp r15d, 0xb5
0bcaaad3 jnz 0x0bca0024 ->5
0bcaaad9 cmp rbp, [rbx+0x8]
0bcaaadd jnb 0x0bca0024 ->5
0bcaaae3 movsd [rdx+0x20], xmm6
0bcaaae8 movsd [rdx+0x18], xmm7
0bcaaaed mov dword [rdx+0x4], 0xfffffff5
0bcaaaf4 mov [rdx], eax
0bcaaaf6 add rsp, +0x40
0bcaaafa jmp 0x0bcaadde
---- TRACE 55 stop -> 53
</pre>
<pre class="ljdump">
---- TRACE 56 start 53/4 "portrange 0-6000":10
0019 . ISNEN 3 3 ; 17
0020 . JMP 4 => 0022
0021 . JMP 4 =&gt; 0026
0026 . GGET 4 0 ; "ffi"
0027 . TGETS 4 4 1 ; "cast"
0028 . KSTR 5 2 ; "uint16_t*"
0029 . ADDVN 6 0 5 ; 20
0000 . . . FUNCC ; ffi.meta.__add
0030 . CALL 4 2 3
0000 . . FUNCC ; ffi.cast
0031 . TGETB 4 4 0
0000 . . . FUNCC ; ffi.meta.__index
0032 . GGET 5 3 ; "bit"
0033 . TGETS 5 5 4 ; "band"
0034 . MOV 6 4
0035 . KNUM 7 6 ; 65311
0036 . CALL 5 2 3
0000 . . FUNCC ; bit.band
0037 . ISEQN 5 7 ; 0
0038 . JMP 6 => 0041
0041 . TGETB 6 0 14
0000 . . . FUNCC ; ffi.meta.__index
0042 . GGET 7 3 ; "bit"
0043 . TGETS 7 7 4 ; "band"
0044 . MOV 8 6
0045 . KSHORT 9 15
0046 . CALL 7 2 3
0000 . . FUNCC ; bit.band
0047 . GGET 8 3 ; "bit"
0048 . TGETS 8 8 5 ; "lshift"
0049 . MOV 9 7
0050 . KSHORT 10 2
0051 . CALL 8 2 3
0000 . . FUNCC ; bit.lshift
0052 . ADDVN 9 8 8 ; 16
0053 . ISLE 9 1
0054 . JMP 10 => 0057
0057 . ADDVN 10 8 9 ; 14
0058 . GGET 11 0 ; "ffi"
0059 . TGETS 11 11 1 ; "cast"
0060 . KSTR 12 2 ; "uint16_t*"
0061 . ADDVV 13 0 10
0000 . . . FUNCC ; ffi.meta.__add
0062 . CALL 11 2 3
0000 . . FUNCC ; ffi.cast
0063 . TGETB 11 11 0
0000 . . . FUNCC ; ffi.meta.__index
0064 . GGET 12 3 ; "bit"
0065 . TGETS 12 12 6 ; "rshift"
0066 . GGET 13 3 ; "bit"
0067 . TGETS 13 13 7 ; "bswap"
0068 . MOV 14 11
0069 . CALL 13 2 2
0000 . . FUNCC ; bit.bswap
0070 . KSHORT 14 16
0071 . CALL 12 2 3
0000 . . FUNCC ; bit.rshift
0072 . KSHORT 13 6000
0073 . ISGT 12 13
0074 . JMP 13 => 0077
0075 . KPRI 13 2
0076 . RET1 13 2
0022 ISF 8
0023 JMP 9 => 0025
0024 ADDVN 4 4 0 ; 1
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 JLOOP 5 53
---- TRACE 56 IR
0001 <span class="irt_num">num</span> SLOAD #11 PI
0002 <span class="irt_u16">u16</span> SLOAD #12 PI
0003 <span class="irt_u8 ">u8 </span> SLOAD #13 PI
0004 <span class="irt_p64">p64</span> PVAL #13
0005 <span class="irt_p64">p64</span> PVAL #15
0006 <span class="irt_p64">p64</span> PVAL #21
0007 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0004
0008 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0005
0009 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0006
0010 > <span class="irt_nil">nil</span> GCSTEP
0011 > <span class="irt_int">int</span> EQ 0003 <span class="irt_int">+17 </span>
0012 <span class="irt_tab">tab</span> FLOAD <span class="irt_fun">"portrange 0-6000":1</span> func.env
0013 <span class="irt_int">int</span> FLOAD 0012 tab.hmask
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+63 </span>
0015 <span class="irt_p32">p32</span> FLOAD 0012 tab.node
0016 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"ffi"</span> @33
0017 > <span class="irt_tab">tab</span> HLOAD 0016
0018 <span class="irt_int">int</span> FLOAD 0017 tab.hmask
0019 > <span class="irt_int">int</span> EQ 0018 <span class="irt_int">+31 </span>
0020 <span class="irt_p32">p32</span> FLOAD 0017 tab.node
0021 > <span class="irt_p32">p32</span> HREFK 0020 <span class="irt_str">"cast"</span> @6
0022 > <span class="irt_fun">fun</span> HLOAD 0021
0023 <span class="irt_p64">p64</span> ADD 0005 <span class="irt_i64">+20 </span>
0024 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0023
0025 > <span class="irt_fun">fun</span> EQ 0022 <span class="irt_fun">ffi.cast</span>
0026 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+184</span> 0023
0027 <span class="irt_u16">u16</span> XLOAD 0023
0028 > <span class="irt_p32">p32</span> HREFK 0015 <span class="irt_str">"bit"</span> @38
0029 > <span class="irt_tab">tab</span> HLOAD 0028
0030 <span class="irt_int">int</span> FLOAD 0029 tab.hmask
0031 > <span class="irt_int">int</span> EQ 0030 <span class="irt_int">+15 </span>
0032 <span class="irt_p32">p32</span> FLOAD 0029 tab.node
0033 > <span class="irt_p32">p32</span> HREFK 0032 <span class="irt_str">"band"</span> @15
0034 > <span class="irt_fun">fun</span> HLOAD 0033
0035 > <span class="irt_fun">fun</span> EQ 0034 <span class="irt_fun">bit.band</span>
0036 <span class="irt_int">int</span> BAND 0027 <span class="irt_int">+65311</span>
0037 > <span class="irt_int">int</span> EQ 0036 <span class="irt_int">+0 </span>
0038 <span class="irt_p64">p64</span> ADD 0005 <span class="irt_i64">+14 </span>
0039 <span class="irt_u8 ">u8 </span> XLOAD 0038
0040 <span class="irt_int">int</span> BAND 0039 <span class="irt_int">+15 </span>
0041 > <span class="irt_p32">p32</span> HREFK 0032 <span class="irt_str">"lshift"</span> @13
0042 > <span class="irt_fun">fun</span> HLOAD 0041
0043 > <span class="irt_fun">fun</span> EQ 0042 <span class="irt_fun">bit.lshift</span>
0044 <span class="irt_int">int</span> BSHL 0039 <span class="irt_int">+2 </span>
0045 <span class="irt_int">int</span> BAND 0044 <span class="irt_int">+60 </span>
0046 > <span class="irt_int">int</span> ADDOV 0045 <span class="irt_int">+16 </span>
0047 <span class="irt_num">num</span> CONV 0046 <span class="irt_num">num</span>.<span class="irt_int">int</span>
0048 > <span class="irt_num">num</span> LE 0047 0001
0049 > <span class="irt_int">int</span> ADDOV 0045 <span class="irt_int">+14 </span>
0050 <span class="irt_i64">i64</span> CONV 0049 <span class="irt_i64">i64</span>.<span class="irt_int">int</span> sext
0051 <span class="irt_p64">p64</span> ADD 0050 0005
0052 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0051
0053 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+184</span> 0051
0054 <span class="irt_u16">u16</span> XLOAD 0051
0055 > <span class="irt_p32">p32</span> HREFK 0032 <span class="irt_str">"rshift"</span> @5
0056 > <span class="irt_fun">fun</span> HLOAD 0055
0057 > <span class="irt_p32">p32</span> HREFK 0032 <span class="irt_str">"bswap"</span> @7
0058 > <span class="irt_fun">fun</span> HLOAD 0057
0059 > <span class="irt_fun">fun</span> EQ 0058 <span class="irt_fun">bit.bswap</span>
0060 <span class="irt_int">int</span> BSWAP 0054
0061 > <span class="irt_fun">fun</span> EQ 0056 <span class="irt_fun">bit.rshift</span>
0062 <span class="irt_int">int</span> BSHR 0060 <span class="irt_int">+16 </span>
0063 > <span class="irt_int">int</span> LE 0062 <span class="irt_int">+6000</span>
0064 > <span class="irt_num">num</span> SLOAD #5 T
0065 <span class="irt_num">num</span> ADD 0064 <span class="irt_num">+1 </span>
0066 > <span class="irt_num">num</span> SLOAD #4 T
0067 <span class="irt_num">num</span> ADD 0066 <span class="irt_num">+1 </span>
0068 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0069 <span class="irt_u16">u16</span> FLOAD 0068 cdata.ctypeid
0070 > <span class="irt_int">int</span> EQ 0069 <span class="irt_int">+181</span>
0071 <span class="irt_p64">p64</span> FLOAD 0068 cdata.ptr
0072 > <span class="irt_p64">p64</span> UGT 0071 0006
---- TRACE 56 mcode 792
0bcaa551 mov r15, [rsp+0x8]
0bcaa556 add rsp, -0x20
0bcaa55a mov dword [0x405d84a0], 0x38
0bcaa565 movsd [rsp+0x10], xmm2
0bcaa56b mov [rsp+0x8], ebx
0bcaa56f mov [rsp+0x20], esi
0bcaa573 mov [rsp+0x18], rdx
0bcaa578 mov edi, [0x405d84ac]
0bcaa57f mov esi, 0x10
0bcaa584 call 0x0041f4e0 ->lj_mem_newgco
0bcaa589 movzx ecx, byte [0x405d83e0]
0bcaa591 and ecx, +0x03
0bcaa594 or ecx, 0x00b50a00
0bcaa59a mov [rax+0x4], ecx
0bcaa59d mov [rax+0x8], rbp
0bcaa5a1 mov [rsp+0xc], eax
0bcaa5a5 mov edi, [0x405d83d8]
0bcaa5ac cmp edi, [0x405d83dc]
0bcaa5b3 jb 0x0bcaa5cc
0bcaa5b5 mov esi, 0x1
0bcaa5ba mov edi, 0x405d83b8
0bcaa5bf call 0x0041f3d0 ->lj_gc_step_jit
0bcaa5c4 test eax, eax
0bcaa5c6 jnz 0x0bca0010 ->0
0bcaa5cc mov esi, [rsp+0x20]
0bcaa5d0 mov rdx, [rsp+0x18]
0bcaa5d5 mov eax, [rsp+0xc]
0bcaa5d9 movsd xmm5, [0x401f5ce0]
0bcaa5e2 movsd xmm2, [rsp+0x10]
0bcaa5e8 cmp esi, +0x11
0bcaa5eb jnz 0x0bca0014 ->1
0bcaa5f1 mov ebx, [0x409d0950]
0bcaa5f8 cmp dword [rbx+0x1c], +0x3f
0bcaa5fc jnz 0x0bca0018 ->2
0bcaa602 mov ebx, [rbx+0x14]
0bcaa605 mov rdi, 0xfffffffb405dfc60
0bcaa60f cmp rdi, [rbx+0x320]
0bcaa616 jnz 0x0bca0018 ->2
0bcaa61c cmp dword [rbx+0x31c], -0x0c
0bcaa623 jnz 0x0bca0018 ->2
0bcaa629 mov r14d, [rbx+0x318]
0bcaa630 cmp dword [r14+0x1c], +0x1f
0bcaa635 jnz 0x0bca0018 ->2
0bcaa63b mov r14d, [r14+0x14]
0bcaa63f mov rdi, 0xfffffffb405f6810
0bcaa649 cmp rdi, [r14+0x98]
0bcaa650 jnz 0x0bca0018 ->2
0bcaa656 cmp dword [r14+0x94], -0x09
0bcaa65e jnz 0x0bca0018 ->2
0bcaa664 cmp dword [r14+0x90], 0x405ed8a8
0bcaa66f jnz 0x0bca0018 ->2
0bcaa675 movzx r14d, word [rdx+0x14]
0bcaa67a mov rdi, 0xfffffffb405decf0
0bcaa684 cmp rdi, [rbx+0x398]
0bcaa68b jnz 0x0bca0018 ->2
0bcaa691 cmp dword [rbx+0x394], -0x0c
0bcaa698 jnz 0x0bca0018 ->2
0bcaa69e mov ebx, [rbx+0x390]
0bcaa6a4 cmp dword [rbx+0x1c], +0x0f
0bcaa6a8 jnz 0x0bca0018 ->2
0bcaa6ae mov ebx, [rbx+0x14]
0bcaa6b1 mov rdi, 0xfffffffb405df128
0bcaa6bb cmp rdi, [rbx+0x170]
0bcaa6c2 jnz 0x0bca0018 ->2
0bcaa6c8 cmp dword [rbx+0x16c], -0x09
0bcaa6cf jnz 0x0bca0018 ->2
0bcaa6d5 cmp dword [rbx+0x168], 0x405df100
0bcaa6df jnz 0x0bca0018 ->2
0bcaa6e5 mov r13d, r14d
0bcaa6e8 and r13d, 0xff1f
0bcaa6ef jnz 0x0bca001c ->3
0bcaa6f5 movzx r12d, byte [rdx+0xe]
0bcaa6fa mov edi, r12d
0bcaa6fd and edi, +0x0f
0bcaa700 mov rcx, 0xfffffffb405defc0
0bcaa70a cmp rcx, [rbx+0x140]
0bcaa711 jnz 0x0bca0020 ->4
0bcaa717 cmp dword [rbx+0x13c], -0x09
0bcaa71e jnz 0x0bca0020 ->4
0bcaa724 cmp dword [rbx+0x138], 0x405def98
0bcaa72e jnz 0x0bca0020 ->4
0bcaa734 mov ecx, r12d
0bcaa737 shl ecx, 0x02
0bcaa73a and ecx, +0x3c
0bcaa73d mov r11d, ecx
0bcaa740 add r11d, +0x10
0bcaa744 jo 0x0bca0020 ->4
0bcaa74a xorps xmm7, xmm7
0bcaa74d cvtsi2sd xmm7, r11d
0bcaa752 ucomisd xmm2, xmm7
0bcaa756 jb 0x0bca0024 ->5
0bcaa75c mov r10d, ecx
0bcaa75f add r10d, +0x0e
0bcaa763 jo 0x0bca0028 ->6
0bcaa769 movsxd r9, r10d
0bcaa76c movzx r9d, word [r9+rdx]
0bcaa771 mov r8, 0xfffffffb405df008
0bcaa77b cmp r8, [rbx+0x80]
0bcaa782 jnz 0x0bca0028 ->6
0bcaa788 cmp dword [rbx+0x7c], -0x09
0bcaa78c jnz 0x0bca0028 ->6
0bcaa792 mov r8, 0xfffffffb405def78
0bcaa79c cmp r8, [rbx+0xb0]
0bcaa7a3 jnz 0x0bca0028 ->6
0bcaa7a9 cmp dword [rbx+0xac], -0x09
0bcaa7b0 jnz 0x0bca0028 ->6
0bcaa7b6 cmp dword [rbx+0xa8], 0x405def50
0bcaa7c0 jnz 0x0bca0028 ->6
0bcaa7c6 mov r8d, r9d
0bcaa7c9 bswap r8d
0bcaa7cc cmp dword [rbx+0x78], 0x405defe0
0bcaa7d3 jnz 0x0bca0028 ->6
0bcaa7d9 shr r8d, 0x10
0bcaa7dd cmp r8d, 0x1770
0bcaa7e4 jg 0x0bca002c ->7
0bcaa7ea mov ebx, [0x405d84b0]
0bcaa7f1 cmp dword [rbx+0x24], 0xfffeffff
0bcaa7f8 jnb 0x0bca0030 ->8
0bcaa7fe movsd xmm6, [rbx+0x20]
0bcaa803 addsd xmm6, xmm5
0bcaa807 cmp dword [rbx+0x1c], 0xfffeffff
0bcaa80e jnb 0x0bca0030 ->8
0bcaa814 movsd xmm7, [rbx+0x18]
0bcaa819 addsd xmm7, xmm5
0bcaa81d cmp dword [rbx+0xc], -0x0b
0bcaa821 jnz 0x0bca0030 ->8
0bcaa827 mov ebx, [rbx+0x8]
0bcaa82a mov edx, [0x405d84b0]
0bcaa831 movzx r15d, word [rbx+0x6]
0bcaa836 cmp r15d, 0xb5
0bcaa83d jnz 0x0bca0034 ->9
0bcaa843 cmp rbp, [rbx+0x8]
0bcaa847 jnb 0x0bca0034 ->9
0bcaa84d movsd [rdx+0x20], xmm6
0bcaa852 movsd [rdx+0x18], xmm7
0bcaa857 mov dword [rdx+0x4], 0xfffffff5
0bcaa85e mov [rdx], eax
0bcaa860 add rsp, +0x20
0bcaa864 jmp 0x0bcaadde
---- TRACE 56 stop -> 53
</pre>
<pre class="ljdump">
---- TRACE 57 start 53/1 "portrange 0-6000":2
0004 . KPRI 2 1
0005 . RET1 2 2
0022 ISF 8
0023 JMP 9 => 0025
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 JLOOP 5 53
---- TRACE 57 IR
0001 <span class="irt_p64">p64</span> PVAL #13
0002 <span class="irt_p64">p64</span> PVAL #15
0003 <span class="irt_p64">p64</span> PVAL #21
0004 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0001
0005 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0002
0006 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0003
0007 > <span class="irt_nil">nil</span> GCSTEP
0008 > <span class="irt_num">num</span> SLOAD #4 T
0009 <span class="irt_num">num</span> ADD 0008 <span class="irt_num">+1 </span>
0010 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0011 <span class="irt_u16">u16</span> FLOAD 0010 cdata.ctypeid
0012 > <span class="irt_int">int</span> EQ 0011 <span class="irt_int">+181</span>
0013 <span class="irt_p64">p64</span> FLOAD 0010 cdata.ptr
0014 > <span class="irt_p64">p64</span> UGT 0013 0003
---- TRACE 57 mcode 222
0bcaa470 mov r15, [rsp+0x8]
0bcaa475 add rsp, -0x10
0bcaa479 mov dword [0x405d84a0], 0x39
0bcaa484 mov [rsp+0x10], rdx
0bcaa489 mov ebx, [0x405d84b0]
0bcaa490 mov edi, [0x405d84ac]
0bcaa497 mov esi, 0x10
0bcaa49c call 0x0041f4e0 ->lj_mem_newgco
0bcaa4a1 movzx ecx, byte [0x405d83e0]
0bcaa4a9 and ecx, +0x03
0bcaa4ac or ecx, 0x00b50a00
0bcaa4b2 mov [rax+0x4], ecx
0bcaa4b5 mov [rax+0x8], rbp
0bcaa4b9 mov [rsp+0x8], eax
0bcaa4bd mov edi, [0x405d83d8]
0bcaa4c4 cmp edi, [0x405d83dc]
0bcaa4cb jb 0x0bcaa4e4
0bcaa4cd mov esi, 0x1
0bcaa4d2 mov edi, 0x405d83b8
0bcaa4d7 call 0x0041f3d0 ->lj_gc_step_jit
0bcaa4dc test eax, eax
0bcaa4de jnz 0x0bca0010 ->0
0bcaa4e4 mov eax, [rsp+0x8]
0bcaa4e8 movsd xmm6, [0x401f5ce0]
0bcaa4f1 cmp dword [rbx+0x1c], 0xfffeffff
0bcaa4f8 jnb 0x0bca0010 ->0
0bcaa4fe movsd xmm7, [rbx+0x18]
0bcaa503 addsd xmm7, xmm6
0bcaa507 cmp dword [rbx+0xc], -0x0b
0bcaa50b jnz 0x0bca0010 ->0
0bcaa511 mov ebx, [rbx+0x8]
0bcaa514 mov edx, [0x405d84b0]
0bcaa51b movzx r15d, word [rbx+0x6]
0bcaa520 cmp r15d, 0xb5
0bcaa527 jnz 0x0bca0014 ->1
0bcaa52d cmp rbp, [rbx+0x8]
0bcaa531 jnb 0x0bca0014 ->1
0bcaa537 movsd [rdx+0x18], xmm7
0bcaa53c mov dword [rdx+0x4], 0xfffffff5
0bcaa543 mov [rdx], eax
0bcaa545 add rsp, +0x10
0bcaa549 jmp 0x0bcaadde
---- TRACE 57 stop -> 53
</pre>
<pre class="ljdump">
---- TRACE 58 start 53/14 "portrange 0-6000":2
0004 . KPRI 2 1
0005 . RET1 2 2
0022 ISF 8
0023 JMP 9 => 0025
0025 ADDVN 3 3 0 ; 1
0026 MOV 0 7
0027 JMP 5 =&gt; 0003
0003 ISGE 0 1
0004 JMP 5 => 0028
0000 . . FUNCC ; ffi.meta.__lt
0005 JLOOP 5 53
---- TRACE 58 IR
0001 <span class="irt_num">num</span> SLOAD #4 PI
0002 <span class="irt_num">num</span> SLOAD #5 PI
0003 <span class="irt_p64">p64</span> PVAL #21
0004 <span class="irt_p64">p64</span> PVAL #100
0005 <span class="irt_p64">p64</span> PVAL #105
0006 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0003
0007 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+183</span> 0003
0008 } <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0004
0009 + <span class="irt_cdt">cdt</span> CNEWI <span class="irt_int">+181</span> 0005
0010 > <span class="irt_nil">nil</span> GCSTEP
0011 <span class="irt_num">num</span> ADD 0001 <span class="irt_num">+1 </span>
0012 > <span class="irt_cdt">cdt</span> SLOAD #2 T
0013 <span class="irt_u16">u16</span> FLOAD 0012 cdata.ctypeid
0014 > <span class="irt_int">int</span> EQ 0013 <span class="irt_int">+181</span>
0015 <span class="irt_p64">p64</span> FLOAD 0012 cdata.ptr
0016 > <span class="irt_p64">p64</span> UGT 0015 0005
---- TRACE 58 mcode 269
0bcaa360 mov r13, r15
0bcaa363 mov r14, rbx
0bcaa366 add rsp, -0x10
0bcaa36a mov dword [0x405d84a0], 0x3a
0bcaa375 movsd [rsp+0x8], xmm7
0bcaa37b movsd [rsp+0x10], xmm6
0bcaa381 mov edi, [0x405d84ac]
0bcaa388 mov esi, 0x10
0bcaa38d call 0x0041f4e0 ->lj_mem_newgco
0bcaa392 movzx ecx, byte [0x405d83e0]
0bcaa39a and ecx, +0x03
0bcaa39d or ecx, 0x00b50a00
0bcaa3a3 mov [rax+0x4], ecx
0bcaa3a6 mov [rax+0x8], r14
0bcaa3aa mov r15d, eax
0bcaa3ad mov edi, [0x405d84ac]
0bcaa3b4 mov esi, 0x10
0bcaa3b9 call 0x0041f4e0 ->lj_mem_newgco
0bcaa3be movzx ecx, byte [0x405d83e0]
0bcaa3c6 and ecx, +0x03
0bcaa3c9 or ecx, 0x00b50a00
0bcaa3cf mov [rax+0x4], ecx
0bcaa3d2 mov [rax+0x8], rbp
0bcaa3d6 mov [rsp+0x18], eax
0bcaa3da mov edi, [0x405d83d8]
0bcaa3e1 cmp edi, [0x405d83dc]
0bcaa3e8 jb 0x0bcaa401
0bcaa3ea mov esi, 0x2
0bcaa3ef mov edi, 0x405d83b8
0bcaa3f4 call 0x0041f3d0 ->lj_gc_step_jit
0bcaa3f9 test eax, eax
0bcaa3fb jnz 0x0bca0010 ->0
0bcaa401 mov edx, [0x405d84b0]
0bcaa408 mov eax, [rsp+0x18]
0bcaa40c movsd xmm6, [rsp+0x10]
0bcaa412 movsd xmm5, [rsp+0x8]
0bcaa418 movsd xmm4, [0x401f5ce0]
0bcaa421 movaps xmm7, xmm5
0bcaa424 addsd xmm7, xmm4
0bcaa428 cmp dword [rdx+0xc], -0x0b
0bcaa42c jnz 0x0bca0010 ->0
0bcaa432 mov ebx, [rdx+0x8]
0bcaa435 movzx r15d, word [rbx+0x6]
0bcaa43a cmp r15d, 0xb5
0bcaa441 jnz 0x0bca0014 ->1
0bcaa447 cmp rbp, [rbx+0x8]
0bcaa44b jnb 0x0bca0014 ->1
0bcaa451 movsd [rdx+0x20], xmm6
0bcaa456 movsd [rdx+0x18], xmm7
0bcaa45b mov dword [rdx+0x4], 0xfffffff5
0bcaa462 mov [rdx], eax
0bcaa464 add rsp, +0x10
0bcaa468 jmp 0x0bcaadde
---- TRACE 58 stop -> 53
</pre>
Matched 19574/19589 packets from /home/wingo/src/pflua-bench/savefiles/wingolog.org.pcap (9.119646 MPPS).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment