; assembly | /* r2dec pseudo code output */ | /* ball_record.t/none @ 0x412d50 */ | #include | ; (fcn) method.BloombergLP::ball::UserFieldValue_bsl::vector_BloombergLP::ball::UserFieldValue__bsl::allocator_BloombergLP::ball::UserFieldValue___.emplace_back_double__double_ () | int64_t method_BloombergLP::ball::UserFieldValue_bsl::vector_BloombergLP::ball::UserFieldValue_bsl::allocator_BloombergLP::ball::UserFieldValue_emplace_back_double_double_ (int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::ball::UserFieldValue& bsl::vector >::emplace_back(double&) */ 0x00412d50 push rbp | 0x00412d51 push r15 | 0x00412d53 push r14 | 0x00412d55 push r13 | 0x00412d57 push r12 | 0x00412d59 push rbx | 0x00412d5a sub rsp, 0x38 | 0x00412d5e mov rbx, rsi | rbx = rsi; 0x00412d61 mov r13, rdi | r13 = rdi; 0x00412d64 mov rbp, qword [rdi + 8] | rbp = *((rdi + 8)); 0x00412d68 mov rsi, qword [rdi + 0x10] | rsi = *((rdi + 0x10)); 0x00412d6c mov rdi, rbp | rdi = rbp; 0x00412d6f sub rdi, qword [r13] | rdi -= *(r13); 0x00412d73 sar rdi, 6 | rdi >>= 6; 0x00412d77 cmp rsi, rdi | | if (rsi > rdi) { 0x00412d7a jbe 0x412dd5 | 0x00412d7c mov rax, qword [r13 + 0x18] | rax = *((r13 + 0x18)); 0x00412d80 movsd xmm0, qword [rbx] | xmm0 = *(rbx); 0x00412d84 mov dword [rbp + 0x30], 2 | *((rbp + 0x30)) = 2; 0x00412d8b test rax, rax | | if (rax == 0) { 0x00412d8e jne 0x412dad | 0x00412d90 mov rax, qword [rip + 0x270139] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00412d97 test rax, rax | | if (rax != 0) { 0x00412d9a jne 0x412dad | goto label_6; | } 0x00412d9c movsd qword [rsp + 8], xmm0 | *((rsp + 8)) = xmm0; 0x00412da2 call 0x425710 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00412da7 movsd xmm0, qword [rsp + 8] | xmm0 = *((rsp + 8)); | } | label_6: 0x00412dad mov qword [rbp + 0x38], rax | *((rbp + 0x38)) = rax; 0x00412db1 movsd qword [rbp], xmm0 | *(rbp) = xmm0; 0x00412db6 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x00412dba add rax, 0x40 | rax += 0x40; 0x00412dbe mov qword [r13 + 8], rax | *((r13 + 8)) = rax; | label_5: 0x00412dc2 add rax, 0xffffffffffffffc0 | rax += 0xffffffffffffffc0; 0x00412dc6 add rsp, 0x38 | 0x00412dca pop rbx | 0x00412dcb pop r12 | 0x00412dcd pop r13 | 0x00412dcf pop r14 | 0x00412dd1 pop r15 | 0x00412dd3 pop rbp | 0x00412dd4 ret | return rax; | } 0x00412dd5 inc rdi | rdi++; 0x00412dd8 movabs rdx, 0x3ffffffffffffff | rdx = 0x3ffffffffffffff; 0x00412de2 call 0x431320 | rax = bsl::Vector_Util::computeNewCapacity(unsigned long,unsigned long,unsigned long) (rdi, rsi, rdx); 0x00412de7 mov r15, rax | r15 = rax; 0x00412dea mov rdi, qword [r13 + 0x18] | rdi = *((r13 + 0x18)); 0x00412dee xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00412df1 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x00412df6 mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x00412dff mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x00412e04 mov rsi, rax | rsi = rax; 0x00412e07 shl rsi, 6 | rsi <<= 6; 0x00412e0b mov rax, qword [rdi] | rax = *(rdi); 0x00412e0e call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00412e11 mov r14, rax | r14 = rax; 0x00412e14 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00412e19 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x00412e1e mov qword [rsp + 0x20], r15 | *((rsp + 0x20)) = r15; 0x00412e23 mov rbp, qword [r13 + 8] | rbp = *((r13 + 8)); 0x00412e27 sub rbp, qword [r13] | rbp -= *(r13); 0x00412e2b mov rax, qword [r13 + 0x18] | rax = *((r13 + 0x18)); 0x00412e2f movsd xmm0, qword [rbx] | xmm0 = *(rbx); 0x00412e33 mov dword [r14 + rbp + 0x30], 2 | *((r14 + rbp + 0x30)) = 2; 0x00412e3c test rax, rax | | if (rax == 0) { 0x00412e3f jne 0x412e5e | 0x00412e41 movsd qword [rsp + 8], xmm0 | *((rsp + 8)) = xmm0; 0x00412e47 mov rax, qword [rip + 0x270082] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00412e4e test rax, rax | | if (rax == 0) { 0x00412e51 jne 0x412e58 | 0x00412e53 call 0x425710 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00412e58 movsd xmm0, qword [rsp + 8] | xmm0 = *((rsp + 8)); | } 0x00412e5e mov rbx, rbp | rbx = rbp; 0x00412e61 sar rbx, 6 | rbx >>= 6; 0x00412e65 lea rcx, [r14 + rbp] | rcx = r14 + rbp; 0x00412e69 lea rdx, [r14 + rbp + 0x30] | rdx = r14 + rbp + 0x30; 0x00412e6e mov qword [rsp + 8], rdx | *((rsp + 8)) = rdx; 0x00412e73 mov rbp, rcx | 0x00412e76 shl rbx, 6 | rbx <<= 6; 0x00412e7a mov qword [r14 + rbx + 0x38], rax | *((r14 + rbx + 0x38)) = rax; 0x00412e7f movsd qword [rcx], xmm0 | *(rcx) = xmm0; 0x00412e83 mov rdi, qword [rsp + 0x10] | 0x00412e88 mov r15, qword [r13] | r15 = *(r13); 0x00412e8c mov r12, qword [r13 + 8] | r12 = *((r13 + 8)); 0x00412e90 mov rax, qword [r13 + 0x18] | rax = *((r13 + 0x18)); 0x00412e94 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x00412e99 lea rcx, [rsp + 0x30] | 0x00412e9e mov rsi, r15 | 0x00412ea1 mov rdx, r12 | 0x00412ea4 xor r8d, r8d | r8d = 0; 0x00412ea7 call 0x412a70 | voidBloombergLP::bslalg::ArrayPrimitives_Imp::moveIfNoexcept>(BloombergLP::ball::UserFieldValue*,BloombergLP::ball::UserFieldValue*,BloombergLP::ball::UserFieldValue*,bsl::allocator,BloombergLP::bslmf::MetaInt<0>*) (*((rsp + 0x10)), r15, r12, rsp + 0x30); 0x00412eac cmp r15, r12 | | if (r15 != r12) { 0x00412eaf jne 0x412f05 | goto label_7; | } | do { 0x00412eb1 mov rax, qword [r13] | rax = *(r13); 0x00412eb5 mov qword [r13 + 8], rax | *((r13 + 8)) = rax; 0x00412eb9 add rbp, 0x40 | rbp += 0x40; 0x00412ebd mov qword [rsp + 0x18], rbp | *((rsp + 0x18)) = rbp; 0x00412ec2 lea rsi, [rsp + 0x10] | 0x00412ec7 mov rdi, r13 | 0x00412eca call 0x431350 | bsl::Vector_Util::swap(void*,void*) (r13, rsp + 0x10); 0x00412ecf mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); 0x00412ed4 test r14, r14 | | if (r14 == 0) { 0x00412ed7 je 0x412fa9 | goto label_8; | } 0x00412edd mov rbx, qword [rsp + 0x18] | rbx = *((rsp + 0x18)); 0x00412ee2 cmp r14, rbx | | if (r14 != rbx) { 0x00412ee5 jne 0x412f5a | goto label_9; | } 0x00412ee7 jmp 0x412f9b | goto label_10; | label_2: 0x00412eec mov qword [r15 + 0x18], 0xffffffffffffffff | *((r15 + 0x18)) = 0xffffffffffffffff; | label_1: 0x00412ef4 mov dword [r15 + 0x30], 0 | *((r15 + 0x30)) = 0; | label_0: 0x00412efc add r15, 0x40 | r15 += 0x40; 0x00412f00 cmp r12, r15 | 0x00412f03 je 0x412eb1 | | } while (r12 == r15); | label_7: 0x00412f05 mov eax, dword [r15 + 0x30] | eax = *((r15 + 0x30)); 0x00412f09 test eax, eax | | if (eax == 0) { 0x00412f0b je 0x412efc | goto label_0; | } 0x00412f0d cmp eax, 5 | | if (eax == 5) { 0x00412f10 je 0x412f2d | goto label_11; | } 0x00412f12 cmp eax, 3 | | if (eax != 3) { 0x00412f15 jne 0x412ef4 | goto label_1; | } 0x00412f17 cmp qword [r15 + 0x20], 0x17 | | if (*((r15 + 0x20)) == 0x17) { 0x00412f1c je 0x412eec | goto label_2; | } 0x00412f1e mov rsi, qword [r15] | rsi = *(r15); 0x00412f21 mov rdi, qword [r15 + 0x28] | rdi = *((r15 + 0x28)); 0x00412f25 mov rax, qword [rdi] | rax = *(rdi); 0x00412f28 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00412f2b jmp 0x412eec | goto label_2; | label_11: 0x00412f2d mov rsi, qword [r15] | rsi = *(r15); 0x00412f30 test rsi, rsi | | if (rsi == 0) { 0x00412f33 je 0x412ef4 | goto label_1; | } 0x00412f35 mov rdi, qword [r15 + 0x18] | rdi = *((r15 + 0x18)); 0x00412f39 mov rax, qword [rdi] | rax = *(rdi); 0x00412f3c call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00412f3f jmp 0x412ef4 | goto label_1; | label_4: 0x00412f41 mov qword [r14 + 0x18], 0xffffffffffffffff | *((r14 + 0x18)) = 0xffffffffffffffff; | label_3: 0x00412f49 mov dword [r14 + 0x30], 0 | *((r14 + 0x30)) = 0; | do { 0x00412f51 add r14, 0x40 | r14 += 0x40; 0x00412f55 cmp rbx, r14 | | if (rbx == r14) { 0x00412f58 je 0x412f96 | goto label_12; | } | label_9: 0x00412f5a mov eax, dword [r14 + 0x30] | eax = *((r14 + 0x30)); 0x00412f5e test eax, eax | 0x00412f60 je 0x412f51 | | } while (eax == 0); 0x00412f62 cmp eax, 5 | | if (eax == 5) { 0x00412f65 je 0x412f82 | goto label_13; | } 0x00412f67 cmp eax, 3 | | if (eax != 3) { 0x00412f6a jne 0x412f49 | goto label_3; | } 0x00412f6c cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) == 0x17) { 0x00412f71 je 0x412f41 | goto label_4; | } 0x00412f73 mov rsi, qword [r14] | rsi = *(r14); 0x00412f76 mov rdi, qword [r14 + 0x28] | rdi = *((r14 + 0x28)); 0x00412f7a mov rax, qword [rdi] | rax = *(rdi); 0x00412f7d call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00412f80 jmp 0x412f41 | goto label_4; | label_13: 0x00412f82 mov rsi, qword [r14] | rsi = *(r14); 0x00412f85 test rsi, rsi | | if (rsi == 0) { 0x00412f88 je 0x412f49 | goto label_3; | } 0x00412f8a mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x00412f8e mov rax, qword [rdi] | rax = *(rdi); 0x00412f91 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00412f94 jmp 0x412f49 | goto label_3; | label_12: 0x00412f96 mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); | label_10: 0x00412f9b mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x00412fa0 mov rax, qword [rdi] | rax = *(rdi); 0x00412fa3 mov rsi, r14 | rsi = r14; 0x00412fa6 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_8: 0x00412fa9 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x00412fad jmp 0x412dc2 | goto label_5; | }