; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/none @ 0x44e390 */ | #include | ; (fcn) method.BloombergLP::bdld::DatumMapOwningKeysBuilder.append_BloombergLP::bdld::DatumMapEntry_const__unsigned_long_ () | int64_t method_BloombergLP::bdld::DatumMapOwningKeysBuilder_append_BloombergLP::bdld::DatumMapEntry_const_unsigned_long_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | void ** s1; | int64_t var_20h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdld::DatumMapOwningKeysBuilder::append(BloombergLP::bdld::DatumMapEntry const*, unsigned long) */ 0x0044e390 push rbp | 0x0044e391 push r15 | 0x0044e393 push r14 | 0x0044e395 push r13 | 0x0044e397 push r12 | 0x0044e399 push rbx | 0x0044e39a sub rsp, 0x38 | 0x0044e39e mov r14, rdx | r14 = rdx; 0x0044e3a1 mov r12, rsi | r12 = rsi; 0x0044e3a4 mov r15, rdi | r15 = rdi; 0x0044e3a7 mov rax, qword [rdi + 0x20] | rax = *((rdi + 0x20)); 0x0044e3ab test rax, rax | | if (rax == 0) { 0x0044e3ae je 0x44e3cd | goto label_0; | } 0x0044e3b0 mov rcx, qword [r15 + 8] | rcx = *((r15 + 8)); 0x0044e3b4 mov rcx, qword [rcx] | rcx = *(rcx); 0x0044e3b7 add rcx, r14 | rcx += r14; 0x0044e3ba mov rdx, rax | rdx = rax; 0x0044e3bd nop dword [rax] | | do { 0x0044e3c0 mov rbx, rdx | rbx = rdx; 0x0044e3c3 add rdx, rdx | rdx += rdx; 0x0044e3c6 cmp rbx, rcx | 0x0044e3c9 jb 0x44e3c0 | | } while (rbx < rcx); 0x0044e3cb jmp 0x44e3eb | goto label_1; | label_0: 0x0044e3cd mov ecx, 1 | ecx = 1; 0x0044e3d2 nop word cs:[rax + rax] | 0x0044e3dc nop dword [rax] | | do { 0x0044e3e0 mov rbx, rcx | rbx = rcx; 0x0044e3e3 add rcx, rcx | rcx += rcx; 0x0044e3e6 cmp rbx, r14 | 0x0044e3e9 jb 0x44e3e0 | | } while (rbx < r14); | label_1: 0x0044e3eb test r14, r14 | | if (r14 != 0) { 0x0044e3ee je 0x44e406 | 0x0044e3f0 lea rcx, [r14 - 1] | rcx = r14 - 1; 0x0044e3f4 mov edx, r14d | edx = r14d; 0x0044e3f7 and edx, 3 | edx &= 3; 0x0044e3fa cmp rcx, 3 | | if (rcx >= 3) { 0x0044e3fe jae 0x44e40a | goto label_2; | } 0x0044e400 xor ecx, ecx | ecx = 0; 0x0044e402 xor esi, esi | esi = 0; 0x0044e404 jmp 0x44e43d | goto label_3; | } 0x0044e406 xor ecx, ecx | ecx = 0; 0x0044e408 jmp 0x44e46d | goto label_4; | label_2: 0x0044e40a mov rdi, r14 | rdi = r14; 0x0044e40d and rdi, 0xfffffffffffffffc | rdi &= 0xfffffffffffffffc; 0x0044e411 lea rbp, [r12 + 0x68] | rbp = r12 + 0x68; 0x0044e416 xor ecx, ecx | ecx = 0; 0x0044e418 xor esi, esi | esi = 0; 0x0044e41a nop word [rax + rax] | | do { 0x0044e420 add rcx, qword [rbp - 0x60] | rcx += *((rbp - 0x60)); 0x0044e424 add rcx, qword [rbp - 0x40] | rcx += *((rbp - 0x40)); 0x0044e428 add rcx, qword [rbp - 0x20] | rcx += *((rbp - 0x20)); 0x0044e42c add rcx, qword [rbp] | rcx += *(rbp); 0x0044e430 add rsi, 4 | rsi += 4; 0x0044e434 sub rbp, 0xffffffffffffff80 | rbp -= 0xffffffffffffff80; 0x0044e438 cmp rdi, rsi | 0x0044e43b jne 0x44e420 | | } while (rdi != rsi); | label_3: 0x0044e43d test rdx, rdx | | if (rdx == 0) { 0x0044e440 je 0x44e46d | goto label_4; | } 0x0044e442 shl rsi, 5 | rsi <<= 5; 0x0044e446 lea rsi, [r12 + rsi + 8] | rsi = r12 + rsi + 8; 0x0044e44b shl rdx, 5 | rdx <<= 5; 0x0044e44f xor edi, edi | edi = 0; 0x0044e451 nop word cs:[rax + rax] | 0x0044e45b nop dword [rax + rax] | | do { 0x0044e460 add rcx, qword [rsi + rdi] | rcx += *((rsi + rdi)); 0x0044e464 add rdi, 0x20 | rdi += 0x20; 0x0044e468 cmp rdx, rdi | 0x0044e46b jne 0x44e460 | | } while (rdx != rdi); | label_4: 0x0044e46d mov rdx, qword [r15 + 0x10] | rdx = *((r15 + 0x10)); 0x0044e471 test rdx, rdx | | if (rdx != 0) { 0x0044e474 je 0x44e498 | 0x0044e476 mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); 0x0044e47a mov rsi, qword [rsi] | rsi = *(rsi); 0x0044e47d test rsi, rsi | | if (rsi != 0) { 0x0044e480 je 0x44e498 | 0x0044e482 mov rdi, qword [r15] | rdi = *(r15); 0x0044e485 shl rsi, 5 | rsi <<= 5; 0x0044e489 mov r13, qword [rsi + rdi - 0x20] | r13 = *((rsi + rdi - 0x20)); 0x0044e48e add r13, qword [rsi + rdi - 0x18] | r13 += *((rsi + rdi - 0x18)); 0x0044e493 sub r13, rdx | r13 -= rdx; 0x0044e496 jmp 0x44e49b | | } | } else { 0x0044e498 xor r13d, r13d | r13d = 0; | } 0x0044e49b mov rdx, qword [r15 + 0x28] | rdx = *((r15 + 0x28)); 0x0044e49f test rdx, rdx | | if (rdx == 0) { 0x0044e4a2 je 0x44e4bd | goto label_5; | } 0x0044e4a4 add rcx, r13 | rcx += r13; 0x0044e4a7 mov rsi, rdx | rsi = rdx; 0x0044e4aa nop word [rax + rax] | | do { 0x0044e4b0 mov rbp, rsi | 0x0044e4b3 add rsi, rsi | rsi += rsi; 0x0044e4b6 cmp rbp, rcx | 0x0044e4b9 jb 0x44e4b0 | | } while (rbp < rcx); 0x0044e4bb jmp 0x44e4db | goto label_6; | label_5: 0x0044e4bd mov esi, 1 | esi = 1; 0x0044e4c2 nop word cs:[rax + rax] | 0x0044e4cc nop dword [rax] | | do { 0x0044e4d0 mov rbp, rsi | 0x0044e4d3 add rsi, rsi | rsi += rsi; 0x0044e4d6 cmp rbp, rcx | 0x0044e4d9 jb 0x44e4d0 | | } while (rbp < rcx); | label_6: 0x0044e4db or rdx, rax | rdx |= rax; | if (rdx != 0) { 0x0044e4de je 0x44e4ee | 0x0044e4e0 cmp rbx, rax | | if (rbx == rax) { 0x0044e4e3 je 0x44e5b8 | goto label_7; | } 0x0044e4e9 jmp 0x44e5c2 | goto label_8; | } 0x0044e4ee mov qword [r15 + 0x20], rbx | *((r15 + 0x20)) = rbx; 0x0044e4f2 mov qword [r15 + 0x28], rbp | *((r15 + 0x28)) = rbp; 0x0044e4f6 mov rcx, qword [r15 + 0x38] | 0x0044e4fa mov rdi, r15 | 0x0044e4fd mov rsi, rbx | 0x0044e500 mov rdx, rbp | 0x0044e503 call 0x44a6b0 | BloombergLP::bdld::Datum::createUninitializedMap(BloombergLP::bdld::DatumMutableMapOwningKeysRef*,unsigned long,unsigned long,BloombergLP::bslma::Allocator*) (r15, rbx, rbp, *((r15 + 0x38))); 0x0044e508 test rbx, rbx | | if (rbx == 0) { 0x0044e50b je 0x44e597 | goto label_9; | } 0x0044e511 mov rax, qword [r15] | rax = *(r15); 0x0044e514 lea rcx, [rbx - 1] | rcx = rbx - 1; 0x0044e518 mov rdx, rbx | rdx = rbx; 0x0044e51b and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x0044e51f je 0x44e54d | goto label_10; | } 0x0044e521 xor esi, esi | esi = 0; 0x0044e523 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044e526 nop word cs:[rax + rax] | | do { 0x0044e530 movups xmmword [rax], xmm0 | __asm ("movups xmmword [rax], xmm0"); 0x0044e533 add rax, 0x20 | rax += 0x20; 0x0044e537 inc rsi | rsi++; 0x0044e53a cmp rdx, rsi | 0x0044e53d jne 0x44e530 | | } while (rdx != rsi); 0x0044e53f mov rdx, rbx | rdx = rbx; 0x0044e542 sub rdx, rsi | rdx -= rsi; 0x0044e545 cmp rcx, 7 | | if (rcx < 7) { 0x0044e549 jae 0x44e556 | 0x0044e54b jmp 0x44e597 | goto label_9; | label_10: 0x0044e54d mov rdx, rbx | rdx = rbx; 0x0044e550 cmp rcx, 7 | | if (rcx < 7) { 0x0044e554 jb 0x44e597 | goto label_9; | } | } 0x0044e556 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044e559 nop dword [rax] | | do { 0x0044e560 movups xmmword [rax], xmm0 | __asm ("movups xmmword [rax], xmm0"); 0x0044e563 movups xmmword [rax + 0x20], xmm0 | __asm ("movups xmmword [rax + 0x20], xmm0"); 0x0044e567 movups xmmword [rax + 0x40], xmm0 | __asm ("movups xmmword [rax + 0x40], xmm0"); 0x0044e56b movups xmmword [rax + 0x60], xmm0 | __asm ("movups xmmword [rax + 0x60], xmm0"); 0x0044e56f movups xmmword [rax + 0x80], xmm0 | __asm ("movups xmmword [rax + 0x80], xmm0"); 0x0044e576 movups xmmword [rax + 0xa0], xmm0 | __asm ("movups xmmword [rax + 0xa0], xmm0"); 0x0044e57d movups xmmword [rax + 0xc0], xmm0 | __asm ("movups xmmword [rax + 0xc0], xmm0"); 0x0044e584 movups xmmword [rax + 0xe0], xmm0 | __asm ("movups xmmword [rax + 0xe0], xmm0"); 0x0044e58b add rax, 0x100 | rax += 0x100; 0x0044e591 add rdx, 0xfffffffffffffff8 | rdx += 0xfffffffffffffff8; 0x0044e595 jne 0x44e560 | | } while (rdx != 0); | label_9: 0x0044e597 mov rdi, qword [r15 + 0x10] | 0x0044e59b xor esi, esi | 0x0044e59d mov rdx, rbp | 0x0044e5a0 call 0x404540 | memset (*((r15 + 0x10)), 0, rbp); 0x0044e5a5 mov al, byte [r15 + 0x30] | al = *((r15 + 0x30)); 0x0044e5a9 mov rcx, qword [r15 + 0x18] | rcx = *((r15 + 0x18)); 0x0044e5ad mov byte [rcx], al | *(rcx) = al; 0x0044e5af mov rax, qword [r15 + 0x20] | rax = *((r15 + 0x20)); 0x0044e5b3 cmp rbx, rax | | if (rbx == rax) { 0x0044e5b6 jne 0x44e5c2 | | label_7: 0x0044e5b8 cmp rbp, qword [r15 + 0x28] | | if (rbp == *((r15 + 0x28))) { 0x0044e5bc je 0x44e70c | goto label_11; | } | } | label_8: 0x0044e5c2 mov qword [r15 + 0x20], rbx | *((r15 + 0x20)) = rbx; 0x0044e5c6 mov qword [r15 + 0x28], rbp | *((r15 + 0x28)) = rbp; 0x0044e5ca xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044e5cd movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0044e5d2 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0044e5d6 mov rcx, qword [r15 + 0x38] | 0x0044e5da mov rdi, rsp | 0x0044e5dd mov rsi, rbx | 0x0044e5e0 mov rdx, rbp | 0x0044e5e3 call 0x44a6b0 | BloombergLP::bdld::Datum::createUninitializedMap(BloombergLP::bdld::DatumMutableMapOwningKeysRef*,unsigned long,unsigned long,BloombergLP::bslma::Allocator*) (rsp, rbx, rbp, *((r15 + 0x38))); 0x0044e5e8 test rbx, rbx | | if (rbx == 0) { 0x0044e5eb je 0x44e667 | goto label_12; | } 0x0044e5ed mov rax, qword [rsp] | rax = *(rsp); 0x0044e5f1 lea rcx, [rbx - 1] | rcx = rbx - 1; 0x0044e5f5 mov rdx, rbx | rdx = rbx; 0x0044e5f8 and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x0044e5fc je 0x44e622 | goto label_13; | } 0x0044e5fe xor esi, esi | esi = 0; 0x0044e600 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044e603 nop word cs:[rax + rax] | 0x0044e60d nop dword [rax] | | do { 0x0044e610 movups xmmword [rax], xmm0 | __asm ("movups xmmword [rax], xmm0"); 0x0044e613 add rax, 0x20 | rax += 0x20; 0x0044e617 inc rsi | rsi++; 0x0044e61a cmp rdx, rsi | 0x0044e61d jne 0x44e610 | | } while (rdx != rsi); 0x0044e61f sub rbx, rsi | rbx -= rsi; | label_13: 0x0044e622 cmp rcx, 7 | | if (rcx < 7) { 0x0044e626 jb 0x44e667 | goto label_12; | } 0x0044e628 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044e62b nop dword [rax + rax] | | do { 0x0044e630 movups xmmword [rax], xmm0 | __asm ("movups xmmword [rax], xmm0"); 0x0044e633 movups xmmword [rax + 0x20], xmm0 | __asm ("movups xmmword [rax + 0x20], xmm0"); 0x0044e637 movups xmmword [rax + 0x40], xmm0 | __asm ("movups xmmword [rax + 0x40], xmm0"); 0x0044e63b movups xmmword [rax + 0x60], xmm0 | __asm ("movups xmmword [rax + 0x60], xmm0"); 0x0044e63f movups xmmword [rax + 0x80], xmm0 | __asm ("movups xmmword [rax + 0x80], xmm0"); 0x0044e646 movups xmmword [rax + 0xa0], xmm0 | __asm ("movups xmmword [rax + 0xa0], xmm0"); 0x0044e64d movups xmmword [rax + 0xc0], xmm0 | __asm ("movups xmmword [rax + 0xc0], xmm0"); 0x0044e654 movups xmmword [rax + 0xe0], xmm0 | __asm ("movups xmmword [rax + 0xe0], xmm0"); 0x0044e65b add rax, 0x100 | rax += 0x100; 0x0044e661 add rbx, 0xfffffffffffffff8 | rbx += 0xfffffffffffffff8; 0x0044e665 jne 0x44e630 | | } while (rbx != 0); | label_12: 0x0044e667 mov rdi, qword [rsp + 0x10] | 0x0044e66c xor esi, esi | 0x0044e66e mov rdx, rbp | 0x0044e671 call 0x404540 | memset (*((rsp + 0x10)), 0, rbp); 0x0044e676 mov rdi, qword [rsp + 0x10] | 0x0044e67b mov rsi, qword [r15 + 0x10] | 0x0044e67f mov rdx, r13 | 0x0044e682 call 0x404d10 | memcpy (*((rsp + 0x10)), *((r15 + 0x10)), r13); 0x0044e687 mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x0044e68b mov rax, qword [rax] | rax = *(rax); 0x0044e68e mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0044e693 mov qword [rcx], rax | *(rcx) = rax; 0x0044e696 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0044e69b cmp qword [rax], 0 | | if (*(rax) == 0) { 0x0044e69f je 0x44e6ec | goto label_14; | } 0x0044e6a1 mov eax, 0x10 | eax = 0x10; 0x0044e6a6 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0044e6ab xor edx, edx | edx = 0; 0x0044e6ad nop dword [rax] | | do { 0x0044e6b0 mov rsi, qword [r15] | rsi = *(r15); 0x0044e6b3 movsxd rdi, dword [rsi + rax - 8] | rdi = *((rsi + rax - 8)); 0x0044e6b8 movaps xmm0, xmmword [rsi + rax] | xmm0 = *((rsi + rax)); 0x0044e6bc movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0044e6c1 mov rsi, qword [rsp] | rsi = *(rsp); 0x0044e6c5 mov qword [rsi + rax - 0x10], rcx | *((rsi + rax - 0x10)) = rcx; 0x0044e6ca mov qword [rsi + rax - 8], rdi | *((rsi + rax - 8)) = rdi; 0x0044e6cf movaps xmm0, xmmword [rsp + 0x20] | xmm0 = *((rsp + 0x20)); 0x0044e6d4 movaps xmmword [rsi + rax], xmm0 | *((rsi + rax)) = xmm0; 0x0044e6d8 add rcx, rdi | rcx += rdi; 0x0044e6db inc rdx | rdx++; 0x0044e6de mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0044e6e3 add rax, 0x20 | rax += 0x20; 0x0044e6e7 cmp rdx, qword [rsi] | 0x0044e6ea jb 0x44e6b0 | | } while (rdx < *(rsi)); | label_14: 0x0044e6ec mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); 0x0044e6f0 mov rdi, qword [r15 + 0x38] | rdi = *((r15 + 0x38)); 0x0044e6f4 mov rax, qword [rdi] | rax = *(rdi); 0x0044e6f7 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044e6fa movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0044e6fe movaps xmm1, xmmword [rsp + 0x10] | xmm1 = *((rsp + 0x10)); 0x0044e703 movups xmmword [r15 + 0x10], xmm1 | __asm ("movups xmmword [r15 + 0x10], xmm1"); 0x0044e708 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); | label_11: 0x0044e70c test r14, r14 | | if (r14 == 0) { 0x0044e70f je 0x44e774 | goto label_15; | } 0x0044e711 add r13, qword [r15 + 0x10] | r13 += *((r15 + 0x10)); 0x0044e715 add r12, 0x10 | r12 += 0x10; 0x0044e719 xor ebx, ebx | ebx = 0; 0x0044e71b nop dword [rax + rax] | | do { 0x0044e720 mov rsi, qword [r12 - 0x10] | 0x0044e725 mov rdx, qword [r12 - 8] | 0x0044e72a mov rdi, r13 | 0x0044e72d call 0x404d10 | memcpy (r13, *((r12 - 0x10)), *((r12 - 8))); 0x0044e732 movsxd rax, dword [r12 - 8] | rax = *((r12 - 8)); 0x0044e737 movaps xmm0, xmmword [r12] | xmm0 = *(r12); 0x0044e73c movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0044e740 mov rcx, qword [r15] | rcx = *(r15); 0x0044e743 mov rdx, qword [r15 + 8] | rdx = *((r15 + 8)); 0x0044e747 mov rdx, qword [rdx] | rdx = *(rdx); 0x0044e74a add rdx, rbx | rdx += rbx; 0x0044e74d shl rdx, 5 | rdx <<= 5; 0x0044e751 mov qword [rcx + rdx], r13 | *((rcx + rdx)) = r13; 0x0044e755 mov qword [rcx + rdx + 8], rax | *((rcx + rdx + 8)) = rax; 0x0044e75a movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0044e75e movaps xmmword [rcx + rdx + 0x10], xmm0 | *((rcx + rdx + 0x10)) = xmm0; 0x0044e763 add r13, qword [r12 - 8] | r13 += *((r12 - 8)); 0x0044e768 inc rbx | rbx++; 0x0044e76b add r12, 0x20 | r12 += 0x20; 0x0044e76f cmp r14, rbx | 0x0044e772 jne 0x44e720 | | } while (r14 != rbx); | label_15: 0x0044e774 mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x0044e778 add qword [rax], r14 | *(rax) += r14; 0x0044e77b add rsp, 0x38 | 0x0044e77f pop rbx | 0x0044e780 pop r12 | 0x0044e782 pop r13 | 0x0044e784 pop r14 | 0x0044e786 pop r15 | 0x0044e788 pop rbp | 0x0044e789 ret | return rax; | }