; assembly | /* r2dec pseudo code output */ | /* bdlbb_blob.t/assume @ 0x41f350 */ | #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*) */ 0x0041f350 push rbp | 0x0041f351 push r15 | 0x0041f353 push r14 | 0x0041f355 push r13 | 0x0041f357 push r12 | 0x0041f359 push rbx | 0x0041f35a sub rsp, 0x28 | 0x0041f35e cmp dword [rsi + 0x24], 0 | | if (*((rsi + 0x24)) == 0) { 0x0041f362 je 0x41f59c | goto label_1; | } 0x0041f368 mov r14, rsi | r14 = rsi; 0x0041f36b mov r12, rdi | r12 = rdi; 0x0041f36e mov eax, dword [rdi + 0x24] | eax = *((rdi + 0x24)); 0x0041f371 test eax, eax | | if (eax != 0) { 0x0041f373 je 0x41f3aa | 0x0041f375 sub eax, dword [r12 + 0x2c] | eax -= *((r12 + 0x2c)); 0x0041f37a movsxd rdx, dword [r12 + 0x28] | rdx = *((r12 + 0x28)); 0x0041f37f mov rcx, qword [r12] | rcx = *(r12); 0x0041f383 lea rsi, [rdx + rdx*2] | rsi = rdx * 3; 0x0041f387 mov edx, dword [rcx + rsi*8 + 0x10] | edx = *((rcx + rsi*8 + 0x10)); 0x0041f38b cmp eax, edx | | if (eax >= edx) { 0x0041f38d jge 0x41f3aa | goto label_2; | } 0x0041f38f lea rcx, [rcx + rsi*8 + 0x10] | rcx = rcx + rsi*8 + 0x10; 0x0041f394 sub dword [r12 + 0x20], edx | *((r12 + 0x20)) -= edx; 0x0041f399 mov dword [rcx], eax | *(rcx) = eax; 0x0041f39b mov eax, dword [r12 + 0x24] | eax = *((r12 + 0x24)); 0x0041f3a0 sub eax, dword [r12 + 0x2c] | eax -= *((r12 + 0x2c)); 0x0041f3a5 add dword [r12 + 0x20], eax | *((r12 + 0x20)) += eax; | } | label_2: 0x0041f3aa mov ebp, dword [r14 + 0x28] | ebp = *((r14 + 0x28)); 0x0041f3ae lea r15d, [rbp + 1] | r15d = rbp + 1; 0x0041f3b2 movsxd rax, dword [r12 + 0x28] | rax = *((r12 + 0x28)); 0x0041f3b7 mov rcx, qword [r12 + 8] | rcx = *((r12 + 8)); 0x0041f3bc sub rcx, qword [r12] | rcx -= *(r12); 0x0041f3c0 lea rbx, [rax + rax*2] | rbx = rax * 3; 0x0041f3c4 shr rcx, 3 | rcx >>= 3; 0x0041f3c8 imul eax, ecx, 0xaaaaaaab | eax = ecx * 0xaaaaaaab; 0x0041f3ce lea esi, [rbp + rax + 1] | 0x0041f3d2 mov rdi, r12 | 0x0041f3d5 call 0x41f860 | BloombergLP::(anonymousnamespace)::InvalidBlobBufferFactory::allocate(BloombergLP::bdlbb::BlobBuffer*) (r12, rbp + rax + 1); 0x0041f3da mov rax, qword [r12] | rax = *(r12); 0x0041f3de lea rbx, [rax + rbx*8 + 0x18] | rbx = rax + rbx*8 + 0x18; 0x0041f3e3 mov r13, qword [r14] | r13 = *(r14); 0x0041f3e6 movsxd rdx, r15d | rdx = (int64_t) r15d; 0x0041f3e9 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041f3ec movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0041f3f1 mov dword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0041f3f9 lea rcx, [rsp + 0x10] | 0x0041f3fe mov rdi, r12 | 0x0041f401 mov rsi, rbx | 0x0041f404 mov qword [rsp], rdx | *(rsp) = rdx; 0x0041f408 call 0x420340 | bsl::vector>::insert(BloombergLP::bdlbb::BlobBufferconst*,unsigned long,BloombergLP::bdlbb::BlobBufferconst&) (r12, rbx, rdx, rsp + 0x10); 0x0041f40d mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0041f412 test rdi, rdi | | if (rdi != 0) { 0x0041f415 je 0x41f41c | 0x0041f417 call 0x4257c0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); | } 0x0041f41c movsxd rax, ebp | rax = (int64_t) ebp; 0x0041f41f test ebp, ebp | | if (ebp < 0) { 0x0041f421 js 0x41f4c4 | goto label_3; | } | if (ebp == 0) { 0x0041f427 je 0x41f499 | goto label_4; | } 0x0041f429 mov ecx, r15d | ecx = r15d; 0x0041f42c and ecx, 0xfffffffe | ecx &= 0xfffffffe; 0x0041f42f neg ecx | ecx = -ecx; 0x0041f431 nop word cs:[rax + rax] | 0x0041f43b nop dword [rax + rax] | | do { 0x0041f440 mov rdx, qword [rbx] | rdx = *(rbx); 0x0041f443 mov rsi, qword [r13] | rsi = *(r13); 0x0041f447 mov qword [rbx], rsi | *(rbx) = rsi; 0x0041f44a mov qword [r13], rdx | *(r13) = rdx; 0x0041f44e mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x0041f452 mov rsi, qword [r13 + 8] | rsi = *((r13 + 8)); 0x0041f456 mov qword [rbx + 8], rsi | *((rbx + 8)) = rsi; 0x0041f45a mov qword [r13 + 8], rdx | *((r13 + 8)) = rdx; 0x0041f45e mov edx, dword [r13 + 0x10] | edx = *((r13 + 0x10)); 0x0041f462 mov dword [rbx + 0x10], edx | *((rbx + 0x10)) = edx; 0x0041f465 mov rdx, qword [rbx + 0x18] | rdx = *((rbx + 0x18)); 0x0041f469 mov rsi, qword [r13 + 0x18] | rsi = *((r13 + 0x18)); 0x0041f46d mov qword [rbx + 0x18], rsi | *((rbx + 0x18)) = rsi; 0x0041f471 mov qword [r13 + 0x18], rdx | *((r13 + 0x18)) = rdx; 0x0041f475 mov rdx, qword [rbx + 0x20] | rdx = *((rbx + 0x20)); 0x0041f479 mov rsi, qword [r13 + 0x20] | rsi = *((r13 + 0x20)); 0x0041f47d mov qword [rbx + 0x20], rsi | *((rbx + 0x20)) = rsi; 0x0041f481 mov qword [r13 + 0x20], rdx | *((r13 + 0x20)) = rdx; 0x0041f485 mov edx, dword [r13 + 0x28] | edx = *((r13 + 0x28)); 0x0041f489 mov dword [rbx + 0x28], edx | *((rbx + 0x28)) = edx; 0x0041f48c add r13, 0x30 | r13 += 0x30; 0x0041f490 add rbx, 0x30 | rbx += 0x30; 0x0041f494 add ecx, 2 | ecx += 2; 0x0041f497 jne 0x41f440 | | } while (ecx != 0); | label_4: 0x0041f499 test r15b, 1 | | if ((r15b & 1) != 0) { 0x0041f49d je 0x41f4c4 | 0x0041f49f mov rcx, qword [rbx] | rcx = *(rbx); 0x0041f4a2 mov rdx, qword [r13] | rdx = *(r13); 0x0041f4a6 mov qword [rbx], rdx | *(rbx) = rdx; 0x0041f4a9 mov qword [r13], rcx | *(r13) = rcx; 0x0041f4ad mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x0041f4b1 mov rdx, qword [r13 + 8] | rdx = *((r13 + 8)); 0x0041f4b5 mov qword [rbx + 8], rdx | *((rbx + 8)) = rdx; 0x0041f4b9 mov qword [r13 + 8], rcx | *((r13 + 8)) = rcx; 0x0041f4bd mov ecx, dword [r13 + 0x10] | ecx = *((r13 + 0x10)); 0x0041f4c1 mov dword [rbx + 0x10], ecx | *((rbx + 0x10)) = ecx; | } | label_3: 0x0041f4c4 mov rcx, qword [r14] | rcx = *(r14); 0x0041f4c7 lea rax, [rax + rax*2] | rax *= 3; 0x0041f4cb mov edx, r15d | edx = r15d; 0x0041f4ce mov r15d, dword [rcx + rax*8 + 0x10] | r15d = *((rcx + rax*8 + 0x10)); 0x0041f4d3 add r15d, dword [r14 + 0x2c] | r15d += *((r14 + 0x2c)); 0x0041f4d7 mov eax, dword [r12 + 0x24] | eax = *((r12 + 0x24)); 0x0041f4dc test eax, eax | | if (eax != 0) { 0x0041f4de je 0x41f4e7 | 0x0041f4e0 mov ebp, dword [r12 + 0x28] | ebp = *((r12 + 0x28)); 0x0041f4e5 add ebp, edx | ebp += edx; | } 0x0041f4e7 mov dword [r12 + 0x28], ebp | *((r12 + 0x28)) = ebp; 0x0041f4ec mov ecx, dword [r14 + 0x2c] | ecx = *((r14 + 0x2c)); 0x0041f4f0 add ecx, eax | ecx += eax; 0x0041f4f2 mov dword [r12 + 0x2c], ecx | *((r12 + 0x2c)) = ecx; 0x0041f4f7 add eax, dword [r14 + 0x24] | eax += *((r14 + 0x24)); 0x0041f4fb mov dword [r12 + 0x24], eax | *((r12 + 0x24)) = eax; 0x0041f500 add dword [r12 + 0x20], r15d | *((r12 + 0x20)) += r15d; 0x0041f505 test edx, edx | | if (edx == 0) { 0x0041f507 je 0x41f56f | goto label_5; | } 0x0041f509 mov rbx, qword [r14] | rbx = *(r14); 0x0041f50c mov r12, qword [r14 + 8] | r12 = *((r14 + 8)); 0x0041f510 mov rcx, qword [rsp] | rcx = *(rsp); 0x0041f514 lea rax, [rcx + rcx*2] | rax = rcx * 3; 0x0041f518 lea rax, [rbx + rax*8] | rax = rbx + rax*8; 0x0041f51c mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0041f521 lea rax, [rcx*8] | rax = rcx*8; 0x0041f529 lea rbp, [rax + rax*2] | rbp = rax * 3; 0x0041f52d xor r13d, r13d | r13d = 0; 0x0041f530 jmp 0x41f549 | | while (rdi == 0) { | label_0: 0x0041f540 add r13, 0x18 | r13 += 0x18; 0x0041f544 cmp rbp, r13 | | if (rbp == r13) { 0x0041f547 je 0x41f55a | goto label_6; | } 0x0041f549 mov rdi, qword [rbx + r13 + 8] | rdi = *((rbx + r13 + 8)); 0x0041f54e test rdi, rdi | 0x0041f551 je 0x41f540 | | } 0x0041f553 call 0x4257c0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); 0x0041f558 jmp 0x41f540 | goto label_0; | label_6: 0x0041f55a mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0041f55f sub r12, rsi | r12 -= rsi; | if (r12 != 0) { 0x0041f562 je 0x41f56f | 0x0041f564 mov rdi, rbx | 0x0041f567 mov rdx, r12 | 0x0041f56a call 0x403540 | memmove (rbx, rsi, r12); | } | label_5: 0x0041f56f mov rax, qword [rsp] | rax = *(rsp); 0x0041f573 neg rax | rax = -rax; 0x0041f576 lea rax, [rax + rax*2] | rax *= 3; 0x0041f57a shl rax, 3 | rax <<= 3; 0x0041f57e add qword [r14 + 8], rax | *((r14 + 8)) += rax; 0x0041f582 movabs rax, 0xffffffff00000000 | rax = 0xffffffff00000000; 0x0041f58c mov qword [r14 + 0x24], rax | *((r14 + 0x24)) = rax; 0x0041f590 mov dword [r14 + 0x2c], 0 | *((r14 + 0x2c)) = 0; 0x0041f598 sub dword [r14 + 0x20], r15d | *((r14 + 0x20)) -= r15d; | label_1: 0x0041f59c add rsp, 0x28 | 0x0041f5a0 pop rbx | 0x0041f5a1 pop r12 | 0x0041f5a3 pop r13 | 0x0041f5a5 pop r14 | 0x0041f5a7 pop r15 | 0x0041f5a9 pop rbp | 0x0041f5aa ret | return rax; | }