; assembly | /* r2dec pseudo code output */ | /* ball_userfieldvalue.t/assume @ 0x404ec0 */ | #include | ; (fcn) sym.ggg_BloombergLP::ball::UserFieldValue__char_const__bool_ () | uint64_t ggg_BloombergLP::ball::UserFieldValue_char_const_bool_ (uint32_t arg3, char * arg2, char * arg1) { | int64_t var_8h; | uint32_t var_14h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* ggg(BloombergLP::ball::UserFieldValue*, char const*, bool) */ 0x00404ec0 push rbp | 0x00404ec1 push r15 | 0x00404ec3 push r14 | 0x00404ec5 push r13 | 0x00404ec7 push r12 | 0x00404ec9 push rbx | 0x00404eca sub rsp, 0x18 | 0x00404ece mov dword [rsp + 0x14], edx | *((rsp + 0x14)) = edx; 0x00404ed2 mov rbx, rsi | rbx = rsi; 0x00404ed5 mov rbp, rdi | 0x00404ed8 xor edi, edi | edi = 0; 0x00404eda test rbp, rbp | 0x00404edd sete dil | dil = (rbp == 0) ? 1 : 0; 0x00404ee1 mov esi, 0x44c58d | esi = "object"; 0x00404ee6 mov edx, 0x19b | edx = 0x19b; 0x00404eeb call 0x404dd0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404ef0 xor edi, edi | edi = 0; 0x00404ef2 test rbx, rbx | 0x00404ef5 sete dil | dil = (rbx == 0) ? 1 : 0; 0x00404ef9 mov esi, 0x44c594 | esi = "spec"; 0x00404efe mov edx, 0x19c | edx = 0x19c; 0x00404f03 call 0x404dd0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404f08 xor r14d, r14d | r14d = 0; 0x00404f0b movabs r12, 0x4025000000000000 | r12 = 0x4025000000000000; 0x00404f15 movabs r15, 0x4034800000000000 | r15 = 0x4034800000000000; 0x00404f1f lea r13, [rsp + 8] | r13 = rsp + 8; 0x00404f24 mov qword [rsp], rbx | *(rsp) = rbx; 0x00404f28 jmp 0x404f3b | | while (al == 0x7e) { 0x00404f30 mov rdi, rbp | 0x00404f33 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x00404f38 inc rbx | rbx++; | label_0: 0x00404f3b movzx eax, byte [rbx] | eax = *(rbx); 0x00404f3e cmp al, 0x7e | 0x00404f40 je 0x404f30 | | } 0x00404f42 test al, al | | if (al == 0) { 0x00404f44 je 0x405236 | goto label_1; | } 0x00404f4a lea ecx, [rax - 0x41] | ecx = rax - 0x41; 0x00404f4d cmp cl, 4 | | if (cl > 4) { 0x00404f50 ja 0x405212 | goto label_2; | } 0x00404f56 movzx eax, byte [rbx + 1] | eax = *((rbx + 1)); 0x00404f5a lea edx, [rax - 0x31] | edx = rax - 0x31; 0x00404f5d cmp dl, 2 | | if (dl >= 2) { 0x00404f60 jae 0x405203 | goto label_3; | } 0x00404f66 movzx edx, cl | edx = (int32_t) cl; 0x00404f69 inc edx | edx++; 0x00404f6b cmp cl, 5 | | if (cl >= 5) { 0x00404f6e cmovae edx, r14d | edx = r14d; | } 0x00404f72 add rbx, 2 | rbx += 2; 0x00404f76 dec edx | edx--; 0x00404f78 cmp edx, 4 | | if (edx > 4) { 0x00404f7b ja 0x404f3b | goto label_0; | } | /* switch table (5 cases) at 0x44ba38 */ 0x00404f7d jmp qword [rdx*8 + 0x44ba38] | 0x00404f84 mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x00404f87 cmp al, 0x31 | | if (al == 0x31) { 0x00404f89 jne 0x405075 | 0x00404f8f cmp ecx, 1 | | if (ecx != 1) { 0x00404f92 jne 0x40512a | goto label_4; | } 0x00404f98 mov qword [rbp], 0x1ef5 | *(rbp) = 0x1ef5; 0x00404fa0 jmp 0x404f3b | goto label_0; 0x00404fa2 mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x00404fa5 cmp al, 0x31 | | if (al == 0x31) { 0x00404fa7 jne 0x40508b | 0x00404fad cmp ecx, 2 | | if (ecx != 2) { 0x00404fb0 jne 0x405146 | goto label_5; | } 0x00404fb6 mov qword [rbp], r12 | *(rbp) = r12; 0x00404fba jmp 0x404f3b | goto label_0; 0x00404fbf cmp al, 0x31 | | if (al != 0x31) { 0x00404fc1 jne 0x40509d | goto label_6; | } 0x00404fc7 mov r14, r15 | r14 = r15; 0x00404fca mov r15, r12 | r15 = r12; 0x00404fcd mov r13, qword [rip + 0x27a47c] | r13 = C1; 0x00404fd4 mov rdi, r13 | 0x00404fd7 call 0x403f40 | rax = strlen (*(obj.C1)); 0x00404fdc mov r12, rax | r12 = rax; 0x00404fdf mov rdi, rbp | 0x00404fe2 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x00404fe7 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x00404feb test rax, rax | | if (rax == 0) { 0x00404fee jne 0x405001 | 0x00404ff0 mov rax, qword [rip + 0x27ac21] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00404ff7 test rax, rax | | if (rax != 0) { 0x00404ffa jne 0x405001 | goto label_7; | } 0x00404ffc call 0x4247a0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_7: 0x00405001 mov qword [rbp], 0 | *(rbp) = 0; 0x00405009 mov qword [rbp + 0x28], rax | *((rbp + 0x28)) = rax; 0x0040500d movaps xmm0, xmmword [rip + 0x4727c] | xmm0 = .comment; 0x00405014 movups xmmword [rbp + 0x18], xmm0 | __asm ("movups xmmword [rbp + 0x18], xmm0"); 0x00405018 mov ecx, 0x44e271 | 0x0040501d mov rdi, rbp | 0x00405020 mov rsi, r13 | 0x00405023 mov rdx, r12 | 0x00405026 call 0x428980 | al = bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, r13, r12, "string<...>::assign(i,j): string too long"); 0x0040502b mov dword [rbp + 0x30], 3 | *((rbp + 0x30)) = 3; 0x00405032 mov r12, r15 | r12 = r15; 0x00405035 mov r15, r14 | r15 = r14; 0x00405038 xor r14d, r14d | r14d = 0; 0x0040503b lea r13, [rsp + 8] | r13 = rsp + 8; 0x00405040 jmp 0x404f3b | goto label_0; 0x00405045 cmp al, 0x31 | | if (al != 0x31) { 0x00405047 jne 0x4050fd | goto label_8; | } 0x0040504d mov esi, 0x67fb40 | esi = D1; 0x00405052 jmp 0x405102 | goto label_9; 0x00405057 mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x0040505a cmp al, 0x31 | | if (al != 0x31) { 0x0040505c jne 0x40510f | goto label_10; | } 0x00405062 cmp ecx, 5 | | if (ecx != 5) { 0x00405065 jne 0x40515e | goto label_11; | } 0x0040506b mov esi, 0x67fb60 | esi = E1; 0x00405070 jmp 0x40511d | | } else { 0x00405075 cmp ecx, 1 | | if (ecx != 1) { 0x00405078 jne 0x40518c | goto label_12; | } 0x0040507e mov qword [rbp], 0xfffffffffffffb26 | *(rbp) = 0xfffffffffffffb26; 0x00405086 jmp 0x404f3b | goto label_0; | } 0x0040508b cmp ecx, 2 | | if (ecx != 2) { 0x0040508e jne 0x4051a8 | goto label_13; | } 0x00405094 mov qword [rbp], r15 | *(rbp) = r15; 0x00405098 jmp 0x404f3b | goto label_0; | label_6: 0x0040509d mov rdi, rbp | 0x004050a0 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x004050a5 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x004050a9 test rax, rax | | if (rax == 0) { 0x004050ac jne 0x4050bf | 0x004050ae mov rax, qword [rip + 0x27ab63] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x004050b5 test rax, rax | | if (rax != 0) { 0x004050b8 jne 0x4050bf | goto label_14; | } 0x004050ba call 0x4247a0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_14: 0x004050bf mov qword [rbp], 0 | *(rbp) = 0; 0x004050c7 mov qword [rbp + 0x28], rax | *((rbp + 0x28)) = rax; 0x004050cb mov rsi, qword [rip + 0x27aa5e] | 0x004050d2 mov rdx, qword [rip + 0x27aa5f] | 0x004050d9 movaps xmm0, xmmword [rip + 0x471b0] | xmm0 = .comment; 0x004050e0 movups xmmword [rbp + 0x18], xmm0 | __asm ("movups xmmword [rbp + 0x18], xmm0"); 0x004050e4 mov ecx, 0x44e271 | 0x004050e9 mov rdi, rbp | 0x004050ec call 0x428980 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, *(obj.C2), *(0x0067fb38), "string<...>::assign(i,j): string too long"); 0x004050f1 mov dword [rbp + 0x30], 3 | *((rbp + 0x30)) = 3; 0x004050f8 jmp 0x404f3b | goto label_0; | label_8: 0x004050fd mov esi, 0x67fb50 | | label_9: 0x00405102 mov rdi, rbp | 0x00405105 call 0x41ff30 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>&BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::assign(BloombergLP::bdlt::DatetimeTzconst&) (rbp, obj.D2); 0x0040510a jmp 0x404f3b | goto label_0; | label_10: 0x0040510f cmp ecx, 5 | | if (ecx != 5) { 0x00405112 jne 0x4051c0 | goto label_15; | } 0x00405118 mov esi, 0x67fb80 | | } 0x0040511d mov rdi, rbp | 0x00405120 call 0x4344b0 | bsl::vector>::operator=(bsl::vector>const&) (rbp, obj.E2); 0x00405125 jmp 0x404f3b | goto label_0; | label_4: 0x0040512a mov rdi, rbp | 0x0040512d call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x00405132 mov qword [rbp], 0x1ef5 | *(rbp) = 0x1ef5; 0x0040513a mov dword [rbp + 0x30], 1 | *((rbp + 0x30)) = 1; 0x00405141 jmp 0x404f3b | goto label_0; | label_5: 0x00405146 mov rdi, rbp | 0x00405149 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x0040514e mov qword [rbp], r12 | *(rbp) = r12; 0x00405152 mov dword [rbp + 0x30], 2 | *((rbp + 0x30)) = 2; 0x00405159 jmp 0x404f3b | goto label_0; | label_11: 0x0040515e mov rdi, rbp | 0x00405161 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x00405166 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0040516a test rax, rax | | if (rax == 0) { 0x0040516d jne 0x405180 | 0x0040516f mov rax, qword [rip + 0x27aaa2] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00405176 test rax, rax | | if (rax != 0) { 0x00405179 jne 0x405180 | goto label_16; | } 0x0040517b call 0x4247a0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_16: 0x00405180 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00405185 mov esi, 0x67fb60 | esi = E1; 0x0040518a jmp 0x4051ec | goto label_17; | label_12: 0x0040518c mov rdi, rbp | 0x0040518f call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x00405194 mov qword [rbp], 0xfffffffffffffb26 | *(rbp) = 0xfffffffffffffb26; 0x0040519c mov dword [rbp + 0x30], 1 | *((rbp + 0x30)) = 1; 0x004051a3 jmp 0x404f3b | goto label_0; | label_13: 0x004051a8 mov rdi, rbp | 0x004051ab call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x004051b0 mov qword [rbp], r15 | *(rbp) = r15; 0x004051b4 mov dword [rbp + 0x30], 2 | *((rbp + 0x30)) = 2; 0x004051bb jmp 0x404f3b | goto label_0; | label_15: 0x004051c0 mov rdi, rbp | 0x004051c3 call 0x41fec0 | BloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::reset() (rbp); 0x004051c8 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x004051cc test rax, rax | | if (rax == 0) { 0x004051cf jne 0x4051e2 | 0x004051d1 mov rax, qword [rip + 0x27aa40] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x004051d8 test rax, rax | | if (rax != 0) { 0x004051db jne 0x4051e2 | goto label_18; | } 0x004051dd call 0x4247a0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_18: 0x004051e2 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004051e7 mov esi, 0x67fb80 | | label_17: 0x004051ec mov rdi, rbp | 0x004051ef mov rdx, r13 | 0x004051f2 call 0x4342a0 | al = bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rbp, obj.E2, r13); 0x004051f7 mov dword [rbp + 0x30], 5 | *((rbp + 0x30)) = 5; 0x004051fe jmp 0x404f3b | goto label_0; | label_3: 0x00405203 inc rbx | rbx++; 0x00405206 test al, al | | if (al == 0) { 0x00405208 jne 0x405212 | 0x0040520a xor eax, eax | eax = 0; 0x0040520c mov rdx, qword [rsp] | rdx = *(rsp); 0x00405210 jmp 0x40521a | | } else { | label_2: 0x00405212 mov rdx, qword [rsp] | rdx = *(rsp); 0x00405216 test al, al | | if (al == 0) { 0x00405218 je 0x405236 | goto label_1; | } | } 0x0040521a sub ebx, edx | ebx -= edx; 0x0040521c cmp byte [rsp + 0x14], 0 | | if (*((rsp + 0x14)) != 0) { 0x00405221 je 0x40523b | 0x00405223 movsx esi, al | esi = (int32_t) al; 0x00405226 mov edi, 0x44c599 | 0x0040522b mov ecx, ebx | ecx = ebx; 0x0040522d xor eax, eax | eax = 0; 0x0040522f call 0x403ca0 | printf ("Error, bad character ('%c') in spec \"%s\" at position %d.\n"); 0x00405234 jmp 0x40523b | goto label_19; | label_1: 0x00405236 mov ebx, 0xffffffff | ebx = 0xffffffff; | } | label_19: 0x0040523b mov eax, ebx | eax = 0xffffffff; 0x0040523d add rsp, 0x18 | 0x00405241 pop rbx | 0x00405242 pop r12 | 0x00405244 pop r13 | 0x00405246 pop r14 | 0x00405248 pop r15 | 0x0040524a pop rbp | 0x0040524b ret | return rax; | }