Last active
June 16, 2016 11:35
-
-
Save harendra-kumar/7d34c6745f604a15a872768e57cd2447 to your computer and use it in GitHub Desktop.
Execution trace
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# GHC 7.10.3 NO llvm | |
# Start of loop | |
# c4ic: | |
# Heap check + 48 | |
=> 0x408d2a: add $0x30,%r12 | |
=> 0x408d2e: cmp 0x358(%r13),%r12 | |
=> 0x408d35: ja 0x4094af | |
# c4mw: | |
# Loop realloc check logic | |
=> 0x408d3b: lea 0xb(%r10),%r14 | |
=> 0x408d3f: cmp %r14,%r8 | |
=> 0x408d42: jl 0x409413 | |
# c4pw: | |
# Loop termination condition | |
=> 0x408d48: cmp %rsi,%r11 | |
=> 0x408d4b: jge 0x40969f | |
# c4ps: | |
# Loop real logic begin | |
=> 0x408d51: movzwl 0x10(%rcx,%r11,2),%r14d | |
=> 0x408d57: cmp $0xd800,%r14 | |
=> 0x408d5e: jae 0x4091f1 | |
# c4p8: | |
# Heap - 48 | |
=> 0x408d64: add $0xffffffffffffffd0,%r12 | |
=> 0x408d68: inc %r11 | |
# _n4se: | |
# Register shuffle | |
# r14 <-> r11 | |
=> 0x408d6b: mov %r11,0x98(%rsp) | |
=> 0x408d73: mov %r14,%r11 | |
=> 0x408d76: mov 0x98(%rsp),%r14 | |
# stack.rbx -> r10 -> r9 -> r8 -> rdi -> rsi -> rdx -> rcx -> rbx -> stack.rbx | |
=> 0x408d7e: mov %rbx,0x90(%rsp) | |
=> 0x408d86: mov %rcx,%rbx | |
=> 0x408d89: mov %rdx,%rcx | |
=> 0x408d8c: mov %rsi,%rdx | |
=> 0x408d8f: mov %rdi,%rsi | |
=> 0x408d92: mov %r8,%rdi | |
=> 0x408d95: mov %r9,%r8 | |
=> 0x408d98: mov %r10,%r9 | |
=> 0x408d9b: mov 0x90(%rsp),%r10 | |
# c4jd: | |
# Heap check + 32 | |
=> 0x408da3: add $0x20,%r12 | |
=> 0x408da7: cmp 0x358(%r13),%r12 | |
=> 0x408dae: ja 0x4094eb | |
# c4mz: | |
# r11 -> rax -> stack | |
=> 0x408db4: mov %rax,0x88(%rsp) | |
=> 0x408dbc: mov %r11,%rax | |
# Logic condition | |
=> 0x408dbf: cmp $0xac00,%r11 | |
=> 0x408dc6: jl 0x40952b | |
# c4oH: | |
# Heap -32 | |
=> 0x40952b: add $0xffffffffffffffe0,%r12 | |
# Loop real processing logic | |
# Uses rax = char, r10 = ri, r9 = di | |
=> 0x40952f: cmp $0xc0,%rax | |
=> 0x409535: jl 0x409058 | |
=> 0x409058: cmp $0x1,%r10 | |
=> 0x40905c: jl 0x409104 | |
=> 0x409062: cmp $0x1,%r10 | |
=> 0x409066: jne 0x409552 | |
=> 0x40906c: cmp $0x300,%rax | |
=> 0x409072: jl 0x4090d7 | |
=> 0x4090d7: xor %eax,%eax | |
=> 0x4090d9: inc %r9 | |
# _n4s8: | |
# Register shuffle back | |
=> 0x4090dc: mov %r14,%r11 | |
=> 0x4090df: mov %r9,%r10 | |
=> 0x4090e2: mov %r8,%r9 | |
=> 0x4090e5: mov %rdi,%r8 | |
=> 0x4090e8: mov %rsi,%rdi | |
=> 0x4090eb: mov %rdx,%rsi | |
=> 0x4090ee: mov %rcx,%rdx | |
=> 0x4090f1: mov %rbx,%rcx | |
=> 0x4090f4: mov %rax,%rbx | |
=> 0x4090f7: mov 0x88(%rsp),%rax | |
# Jump back to start of loop | |
=> 0x4090ff: jmpq 0x408d2a |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# GHC 8.0.1 | |
=> 0x406cb4: add $0x30,%r12 | |
=> 0x406cb8: cmp 0x358(%r13),%r12 | |
=> 0x406cbf: ja 0x4072ef | |
=> 0x406cc5: lea 0xb(%r10),%r14 | |
=> 0x406cc9: cmp %r14,%r8 | |
=> 0x406ccc: jl 0x40739b | |
=> 0x406cd2: cmp %rsi,%r11 | |
=> 0x406cd5: jge 0x406b31 | |
=> 0x406cdb: movzwl 0x10(%rcx,%r11,2),%r14d | |
=> 0x406ce1: cmp $0xd800,%r14 | |
=> 0x406ce8: jae 0x40710a | |
=> 0x406cee: add $0xffffffffffffffd0,%r12 | |
=> 0x406cf2: inc %r11 | |
# rbx -> r10 -> r9 -> r8 -> rdi -> rsi -> rdx -> rcx -> rbx | |
=> 0x406cf5: mov %rcx,0x58(%rsp) | |
=> 0x406cfa: mov %rdx,%rcx | |
=> 0x406cfd: mov %rsi,%rdx | |
=> 0x406d00: mov %rdi,%rsi | |
=> 0x406d03: mov %r8,%rdi | |
=> 0x406d06: mov %r9,%r8 | |
=> 0x406d09: mov %r10,%r9 | |
=> 0x406d0c: mov %rbx,%r10 | |
=> 0x406d0f: mov 0x58(%rsp),%rbx | |
# jump to core logic of the loop | |
=> 0x406d14: jmpq 0x406bd8 | |
=> 0x406bd8: add $0x20,%r12 | |
=> 0x406bdc: cmp 0x358(%r13),%r12 | |
=> 0x406be3: ja 0x4072af | |
=> 0x406be9: mov %rax,0x80(%rsp) | |
=> 0x406bf1: mov %r14,%rax | |
=> 0x406bf4: cmp $0xac00,%r14 | |
=> 0x406bfb: jl 0x407277 | |
=> 0x407277: add $0xffffffffffffffe0,%r12 | |
=> 0x40727b: cmp $0xc0,%rax | |
=> 0x407281: jl 0x40706b | |
=> 0x40706b: cmp $0x1,%r10 | |
=> 0x40706f: jl 0x407035 | |
=> 0x407071: cmp $0x2,%r10 | |
=> 0x407075: jge 0x407261 | |
=> 0x40707b: cmp $0x300,%rax | |
=> 0x407081: jl 0x4070e0 | |
=> 0x4070e0: xor %eax,%eax | |
=> 0x4070e2: inc %r9 | |
# shuffle back | |
=> 0x4070e5: mov %r9,%r10 | |
=> 0x4070e8: mov %r8,%r9 | |
=> 0x4070eb: mov %rdi,%r8 | |
=> 0x4070ee: mov %rsi,%rdi | |
=> 0x4070f1: mov %rdx,%rsi | |
=> 0x4070f4: mov %rcx,%rdx | |
=> 0x4070f7: mov %rbx,%rcx | |
=> 0x4070fa: mov %rax,%rbx | |
=> 0x4070fd: mov 0x80(%rsp),%rax | |
=> 0x407105: jmpq 0x406cb4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Heap check | |
=> 0x408fc0: lea 0x30(%r12),%rax | |
=> 0x408fc5: cmp 0x358(%r13),%rax | |
=> 0x408fcc: jbe 0x408fe9 # taken | |
=> 0x408fe9: mov 0x10(%rbp),%rdx # load | |
=> 0x408fed: mov 0x18(%rbp),%rcx # load | |
=> 0x408ff1: lea 0xb(%rdx),%rsi | |
=> 0x408ff5: cmp %rsi,0x40(%rbp) | |
=> 0x408ff9: jge 0x40905a # taken | |
=> 0x40905a: cmp 0x50(%rbp),%rcx # load | |
=> 0x40905e: jge 0x40909e # not taken | |
=> 0x409060: mov 0x38(%rbp),%rdx # load | |
=> 0x409064: movzwl 0x10(%rdx,%rcx,2),%eax | |
=> 0x409069: cmp $0xd7ff,%rax | |
=> 0x40906f: jbe 0x4090e1 # taken | |
=> 0x4090e1: mov %rax,0x18(%rbp) # save | |
=> 0x4090e5: inc %rcx | |
=> 0x4090e8: mov %rcx,0x0(%rbp) # save | |
=> 0x4090ec: add $0xfffffffffffffff8,%rbp | |
=> 0x4090f0: jmpq 0x4093e8 # taken | |
# Heap check | |
=> 0x4093e8: lea 0x20(%r12),%rax | |
=> 0x4093ed: cmp 0x358(%r13),%rax | |
=> 0x4093f4: jbe 0x409411 # taken | |
=> 0x409411: mov 0x18(%rbp),%r14 # load | |
=> 0x409415: mov 0x10(%rbp),%rsi # load | |
=> 0x409419: mov 0x20(%rbp),%rdx # load | |
=> 0x40941d: lea -0xac00(%rdx),%rcx | |
=> 0x409424: cmp $0x2ba3,%rcx | |
=> 0x40942b: jbe 0x40944e # not taken | |
=> 0x40942d: mov 0x8(%rbp),%rcx # load | |
=> 0x409431: lea 0x8(%rbp),%rax # load | |
=> 0x409435: cmp $0xc0,%rdx | |
=> 0x40943c: jge 0x409484 | |
=> 0x40943e: test %rsi,%rsi | |
=> 0x409441: jg 0x409492 # taken | |
=> 0x409492: cmp $0x1,%rsi | |
=> 0x409496: jne 0x4094cd # not taken | |
=> 0x409498: cmp $0x300,%rdx | |
=> 0x40949f: jge 0x4094b9 # not taken | |
=> 0x4094a1: mov %rcx,0x20(%rbp) # save | |
=> 0x4094a5: jmp 0x4094c6 # taken | |
=> 0x4094c6: inc %r14 | |
=> 0x4094c9: jmp 0x4094fa # taken | |
=> 0x4094fa: mov %r14,0x18(%rbp) | |
=> 0x4094fe: movq $0x0,0x10(%rbp) # save | |
=> 0x409506: mov %rax,%rbp | |
=> 0x409509: jmpq 0x408fc0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# GHC 7.10.3 | |
c4ic: | |
Hp = Hp + 48; | |
if (Hp > HpLim) goto c4mx; else goto c4mw; | |
. | |
. | |
. | |
c4mw: | |
if (%MO_S_Lt_W64(_s46B::I64, | |
_s47i::I64 + 11)) goto c4pv; else goto c4pw; | |
. | |
. | |
. | |
c4pw: | |
if (%MO_S_Ge_W64(_s47h::I64, | |
_s46y::I64)) goto c4pr; else goto c4ps; | |
. | |
. | |
. | |
c4ps: | |
_s47q::I64 = %MO_UU_Conv_W16_W64(I16[(_s464::P64 + 16) + (_s47h::I64 << 1)]); | |
if (_s47q::I64 >= 55296) goto c4p7; else goto c4p8; | |
. | |
. | |
. | |
c4p8: | |
Hp = Hp - 48; | |
_s47t::I64 = _s47h::I64 + 1; | |
_s47s::I64 = _s47q::I64; | |
goto c4jd; | |
c4jd: | |
Hp = Hp + 32; | |
if (Hp > HpLim) goto c4mA; else goto c4mz; | |
. | |
. | |
. | |
c4mz: | |
_s47v::I64 = _s47s::I64; | |
if (%MO_S_Lt_W64(_s47s::I64, 44032)) goto c4oH; else goto c4oJ; | |
c4oH: | |
Hp = Hp - 32; | |
if (%MO_S_Lt_W64(_s47v::I64, 192)) goto c4o3; else goto c4o4; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# GHC 7.10.3 | |
sat_s49l_entry() // [R1] | |
{ info_tbl: [(c4hH, | |
label: block_c4hH_info | |
rep:StackRep [False, True, True, True]), | |
(c4hL, | |
label: block_c4hL_info | |
rep:StackRep [False, False, False, True, True, True]), | |
(c4hP, | |
label: block_c4hP_info | |
rep:StackRep [False, False, False, True, True, True]), | |
(c4hX, | |
label: block_c4hX_info | |
rep:StackRep [True, True, False, True, False, True, False, True]), | |
(c4id, | |
label: block_c4id_info | |
rep:StackRep [True, True, True, True, False, True, False, False, | |
True, False]), | |
(c4je, | |
label: block_c4je_info | |
rep:StackRep [True, True, True, True, True, False, True, False, | |
False, True, False]), | |
(c4kX, | |
label: sat_s49l_info | |
rep:HeapRep 1 ptrs 2 nonptrs { | |
Fun {arity: 1 fun_type: ArgSpec 3} }), | |
(c4lj, | |
label: block_c4lj_info | |
rep:StackRep [True, True, False, True, False, False, True, True]), | |
(c4lI, | |
label: block_c4lI_info | |
rep:StackRep [True, True, False, True, False, False, True, True]), | |
(c4m8, | |
label: block_c4m8_info | |
rep:StackRep [False, False, False, True, False, False, True, | |
False]), | |
(c4md, | |
label: block_c4md_info | |
rep:StackRep [False, True, False, True, False, False, True, | |
False]), | |
(c4mi, | |
label: block_c4mi_info | |
rep:StackRep [True, True, False, True, False, False, True, False]), | |
(c4o9, | |
label: block_c4o9_info | |
rep:StackRep [True, True, True, False, True, False, False, True, | |
False]), | |
(c4ob, | |
label: block_c4ob_info | |
rep:StackRep [True, True, True, False, True, False, False, True, | |
False]), | |
(c4og, | |
label: block_c4og_info | |
rep:StackRep [True, True, False, True, False, False, True, False]), | |
(c4oi, | |
label: block_c4oi_info | |
rep:StackRep [True, True, False, True, False, False, True, False]), | |
(c4on, | |
label: block_c4on_info | |
rep:StackRep [False, True, True, False, True, False, False, True, | |
False]), | |
(c4os, | |
label: block_c4os_info | |
rep:StackRep [True, True, True, False, True, False, False, True, | |
False]), | |
(c4pg, | |
label: block_c4pg_info | |
rep:StackRep [])] | |
stack_info: arg_space: 8 updfr_space: Just 8 | |
} | |
{offset | |
c4kX: | |
if ((Sp + -96) < SpLim) goto c4kY; else goto c4kZ; | |
c4kY: | |
R1 = R1; | |
call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8; | |
c4kZ: | |
_s466::I64 = I64[R1 + 23]; | |
_s46a::I64 = _s466::I64 + 11; | |
if (%MO_S_Lt_W64(_s46a::I64, 0)) goto c4pB; else goto c4pC; | |
c4pC: | |
if (_s46a::I64 & 4611686018427387904 != 0) goto c4pB; else goto c4l6; | |
c4l6: | |
I64[Sp - 40] = c4hH; | |
_s464::P64 = P64[R1 + 7]; | |
_s465::I64 = I64[R1 + 15]; | |
R1 = _s46a::I64 << 1; | |
P64[Sp - 32] = _s464::P64; | |
I64[Sp - 24] = _s465::I64; | |
I64[Sp - 16] = _s466::I64; | |
I64[Sp - 8] = _s46a::I64; | |
Sp = Sp - 40; | |
call stg_newByteArray#(R1) returns to c4hH, args: 8, res: 8, upd: 8; | |
c4hH: | |
Hp = Hp + 80; | |
if (Hp > HpLim) goto c4la; else goto c4l9; | |
c4la: | |
HpAlloc = 80; | |
R1 = R1; | |
call stg_gc_unpt_r1(R1) returns to c4hH, args: 8, res: 8, upd: 8; | |
c4l9: | |
I64[Hp - 72] = stg_ARR_WORDS_info; | |
I64[Hp - 64] = 48; | |
I64[Hp - 8] = go1_s46m_info; | |
_s46l::P64 = Hp - 72; | |
P64[Hp] = _s46l::P64; | |
I64[Sp - 16] = c4hL; | |
R2 = 0; | |
_s46i::P64 = R1; | |
R1 = Hp - 7; | |
P64[Sp - 8] = _s46l::P64; | |
P64[Sp] = _s46i::P64; | |
Sp = Sp - 16; | |
call go1_s46m_info(R2, | |
R1) returns to c4hL, args: 8, res: 8, upd: 8; | |
c4hL: | |
I64[Sp] = c4hP; | |
R2 = R1; | |
call poly_a_r45I_info(R2) returns to c4hP, args: 8, res: 8, upd: 8; | |
c4hP: | |
_s464::P64 = P64[Sp + 24]; | |
_s465::I64 = I64[Sp + 32]; | |
_s46l::P64 = P64[Sp + 8]; | |
_s46y::I64 = _s465::I64 + I64[Sp + 40]; | |
_s46E::I64 = 0; | |
_s46D::I64 = 0; | |
_s46C::I64 = _s465::I64; | |
_s46B::I64 = I64[Sp + 48] - 1; | |
_s46A::P64 = P64[Sp + 16]; | |
goto c4hW; | |
c4hW: | |
Hp = Hp + 24; | |
if (Hp > HpLim) goto c4lf; else goto c4le; | |
c4lf: | |
HpAlloc = 24; | |
I64[Sp - 16] = c4hX; | |
I64[Sp - 8] = _s46E::I64; | |
I64[Sp] = _s46D::I64; | |
I64[Sp + 16] = _s46C::I64; | |
I64[Sp + 32] = _s46B::I64; | |
P64[Sp + 40] = _s46A::P64; | |
I64[Sp + 48] = _s46y::I64; | |
Sp = Sp - 16; | |
call stg_gc_noregs() returns to c4hX, args: 8, res: 8, upd: 8; | |
c4hX: | |
_s464::P64 = P64[Sp + 40]; | |
_s46l::P64 = P64[Sp + 24]; | |
_s46y::I64 = I64[Sp + 64]; | |
_s46A::P64 = P64[Sp + 56]; | |
_s46B::I64 = I64[Sp + 48]; | |
_s46C::I64 = I64[Sp + 32]; | |
_s46D::I64 = I64[Sp + 16]; | |
_s46E::I64 = I64[Sp + 8]; | |
Sp = Sp + 16; | |
goto c4hW; | |
c4le: | |
I64[Hp - 16] = lvl3_s46H_info; | |
_s46G::I64 = _s46B::I64 << 1; | |
I64[Hp] = _s46G::I64; | |
_c4i2::P64 = Hp - 16; | |
_s47j::I64 = _s46E::I64; | |
_s47i::I64 = _s46D::I64; | |
_s47h::I64 = _s46C::I64; | |
goto c4ic; | |
c4ic: | |
Hp = Hp + 48; | |
if (Hp > HpLim) goto c4mx; else goto c4mw; | |
c4mx: | |
HpAlloc = 48; | |
I64[Sp - 32] = c4id; | |
I64[Sp - 24] = _s47h::I64; | |
I64[Sp - 16] = _s47i::I64; | |
I64[Sp - 8] = _s47j::I64; | |
I64[Sp] = _s46G::I64; | |
I64[Sp + 16] = _s46B::I64; | |
P64[Sp + 32] = _s46A::P64; | |
I64[Sp + 40] = _s46y::I64; | |
P64[Sp + 48] = _c4i2::P64; | |
Sp = Sp - 32; | |
call stg_gc_noregs() returns to c4id, args: 8, res: 8, upd: 8; | |
c4id: | |
_c4i2::P64 = P64[Sp + 80]; | |
_s464::P64 = P64[Sp + 56]; | |
_s46l::P64 = P64[Sp + 40]; | |
_s46y::I64 = I64[Sp + 72]; | |
_s46A::P64 = P64[Sp + 64]; | |
_s46B::I64 = I64[Sp + 48]; | |
_s46G::I64 = I64[Sp + 32]; | |
_s47h::I64 = I64[Sp + 8]; | |
_s47i::I64 = I64[Sp + 16]; | |
_s47j::I64 = I64[Sp + 24]; | |
Sp = Sp + 32; | |
goto c4ic; | |
c4mw: | |
if (%MO_S_Lt_W64(_s46B::I64, | |
_s47i::I64 + 11)) goto c4pv; else goto c4pw; | |
c4pv: | |
I64[Hp - 40] = GHC.Types.I#_con_info; | |
I64[Hp - 32] = _s47j::I64; | |
I64[Hp - 24] = GHC.Types.I#_con_info; | |
I64[Hp - 16] = _s47i::I64; | |
I64[Hp - 8] = GHC.Types.I#_con_info; | |
I64[Hp] = _s47h::I64; | |
I64[Sp - 16] = c4m8; | |
R1 = Hp - 7; | |
P64[Sp - 8] = Hp - 39; | |
P64[Sp] = Hp - 23; | |
I64[Sp + 16] = _s46G::I64; | |
P64[Sp + 32] = _s46A::P64; | |
I64[Sp + 40] = _s46y::I64; | |
P64[Sp + 48] = _c4i2::P64; | |
Sp = Sp - 16; | |
if (R1 & 7 != 0) goto c4m8; else goto c4m9; | |
c4m9: | |
call (I64[R1])(R1) returns to c4m8, args: 8, res: 8, upd: 8; | |
c4m8: | |
I64[Sp] = c4md; | |
_s47a::I64 = I64[R1 + 7]; | |
R1 = P64[Sp + 16]; | |
I64[Sp + 16] = _s47a::I64; | |
if (R1 & 7 != 0) goto c4md; else goto c4me; | |
c4me: | |
call (I64[R1])(R1) returns to c4md, args: 8, res: 8, upd: 8; | |
c4md: | |
I64[Sp] = c4mi; | |
_s47c::I64 = I64[R1 + 7]; | |
R1 = P64[Sp + 8]; | |
I64[Sp + 8] = _s47c::I64; | |
if (R1 & 7 != 0) goto c4mi; else goto c4mm; | |
c4mm: | |
call (I64[R1])(R1) returns to c4mi, args: 8, res: 8, upd: 8; | |
c4mi: | |
I64[Sp] = c4lj; | |
_s46M::I64 = I64[R1 + 7]; | |
R1 = P64[Sp + 64]; | |
_s46L::I64 = I64[Sp + 8]; | |
I64[Sp + 8] = _s46M::I64; | |
_s46K::I64 = I64[Sp + 16]; | |
I64[Sp + 16] = _s46L::I64; | |
I64[Sp + 64] = _s46K::I64; | |
if (R1 & 7 != 0) goto c4lj; else goto c4ll; | |
c4ll: | |
call (I64[R1])(R1) returns to c4lj, args: 8, res: 8, upd: 8; | |
c4lj: | |
if (R1 & 7 >= 2) goto u4r4; else goto c4m4; | |
u4r4: | |
Sp = Sp + 72; | |
goto c4pB; | |
c4m4: | |
_s46G::I64 = I64[Sp + 32]; | |
if (_s46G::I64 & 4611686018427387904 != 0) goto u4r5; else goto c4lB; | |
u4r5: | |
Sp = Sp + 72; | |
goto c4pB; | |
c4pB: | |
R1 = Data.Text.Array.array_size_error_closure; | |
call stg_ap_0_fast(R1) args: 8, res: 0, upd: 8; | |
c4lB: | |
I64[Sp] = c4lI; | |
R1 = _s46G::I64 << 1; | |
call stg_newByteArray#(R1) returns to c4lI, args: 8, res: 8, upd: 8; | |
c4lI: | |
_s464::P64 = P64[Sp + 40]; | |
_s46l::P64 = P64[Sp + 24]; | |
_s46y::I64 = I64[Sp + 56]; | |
_s46G::I64 = I64[Sp + 32]; | |
_s46K::I64 = I64[Sp + 64]; | |
_s46L::I64 = I64[Sp + 16]; | |
_s46M::I64 = I64[Sp + 8]; | |
if (%MO_S_Le_W64(_s46L::I64, 0)) goto c4lT; else goto c4lU; | |
c4lT: | |
Sp = Sp + 16; | |
_s46E::I64 = _s46M::I64; | |
_s46D::I64 = _s46L::I64; | |
_s46C::I64 = _s46K::I64; | |
_s46B::I64 = _s46G::I64 - 1; | |
_s46A::P64 = R1; | |
goto c4hW; | |
c4lU: | |
call "ccall" arg hints: [PtrHint, , PtrHint, | |
,] result hints: [] _hs_text_memcpy(R1 + 16, 0, P64[Sp + 48] + 16, 0, _s46L::I64); | |
Sp = Sp + 16; | |
_s46E::I64 = _s46M::I64; | |
_s46D::I64 = _s46L::I64; | |
_s46C::I64 = _s46K::I64; | |
_s46B::I64 = _s46G::I64 - 1; | |
_s46A::P64 = R1; | |
goto c4hW; | |
c4pw: | |
if (%MO_S_Ge_W64(_s47h::I64, | |
_s46y::I64)) goto c4pr; else goto c4ps; | |
c4pr: | |
if (_s47i::I64 != 0) goto c4pe; else goto c4ph; | |
c4pe: | |
I64[Hp - 40] = Data.Text.Internal.Text_con_info; | |
P64[Hp - 32] = _s46A::P64; | |
I64[Hp - 24] = 0; | |
I64[Hp - 16] = _s47i::I64; | |
_c4pc::P64 = Hp - 39; | |
Hp = Hp - 16; | |
R1 = _c4pc::P64; | |
Sp = Sp + 56; | |
call (P64[Sp])(R1) args: 8, res: 0, upd: 8; | |
c4ph: | |
Hp = Hp - 48; | |
I64[Sp + 48] = c4pg; | |
R1 = Data.Text.Internal.empty_closure; | |
Sp = Sp + 48; | |
if (R1 & 7 != 0) goto c4pg; else goto c4pi; | |
c4pi: | |
call (I64[R1])(R1) returns to c4pg, args: 8, res: 8, upd: 8; | |
c4pg: | |
R1 = R1; | |
Sp = Sp + 8; | |
call (P64[Sp])(R1) args: 8, res: 0, upd: 8; | |
c4ps: | |
_s47q::I64 = %MO_UU_Conv_W16_W64(I16[(_s464::P64 + 16) + (_s47h::I64 << 1)]); | |
if (_s47q::I64 >= 55296) goto c4p7; else goto c4p8; | |
c4p7: | |
if (_s47q::I64 <= 56319) goto c4p2; else goto c4p3; | |
c4p2: | |
Hp = Hp - 48; | |
_s47t::I64 = _s47h::I64 + 2; | |
_s47s::I64 = ((_s47q::I64 + -55296) << 10) + (%MO_UU_Conv_W16_W64(I16[(_s464::P64 + 16) + ((_s47h::I64 + 1) << 1)]) - 56320) + 65536; | |
goto c4jd; | |
c4p3: | |
Hp = Hp - 48; | |
_s47t::I64 = _s47h::I64 + 1; | |
_s47s::I64 = _s47q::I64; | |
goto c4jd; | |
c4p8: | |
Hp = Hp - 48; | |
_s47t::I64 = _s47h::I64 + 1; | |
_s47s::I64 = _s47q::I64; | |
goto c4jd; | |
c4jd: | |
Hp = Hp + 32; | |
if (Hp > HpLim) goto c4mA; else goto c4mz; | |
c4mA: | |
HpAlloc = 32; | |
I64[Sp - 40] = c4je; | |
I64[Sp - 32] = _s47i::I64; | |
I64[Sp - 24] = _s47j::I64; | |
I64[Sp - 16] = _s47s::I64; | |
I64[Sp - 8] = _s47t::I64; | |
I64[Sp] = _s46G::I64; | |
I64[Sp + 16] = _s46B::I64; | |
P64[Sp + 32] = _s46A::P64; | |
I64[Sp + 40] = _s46y::I64; | |
P64[Sp + 48] = _c4i2::P64; | |
Sp = Sp - 40; | |
call stg_gc_noregs() returns to c4je, args: 8, res: 8, upd: 8; | |
c4je: | |
_c4i2::P64 = P64[Sp + 88]; | |
_s464::P64 = P64[Sp + 64]; | |
_s46l::P64 = P64[Sp + 48]; | |
_s46y::I64 = I64[Sp + 80]; | |
_s46A::P64 = P64[Sp + 72]; | |
_s46B::I64 = I64[Sp + 56]; | |
_s46G::I64 = I64[Sp + 40]; | |
_s47i::I64 = I64[Sp + 8]; | |
_s47j::I64 = I64[Sp + 16]; | |
_s47s::I64 = I64[Sp + 24]; | |
_s47t::I64 = I64[Sp + 32]; | |
Sp = Sp + 40; | |
goto c4jd; | |
c4mz: | |
_s47v::I64 = _s47s::I64; | |
if (%MO_S_Lt_W64(_s47s::I64, 44032)) goto c4oH; else goto c4oJ; | |
c4oJ: | |
if (%MO_S_Gt_W64(_s47v::I64, 55203)) goto c4oH; else goto c4oG; | |
c4oH: | |
Hp = Hp - 32; | |
if (%MO_S_Lt_W64(_s47v::I64, 192)) goto c4o3; else goto c4o4; | |
c4o3: | |
if (%MO_S_Lt_W64(_s47j::I64, 1)) goto c4o0; else goto c4o1; | |
c4o0: | |
if (_s47j::I64 != 0) goto c4nx; else goto c4ny; | |
c4ny: | |
_s47j::I64 = 1; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4o1: | |
if (_s47j::I64 != 1) goto c4nx; else goto c4nU; | |
c4nU: | |
if (%MO_S_Lt_W64(_s47v::I64, 768)) goto c4nW; else goto c4nX; | |
c4nW: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4nX: | |
if (%MO_S_Gt_W64(_s47v::I64, 125142)) goto c4nR; else goto c4nS; | |
c4nR: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4nS: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 2; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4o4: | |
if (%MO_S_Le_W64(_s47v::I64, 195101)) goto c4ns; else goto c4nt; | |
c4ns: | |
if (%MO_S_Lt_W64(_s47j::I64, 1)) goto c4nn; else goto c4no; | |
c4nn: | |
if (_s47j::I64 != 0) goto c4nx; else goto c4mV; | |
c4mV: | |
_s47j::I64 = 1; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4no: | |
if (_s47j::I64 != 1) goto c4nx; else goto c4nh; | |
c4nx: | |
R1 = lvl2_r45K_closure; | |
Sp = Sp + 56; | |
call stg_ap_0_fast(R1) args: 8, res: 0, upd: 8; | |
c4nh: | |
if (%MO_S_Lt_W64(_s47v::I64, 768)) goto c4nj; else goto c4nk; | |
c4nj: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4nk: | |
if (%MO_S_Gt_W64(_s47v::I64, 125142)) goto c4ne; else goto c4nf; | |
c4ne: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 1; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4nf: | |
_s47j::I64 = 0; | |
_s47i::I64 = _s47i::I64 + 2; | |
_s47h::I64 = _s47t::I64; | |
goto c4ic; | |
c4nt: | |
R1 = lvl1_r45J_closure; | |
Sp = Sp + 56; | |
call (I64[R1])(R1) args: 8, res: 0, upd: 8; | |
c4oG: | |
I64[Hp - 24] = $s$wa_s481_info; | |
P64[Hp - 16] = _s46l::P64; | |
P64[Hp - 8] = _s46A::P64; | |
I64[Hp] = _s47j::I64; | |
I64[Sp - 24] = c4o9; | |
R3 = 0; | |
R2 = _s47i::I64; | |
R1 = Hp - 21; | |
I64[Sp - 16] = _s47s::I64; | |
I64[Sp - 8] = _s47t::I64; | |
I64[Sp] = _s46G::I64; | |
I64[Sp + 16] = _s46B::I64; | |
P64[Sp + 32] = _s46A::P64; | |
I64[Sp + 40] = _s46y::I64; | |
P64[Sp + 48] = _c4i2::P64; | |
Sp = Sp - 24; | |
call $s$wa_s481_info(R3, | |
R2, | |
R1) returns to c4o9, args: 8, res: 8, upd: 8; | |
c4o9: | |
I64[Sp] = c4ob; | |
R1 = R1; | |
if (R1 & 7 != 0) goto c4ob; else goto c4oc; | |
c4oc: | |
call (I64[R1])(R1) returns to c4ob, args: 8, res: 8, upd: 8; | |
c4ob: | |
_s47s::I64 = I64[Sp + 8]; | |
I64[Sp + 8] = c4og; | |
R4 = _s47s::I64; | |
R3 = I64[R1 + 7]; | |
R2 = P64[Sp + 56]; | |
Sp = Sp + 8; | |
call Data.Unicode.Internal.NormalizeStream.$wa_info(R4, | |
R3, | |
R2) returns to c4og, args: 8, res: 8, upd: 8; | |
c4og: | |
I64[Sp] = c4oi; | |
R1 = R1; | |
if (R1 & 7 != 0) goto c4oi; else goto c4oj; | |
c4oj: | |
call (I64[R1])(R1) returns to c4oi, args: 8, res: 8, upd: 8; | |
c4oi: | |
I64[Sp - 8] = c4on; | |
_s48H::P64 = P64[R1 + 15]; | |
R1 = P64[R1 + 7]; | |
P64[Sp] = _s48H::P64; | |
Sp = Sp - 8; | |
if (R1 & 7 != 0) goto c4on; else goto c4oo; | |
c4oo: | |
call (I64[R1])(R1) returns to c4on, args: 8, res: 8, upd: 8; | |
c4on: | |
I64[Sp] = c4os; | |
_s48J::I64 = I64[R1 + 7]; | |
R1 = P64[Sp + 8]; | |
I64[Sp + 8] = _s48J::I64; | |
if (R1 & 7 != 0) goto c4os; else goto c4oz; | |
c4oz: | |
call (I64[R1])(R1) returns to c4os, args: 8, res: 8, upd: 8; | |
c4os: | |
_c4i2::P64 = P64[Sp + 72]; | |
_s464::P64 = P64[Sp + 48]; | |
_s46l::P64 = P64[Sp + 32]; | |
_s46y::I64 = I64[Sp + 64]; | |
_s46A::P64 = P64[Sp + 56]; | |
_s46B::I64 = I64[Sp + 40]; | |
_s46G::I64 = I64[Sp + 24]; | |
_s47i::I64 = I64[Sp + 8]; | |
_s47h::I64 = I64[Sp + 16]; | |
Sp = Sp + 24; | |
_s47j::I64 = I64[R1 + 7]; | |
goto c4ic; | |
} | |
}, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment