; assembly | /* r2dec pseudo code output */ | /* ball_userfieldvalue.t/none @ 0x404ed0 */ | #include | ; (fcn) sym.ggg_BloombergLP::ball::UserFieldValue__char_const__bool_ () | uint64_t ggg_BloombergLP::ball::UserFieldValue_char_const_bool_ (int64_t arg3, int64_t arg2, int64_t arg1) { | size_t var_8h; | int64_t var_10h; | char * var_18h; | int64_t var_20h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* ggg(BloombergLP::ball::UserFieldValue*, char const*, bool) */ 0x00404ed0 push rbp | 0x00404ed1 push r15 | 0x00404ed3 push r14 | 0x00404ed5 push r13 | 0x00404ed7 push r12 | 0x00404ed9 push rbx | 0x00404eda sub rsp, 0x28 | 0x00404ede mov r14d, edx | r14d = edx; 0x00404ee1 mov r15, rsi | r15 = rsi; 0x00404ee4 mov rbp, rdi | 0x00404ee7 xor edi, edi | edi = 0; 0x00404ee9 test rbp, rbp | 0x00404eec sete dil | dil = (rbp == 0) ? 1 : 0; 0x00404ef0 mov esi, 0x44f12d | esi = "object"; 0x00404ef5 mov edx, 0x19b | edx = 0x19b; 0x00404efa call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404eff xor edi, edi | edi = 0; 0x00404f01 test r15, r15 | 0x00404f04 sete dil | dil = (r15 == 0) ? 1 : 0; 0x00404f08 mov esi, 0x44f134 | esi = "spec"; 0x00404f0d mov edx, 0x19c | edx = 0x19c; 0x00404f12 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404f17 xor r13d, r13d | r13d = 0; 0x00404f1a mov r12, rsp | r12 = rsp; 0x00404f1d mov rbx, r15 | rbx = r15; 0x00404f20 jmp 0x404f34 | goto label_0; | label_3: 0x00404f22 mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; | label_2: 0x00404f2a mov dword [rbp + 0x30], 0 | *((rbp + 0x30)) = 0; | label_1: 0x00404f31 inc rbx | rbx++; | do { | label_0: 0x00404f34 movzx eax, byte [rbx] | eax = *(rbx); 0x00404f37 cmp al, 0x7e | | if (al == 0x7e) { 0x00404f39 je 0x404fb0 | goto label_5; | } 0x00404f3b test al, al | | if (al == 0) { 0x00404f3d je 0x40539a | goto label_6; | } 0x00404f43 lea ecx, [rax - 0x41] | ecx = rax - 0x41; 0x00404f46 cmp cl, 4 | | if (cl > 4) { 0x00404f49 ja 0x405378 | goto label_7; | } 0x00404f4f movzx eax, byte [rbx + 1] | eax = *((rbx + 1)); 0x00404f53 lea edx, [rax - 0x31] | edx = rax - 0x31; 0x00404f56 cmp dl, 2 | | if (dl >= 2) { 0x00404f59 jae 0x40536d | goto label_8; | } 0x00404f5f movzx edx, cl | edx = (int32_t) cl; 0x00404f62 inc edx | edx++; 0x00404f64 cmp cl, 5 | | if (cl >= 5) { 0x00404f67 cmovae edx, r13d | edx = r13d; | } 0x00404f6b add rbx, 2 | rbx += 2; 0x00404f6f dec edx | edx--; 0x00404f71 cmp edx, 4 | 0x00404f74 ja 0x404f34 | | } while (edx > 4); | /* switch table (5 cases) at 0x44e608 */ 0x00404f76 jmp qword [rdx*8 + 0x44e608] | 0x00404f7d mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x00404f80 cmp al, 0x31 | | if (al != 0x31) { 0x00404f82 jne 0x4050da | goto label_9; | } 0x00404f88 cmp ecx, 5 | | if (ecx == 5) { 0x00404f8b je 0x405174 | goto label_10; | } 0x00404f91 cmp ecx, 3 | | if (ecx == 3) { 0x00404f94 je 0x405189 | goto label_11; | } 0x00404f9a cmp ecx, 1 | | if (ecx != 1) { 0x00404f9d jne 0x4051a6 | goto label_12; | } 0x00404fa3 mov qword [rbp], 0x1ef5 | *(rbp) = 0x1ef5; 0x00404fab jmp 0x404f34 | goto label_0; | label_5: 0x00404fb0 mov eax, dword [rbp + 0x30] | eax = *((rbp + 0x30)); 0x00404fb3 test eax, eax | | if (eax == 0) { 0x00404fb5 je 0x404f31 | goto label_1; | } 0x00404fbb cmp eax, 5 | | if (eax == 5) { 0x00404fbe je 0x404fe7 | goto label_13; | } 0x00404fc0 cmp eax, 3 | | if (eax != 3) { 0x00404fc3 jne 0x404f2a | goto label_2; | } 0x00404fc9 cmp qword [rbp + 0x20], 0x17 | | if (*((rbp + 0x20)) == 0x17) { 0x00404fce je 0x404f22 | goto label_3; | } 0x00404fd4 mov rsi, qword [rbp] | rsi = *(rbp); 0x00404fd8 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x00404fdc mov rax, qword [rdi] | rax = *(rdi); 0x00404fdf call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00404fe2 jmp 0x404f22 | goto label_3; | label_13: 0x00404fe7 mov rsi, qword [rbp] | rsi = *(rbp); 0x00404feb test rsi, rsi | | if (rsi == 0) { 0x00404fee je 0x404f2a | goto label_2; | } 0x00404ff4 mov rdi, qword [rbp + 0x18] | rdi = *((rbp + 0x18)); 0x00404ff8 mov rax, qword [rdi] | rax = *(rdi); 0x00404ffb call qword [rax + 0x18] | al = uint64_t (*rax + 0x18)() (); 0x00404ffe jmp 0x404f2a | goto label_2; 0x00405003 mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x00405006 cmp al, 0x31 | | if (al != 0x31) { 0x00405008 jne 0x4050b9 | goto label_14; | } 0x0040500e mov esi, 0x682b60 | esi = E1; 0x00405013 jmp 0x4050be | goto label_15; 0x00405018 mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x0040501b cmp al, 0x31 | | if (al != 0x31) { 0x0040501d jne 0x405102 | goto label_16; | } 0x00405023 cmp ecx, 5 | | if (ecx == 5) { 0x00405026 je 0x4051ba | goto label_17; | } 0x0040502c cmp ecx, 3 | | if (ecx == 3) { 0x0040502f je 0x4051cf | goto label_18; | } 0x00405035 cmp ecx, 2 | | if (ecx != 2) { 0x00405038 jne 0x4051ec | goto label_19; | } 0x0040503e movabs rax, 0x4025000000000000 | rax = 0x4025000000000000; 0x00405048 mov qword [rbp], rax | *(rbp) = rax; 0x0040504c jmp 0x404f34 | goto label_0; 0x00405051 mov esi, 0x682b30 | esi = C2; 0x00405056 cmp al, 0x31 | | if (al == 0x31) { 0x00405058 jne 0x405072 | 0x0040505a mov rdi, qword [rip + 0x27d3ef] | 0x00405061 mov qword [rsp], rdi | *(rsp) = rdi; 0x00405065 call 0x403f40 | rax = strlen (*(obj.C1)); 0x0040506a mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0040506f mov rsi, r12 | rsi = r12; | } 0x00405072 mov rdi, rbp | rdi = rbp; 0x00405075 call 0x422790 | al = voidBloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::assignImp,bsl::allocator>,std::_1::basic_string_view>>(std::_1::basic_string_view>const&) (); 0x0040507a jmp 0x404f34 | goto label_0; 0x0040507f mov ecx, dword [rbp + 0x30] | ecx = *((rbp + 0x30)); 0x00405082 cmp al, 0x31 | | if (al != 0x31) { 0x00405084 jne 0x405130 | goto label_20; | } 0x0040508a cmp ecx, 4 | | if (ecx != 4) { 0x0040508d jne 0x40515b | goto label_21; | } 0x00405093 mov rax, qword [rip + 0x27daa6] | rax = D1; 0x0040509a mov qword [rbp], rax | *(rbp) = rax; 0x0040509e test rax, rax | 0x004050a1 jns 0x40528d | | while (1) { 0x004050a7 mov qword [rbp], rax | *(rbp) = rax; 0x004050ab mov eax, dword [rip + 0x27da97] | eax = .comment; 0x004050b1 mov dword [rbp + 8], eax | *((rbp + 8)) = eax; 0x004050b4 jmp 0x404f34 | goto label_0; | label_14: 0x004050b9 mov esi, 0x682b80 | esi = E2; | label_15: 0x004050be mov rdi, rbp | rdi = rbp; 0x004050c1 cmp ecx, 5 | | if (ecx == 5) { 0x004050c4 jne 0x4050d0 | 0x004050c6 call 0x437060 | bsl::vector>::operator=(bsl::vector>const&) (rdi, rsi); 0x004050cb jmp 0x404f34 | goto label_0; | } 0x004050d0 call 0x422960 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::assignImp>,bsl::vector>>(bsl::vector>const&) (rdi, rsi); 0x004050d5 jmp 0x404f34 | goto label_0; | label_9: 0x004050da cmp ecx, 5 | | if (ecx != 5) { 0x004050dd je 0x4051fb | 0x004050e3 cmp ecx, 3 | | if (ecx != 3) { 0x004050e6 je 0x405210 | 0x004050ec cmp ecx, 1 | | if (ecx != 1) { 0x004050ef jne 0x40522d | goto label_22; | } 0x004050f5 mov qword [rbp], 0xfffffffffffffb26 | *(rbp) = 0xfffffffffffffb26; 0x004050fd jmp 0x404f34 | goto label_0; | label_16: 0x00405102 cmp ecx, 5 | | if (ecx == 5) { 0x00405105 je 0x405241 | goto label_23; | } 0x0040510b cmp ecx, 3 | | if (ecx == 3) { 0x0040510e je 0x405256 | goto label_24; | } 0x00405114 cmp ecx, 2 | | if (ecx != 2) { 0x00405117 jne 0x405273 | goto label_25; | } 0x0040511d movabs rax, 0x4034800000000000 | rax = 0x4034800000000000; 0x00405127 mov qword [rbp], rax | *(rbp) = rax; 0x0040512b jmp 0x404f34 | goto label_0; | label_20: 0x00405130 cmp ecx, 4 | | if (ecx == 4) { 0x00405133 jne 0x405162 | 0x00405135 mov rax, qword [rip + 0x27da14] | rax = D2; 0x0040513c mov qword [rbp], rax | *(rbp) = rax; 0x00405140 test rax, rax | | if (rax >= 0) { 0x00405143 jns 0x4052fd | goto label_26; | } | label_4: 0x00405149 mov qword [rbp], rax | *(rbp) = rax; 0x0040514d mov eax, dword [rip + 0x27da05] | eax = .comment; 0x00405153 mov dword [rbp + 8], eax | *((rbp + 8)) = eax; 0x00405156 jmp 0x404f34 | goto label_0; | label_21: 0x0040515b mov esi, 0x682b40 | esi = D1; 0x00405160 jmp 0x405167 | | } else { 0x00405162 mov esi, 0x682b50 | esi = D2; | } 0x00405167 mov rdi, rbp | rdi = rbp; 0x0040516a call 0x422860 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>,BloombergLP::bdlt::DatetimeTz,bsl::vector>>>::assignImp(BloombergLP::bdlt::DatetimeTzconst&) (); 0x0040516f jmp 0x404f34 | goto label_0; | label_10: 0x00405174 mov rsi, qword [rbp] | rsi = *(rbp); 0x00405178 test rsi, rsi | | if (rsi != 0) { 0x0040517b je 0x4051a6 | 0x0040517d mov rdi, qword [rbp + 0x18] | rdi = *((rbp + 0x18)); 0x00405181 mov rax, qword [rdi] | rax = *(rdi); 0x00405184 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00405187 jmp 0x4051a6 | goto label_12; | label_11: 0x00405189 cmp qword [rbp + 0x20], 0x17 | | if (*((rbp + 0x20)) != 0x17) { 0x0040518e je 0x40519e | 0x00405190 mov rsi, qword [rbp] | rsi = *(rbp); 0x00405194 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x00405198 mov rax, qword [rdi] | rax = *(rdi); 0x0040519b call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040519e mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; | } | label_12: 0x004051a6 mov qword [rbp], 0x1ef5 | *(rbp) = 0x1ef5; 0x004051ae mov dword [rbp + 0x30], 1 | *((rbp + 0x30)) = 1; 0x004051b5 jmp 0x404f34 | goto label_0; | label_17: 0x004051ba mov rsi, qword [rbp] | rsi = *(rbp); 0x004051be test rsi, rsi | | if (rsi != 0) { 0x004051c1 je 0x4051ec | 0x004051c3 mov rdi, qword [rbp + 0x18] | rdi = *((rbp + 0x18)); 0x004051c7 mov rax, qword [rdi] | rax = *(rdi); 0x004051ca call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x004051cd jmp 0x4051ec | goto label_19; | label_18: 0x004051cf cmp qword [rbp + 0x20], 0x17 | | if (*((rbp + 0x20)) != 0x17) { 0x004051d4 je 0x4051e4 | 0x004051d6 mov rsi, qword [rbp] | rsi = *(rbp); 0x004051da mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x004051de mov rax, qword [rdi] | rax = *(rdi); 0x004051e1 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004051e4 mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; | } | label_19: 0x004051ec movabs rax, 0x4025000000000000 | rax = 0x4025000000000000; 0x004051f6 jmp 0x40527d | 0x004051fb mov rsi, qword [rbp] | rsi = *(rbp); 0x004051ff test rsi, rsi | | } else { | } else { | if (rsi == 0) { 0x00405202 je 0x40522d | goto label_22; | } 0x00405204 mov rdi, qword [rbp + 0x18] | rdi = *((rbp + 0x18)); 0x00405208 mov rax, qword [rdi] | rax = *(rdi); 0x0040520b call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0040520e jmp 0x40522d | 0x00405210 cmp qword [rbp + 0x20], 0x17 | | if (*((rbp + 0x20)) != 0x17) { 0x00405215 je 0x405225 | 0x00405217 mov rsi, qword [rbp] | rsi = *(rbp); 0x0040521b mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x0040521f mov rax, qword [rdi] | rax = *(rdi); 0x00405222 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00405225 mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; | } | label_22: 0x0040522d mov qword [rbp], 0xfffffffffffffb26 | *(rbp) = 0xfffffffffffffb26; 0x00405235 mov dword [rbp + 0x30], 1 | *((rbp + 0x30)) = 1; 0x0040523c jmp 0x404f34 | goto label_0; | label_23: 0x00405241 mov rsi, qword [rbp] | rsi = *(rbp); 0x00405245 test rsi, rsi | | if (rsi != 0) { 0x00405248 je 0x405273 | 0x0040524a mov rdi, qword [rbp + 0x18] | rdi = *((rbp + 0x18)); 0x0040524e mov rax, qword [rdi] | rax = *(rdi); 0x00405251 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00405254 jmp 0x405273 | goto label_25; | label_24: 0x00405256 cmp qword [rbp + 0x20], 0x17 | | if (*((rbp + 0x20)) != 0x17) { 0x0040525b je 0x40526b | 0x0040525d mov rsi, qword [rbp] | rsi = *(rbp); 0x00405261 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x00405265 mov rax, qword [rdi] | rax = *(rdi); 0x00405268 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040526b mov qword [rbp + 0x18], 0xffffffffffffffff | *((rbp + 0x18)) = 0xffffffffffffffff; | } | label_25: 0x00405273 movabs rax, 0x4034800000000000 | rax = 0x4034800000000000; | } 0x0040527d mov qword [rbp], rax | *(rbp) = rax; 0x00405281 mov dword [rbp + 0x30], 2 | *((rbp + 0x30)) = 2; 0x00405288 jmp 0x404f34 | goto label_0; 0x0040528d mov edi, 0x682c00 | 0x00405292 call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00405297 mov qword [rsp], 0x450d0d | *(rsp) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0040529f mov qword [rsp + 8], 0x450d43 | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x004052a8 mov dword [rsp + 0x10], 0x466 | *((rsp + 0x10)) = 0x466; 0x004052b0 mov qword [rsp + 0x18], 0x46923a | *((rsp + 0x18)) = "R-INV"; 0x004052b9 mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x004052bd mov rdi, r12 | rdi = r12; 0x004052c0 call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x004052c5 mov rax, qword [rbp] | rax = *(rbp); 0x004052c9 mov rcx, rax | rcx = *(rbp); 0x004052cc shr rcx, 0x20 | rcx >>= 0x20; 0x004052d0 shl rax, 0x25 | rax <<= 0x25; 0x004052d4 movabs rdx, 0x7fffffe000000000 | rdx = 0x7fffffe000000000; 0x004052de add rax, rdx | rax += rdx; 0x004052e1 imul rcx, rcx, 0x3e8 | rcx *= 0x3e8; 0x004052e8 movabs rdx, 0x8000000000000000 | rdx = 0x8000000000000000; 0x004052f2 or rax, rdx | rax |= rdx; 0x004052f5 or rax, rcx | rax |= rcx; 0x004052f8 jmp 0x4050a7 | | } | label_26: 0x004052fd mov edi, 0x682c00 | 0x00405302 call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00405307 mov qword [rsp], 0x450d0d | *(rsp) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0040530f mov qword [rsp + 8], 0x450d43 | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00405318 mov dword [rsp + 0x10], 0x466 | *((rsp + 0x10)) = 0x466; 0x00405320 mov qword [rsp + 0x18], 0x46923a | *((rsp + 0x18)) = "R-INV"; 0x00405329 mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x0040532d mov rdi, r12 | rdi = r12; 0x00405330 call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00405335 mov rax, qword [rbp] | rax = *(rbp); 0x00405339 mov rcx, rax | rcx = *(rbp); 0x0040533c shr rcx, 0x20 | rcx >>= 0x20; 0x00405340 shl rax, 0x25 | rax <<= 0x25; 0x00405344 movabs rdx, 0x7fffffe000000000 | rdx = 0x7fffffe000000000; 0x0040534e add rax, rdx | rax += rdx; 0x00405351 imul rcx, rcx, 0x3e8 | rcx *= 0x3e8; 0x00405358 movabs rdx, 0x8000000000000000 | rdx = 0x8000000000000000; 0x00405362 or rax, rdx | rax |= rdx; 0x00405365 or rax, rcx | rax |= rcx; 0x00405368 jmp 0x405149 | goto label_4; | label_8: 0x0040536d inc rbx | rbx++; 0x00405370 test al, al | | if (al == 0) { 0x00405372 jne 0x405378 | 0x00405374 xor eax, eax | eax = 0; 0x00405376 jmp 0x40537c | | } else { | label_7: 0x00405378 test al, al | | if (al == 0) { 0x0040537a je 0x40539a | goto label_6; | } | } 0x0040537c sub ebx, r15d | ebx -= r15d; 0x0040537f test r14b, r14b | | if (r14b != 0) { 0x00405382 je 0x40539f | 0x00405384 movsx esi, al | esi = (int32_t) al; 0x00405387 mov edi, 0x44f139 | 0x0040538c mov rdx, r15 | rdx = r15; 0x0040538f mov ecx, ebx | ecx = ebx; 0x00405391 xor eax, eax | eax = 0; 0x00405393 call 0x403ca0 | printf ("Error, bad character ('%c') in spec \"%s\" at position %d.\n"); 0x00405398 jmp 0x40539f | goto label_27; | label_6: 0x0040539a mov ebx, 0xffffffff | ebx = 0xffffffff; | } | label_27: 0x0040539f mov eax, ebx | eax = 0xffffffff; 0x004053a1 add rsp, 0x28 | 0x004053a5 pop rbx | 0x004053a6 pop r12 | 0x004053a8 pop r13 | 0x004053aa pop r14 | 0x004053ac pop r15 | 0x004053ae pop rbp | 0x004053af ret | return rax; | }