; assembly | /* r2dec pseudo code output */ | /* balb_testmessages.t/assume @ 0x404a70 */ | #include | ; (fcn) method.BloombergLP::balb::Choice4.makeSelection_int_ () | int64_t method_BloombergLP::balb::Choice4_makeSelection_int_ (uint32_t arg2, int64_t arg1) { | rsi = arg2; | rdi = arg1; | /* BloombergLP::balb::Choice4::makeSelection(int) */ 0x00404a70 push rbp | 0x00404a71 push r15 | 0x00404a73 push r14 | 0x00404a75 push rbx | 0x00404a76 push rax | 0x00404a77 mov r14, rdi | r14 = rdi; 0x00404a7a cmp esi, 0xffffffff | | if (esi == 0xffffffff) { 0x00404a7d je 0x404aeb | goto label_2; | } 0x00404a7f cmp esi, 1 | | if (esi == 1) { 0x00404a82 je 0x404b48 | goto label_3; | } 0x00404a88 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x00404a8e test esi, esi | | if (esi != 0) { 0x00404a90 jne 0x404bb5 | goto label_4; | } 0x00404a96 mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x00404a9a cmp eax, 1 | | if (eax == 1) { 0x00404a9d je 0x404b52 | goto label_5; | } 0x00404aa3 test eax, eax | | if (eax != 0) { 0x00404aa5 jne 0x404b52 | goto label_5; | } 0x00404aab mov rbx, qword [r14] | rbx = *(r14); 0x00404aae mov rbp, qword [r14 + 8] | rbp = *((r14 + 8)); 0x00404ab2 xor r15d, r15d | r15d = 0; 0x00404ab5 cmp rbp, rbx | | if (rbp != rbx) { 0x00404ab8 jne 0x404ad5 | goto label_6; | } 0x00404aba jmp 0x404bb5 | goto label_4; | do { | label_0: 0x00404ac0 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x00404ac8 add rbx, 0x30 | rbx += 0x30; 0x00404acc cmp rbp, rbx | | if (rbp == rbx) { 0x00404acf je 0x404b91 | goto label_7; | } | label_6: 0x00404ad5 cmp qword [rbx + 0x20], 0x17 | 0x00404ada je 0x404ac0 | | } while (*((rbx + 0x20)) == 0x17); 0x00404adc mov rsi, qword [rbx] | rsi = *(rbx); 0x00404adf mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x00404ae3 mov rax, qword [rdi] | rax = *(rdi); 0x00404ae6 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00404ae9 jmp 0x404ac0 | goto label_0; | label_2: 0x00404aeb mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x00404aef cmp eax, 1 | | if (eax == 1) { 0x00404af2 je 0x404baa | goto label_8; | } 0x00404af8 test eax, eax | | if (eax != 0) { 0x00404afa jne 0x404baa | goto label_8; | } 0x00404b00 mov rbp, qword [r14] | rbp = *(r14); 0x00404b03 test rbp, rbp | | if (rbp == 0) { 0x00404b06 je 0x404baa | goto label_8; | } 0x00404b0c mov rbx, qword [r14 + 8] | rbx = *((r14 + 8)); 0x00404b10 cmp rbp, rbx | | if (rbp != rbx) { 0x00404b13 jne 0x404b31 | goto label_9; | } 0x00404b15 jmp 0x404b9d | goto label_10; | do { | label_1: 0x00404b20 mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; 0x00404b28 add rbp, 0x30 | rbp += 0x30; 0x00404b2c cmp rbx, rbp | | if (rbx == rbp) { 0x00404b2f je 0x404b9a | goto label_11; | } | label_9: 0x00404b31 cmp qword [rbp + 0x20], 0x17 | 0x00404b36 je 0x404b20 | | } while (*((rbp + 0x20)) == 0x17); 0x00404b38 mov rsi, qword [rbp] | rsi = *(rbp); 0x00404b3c mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x00404b40 mov rax, qword [rdi] | rax = *(rdi); 0x00404b43 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00404b46 jmp 0x404b20 | goto label_1; | label_3: 0x00404b48 mov rdi, r14 | 0x00404b4b call 0x404c90 | BloombergLP::balb::Choice4::makeSelection2() (r14); 0x00404b50 jmp 0x404bb2 | goto label_12; | label_5: 0x00404b52 mov dword [r14 + 0x20], 0xffffffff | *((r14 + 0x20)) = 0xffffffff; 0x00404b5a mov rax, qword [r14 + 0x28] | rax = *((r14 + 0x28)); 0x00404b5e test rax, rax | | if (rax == 0) { 0x00404b61 jne 0x404b74 | 0x00404b63 mov rax, qword [rip + 0x27afe6] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00404b6a test rax, rax | | if (rax != 0) { 0x00404b6d jne 0x404b74 | goto label_13; | } 0x00404b6f call 0x4206c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_13: 0x00404b74 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00404b77 movups xmmword [r14], xmm0 | __asm ("movups xmmword [r14], xmm0"); 0x00404b7b mov qword [r14 + 0x10], 0 | *((r14 + 0x10)) = 0; 0x00404b83 mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x00404b87 mov dword [r14 + 0x20], 0 | *((r14 + 0x20)) = 0; 0x00404b8f jmp 0x404bb2 | goto label_12; | label_7: 0x00404b91 mov rax, qword [r14] | rax = *(r14); 0x00404b94 mov qword [r14 + 8], rax | *((r14 + 8)) = rax; 0x00404b98 jmp 0x404bb5 | goto label_4; | label_11: 0x00404b9a mov rbp, qword [r14] | rbp = *(r14); | label_10: 0x00404b9d mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x00404ba1 mov rax, qword [rdi] | rax = *(rdi); 0x00404ba4 mov rsi, rbp | rsi = rbp; 0x00404ba7 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_8: 0x00404baa mov dword [r14 + 0x20], 0xffffffff | *((r14 + 0x20)) = 0xffffffff; | label_12: 0x00404bb2 xor r15d, r15d | r15d = 0; | label_4: 0x00404bb5 mov eax, r15d | eax = r15d; 0x00404bb8 add rsp, 8 | 0x00404bbc pop rbx | 0x00404bbd pop r14 | 0x00404bbf pop r15 | 0x00404bc1 pop rbp | 0x00404bc2 ret | return rax; | }