; assembly | /* r2dec pseudo code output */ | /* ball_userfieldvalue.t/none @ 0x404980 */ | #include | ; (fcn) sym.verifyFieldTypeAndValue_BloombergLP::ball::UserFieldValue_const__char__char_ () | uint64_t verifyFieldTypeAndValue_BloombergLP::ball::UserFieldValue_const_char_char_ (int64_t arg3, int64_t arg2, int64_t arg1) { | char * var_8h; | char * var_10h; | int64_t var_18h; | char * var_20h; | int64_t var_28h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* verifyFieldTypeAndValue(BloombergLP::ball::UserFieldValue const&, char, char) */ 0x00404980 push r15 | 0x00404982 push r14 | 0x00404984 push rbx | 0x00404985 sub rsp, 0x30 | 0x00404989 mov r15d, edx | r15d = edx; 0x0040498c mov ebx, esi | ebx = esi; 0x0040498e mov r14, rdi | r14 = rdi; 0x00404991 lea eax, [rbx - 0x41] | eax = rbx - 0x41; 0x00404994 xor edi, edi | edi = 0; 0x00404996 cmp al, 4 | 0x00404998 seta dil | dil = (al > 4) ? 1 : 0; 0x0040499c mov esi, 0x44f04e | esi = "type >= 'A' && type <= 'E'; 0x004049a1 mov edx, 0x13f | edx = 0x13f; 0x004049a6 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x004049ab lea eax, [r15 - 0x31] | eax = r15 - 0x31; 0x004049af xor edi, edi | edi = 0; 0x004049b1 cmp al, 1 | 0x004049b3 seta dil | dil = (al > 1) ? 1 : 0; 0x004049b7 mov esi, 0x44f069 | esi = '1' == value || '2' == value"; 0x004049bc mov edx, 0x140 | edx = 0x140; 0x004049c1 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x004049c6 add ebx, 0xffffffbf | ebx += 0xffffffbf; 0x004049c9 cmp ebx, 4 | | if (ebx <= 4) { 0x004049cc ja 0x404c0b | | /* switch table (5 cases) at 0x44e5e0 */ 0x004049d2 jmp qword [rbx*8 + 0x44e5e0] | 0x004049d9 mov rdi, r14 | 0x004049dc call 0x424610 | eax = BloombergLP::ball::UserFieldValue::type()const (r14); 0x004049e1 xor edi, edi | edi = 0; 0x004049e3 cmp eax, 1 | 0x004049e6 setne dil | dil = (eax != 1) ? 1 : 0; 0x004049ea mov esi, 0x44f086 | esi = "Type::e_INT64 == object.type()"; 0x004049ef mov edx, 0x148 | edx = 0x148; 0x004049f4 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x004049f9 mov rax, qword [r14] | rax = *(r14); 0x004049fc cmp r15b, 0x31 | | if (r15b == 0x31) { 0x00404a00 jne 0x404b49 | 0x00404a06 cmp rax, 0x1ef5 | 0x00404a0c sete al | al = (rax == 0x1ef5) ? 1 : 0; 0x00404a0f jmp 0x404c0d | goto label_4; 0x00404a14 mov rdi, r14 | 0x00404a17 call 0x424610 | eax = BloombergLP::ball::UserFieldValue::type()const (r14); 0x00404a1c xor edi, edi | edi = 0; 0x00404a1e cmp eax, 2 | 0x00404a21 setne dil | dil = (eax != 2) ? 1 : 0; 0x00404a25 mov esi, 0x44f0a5 | esi = "Type::e_DOUBLE == object.type()"; 0x00404a2a mov edx, 0x14d | edx = 0x14d; 0x00404a2f call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404a34 movsd xmm0, qword [r14] | xmm0 = *(r14); 0x00404a39 cmp r15b, 0x31 | | if (r15b == 0x31) { 0x00404a3d jne 0x404b57 | 0x00404a43 cmpeqsd xmm0, qword [rip + 0x49b8c] | __asm ("cmpeqsd xmm0, qword [0x0044e5d8]"); 0x00404a4c jmp 0x404b60 | goto label_5; 0x00404a51 mov rdi, r14 | 0x00404a54 call 0x424610 | eax = BloombergLP::ball::UserFieldValue::type()const (r14); 0x00404a59 xor edi, edi | edi = 0; 0x00404a5b cmp eax, 3 | 0x00404a5e setne dil | dil = (eax != 3) ? 1 : 0; 0x00404a62 mov esi, 0x44f0c5 | esi = "Type::e_STRING == object.type()"; 0x00404a67 mov edx, 0x152 | edx = 0x152; 0x00404a6c call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404a71 cmp r15b, 0x31 | | if (r15b != 0x31) { 0x00404a75 jne 0x404b6d | goto label_6; | } 0x00404a7b mov rbx, qword [rip + 0x27d9ce] | rbx = C1; 0x00404a82 mov rdi, rbx | 0x00404a85 call 0x403f40 | rax = strlen (*(obj.C1)); 0x00404a8a cmp rax, qword [r14 + 0x18] | | if (rax != *((r14 + 0x18))) { 0x00404a8e jne 0x404c0b | goto label_7; | } 0x00404a94 test rax, rax | | if (rax == 0) { 0x00404a97 je 0x404c17 | goto label_8; | } 0x00404a9d cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x00404aa2 je 0x404aa7 | 0x00404aa4 mov r14, qword [r14] | r14 = *(r14); | } 0x00404aa7 mov rdi, rbx | rdi = rbx; 0x00404aaa mov rsi, r14 | rsi = r14; 0x00404aad mov rdx, rax | rdx = rax; 0x00404ab0 jmp 0x404bff | goto label_9; 0x00404ab5 mov rdi, r14 | 0x00404ab8 call 0x424610 | eax = BloombergLP::ball::UserFieldValue::type()const (r14); 0x00404abd xor edi, edi | edi = 0; 0x00404abf cmp eax, 4 | 0x00404ac2 setne dil | dil = (eax != 4) ? 1 : 0; 0x00404ac6 mov esi, 0x44f0e5 | esi = "Type::e_DATETIMETZ == object.type()"; 0x00404acb mov edx, 0x157 | edx = 0x157; 0x00404ad0 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404ad5 cmp r15b, 0x31 | | if (r15b != 0x31) { 0x00404ad9 jne 0x404ba4 | goto label_10; | } 0x00404adf mov r15, qword [rip + 0x27e05a] | r15 = D1; 0x00404ae6 test r15, r15 | | if (r15 >= 0) { 0x00404ae9 jns 0x404c1b | goto label_11; | } | label_0: 0x00404aef mov rbx, qword [r14] | rbx = *(r14); 0x00404af2 test rbx, rbx | | if (rbx >= 0) { 0x00404af5 jns 0x404c8a | goto label_12; | } | label_1: 0x00404afb cmp r15, rbx | 0x00404afe sete cl | cl = (r15 == rbx) ? 1 : 0; 0x00404b01 mov eax, dword [rip + 0x27e041] | eax = .comment; 0x00404b07 jmp 0x404bcc | goto label_13; 0x00404b0c mov rdi, r14 | 0x00404b0f call 0x424610 | eax = BloombergLP::ball::UserFieldValue::type()const (r14); 0x00404b14 xor edi, edi | edi = 0; 0x00404b16 cmp eax, 5 | 0x00404b19 setne dil | dil = (eax != 5) ? 1 : 0; 0x00404b1d mov esi, 0x44f109 | esi = "Type::e_CHAR_ARRAY == object.type()"; 0x00404b22 mov edx, 0x15c | edx = 0x15c; 0x00404b27 call 0x404de0 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404b2c cmp r15b, 0x31 | | if (r15b != 0x31) { 0x00404b30 jne 0x404bd7 | goto label_14; | } 0x00404b36 mov rdi, qword [rip + 0x27e023] | rdi = E1; 0x00404b3d mov rax, qword [rip + 0x27e024] | rax = .comment; 0x00404b44 jmp 0x404be5 | | } else { 0x00404b49 cmp rax, 0xfffffffffffffb26 | 0x00404b4f sete al | al = (rax == 0xfffffffffffffb26) ? 1 : 0; 0x00404b52 jmp 0x404c0d | goto label_4; | } 0x00404b57 cmpeqsd xmm0, qword [rip + 0x49a70] | __asm ("cmpeqsd xmm0, qword [0x0044e5d0]"); | label_5: 0x00404b60 movq rax, xmm0 | rax = xmm0; 0x00404b65 and eax, 1 | eax &= 1; 0x00404b68 jmp 0x404c0d | goto label_4; | label_6: 0x00404b6d mov rdx, qword [rip + 0x27dfc4] | rdx = .comment; 0x00404b74 cmp qword [r14 + 0x20], 0x17 | 0x00404b79 mov rsi, r14 | rsi = r14; | if (*((r14 + 0x20)) != 0x17) { 0x00404b7c je 0x404b81 | 0x00404b7e mov rsi, qword [r14] | rsi = *(r14); | } 0x00404b81 cmp rdx, qword [r14 + 0x18] | | if (rdx != *((r14 + 0x18))) { 0x00404b85 jne 0x404c0b | goto label_7; | } 0x00404b8b test rdx, rdx | | if (rdx != 0) { 0x00404b8e je 0x404ba0 | 0x00404b90 mov rdi, qword [rip + 0x27df99] | 0x00404b97 call 0x404290 | eax = memcmp (*(obj.C2), rsi, rdx); 0x00404b9c test eax, eax | | if (eax != 0) { 0x00404b9e jne 0x404c04 | goto label_15; | } | } 0x00404ba0 xor eax, eax | eax = 0; 0x00404ba2 jmp 0x404c04 | goto label_15; | label_10: 0x00404ba4 mov r15, qword [rip + 0x27dfa5] | r15 = D2; 0x00404bab test r15, r15 | | if (r15 >= 0) { 0x00404bae jns 0x404cf9 | goto label_16; | } | label_2: 0x00404bb4 mov rbx, qword [r14] | rbx = *(r14); 0x00404bb7 test rbx, rbx | | if (rbx >= 0) { 0x00404bba jns 0x404d68 | goto label_17; | } | label_3: 0x00404bc0 cmp r15, rbx | 0x00404bc3 sete cl | cl = (r15 == rbx) ? 1 : 0; 0x00404bc6 mov eax, dword [rip + 0x27df8c] | eax = .comment; | label_13: 0x00404bcc cmp eax, dword [r14 + 8] | 0x00404bd0 sete al | al = (eax == *((r14 + 8))) ? 1 : 0; 0x00404bd3 and al, cl | al &= cl; 0x00404bd5 jmp 0x404c0d | goto label_4; | label_14: 0x00404bd7 mov rdi, qword [rip + 0x27dfa2] | rdi = E2; 0x00404bde mov rax, qword [rip + 0x27dfa3] | rax = .comment; | } 0x00404be5 mov rdx, rax | rdx = .comment; 0x00404be8 sub rdx, rdi | rdx -= rdi; 0x00404beb mov rsi, qword [r14] | rsi = *(r14); 0x00404bee mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x00404bf2 sub rcx, rsi | rcx -= rsi; 0x00404bf5 cmp rdx, rcx | | if (rdx == rcx) { 0x00404bf8 jne 0x404c0b | 0x00404bfa cmp rdi, rax | | if (rdi == rax) { 0x00404bfd je 0x404c17 | goto label_8; | } | label_9: 0x00404bff call 0x404070 | eax = bcmp (); | label_15: 0x00404c04 test eax, eax | 0x00404c06 sete al | al = (eax == 0) ? 1 : 0; 0x00404c09 jmp 0x404c0d | | } | } else { | label_7: 0x00404c0b xor eax, eax | eax = 0; | } | do { | label_4: 0x00404c0d add rsp, 0x30 | 0x00404c11 pop rbx | 0x00404c12 pop r14 | 0x00404c14 pop r15 | 0x00404c16 ret | return rax; | label_8: 0x00404c17 mov al, 1 | al = 1; 0x00404c19 jmp 0x404c0d | | } while (1); | label_11: 0x00404c1b mov edi, 0x682c00 | 0x00404c20 call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00404c25 mov qword [rsp + 8], 0x450d0d | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00404c2e mov qword [rsp + 0x10], 0x450d43 | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00404c37 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x00404c3f mov qword [rsp + 0x20], 0x46923a | *((rsp + 0x20)) = "R-INV"; 0x00404c48 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x00404c4c lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00404c51 call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00404c56 mov rax, r15 | rax = r15; 0x00404c59 shr rax, 0x20 | rax >>= 0x20; 0x00404c5d shl r15, 0x25 | r15 <<= 0x25; 0x00404c61 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00404c6b add rcx, r15 | rcx += r15; 0x00404c6e imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x00404c75 movabs r15, 0x8000000000000000 | r15 = 0x8000000000000000; 0x00404c7f or r15, rcx | r15 |= rcx; 0x00404c82 or r15, rax | r15 |= rax; 0x00404c85 jmp 0x404aef | goto label_0; | label_12: 0x00404c8a mov edi, 0x682c00 | 0x00404c8f call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00404c94 mov qword [rsp + 8], 0x450d0d | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00404c9d mov qword [rsp + 0x10], 0x450d43 | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00404ca6 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x00404cae mov qword [rsp + 0x20], 0x46923a | *((rsp + 0x20)) = "R-INV"; 0x00404cb7 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x00404cbb lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00404cc0 call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00404cc5 mov rax, rbx | rax = rbx; 0x00404cc8 shr rax, 0x20 | rax >>= 0x20; 0x00404ccc shl rbx, 0x25 | rbx <<= 0x25; 0x00404cd0 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00404cda add rcx, rbx | rcx += rbx; 0x00404cdd imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x00404ce4 movabs rbx, 0x8000000000000000 | rbx = 0x8000000000000000; 0x00404cee or rbx, rcx | rbx |= rcx; 0x00404cf1 or rbx, rax | rbx |= rax; 0x00404cf4 jmp 0x404afb | goto label_1; | label_16: 0x00404cf9 mov edi, 0x682c00 | 0x00404cfe call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00404d03 mov qword [rsp + 8], 0x450d0d | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00404d0c mov qword [rsp + 0x10], 0x450d43 | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00404d15 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x00404d1d mov qword [rsp + 0x20], 0x46923a | *((rsp + 0x20)) = "R-INV"; 0x00404d26 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x00404d2a lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00404d2f call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00404d34 mov rax, r15 | rax = r15; 0x00404d37 shr rax, 0x20 | rax >>= 0x20; 0x00404d3b shl r15, 0x25 | r15 <<= 0x25; 0x00404d3f movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00404d49 add rcx, r15 | rcx += r15; 0x00404d4c imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x00404d53 movabs r15, 0x8000000000000000 | r15 = 0x8000000000000000; 0x00404d5d or r15, rcx | r15 |= rcx; 0x00404d60 or r15, rax | r15 |= rax; 0x00404d63 jmp 0x404bb4 | goto label_2; | label_17: 0x00404d68 mov edi, 0x682c00 | 0x00404d6d call 0x429310 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00404d72 mov qword [rsp + 8], 0x450d0d | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00404d7b mov qword [rsp + 0x10], 0x450d43 | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00404d84 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x00404d8c mov qword [rsp + 0x20], 0x46923a | *((rsp + 0x20)) = "R-INV"; 0x00404d95 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x00404d99 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00404d9e call 0x429330 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00404da3 mov rax, rbx | rax = rbx; 0x00404da6 shr rax, 0x20 | rax >>= 0x20; 0x00404daa shl rbx, 0x25 | rbx <<= 0x25; 0x00404dae movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00404db8 add rcx, rbx | rcx += rbx; 0x00404dbb imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x00404dc2 movabs rbx, 0x8000000000000000 | rbx = 0x8000000000000000; 0x00404dcc or rbx, rcx | rbx |= rcx; 0x00404dcf or rbx, rax | rbx |= rax; 0x00404dd2 jmp 0x404bc0 | goto label_3; | }