; assembly | /* r2dec pseudo code output */ | /* bdlbb_blob.t/none @ 0x41f0e0 */ | #include | ; (fcn) method.BloombergLP::bdlbb::Blob.moveAndAppendDataBuffers_BloombergLP::bdlbb::Blob_ () | int64_t method_BloombergLP::bdlbb::Blob_moveAndAppendDataBuffers_BloombergLP::bdlbb::Blob_ (uint32_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlbb::Blob::moveAndAppendDataBuffers(BloombergLP::bdlbb::Blob*) */ 0x0041f0e0 push rbp | 0x0041f0e1 push r15 | 0x0041f0e3 push r14 | 0x0041f0e5 push r13 | 0x0041f0e7 push r12 | 0x0041f0e9 push rbx | 0x0041f0ea sub rsp, 0x28 | 0x0041f0ee cmp dword [rsi + 0x24], 0 | | if (*((rsi + 0x24)) == 0) { 0x0041f0f2 je 0x41f32c | goto label_1; | } 0x0041f0f8 mov r14, rsi | r14 = rsi; 0x0041f0fb mov r12, rdi | r12 = rdi; 0x0041f0fe mov eax, dword [rdi + 0x24] | eax = *((rdi + 0x24)); 0x0041f101 test eax, eax | | if (eax != 0) { 0x0041f103 je 0x41f13a | 0x0041f105 sub eax, dword [r12 + 0x2c] | eax -= *((r12 + 0x2c)); 0x0041f10a movsxd rdx, dword [r12 + 0x28] | rdx = *((r12 + 0x28)); 0x0041f10f mov rcx, qword [r12] | rcx = *(r12); 0x0041f113 lea rsi, [rdx + rdx*2] | rsi = rdx * 3; 0x0041f117 mov edx, dword [rcx + rsi*8 + 0x10] | edx = *((rcx + rsi*8 + 0x10)); 0x0041f11b cmp eax, edx | | if (eax >= edx) { 0x0041f11d jge 0x41f13a | goto label_2; | } 0x0041f11f lea rcx, [rcx + rsi*8 + 0x10] | rcx = rcx + rsi*8 + 0x10; 0x0041f124 sub dword [r12 + 0x20], edx | *((r12 + 0x20)) -= edx; 0x0041f129 mov dword [rcx], eax | *(rcx) = eax; 0x0041f12b mov eax, dword [r12 + 0x24] | eax = *((r12 + 0x24)); 0x0041f130 sub eax, dword [r12 + 0x2c] | eax -= *((r12 + 0x2c)); 0x0041f135 add dword [r12 + 0x20], eax | *((r12 + 0x20)) += eax; | } | label_2: 0x0041f13a mov ebp, dword [r14 + 0x28] | ebp = *((r14 + 0x28)); 0x0041f13e lea r15d, [rbp + 1] | r15d = rbp + 1; 0x0041f142 movsxd rax, dword [r12 + 0x28] | rax = *((r12 + 0x28)); 0x0041f147 lea rbx, [rax + rax*2] | rbx = rax * 3; 0x0041f14b mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0041f150 sub rax, qword [r12] | rax -= *(r12); 0x0041f154 shr rax, 3 | rax >>= 3; 0x0041f158 imul eax, eax, 0xaaaaaaab | eax *= 0xaaaaaaab; 0x0041f15e lea eax, [rbp + rax + 1] | eax = rbp + rax + 1; 0x0041f162 movsxd rsi, eax | rsi = (int64_t) eax; 0x0041f165 mov rdi, r12 | 0x0041f168 call 0x41f600 | bsl::vector>::reserve(unsigned long) (r12, rsi); 0x0041f16d mov rax, qword [r12] | rax = *(r12); 0x0041f171 lea rbx, [rax + rbx*8 + 0x18] | rbx = rax + rbx*8 + 0x18; 0x0041f176 mov r13, qword [r14] | r13 = *(r14); 0x0041f179 movsxd rdx, r15d | rdx = (int64_t) r15d; 0x0041f17c xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041f17f movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0041f184 mov dword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0041f18c lea rcx, [rsp + 0x10] | 0x0041f191 mov rdi, r12 | 0x0041f194 mov rsi, rbx | 0x0041f197 mov qword [rsp], rdx | *(rsp) = rdx; 0x0041f19b call 0x4200e0 | bsl::vector>::insert(BloombergLP::bdlbb::BlobBufferconst*,unsigned long,BloombergLP::bdlbb::BlobBufferconst&) (r12, rbx, rdx, rsp + 0x10); 0x0041f1a0 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0041f1a5 test rdi, rdi | | if (rdi != 0) { 0x0041f1a8 je 0x41f1af | 0x0041f1aa call 0x4255b0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); | } 0x0041f1af movsxd rax, ebp | rax = (int64_t) ebp; 0x0041f1b2 test ebp, ebp | | if (ebp < 0) { 0x0041f1b4 js 0x41f254 | goto label_3; | } | if (ebp == 0) { 0x0041f1ba je 0x41f229 | goto label_4; | } 0x0041f1bc mov ecx, r15d | ecx = r15d; 0x0041f1bf and ecx, 0xfffffffe | ecx &= 0xfffffffe; 0x0041f1c2 neg ecx | ecx = -ecx; 0x0041f1c4 nop word cs:[rax + rax] | 0x0041f1ce nop | | do { 0x0041f1d0 mov rdx, qword [rbx] | rdx = *(rbx); 0x0041f1d3 mov rsi, qword [r13] | rsi = *(r13); 0x0041f1d7 mov qword [rbx], rsi | *(rbx) = rsi; 0x0041f1da mov qword [r13], rdx | *(r13) = rdx; 0x0041f1de mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x0041f1e2 mov rsi, qword [r13 + 8] | rsi = *((r13 + 8)); 0x0041f1e6 mov qword [rbx + 8], rsi | *((rbx + 8)) = rsi; 0x0041f1ea mov qword [r13 + 8], rdx | *((r13 + 8)) = rdx; 0x0041f1ee mov edx, dword [r13 + 0x10] | edx = *((r13 + 0x10)); 0x0041f1f2 mov dword [rbx + 0x10], edx | *((rbx + 0x10)) = edx; 0x0041f1f5 mov rdx, qword [rbx + 0x18] | rdx = *((rbx + 0x18)); 0x0041f1f9 mov rsi, qword [r13 + 0x18] | rsi = *((r13 + 0x18)); 0x0041f1fd mov qword [rbx + 0x18], rsi | *((rbx + 0x18)) = rsi; 0x0041f201 mov qword [r13 + 0x18], rdx | *((r13 + 0x18)) = rdx; 0x0041f205 mov rdx, qword [rbx + 0x20] | rdx = *((rbx + 0x20)); 0x0041f209 mov rsi, qword [r13 + 0x20] | rsi = *((r13 + 0x20)); 0x0041f20d mov qword [rbx + 0x20], rsi | *((rbx + 0x20)) = rsi; 0x0041f211 mov qword [r13 + 0x20], rdx | *((r13 + 0x20)) = rdx; 0x0041f215 mov edx, dword [r13 + 0x28] | edx = *((r13 + 0x28)); 0x0041f219 mov dword [rbx + 0x28], edx | *((rbx + 0x28)) = edx; 0x0041f21c add r13, 0x30 | r13 += 0x30; 0x0041f220 add rbx, 0x30 | rbx += 0x30; 0x0041f224 add ecx, 2 | ecx += 2; 0x0041f227 jne 0x41f1d0 | | } while (ecx != 0); | label_4: 0x0041f229 test r15b, 1 | | if ((r15b & 1) != 0) { 0x0041f22d je 0x41f254 | 0x0041f22f mov rcx, qword [rbx] | rcx = *(rbx); 0x0041f232 mov rdx, qword [r13] | rdx = *(r13); 0x0041f236 mov qword [rbx], rdx | *(rbx) = rdx; 0x0041f239 mov qword [r13], rcx | *(r13) = rcx; 0x0041f23d mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x0041f241 mov rdx, qword [r13 + 8] | rdx = *((r13 + 8)); 0x0041f245 mov qword [rbx + 8], rdx | *((rbx + 8)) = rdx; 0x0041f249 mov qword [r13 + 8], rcx | *((r13 + 8)) = rcx; 0x0041f24d mov ecx, dword [r13 + 0x10] | ecx = *((r13 + 0x10)); 0x0041f251 mov dword [rbx + 0x10], ecx | *((rbx + 0x10)) = ecx; | } | label_3: 0x0041f254 mov rcx, qword [r14] | rcx = *(r14); 0x0041f257 lea rax, [rax + rax*2] | rax *= 3; 0x0041f25b mov edx, r15d | edx = r15d; 0x0041f25e mov r15d, dword [rcx + rax*8 + 0x10] | r15d = *((rcx + rax*8 + 0x10)); 0x0041f263 add r15d, dword [r14 + 0x2c] | r15d += *((r14 + 0x2c)); 0x0041f267 mov eax, dword [r12 + 0x24] | eax = *((r12 + 0x24)); 0x0041f26c test eax, eax | | if (eax != 0) { 0x0041f26e je 0x41f277 | 0x0041f270 mov ebp, dword [r12 + 0x28] | ebp = *((r12 + 0x28)); 0x0041f275 add ebp, edx | ebp += edx; | } 0x0041f277 mov dword [r12 + 0x28], ebp | *((r12 + 0x28)) = ebp; 0x0041f27c mov ecx, dword [r14 + 0x2c] | ecx = *((r14 + 0x2c)); 0x0041f280 add ecx, eax | ecx += eax; 0x0041f282 mov dword [r12 + 0x2c], ecx | *((r12 + 0x2c)) = ecx; 0x0041f287 add eax, dword [r14 + 0x24] | eax += *((r14 + 0x24)); 0x0041f28b mov dword [r12 + 0x24], eax | *((r12 + 0x24)) = eax; 0x0041f290 add dword [r12 + 0x20], r15d | *((r12 + 0x20)) += r15d; 0x0041f295 test edx, edx | | if (edx == 0) { 0x0041f297 je 0x41f2ff | goto label_5; | } 0x0041f299 mov rbx, qword [r14] | rbx = *(r14); 0x0041f29c mov r12, qword [r14 + 8] | r12 = *((r14 + 8)); 0x0041f2a0 mov rcx, qword [rsp] | rcx = *(rsp); 0x0041f2a4 lea rax, [rcx + rcx*2] | rax = rcx * 3; 0x0041f2a8 lea rax, [rbx + rax*8] | rax = rbx + rax*8; 0x0041f2ac mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0041f2b1 lea rax, [rcx*8] | rax = rcx*8; 0x0041f2b9 lea rbp, [rax + rax*2] | rbp = rax * 3; 0x0041f2bd xor r13d, r13d | r13d = 0; 0x0041f2c0 jmp 0x41f2d9 | | while (rdi == 0) { | label_0: 0x0041f2d0 add r13, 0x18 | r13 += 0x18; 0x0041f2d4 cmp rbp, r13 | | if (rbp == r13) { 0x0041f2d7 je 0x41f2ea | goto label_6; | } 0x0041f2d9 mov rdi, qword [rbx + r13 + 8] | rdi = *((rbx + r13 + 8)); 0x0041f2de test rdi, rdi | 0x0041f2e1 je 0x41f2d0 | | } 0x0041f2e3 call 0x4255b0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); 0x0041f2e8 jmp 0x41f2d0 | goto label_0; | label_6: 0x0041f2ea mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0041f2ef sub r12, rsi | r12 -= rsi; | if (r12 != 0) { 0x0041f2f2 je 0x41f2ff | 0x0041f2f4 mov rdi, rbx | 0x0041f2f7 mov rdx, r12 | 0x0041f2fa call 0x403540 | memmove (rbx, rsi, r12); | } | label_5: 0x0041f2ff mov rax, qword [rsp] | rax = *(rsp); 0x0041f303 neg rax | rax = -rax; 0x0041f306 lea rax, [rax + rax*2] | rax *= 3; 0x0041f30a shl rax, 3 | rax <<= 3; 0x0041f30e add qword [r14 + 8], rax | *((r14 + 8)) += rax; 0x0041f312 movabs rax, 0xffffffff00000000 | rax = 0xffffffff00000000; 0x0041f31c mov qword [r14 + 0x24], rax | *((r14 + 0x24)) = rax; 0x0041f320 mov dword [r14 + 0x2c], 0 | *((r14 + 0x2c)) = 0; 0x0041f328 sub dword [r14 + 0x20], r15d | *((r14 + 0x20)) -= r15d; | label_1: 0x0041f32c add rsp, 0x28 | 0x0041f330 pop rbx | 0x0041f331 pop r12 | 0x0041f333 pop r13 | 0x0041f335 pop r14 | 0x0041f337 pop r15 | 0x0041f339 pop rbp | 0x0041f33a ret | return rax; | }