; assembly | /* r2dec pseudo code output */ | /* bdlbb_blobutil.t/none @ 0x419f40 */ | #include | ; (fcn) method.BloombergLP::bdlbb::BlobUtil.append_BloombergLP::bdlbb::Blob__BloombergLP::bdlbb::Blob_const__int__int_ () | int64_t method_BloombergLP::bdlbb::BlobUtil_append_BloombergLP::bdlbb::Blob_BloombergLP::bdlbb::Blob_const_int_int_ (int64_t arg4, signed int64_t arg3, int64_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlbb::BlobUtil::append(BloombergLP::bdlbb::Blob*, BloombergLP::bdlbb::Blob const&, int, int) */ 0x00419f40 push rbp | 0x00419f41 push r15 | 0x00419f43 push r14 | 0x00419f45 push r13 | 0x00419f47 push r12 | 0x00419f49 push rbx | 0x00419f4a sub rsp, 0x28 | 0x00419f4e test ecx, ecx | | if (ecx == 0) { 0x00419f50 je 0x41a0da | goto label_1; | } 0x00419f56 mov r12d, ecx | r12d = ecx; 0x00419f59 mov ebp, edx | 0x00419f5b mov r15, rdi | r15 = rdi; 0x00419f5e mov qword [rsp + 0x20], rsi | *((rsp + 0x20)) = rsi; 0x00419f63 mov rax, qword [rsi] | rax = *(rsi); 0x00419f66 mov ecx, dword [rax + 0x10] | ecx = *((rax + 0x10)); 0x00419f69 xor r14d, r14d | r14d = 0; 0x00419f6c cmp ecx, edx | | if (ecx > edx) { 0x00419f6e jle 0x419f77 | 0x00419f70 xor r13d, r13d | r13d = 0; 0x00419f73 mov ebx, ebp | ebx = ebp; 0x00419f75 jmp 0x419f8f | goto label_2; | } 0x00419f77 add rax, 0x28 | rax += 0x28; 0x00419f7b xor r13d, r13d | r13d = 0; 0x00419f7e mov ebx, ebp | ebx = ebp; | do { 0x00419f80 sub ebx, ecx | ebx -= ecx; 0x00419f82 mov ecx, dword [rax] | ecx = *(rax); 0x00419f84 add rax, 0x18 | rax += 0x18; 0x00419f88 inc r13 | r13++; 0x00419f8b cmp ebx, ecx | 0x00419f8d jge 0x419f80 | | } while (ebx >= ecx); | label_2: 0x00419f8f mov rdi, r15 | 0x00419f92 call 0x418060 | BloombergLP::bdlbb::Blob::trimLastDataBuffer() (r15); 0x00419f97 mov rdi, r15 | 0x00419f9a call 0x417e60 | BloombergLP::bdlbb::Blob::removeUnusedBuffers() (r15); 0x00419f9f mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x00419fa4 mov eax, dword [rcx + 0x24] | eax = *((rcx + 0x24)); 0x00419fa7 dec eax | eax--; 0x00419fa9 add ebp, r12d | ebp += r12d; 0x00419fac cmp ebp, eax | | if (ebp >= eax) { 0x00419fae cmovge ebp, eax | | } 0x00419fb1 mov rax, qword [rcx] | rax = *(rcx); 0x00419fb4 mov ecx, dword [rax + 0x10] | ecx = *((rax + 0x10)); 0x00419fb7 cmp ecx, ebp | | if (ecx > ebp) { 0x00419fb9 jg 0x419fdf | goto label_3; | } 0x00419fbb add rax, 0x28 | rax += 0x28; 0x00419fbf xor r14d, r14d | r14d = 0; 0x00419fc2 nop word cs:[rax + rax] | 0x00419fcc nop dword [rax] | | do { 0x00419fd0 sub ebp, ecx | ebp -= ecx; 0x00419fd2 inc r14d | r14d++; 0x00419fd5 mov ecx, dword [rax] | ecx = *(rax); 0x00419fd7 add rax, 0x18 | rax += 0x18; 0x00419fdb cmp ebp, ecx | 0x00419fdd jge 0x419fd0 | | } while (ebp >= ecx); | label_3: 0x00419fdf mov eax, dword [r15 + 0x28] | eax = *((r15 + 0x28)); 0x00419fe3 sub r14d, r13d | r14d -= r13d; 0x00419fe6 lea eax, [r14 + rax + 2] | eax = r14 + rax + 2; 0x00419feb movsxd rsi, eax | rsi = (int64_t) eax; 0x00419fee mov rdi, r15 | 0x00419ff1 call 0x418870 | bsl::vector>::reserve(unsigned long) (r15, rsi); 0x00419ff6 mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x00419ffb mov rax, qword [rbp] | rax = *(rbp); 0x00419fff lea r14, [r13 + r13*2] | r14 = r13 * 3; 0x0041a004 mov rcx, qword [rax + r14*8] | rcx = *((rax + r14*8)); 0x0041a008 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0041a00d mov rdx, qword [rax + r14*8 + 8] | rdx = *((rax + r14*8 + 8)); 0x0041a012 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0041a017 test rdx, rdx | | if (rdx != 0) { 0x0041a01a je 0x41a021 | 0x0041a01c lock add dword [rdx + 8], 2 | *((rdx + 8)) += 2; | } 0x0041a021 mov eax, dword [rax + r14*8 + 0x10] | eax = *((rax + r14*8 + 0x10)); 0x0041a026 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x0041a02a test ebx, ebx | | if (ebx > 0) { 0x0041a02c jle 0x41a03e | 0x0041a02e mov edx, ebx | edx = ebx; 0x0041a030 add rcx, rdx | rcx += rdx; 0x0041a033 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0041a038 sub eax, ebx | eax -= ebx; 0x0041a03a mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; | } 0x0041a03e cmp eax, r12d | | if (eax > r12d) { 0x0041a041 jle 0x41a048 | 0x0041a043 mov dword [rsp + 0x18], r12d | *((rsp + 0x18)) = r12d; | } 0x0041a048 lea rsi, [rsp + 8] | 0x0041a04d mov rdi, r15 | 0x0041a050 call 0x417b40 | BloombergLP::bdlbb::Blob::appendDataBuffer(BloombergLP::bdlbb::BlobBufferconst&) (r15, rsp + 8); 0x0041a055 sub r12d, dword [rsp + 0x18] | r12d -= *((rsp + 0x18)); 0x0041a05a mov rdi, qword [rsp + 0x10] | rdi = *((rsp + 0x10)); 0x0041a05f test rdi, rdi | | if (rdi != 0) { 0x0041a062 je 0x41a069 | 0x0041a064 call 0x41c0d0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); | } 0x0041a069 test r12d, r12d | | if (r12d <= 0) { 0x0041a06c jle 0x41a0da | goto label_1; | } 0x0041a06e lea rbx, [r14*8 + 0x28] | rbx = r14*8 + 0x28; 0x0041a076 lea r14, [rsp + 8] | r14 = rsp + 8; 0x0041a07b jmp 0x41a089 | | while (rdi == 0) { | label_0: 0x0041a080 add rbx, 0x18 | rbx += 0x18; 0x0041a084 test r12d, r12d | | if (r12d <= 0) { 0x0041a087 jle 0x41a0da | goto label_1; | } 0x0041a089 mov rax, qword [rbp] | rax = *(rbp); 0x0041a08d mov rcx, qword [rax + rbx - 0x10] | rcx = *((rax + rbx - 0x10)); 0x0041a092 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0041a097 mov rcx, qword [rax + rbx - 8] | rcx = *((rax + rbx - 8)); 0x0041a09c mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0041a0a1 test rcx, rcx | | if (rcx != 0) { 0x0041a0a4 je 0x41a0ab | 0x0041a0a6 lock add dword [rcx + 8], 2 | *((rcx + 8)) += 2; | } 0x0041a0ab mov eax, dword [rax + rbx] | eax = *((rax + rbx)); 0x0041a0ae cmp eax, r12d | | if (eax > r12d) { 0x0041a0b1 cmovg eax, r12d | eax = r12d; | } 0x0041a0b5 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x0041a0b9 mov rdi, r15 | 0x0041a0bc mov rsi, r14 | 0x0041a0bf call 0x417b40 | BloombergLP::bdlbb::Blob::appendDataBuffer(BloombergLP::bdlbb::BlobBufferconst&) (r15, r14); 0x0041a0c4 sub r12d, dword [rsp + 0x18] | r12d -= *((rsp + 0x18)); 0x0041a0c9 mov rdi, qword [rsp + 0x10] | rdi = *((rsp + 0x10)); 0x0041a0ce test rdi, rdi | 0x0041a0d1 je 0x41a080 | | } 0x0041a0d3 call 0x41c0d0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); 0x0041a0d8 jmp 0x41a080 | goto label_0; | label_1: 0x0041a0da add rsp, 0x28 | 0x0041a0de pop rbx | 0x0041a0df pop r12 | 0x0041a0e1 pop r13 | 0x0041a0e3 pop r14 | 0x0041a0e5 pop r15 | 0x0041a0e7 pop rbp | 0x0041a0e8 ret | return rax; | }