; assembly | /* r2dec pseudo code output */ | /* bdlbb_blob.t/none @ 0x41dce0 */ | #include | ; (fcn) method.BloombergLP::bdlbb::Blob.slowSetLength_int_ () | int64_t method_BloombergLP::bdlbb::Blob_slowSetLength_int_ (signed int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlbb::Blob::slowSetLength(int) */ 0x0041dce0 push rbp | 0x0041dce1 push r15 | 0x0041dce3 push r14 | 0x0041dce5 push rbx | 0x0041dce6 sub rsp, 0x18 | 0x0041dcea mov r15, rdi | r15 = rdi; 0x0041dced test esi, esi | | if (esi == 0) { 0x0041dcef je 0x41dd8e | goto label_3; | } 0x0041dcf5 mov ebx, esi | ebx = esi; 0x0041dcf7 cmp dword [r15 + 0x20], esi | | if (*((r15 + 0x20)) >= esi) { 0x0041dcfb jge 0x41dd5c | goto label_4; | } 0x0041dcfd mov r14, rsp | r14 = rsp; 0x0041dd00 jmp 0x41dd14 | | while (rdi == 0) { | label_0: 0x0041dd10 cmp eax, ebx | | if (eax >= ebx) { 0x0041dd12 jge 0x41dd5c | goto label_4; | } 0x0041dd14 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041dd17 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041dd1b mov dword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x0041dd23 mov rdi, qword [r15 + 0x30] | rdi = *((r15 + 0x30)); 0x0041dd27 mov rax, qword [rdi] | rax = *(rdi); 0x0041dd2a mov rsi, r14 | rsi = r14; 0x0041dd2d call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x0041dd30 mov rdi, r15 | 0x0041dd33 mov rsi, r14 | 0x0041dd36 call 0x41fa50 | bsl::vector>::push_back(BloombergLP::bdlbb::BlobBufferconst&) (r15, r14); 0x0041dd3b mov eax, dword [r15 + 0x20] | eax = *((r15 + 0x20)); 0x0041dd3f add eax, dword [rsp + 0x10] | eax += *((rsp + 0x10)); 0x0041dd43 mov dword [r15 + 0x20], eax | *((r15 + 0x20)) = eax; 0x0041dd47 mov rdi, qword [rsp + 8] | rdi = *((rsp + 8)); 0x0041dd4c test rdi, rdi | 0x0041dd4f je 0x41dd10 | | } 0x0041dd51 call 0x4255b0 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); 0x0041dd56 mov eax, dword [r15 + 0x20] | eax = *((r15 + 0x20)); 0x0041dd5a jmp 0x41dd10 | goto label_0; | label_4: 0x0041dd5c mov eax, dword [r15 + 0x24] | eax = *((r15 + 0x24)); 0x0041dd60 cmp eax, ebx | | if (eax < ebx) { 0x0041dd62 jge 0x41dda9 | 0x0041dd64 movsxd rdi, dword [r15 + 0x28] | rdi = *((r15 + 0x28)); 0x0041dd68 cmp rdi, 0xffffffffffffffff | | if (rdi == -1) { 0x0041dd6c je 0x41de08 | goto label_5; | } 0x0041dd72 mov r8, qword [r15] | r8 = *(r15); 0x0041dd75 lea rax, [rdi + rdi*2] | rax = rdi * 3; 0x0041dd79 mov edx, dword [r8 + rax*8 + 0x10] | edx = *((r8 + rax*8 + 0x10)); 0x0041dd7e mov ecx, dword [r15 + 0x2c] | ecx = *((r15 + 0x2c)); 0x0041dd82 lea eax, [rcx + rdx] | eax = rcx + rdx; 0x0041dd85 mov dword [r15 + 0x24], eax | *((r15 + 0x24)) = eax; 0x0041dd89 jmp 0x41de11 | goto label_6; | label_3: 0x0041dd8e movabs rax, 0xffffffff00000000 | rax = 0xffffffff00000000; 0x0041dd98 mov qword [r15 + 0x24], rax | *((r15 + 0x24)) = rax; 0x0041dd9c mov dword [r15 + 0x2c], 0 | *((r15 + 0x2c)) = 0; 0x0041dda4 jmp 0x41debb | goto label_7; | } 0x0041dda9 mov r10d, dword [r15 + 0x2c] | r10d = *((r15 + 0x2c)); 0x0041ddad movsxd rdx, dword [r15 + 0x28] | rdx = *((r15 + 0x28)); 0x0041ddb1 lea rsi, [rdx - 1] | rsi = rdx - 1; 0x0041ddb5 mov ecx, r10d | ecx = r10d; 0x0041ddb8 sub ecx, ebx | ecx -= ebx; 0x0041ddba test ecx, ecx | 0x0041ddbc setg r9b | r9b = (ecx > 0) ? 1 : 0; 0x0041ddc0 mov eax, r10d | eax = r10d; 0x0041ddc3 mov dword [r15 + 0x24], r10d | *((r15 + 0x24)) = r10d; 0x0041ddc7 mov dword [r15 + 0x28], esi | *((r15 + 0x28)) = esi; 0x0041ddcb sub eax, ebx | eax -= ebx; | if (eax > 0) { 0x0041ddcd jle 0x41ddeb | 0x0041ddcf test edx, edx | | if (edx <= 0) { 0x0041ddd1 jle 0x41ddeb | goto label_8; | } 0x0041ddd3 mov r8, qword [r15] | r8 = *(r15); 0x0041ddd6 lea rdi, [rsi + rsi*2] | rdi = rsi * 3; 0x0041ddda mov ebp, dword [r8 + rdi*8 + 0x10] | ebp = *((r8 + rdi*8 + 0x10)); 0x0041dddf cmp eax, ebp | | if (eax >= ebp) { 0x0041dde1 jge 0x41de45 | goto label_9; | } 0x0041dde3 mov edi, r10d | edi = r10d; 0x0041dde6 jmp 0x41de9d | goto label_10; | } | label_8: 0x0041ddeb mov edi, r10d | edi = r10d; 0x0041ddee mov ebp, edx | | label_1: 0x0041ddf0 mov edx, ebp | 0x0041ddf2 test r9b, r9b | | if (r9b != 0) { 0x0041ddf5 jne 0x41de9d | goto label_10; | } 0x0041ddfb test ebp, ebp | | if (ebp > 0) { 0x0041ddfd jg 0x41dea9 | goto label_11; | } 0x0041de03 jmp 0x41debb | goto label_7; | label_5: 0x0041de08 mov r8, qword [r15] | r8 = *(r15); 0x0041de0b mov ecx, dword [r15 + 0x2c] | ecx = *((r15 + 0x2c)); 0x0041de0f xor edx, edx | edx = 0; | label_6: 0x0041de11 sub ebx, eax | ebx -= eax; 0x0041de13 lea rsi, [rdi + rdi*2] | rsi = rdi * 3; 0x0041de17 lea rsi, [r8 + rsi*8 + 0x28] | rsi = r8 + rsi*8 + 0x28; 0x0041de1c inc edi | edi++; 0x0041de1e nop | | do { 0x0041de20 add ecx, edx | ecx += edx; 0x0041de22 mov dword [r15 + 0x2c], ecx | *((r15 + 0x2c)) = ecx; 0x0041de26 mov dword [r15 + 0x28], edi | *((r15 + 0x28)) = edi; 0x0041de2a mov edx, dword [rsi] | edx = *(rsi); 0x0041de2c cmp ebx, edx | 0x0041de2e mov ebp, ebx | | if (ebx > edx) { 0x0041de30 cmovg ebp, edx | | } 0x0041de33 add eax, ebp | eax += ebp; 0x0041de35 add rsi, 0x18 | rsi += 0x18; 0x0041de39 inc edi | edi++; 0x0041de3b mov dword [r15 + 0x24], eax | *((r15 + 0x24)) = eax; 0x0041de3f sub ebx, edx | ebx -= edx; 0x0041de41 jg 0x41de20 | | } while (ebx > 0); 0x0041de43 jmp 0x41debb | goto label_7; | label_9: 0x0041de45 lea rsi, [r8 + rdi*8 + 0x10] | rsi = r8 + rdi*8 + 0x10; 0x0041de4a mov edi, r10d | edi = r10d; 0x0041de4d nop dword [rax] | | label_2: 0x0041de50 sub r10d, ebp | r10d -= ebp; 0x0041de53 lea ebp, [rdx - 1] | ebp = rdx - 1; 0x0041de56 mov dword [r15 + 0x2c], r10d | *((r15 + 0x2c)) = r10d; 0x0041de5a mov ebx, dword [rsi] | ebx = *(rsi); 0x0041de5c sub edi, ebx | edi -= ebx; 0x0041de5e lea esi, [rdx - 2] | esi = rdx - 2; 0x0041de61 mov ecx, eax | ecx = eax; 0x0041de63 sub ecx, ebx | ecx -= ebx; 0x0041de65 test ecx, ecx | 0x0041de67 setg r9b | r9b = (ecx > 0) ? 1 : 0; 0x0041de6b mov dword [r15 + 0x24], edi | *((r15 + 0x24)) = edi; 0x0041de6f mov dword [r15 + 0x28], esi | *((r15 + 0x28)) = esi; 0x0041de73 sub eax, ebx | eax -= ebx; | if (eax <= 0) { 0x0041de75 jle 0x41ddf0 | goto label_1; | } 0x0041de7b test ebp, ebp | | if (ebp <= 0) { 0x0041de7d jle 0x41ddf0 | goto label_1; | } 0x0041de83 movsxd rsi, esi | rsi = (int64_t) esi; 0x0041de86 lea rbp, [rsi + rsi*2] | rbp = rsi * 3; 0x0041de8a lea rsi, [r8 + rbp*8 + 0x10] | rsi = r8 + rbp*8 + 0x10; 0x0041de8f mov ebp, dword [r8 + rbp*8 + 0x10] | ebp = *((r8 + rbp*8 + 0x10)); 0x0041de94 dec edx | edx--; 0x0041de96 cmp eax, ebp | | if (eax >= ebp) { 0x0041de98 jge 0x41de50 | goto label_2; | } 0x0041de9a lea esi, [rdx - 1] | esi = rdx - 1; | label_10: 0x0041de9d sub edi, eax | edi -= eax; 0x0041de9f mov dword [r15 + 0x24], edi | *((r15 + 0x24)) = edi; 0x0041dea3 mov ebp, edx | 0x0041dea5 test ebp, ebp | | if (ebp > 0) { 0x0041dea7 jle 0x41debb | | label_11: 0x0041dea9 mov eax, esi | eax = esi; 0x0041deab mov rcx, qword [r15] | rcx = *(r15); 0x0041deae lea rax, [rax + rax*2] | rax *= 3; 0x0041deb2 sub r10d, dword [rcx + rax*8 + 0x10] | r10d -= *((rcx + rax*8 + 0x10)); 0x0041deb7 mov dword [r15 + 0x2c], r10d | *((r15 + 0x2c)) = r10d; | } | label_7: 0x0041debb add rsp, 0x18 | 0x0041debf pop rbx | 0x0041dec0 pop r14 | 0x0041dec2 pop r15 | 0x0041dec4 pop rbp | 0x0041dec5 ret | return rax; | }