; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 0x4732e0 */ | #include | ; (fcn) method.std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t____BloombergLP::bdldfp::DecimalNumPut_wchar_t__std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t_____::do_put_impl_BloombergLP::bdldfp.Decimal_Type32__std::__1 () | uint64_t method_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_BloombergLP::bdldfp::DecimalNumPut_wchar_t_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_::do_put_impl_BloombergLP::bdldfp_Decimal_Type32_std::_1 (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | int64_t var_8h; | int64_t var_10h; | uint32_t var_1ch; | int32_t var_20h; | int64_t var_24h; | uint32_t var_28h; | int64_t var_30h; | int32_t var_38h; | int64_t var_3ch; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_5ch; | uint32_t var_60h; | int64_t var_68h; | int64_t var_70h; | char * var_78h; | int64_t var_80h; | int64_t var_81h; | int64_t var_82h; | int64_t var_84h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | /* std::__1::ostreambuf_iterator > BloombergLP::bdldfp::DecimalNumPut > >::do_put_impl(std::__1::ostreambuf_iterator >, std::__1::ios_base&, wchar_t, BloombergLP::bdldfp::Decimal_Type32) const */ 0x004732e0 push rbp | 0x004732e1 push r15 | 0x004732e3 push r14 | 0x004732e5 push r13 | 0x004732e7 push r12 | 0x004732e9 push rbx | 0x004732ea sub rsp, 0x88 | 0x004732f1 mov r15d, r8d | r15d = r8d; 0x004732f4 mov dword [rsp + 0x24], ecx | *((rsp + 0x24)) = ecx; 0x004732f8 mov rbx, rsi | rbx = rsi; 0x004732fb mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x004732ff cmp r12, 0x65 | 0x00473303 mov r13d, r12d | r13d = r12d; 0x00473306 mov ecx, 0x65 | ecx = 0x65; | if (r12 < 0x65) { 0x0047330b cmovl ecx, r12d | ecx = r12d; | } 0x0047330f mov eax, dword [rdx + 0x18] | eax = *((rdx + 0x18)); 0x00473312 mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x00473316 mov dword [rsp + 0x3c], ecx | *((rsp + 0x3c)) = ecx; 0x0047331a mov dword [rsp + 0x58], ecx | *((rsp + 0x58)) = ecx; 0x0047331e mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x00473327 mov qword [rsp + 0x68], 0x50a13c | *((rsp + 0x68)) = 0x50a13c; 0x00473330 mov qword [rsp + 0x70], 0x509f09 | *((rsp + 0x70)) = 0x509f09; 0x00473339 mov qword [rsp + 0x78], 0x509f08 | *((rsp + 0x78)) = "snan"; 0x00473342 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x0047334c mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x00473357 mov qword [rsp + 0x30], rdx | *((rsp + 0x30)) = rdx; 0x0047335c mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x0047335f test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00473364 je 0x473374 | 0x00473366 xor ecx, ecx | ecx = 0; 0x00473368 test eax, 0x100 | 0x0047336d sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00473370 mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x00473374 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00473379 je 0x473383 | 0x0047337b mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x00473383 mov ecx, eax | ecx = eax; 0x00473385 shr ecx, 0xa | ecx >>= 0xa; 0x00473388 and cl, 1 | cl &= 1; 0x0047338b mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x00473392 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x00473397 je 0x4733bc | 0x00473399 mov qword [rsp + 0x68], 0x509f0d | *((rsp + 0x68)) = 0x509f0d; 0x004733a2 mov qword [rsp + 0x70], 0x509f12 | *((rsp + 0x70)) = 0x509f12; 0x004733ab mov qword [rsp + 0x78], 0x509f11 | *((rsp + 0x78)) = "SNAN"; 0x004733b4 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x004733bc mov r14, qword [rip + 0x4e6015] | r14 = BloombergLP::bslma::Default::s_defaultAllocator; 0x004733c3 test r14, r14 | | if (r14 == 0) { 0x004733c6 jne 0x4733d0 | 0x004733c8 call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004733cd mov r14, rax | r14 = rax; | } 0x004733d0 mov rax, qword [r14] | rax = *(r14); 0x004733d3 mov esi, 0xc8 | esi = 0xc8; 0x004733d8 mov rdi, r14 | rdi = r14; 0x004733db call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004733de lea rcx, [rsp + 0x58] | 0x004733e3 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x004733e8 mov rdi, rax | 0x004733eb mov esi, 0xc8 | 0x004733f0 mov edx, r15d | 0x004733f3 mov qword [rsp + 0x48], r14 | *((rsp + 0x48)) = r14; 0x004733f8 call 0x4775a0 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rax, 0xc8, r15d, rsp + 0x58); 0x004733fd mov ebp, eax | 0x004733ff lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473404 mov rsi, qword [rsp + 0x30] | rsi = *((rsp + 0x30)); 0x00473409 call 0x404a20 | std::_1::ios_base::getloc()const (); 0x0047340e mov dword [rsp + 0x1c], r15d | *((rsp + 0x1c)) = r15d; 0x00473413 mov rdi, qword [rip + 0x4e5fbe] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x0047341a test rdi, rdi | | if (rdi == 0) { 0x0047341d jne 0x473427 | 0x0047341f call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473424 mov rdi, rax | rdi = rax; | } 0x00473427 mov dword [rsp + 0x28], ebp | *((rsp + 0x28)) = ebp; 0x0047342b mov eax, ebp | eax = ebp; 0x0047342d mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00473432 lea r15, [rax*4] | r15 = rax*4; 0x0047343a mov rax, qword [rdi] | rax = *(rdi); 0x0047343d mov rsi, r15 | rsi = r15; 0x00473440 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00473443 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x00473448 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0047344d mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x00473452 call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473457 mov rsi, qword [rsp + 0x50] | rsi = *((rsp + 0x50)); 0x0047345c mov rdx, rsi | rdx = *((rsp + 0x50)); 0x0047345f add rdx, qword [rsp + 0x40] | rdx += *((rsp + 0x40)); 0x00473464 mov rbp, qword [rax] | rbp = *(rax); 0x00473467 mov rdi, rax | rdi = rax; 0x0047346a mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0047346f call qword [rbp + 0x60] | uint64_t (*rbp + 0x60)() (); 0x00473472 mov ebp, r13d | 0x00473475 sub ebp, dword [rsp + 0x3c] | ebp -= *((rsp + 0x3c)); 0x00473479 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0047347e call 0x404b90 | std::_1::locale::~locale() (); 0x00473483 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00473488 mov rax, qword [rsp + 0x40] | rax = *((rsp + 0x40)); 0x0047348d lea r13, [rcx + rax*4] | r13 = rcx + rax*4; 0x00473491 mov eax, dword [rsp + 0x20] | eax = *((rsp + 0x20)); 0x00473495 sub eax, ebp | eax -= ebp; 0x00473497 xor r14d, r14d | r14d = 0; 0x0047349a sub eax, dword [rsp + 0x28] | eax -= *((rsp + 0x28)); 0x0047349e mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x004734a2 cmovns r14d, eax | __asm ("cmovns r14d, eax"); 0x004734a6 mov eax, r14d | eax = r14d; 0x004734a9 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x004734ab je 0x473590 | goto label_12; | } 0x004734b1 mov qword [rsp + 0x28], r13 | *((rsp + 0x28)) = r13; 0x004734b6 test ebp, ebp | 0x004734b8 mov dword [rsp + 0x38], ebp | *((rsp + 0x38)) = ebp; | if (ebp == 0) { 0x004734bc je 0x473535 | goto label_13; | } 0x004734be mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004734c3 test byte [rax + 9], 1 | 0x004734c7 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); | if ((*((rax + 9)) & 1) == 0) { 0x004734cc je 0x473535 | goto label_13; | } 0x004734ce lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004734d3 mov rsi, qword [rsp + 0x30] | rsi = *((rsp + 0x30)); 0x004734d8 call 0x404a20 | std::_1::ios_base::getloc()const (); 0x004734dd lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004734e2 mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x004734e7 mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x004734ec call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004734f1 movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x004734f9 mov rcx, qword [rax] | rcx = *(rax); 0x004734fc mov rdi, rax | rdi = rax; 0x004734ff call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x00473502 mov ebp, eax | 0x00473504 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473509 call 0x404b90 | std::_1::locale::~locale() (); 0x0047350e cmp qword [rsp + 0x28], r13 | | if (*((rsp + 0x28)) == r13) { 0x00473513 je 0x473535 | goto label_13; | } 0x00473515 nop word cs:[rax + rax] | 0x0047351f nop | | do { 0x00473520 cmp dword [r13], ebp | | if (*(r13) == ebp) { 0x00473524 je 0x473535 | goto label_13; | } 0x00473526 add r13, 4 | r13 += 4; 0x0047352a add r15, 0xfffffffffffffffc | r15 += 0xfffffffffffffffc; 0x0047352e jne 0x473520 | | } while (r15 != 0); 0x00473530 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); | label_13: 0x00473535 cmp dword [rsp + 0x1c], 0 | 0x0047353a setns al | __asm ("setns al"); 0x0047353d cmp dword [rsp + 0x60], 1 | 0x00473542 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x00473545 mov r15d, 0xb0 | r15d = 0xb0; 0x0047354b mov rdx, qword [rsp + 0x30] | rdx = *((rsp + 0x30)); 0x00473550 and r15d, dword [rdx + 8] | r15d &= *((rdx + 8)); 0x00473554 test al, cl | | if ((al & cl) != 0) { 0x00473556 jne 0x4735f2 | goto label_14; | } 0x0047355c cmp r15d, 0x10 | | if (r15d != 0x10) { 0x00473560 jne 0x4735f2 | goto label_14; | } 0x00473566 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0047356b lea rbp, [rax + 4] | rbp = rax + 4; 0x0047356f test rbx, rbx | | if (rbx == 0) { 0x00473572 je 0x4735f9 | goto label_15; | } 0x00473578 mov eax, dword [rax] | eax = *(rax); 0x0047357a mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x0047357e cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00473582 je 0x4735fd | goto label_16; | } 0x00473584 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473588 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047358c mov dword [rcx], eax | *(rcx) = eax; 0x0047358e jmp 0x473608 | goto label_17; | label_12: 0x00473590 cmp r13, rcx | 0x00473593 mov r15, rcx | r15 = rcx; | if (r13 == rcx) { 0x00473596 je 0x473839 | goto label_18; | } 0x0047359c mov r14, qword [rsp + 0x40] | r14 = *((rsp + 0x40)); 0x004735a1 shl r14, 2 | r14 <<= 2; 0x004735a5 xor ebp, ebp | ebp = 0; 0x004735a7 jmp 0x4735bf | | while (rbx == 0) { | label_0: 0x004735b0 xor ebx, ebx | ebx = 0; | label_1: 0x004735b2 add rbp, 4 | rbp += 4; 0x004735b6 cmp r14, rbp | | if (r14 == rbp) { 0x004735b9 je 0x473839 | goto label_18; | } 0x004735bf test rbx, rbx | 0x004735c2 je 0x4735b0 | | } 0x004735c4 mov eax, dword [r15 + rbp] | eax = *((r15 + rbp)); 0x004735c8 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004735cc cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x004735d0 je 0x4735e0 | 0x004735d2 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x004735d6 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004735da mov dword [rcx], eax | *(rcx) = eax; 0x004735dc jmp 0x4735eb | | } else { 0x004735e0 mov rcx, qword [rbx] | rcx = *(rbx); 0x004735e3 mov rdi, rbx | rdi = rbx; 0x004735e6 mov esi, eax | esi = eax; 0x004735e8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004735eb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004735ee je 0x4735b0 | goto label_0; | } 0x004735f0 jmp 0x4735b2 | goto label_1; | label_14: 0x004735f2 mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); 0x004735f7 jmp 0x473611 | goto label_19; | label_15: 0x004735f9 xor ebx, ebx | ebx = 0; 0x004735fb jmp 0x473611 | goto label_19; | label_16: 0x004735fd mov rcx, qword [rbx] | rcx = *(rbx); 0x00473600 mov rdi, rbx | rdi = rbx; 0x00473603 mov esi, eax | esi = eax; 0x00473605 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | label_17: 0x00473608 xor ecx, ecx | ecx = 0; 0x0047360a cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047360d cmove rbx, rcx | rbx = rcx; | } | label_19: 0x00473611 cmp dword [rsp + 0x20], 0 | 0x00473616 mov dword [rsp + 0x1c], r15d | *((rsp + 0x1c)) = r15d; | if (*((rsp + 0x20)) <= 0) { 0x0047361b jle 0x473674 | goto label_20; | } 0x0047361d cmp r15d, 0x20 | | if (r15d == 0x20) { 0x00473621 je 0x473674 | goto label_20; | } 0x00473623 lea r15d, [r14 + 1] | r15d = r14 + 1; 0x00473627 jmp 0x47363b | | while (rbx == 0) { | label_2: 0x00473630 xor ebx, ebx | ebx = 0; | label_3: 0x00473632 dec r15d | r15d--; 0x00473635 cmp r15d, 1 | | if (r15d <= 1) { 0x00473639 jle 0x473674 | goto label_20; | } 0x0047363b test rbx, rbx | 0x0047363e je 0x473630 | | } 0x00473640 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473644 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473648 je 0x473660 | 0x0047364a lea rcx, [rax + 4] | rcx = rax + 4; 0x0047364e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473652 mov ecx, dword [rsp + 0x24] | ecx = *((rsp + 0x24)); 0x00473656 mov dword [rax], ecx | *(rax) = ecx; 0x00473658 mov eax, ecx | eax = ecx; 0x0047365a jmp 0x47366d | | } else { 0x00473660 mov rax, qword [rbx] | rax = *(rbx); 0x00473663 mov rdi, rbx | rdi = rbx; 0x00473666 mov esi, dword [rsp + 0x24] | esi = *((rsp + 0x24)); 0x0047366a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047366d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473670 je 0x473630 | goto label_2; | } 0x00473672 jmp 0x473632 | goto label_3; | label_20: 0x00473674 cmp rbp, r13 | | if (rbp == r13) { 0x00473677 je 0x4736c2 | goto label_21; | } 0x00473679 mov r15d, dword [rsp + 0x1c] | r15d = *((rsp + 0x1c)); 0x0047367e jmp 0x47368b | | while (rbx == 0) { | label_4: 0x00473680 xor ebx, ebx | ebx = 0; | label_5: 0x00473682 add rbp, 4 | rbp += 4; 0x00473686 cmp r13, rbp | | if (r13 == rbp) { 0x00473689 je 0x4736c7 | goto label_22; | } 0x0047368b test rbx, rbx | 0x0047368e je 0x473680 | | } 0x00473690 mov eax, dword [rbp] | eax = *(rbp); 0x00473693 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473697 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047369b je 0x4736b0 | 0x0047369d lea rdx, [rcx + 4] | rdx = rcx + 4; 0x004736a1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004736a5 mov dword [rcx], eax | *(rcx) = eax; 0x004736a7 jmp 0x4736bb | | } else { 0x004736b0 mov rcx, qword [rbx] | rcx = *(rbx); 0x004736b3 mov rdi, rbx | rdi = rbx; 0x004736b6 mov esi, eax | esi = eax; 0x004736b8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004736bb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004736be je 0x473680 | goto label_4; | } 0x004736c0 jmp 0x473682 | goto label_5; | label_21: 0x004736c2 mov r15d, dword [rsp + 0x1c] | r15d = *((rsp + 0x1c)); | label_22: 0x004736c7 cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) == 0) { 0x004736cc je 0x4737d2 | goto label_23; | } 0x004736d2 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004736d7 mov rsi, qword [rsp + 0x30] | rsi = *((rsp + 0x30)); 0x004736dc call 0x404a20 | std::_1::ios_base::getloc()const (); 0x004736e1 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004736e6 mov esi, 0x9591e0 | esi = std::__1::ctype::id; 0x004736eb call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004736f0 mov rcx, qword [rax] | rcx = *(rax); 0x004736f3 mov rdi, rax | rdi = rax; 0x004736f6 mov esi, 0x30 | esi = 0x30; 0x004736fb call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x004736fe mov ebp, eax | 0x00473700 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00473705 call 0x404b90 | std::_1::locale::~locale() (); 0x0047370a cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) <= 0) { 0x0047370f jle 0x473762 | goto label_24; | } 0x00473711 sub r12d, dword [rsp + 0x3c] | r12d -= *((rsp + 0x3c)); 0x00473716 inc r12d | r12d++; 0x00473719 jmp 0x47372b | | while (rbx == 0) { | label_6: 0x00473720 xor ebx, ebx | ebx = 0; | label_7: 0x00473722 dec r12d | r12d--; 0x00473725 cmp r12d, 1 | | if (r12d <= 1) { 0x00473729 jle 0x473762 | goto label_24; | } 0x0047372b test rbx, rbx | 0x0047372e je 0x473720 | | } 0x00473730 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473734 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473738 je 0x473750 | 0x0047373a lea rcx, [rax + 4] | rcx = rax + 4; 0x0047373e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473742 mov dword [rax], ebp | *(rax) = ebp; 0x00473744 mov eax, ebp | eax = ebp; 0x00473746 jmp 0x47375b | | } else { 0x00473750 mov rax, qword [rbx] | rax = *(rbx); 0x00473753 mov rdi, rbx | rdi = rbx; 0x00473756 mov esi, ebp | esi = ebp; 0x00473758 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047375b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047375e je 0x473720 | goto label_6; | } 0x00473760 jmp 0x473722 | goto label_7; | label_24: 0x00473762 cmp r13, qword [rsp + 0x28] | | if (r13 == *((rsp + 0x28))) { 0x00473767 je 0x4737d2 | goto label_23; | } 0x00473769 mov eax, 0x100 | eax = 0x100; 0x0047376e mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x00473773 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); | if (eax == 0) { 0x00473776 je 0x4737d2 | goto label_23; | } 0x00473778 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0047377d mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x00473782 lea rbp, [rax + rcx*4] | rbp = rax + rcx*4; 0x00473786 jmp 0x47379b | | while (rbx == 0) { | label_8: 0x00473790 xor ebx, ebx | ebx = 0; | label_9: 0x00473792 add r13, 4 | r13 += 4; 0x00473796 cmp rbp, r13 | | if (rbp == r13) { 0x00473799 je 0x4737d2 | goto label_23; | } 0x0047379b test rbx, rbx | 0x0047379e je 0x473790 | | } 0x004737a0 mov eax, dword [r13] | eax = *(r13); 0x004737a4 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004737a8 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x004737ac je 0x4737c0 | 0x004737ae lea rdx, [rcx + 4] | rdx = rcx + 4; 0x004737b2 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004737b6 mov dword [rcx], eax | *(rcx) = eax; 0x004737b8 jmp 0x4737cb | | } else { 0x004737c0 mov rcx, qword [rbx] | rcx = *(rbx); 0x004737c3 mov rdi, rbx | rdi = rbx; 0x004737c6 mov esi, eax | esi = eax; 0x004737c8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x004737cb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004737ce je 0x473790 | goto label_8; | } 0x004737d0 jmp 0x473792 | goto label_9; | label_23: 0x004737d2 cmp dword [rsp + 0x20], 0 | | if (*((rsp + 0x20)) <= 0) { 0x004737d7 jle 0x473834 | goto label_25; | } 0x004737d9 cmp r15d, 0x20 | 0x004737dd mov r15, qword [rsp + 0x10] | r15 = *((rsp + 0x10)); | if (r15d != 0x20) { 0x004737e2 jne 0x473839 | goto label_18; | } 0x004737e4 inc r14d | r14d++; 0x004737e7 jmp 0x4737fb | | while (rbx == 0) { | label_10: 0x004737f0 xor ebx, ebx | ebx = 0; | label_11: 0x004737f2 dec r14d | r14d--; 0x004737f5 cmp r14d, 1 | | if (r14d <= 1) { 0x004737f9 jle 0x473839 | goto label_18; | } 0x004737fb test rbx, rbx | 0x004737fe je 0x4737f0 | | } 0x00473800 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473804 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473808 je 0x473820 | 0x0047380a lea rcx, [rax + 4] | rcx = rax + 4; 0x0047380e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473812 mov ecx, dword [rsp + 0x24] | ecx = *((rsp + 0x24)); 0x00473816 mov dword [rax], ecx | *(rax) = ecx; 0x00473818 mov eax, ecx | eax = ecx; 0x0047381a jmp 0x47382d | | } else { 0x00473820 mov rax, qword [rbx] | rax = *(rbx); 0x00473823 mov rdi, rbx | rdi = rbx; 0x00473826 mov esi, dword [rsp + 0x24] | esi = *((rsp + 0x24)); 0x0047382a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x0047382d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473830 je 0x4737f0 | goto label_10; | } 0x00473832 jmp 0x4737f2 | goto label_11; | label_25: 0x00473834 mov r15, qword [rsp + 0x10] | r15 = *((rsp + 0x10)); | label_18: 0x00473839 mov rdi, qword [rip + 0x4e5b98] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473840 test rdi, rdi | | if (rdi != 0) { 0x00473843 je 0x47384c | 0x00473845 mov rbp, qword [rsp + 0x48] | rbp = *((rsp + 0x48)); 0x0047384a jmp 0x473859 | | } else { 0x0047384c call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473851 mov rbp, qword [rsp + 0x48] | rbp = *((rsp + 0x48)); 0x00473856 mov rdi, rax | rdi = rax; | } 0x00473859 mov rax, qword [rdi] | rax = *(rdi); 0x0047385c mov rsi, r15 | rsi = r15; 0x0047385f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473862 mov rax, qword [rbp] | rax = *(rbp); 0x00473866 mov rdi, rbp | rdi = rbp; 0x00473869 mov rsi, qword [rsp + 0x50] | rsi = *((rsp + 0x50)); 0x0047386e call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473871 mov rax, rbx | rax = rbx; 0x00473874 add rsp, 0x88 | 0x0047387b pop rbx | 0x0047387c pop r12 | 0x0047387e pop r13 | 0x00473880 pop r14 | 0x00473882 pop r15 | 0x00473884 pop rbp | 0x00473885 ret | return rax; | }