; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x468d10 */ | #include | ; (fcn) method.BloombergLP::bdlt::Iso8601Util.parse_BloombergLP::bdlt::Datetime__char_const__int_ () | int64_t method_BloombergLP::bdlt::Iso8601Util_parse_BloombergLP::bdlt::Datetime_char_const_int_ (int64_t arg1) { | int64_t var_8h; | signed int64_t var_10h; | char * var_18h; | char * var_20h; | int64_t var_28h; | char * var_30h; | int64_t var_38h; | rdi = arg1; | /* BloombergLP::bdlt::Iso8601Util::parse(BloombergLP::bdlt::Datetime*, char const*, int) */ 0x00468d10 push r15 | 0x00468d12 push r14 | 0x00468d14 push r13 | 0x00468d16 push r12 | 0x00468d18 push rbx | 0x00468d19 sub rsp, 0x40 | 0x00468d1d mov r14, rdi | r14 = rdi; 0x00468d20 movabs rax, 0x800000141dd76000 | rax = 0x800000141dd76000; 0x00468d2a mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00468d2f mov dword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00468d37 lea rdi, [rsp + 8] | 0x00468d3c call 0x469030 | eax = BloombergLP::bdlt::Iso8601Util::parse(BloombergLP::bdlt::DatetimeTz*,char const*,int) (rsp + 8, rsi, rdx); 0x00468d41 test eax, eax | | if (eax != 0) { 0x00468d43 jne 0x468eeb | goto label_2; | } 0x00468d49 movabs r15, 0x8000000000000000 | r15 = 0x8000000000000000; 0x00468d53 movabs r12, 0x141dd76000 | r12 = 0x141dd76000; 0x00468d5d cmp dword [rsp + 0x10], 0 | | if (*((rsp + 0x10)) <= 0) { 0x00468d62 jle 0x468dd7 | goto label_3; | } 0x00468d64 mov edi, 1 | edi = 1; 0x00468d69 mov esi, 1 | esi = 1; 0x00468d6e mov edx, 1 | 0x00468d73 call 0x469ea0 | eax = BloombergLP::bdlt::PosixDateImpUtil::ymdToSerial(int,int,int) (edi, esi, 1, rcx); 0x00468d78 dec eax | eax--; 0x00468d7a movsxd rcx, dword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00468d7f and eax, 0x3ffffff | eax &= 0x3ffffff; 0x00468d84 imul rax, r12 | rax *= r12; 0x00468d88 imul rbx, rcx, 0x3938700 | rbx = rcx * 0x3938700; 0x00468d8f add rbx, rax | rbx += rax; 0x00468d92 movabs rcx, 0x32e73fb956a1b897 | rcx = 0x32e73fb956a1b897; 0x00468d9c mov rax, rbx | rax = rbx; 0x00468d9f mul rcx | rdx:rax = rax * rcx; 0x00468da2 shr rdx, 0x22 | rdx >>= 0x22; 0x00468da6 mov rax, rdx | rax = rdx; 0x00468da9 shl rax, 0x25 | rax <<= 0x25; 0x00468dad imul rdx, r12 | rdx *= r12; 0x00468db1 sub rbx, rdx | rbx -= rdx; 0x00468db4 or rbx, rax | rbx |= rax; 0x00468db7 or rbx, r15 | rbx |= r15; 0x00468dba mov r13, qword [rsp + 8] | r13 = *((rsp + 8)); 0x00468dbf test r13, r13 | 0x00468dc2 jns 0x468ef9 | | while (1) { 0x00468dc8 mov eax, 0xffffffff | eax = 0xffffffff; 0x00468dcd cmp rbx, r13 | | if (rbx > r13) { 0x00468dd0 jbe 0x468e50 | 0x00468dd2 jmp 0x468eeb | goto label_2; | if (rbx >= r13) { | label_3: 0x00468dd7 jns 0x468e50 | goto label_4; | } 0x00468dd9 mov edi, 0x270f | 0x00468dde mov esi, 0xc | 0x00468de3 mov edx, 0x1f | 0x00468de8 call 0x469ea0 | eax = BloombergLP::bdlt::PosixDateImpUtil::ymdToSerial(int,int,int) (0x270f, 0xc, 0x1f, rcx); 0x00468ded movsxd rcx, dword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00468df2 dec eax | eax--; 0x00468df4 and eax, 0x3ffffff | eax &= 0x3ffffff; 0x00468df9 imul rax, r12 | rax *= r12; 0x00468dfd imul rcx, rcx, 0x3938700 | rcx *= 0x3938700; 0x00468e04 add rcx, r12 | rcx += r12; 0x00468e07 lea rbx, [rax + rcx - 1] | rbx = rax + rcx - 1; 0x00468e0c movabs rcx, 0x32e73fb956a1b897 | rcx = 0x32e73fb956a1b897; 0x00468e16 mov rax, rbx | rax = rbx; 0x00468e19 mul rcx | rdx:rax = rax * rcx; 0x00468e1c shr rdx, 0x22 | rdx >>= 0x22; 0x00468e20 mov rax, rdx | rax = rdx; 0x00468e23 shl rax, 0x25 | rax <<= 0x25; 0x00468e27 imul rdx, r12 | rdx *= r12; 0x00468e2b sub rbx, rdx | rbx -= rdx; 0x00468e2e or rbx, rax | rbx |= rax; 0x00468e31 or rbx, r15 | rbx |= r15; 0x00468e34 mov r13, qword [rsp + 8] | r13 = *((rsp + 8)); 0x00468e39 test r13, r13 | | if (r13 >= 0) { 0x00468e3c jns 0x468fc3 | goto label_5; | } | label_1: 0x00468e42 mov eax, 0xffffffff | eax = 0xffffffff; 0x00468e47 cmp rbx, r13 | | if (rbx < r13) { 0x00468e4a jb 0x468eeb | goto label_2; | } | } | label_4: 0x00468e50 mov rbx, qword [rsp + 8] | rbx = *((rsp + 8)); 0x00468e55 test rbx, rbx | | if (rbx >= 0) { 0x00468e58 jns 0x468f5e | goto label_6; | } | label_0: 0x00468e5e movsxd rax, dword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00468e63 test rax, rax | | if (rax != 0) { 0x00468e66 je 0x468ee6 | 0x00468e68 neg rax | rax = -rax; 0x00468e6b movabs rcx, 0x1ffffffc00 | rcx = 0x1ffffffc00; 0x00468e75 mov rdx, rbx | rdx = rbx; 0x00468e78 and rdx, rcx | rdx &= rcx; 0x00468e7b movabs rsi, 0xffffffebe228a000 | rsi = 0xffffffebe228a000; 0x00468e85 add rsi, rdx | rsi += rdx; 0x00468e88 shr rsi, 0xa | rsi >>= 0xa; 0x00468e8c or rcx, 0x3ff | rcx |= 0x3ff; 0x00468e93 and rcx, rbx | rcx &= rbx; 0x00468e96 shr rbx, 0x25 | rbx >>= 0x25; 0x00468e9a and ebx, 0x3ffffff | ebx &= 0x3ffffff; 0x00468ea0 imul rbx, r12 | rbx *= r12; 0x00468ea4 xor edx, edx | edx = 0; 0x00468ea6 cmp rsi, 0x35a4e9 | | if (rsi >= 0x35a4e9) { 0x00468ead cmovae rdx, rcx | rdx = rcx; | } 0x00468eb1 add rdx, rbx | rdx += rbx; 0x00468eb4 imul rbx, rax, 0x3938700 | rbx = rax * 0x3938700; 0x00468ebb add rbx, rdx | rbx += rdx; 0x00468ebe movabs rcx, 0x32e73fb956a1b897 | rcx = 0x32e73fb956a1b897; 0x00468ec8 mov rax, rbx | rax = rbx; 0x00468ecb mul rcx | rdx:rax = rax * rcx; 0x00468ece shr rdx, 0x22 | rdx >>= 0x22; 0x00468ed2 mov rax, rdx | rax = rdx; 0x00468ed5 shl rax, 0x25 | rax <<= 0x25; 0x00468ed9 imul rdx, r12 | rdx *= r12; 0x00468edd sub rbx, rdx | rbx -= rdx; 0x00468ee0 or rbx, rax | rbx |= rax; 0x00468ee3 or rbx, r15 | rbx |= r15; | } 0x00468ee6 mov qword [r14], rbx | *(r14) = rbx; 0x00468ee9 xor eax, eax | eax = 0; | label_2: 0x00468eeb add rsp, 0x40 | 0x00468eef pop rbx | 0x00468ef0 pop r12 | 0x00468ef2 pop r13 | 0x00468ef4 pop r14 | 0x00468ef6 pop r15 | 0x00468ef8 ret | return rax; 0x00468ef9 mov edi, 0x6f73bc | 0x00468efe call 0x46f120 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00468f03 mov qword [rsp + 0x18], 0x49a5a5 | *((rsp + 0x18)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00468f0c mov qword [rsp + 0x20], 0x49a5db | *((rsp + 0x20)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlt/bdlt_datetime.h"; 0x00468f15 mov dword [rsp + 0x28], 0x466 | *((rsp + 0x28)) = 0x466; 0x00468f1d mov qword [rsp + 0x30], 0x4cd41a | *((rsp + 0x30)) = "R-INV"; 0x00468f26 mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x00468f2a lea rdi, [rsp + 0x18] | rdi = rsp + 0x18; 0x00468f2f call 0x46f140 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00468f34 mov rax, r13 | rax = r13; 0x00468f37 shr rax, 0x20 | rax >>= 0x20; 0x00468f3b shl r13, 0x25 | r13 <<= 0x25; 0x00468f3f movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00468f49 add rcx, r13 | rcx += r13; 0x00468f4c imul r13, rax, 0x3e8 | r13 = rax * 0x3e8; 0x00468f53 or r13, rcx | r13 |= rcx; 0x00468f56 or r13, r15 | r13 |= r15; 0x00468f59 jmp 0x468dc8 | | } | label_6: 0x00468f5e mov edi, 0x6f73bc | 0x00468f63 call 0x46f120 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00468f68 mov qword [rsp + 0x18], 0x49a5a5 | *((rsp + 0x18)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00468f71 mov qword [rsp + 0x20], 0x49a5db | *((rsp + 0x20)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlt/bdlt_datetime.h"; 0x00468f7a mov dword [rsp + 0x28], 0x466 | *((rsp + 0x28)) = 0x466; 0x00468f82 mov qword [rsp + 0x30], 0x4cd41a | *((rsp + 0x30)) = "R-INV"; 0x00468f8b mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x00468f8f lea rdi, [rsp + 0x18] | rdi = rsp + 0x18; 0x00468f94 call 0x46f140 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00468f99 mov rax, rbx | rax = rbx; 0x00468f9c shr rax, 0x20 | rax >>= 0x20; 0x00468fa0 shl rbx, 0x25 | rbx <<= 0x25; 0x00468fa4 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00468fae add rcx, rbx | rcx += rbx; 0x00468fb1 imul rbx, rax, 0x3e8 | rbx = rax * 0x3e8; 0x00468fb8 or rbx, rcx | rbx |= rcx; 0x00468fbb or rbx, r15 | rbx |= r15; 0x00468fbe jmp 0x468e5e | goto label_0; | label_5: 0x00468fc3 mov edi, 0x6f73bc | 0x00468fc8 call 0x46f120 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00468fcd mov qword [rsp + 0x18], 0x49a5a5 | *((rsp + 0x18)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x00468fd6 mov qword [rsp + 0x20], 0x49a5db | *((rsp + 0x20)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlt/bdlt_datetime.h"; 0x00468fdf mov dword [rsp + 0x28], 0x466 | *((rsp + 0x28)) = 0x466; 0x00468fe7 mov qword [rsp + 0x30], 0x4cd41a | *((rsp + 0x30)) = "R-INV"; 0x00468ff0 mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x00468ff4 lea rdi, [rsp + 0x18] | rdi = rsp + 0x18; 0x00468ff9 call 0x46f140 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00468ffe mov rax, r13 | rax = r13; 0x00469001 shr rax, 0x20 | rax >>= 0x20; 0x00469005 shl r13, 0x25 | r13 <<= 0x25; 0x00469009 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x00469013 add rcx, r13 | rcx += r13; 0x00469016 imul r13, rax, 0x3e8 | r13 = rax * 0x3e8; 0x0046901d or r13, rcx | r13 |= rcx; 0x00469020 or r13, r15 | r13 |= r15; 0x00469023 jmp 0x468e42 | goto label_1; | }