; assembly | /* r2dec pseudo code output */ | /* bdlt_fixutil.t/assume @ 0x43ad70 */ | #include | ; (fcn) method.BloombergLP::bdlt::FixUtil.generateRaw_char__BloombergLP::bdlt::TimeTz_const__BloombergLP::bdlt::FixUtilConfiguration_const_ () | int64_t method_BloombergLP::bdlt::FixUtil_generateRaw_char_BloombergLP::bdlt::TimeTz_const_BloombergLP::bdlt::FixUtilConfiguration_const_ (int64_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlt::FixUtil::generateRaw(char*, BloombergLP::bdlt::TimeTz const&, BloombergLP::bdlt::FixUtilConfiguration const&) */ 0x0043ad70 push rbp | 0x0043ad71 push r15 | 0x0043ad73 push r14 | 0x0043ad75 push r13 | 0x0043ad77 push r12 | 0x0043ad79 push rbx | 0x0043ad7a push rax | 0x0043ad7b mov r14, rdx | r14 = rdx; 0x0043ad7e mov r15, rsi | r15 = rsi; 0x0043ad81 mov rbx, rdi | rbx = rdi; 0x0043ad84 movabs r12, 0xffffffbfffffffff | r12 = 0xffffffbfffffffff; 0x0043ad8e movabs r13, 0x4000000000 | r13 = 0x4000000000; 0x0043ad98 mov rcx, qword [rsi] | rcx = *(rsi); 0x0043ad9b mov qword [rsp], rcx | *(rsp) = rcx; 0x0043ad9f cmp rcx, r13 | | if (rcx < r13) { 0x0043ada2 jl 0x43b053 | goto label_5; | } 0x0043ada8 and rcx, r12 | rcx &= r12; | label_0: 0x0043adab mov rax, rcx | rax = rcx; 0x0043adae or rax, r13 | rax |= r13; 0x0043adb1 mov qword [rsp], rax | *(rsp) = rax; 0x0043adb5 cmp rax, r13 | | if (rax < r13) { 0x0043adb8 jl 0x43b063 | goto label_6; | } 0x0043adbe and rcx, r12 | rcx &= r12; | label_1: 0x0043adc1 movabs rbp, 0x98b5bf2c03e529c5 | 0x0043adcb mov rax, rcx | rax = rcx; 0x0043adce imul rbp | rdx:rax = rax * rbp; 0x0043add1 mov rax, rdx | rax = rdx; 0x0043add4 add rax, rcx | rax += rcx; 0x0043add7 mov rcx, rax | rcx = rax; 0x0043adda shr rcx, 0x3f | rcx >>= 0x3f; 0x0043adde shr rax, 0x1f | rax >>= 0x1f; 0x0043ade2 add eax, ecx | eax += ecx; 0x0043ade4 xor edx, edx | edx = 0; 0x0043ade6 cmp eax, 0x17 | | if (eax <= 0x17) { 0x0043ade9 jg 0x43ae11 | 0x0043adeb mov rcx, qword [rsp] | rcx = *(rsp); 0x0043adef cmp rcx, r13 | | if (rcx < r13) { 0x0043adf2 jl 0x43b097 | goto label_7; | } 0x0043adf8 and rcx, r12 | rcx &= r12; | label_4: 0x0043adfb mov rax, rcx | rax = rcx; 0x0043adfe imul rbp | rdx:rax = rax * rbp; 0x0043ae01 add rdx, rcx | rdx += rcx; 0x0043ae04 mov rax, rdx | rax = rdx; 0x0043ae07 shr rax, 0x3f | rax >>= 0x3f; 0x0043ae0b shr rdx, 0x1f | rdx >>= 0x1f; 0x0043ae0f add edx, eax | edx += eax; | } 0x0043ae11 mov eax, edx | eax = edx; 0x0043ae13 mov ecx, 0xcccccccd | ecx = 0xcccccccd; 0x0043ae18 imul rax, rcx | rax *= rcx; 0x0043ae1c shr rax, 0x23 | rax >>= 0x23; 0x0043ae20 lea esi, [rax + rax] | esi = rax + rax; 0x0043ae23 lea esi, [rsi + rsi*4] | esi = rsi * 5; 0x0043ae26 sub edx, esi | edx -= esi; 0x0043ae28 or dl, 0x30 | dl |= 0x30; 0x0043ae2b mov byte [rbx + 1], dl | *((rbx + 1)) = dl; 0x0043ae2e mov rdx, rax | rdx = rax; 0x0043ae31 imul rdx, rcx | rdx *= rcx; 0x0043ae35 shr rdx, 0x23 | rdx >>= 0x23; 0x0043ae39 add edx, edx | edx += edx; 0x0043ae3b lea ecx, [rdx + rdx*4] | ecx = rdx * 5; 0x0043ae3e sub eax, ecx | eax -= ecx; 0x0043ae40 or al, 0x30 | al |= 0x30; 0x0043ae42 mov byte [rbx], al | *(rbx) = al; 0x0043ae44 mov byte [rbx + 2], 0x3a | *((rbx + 2)) = 0x3a; 0x0043ae48 mov rcx, qword [rsp] | rcx = *(rsp); 0x0043ae4c cmp rcx, r13 | | if (rcx < r13) { 0x0043ae4f jl 0x43b073 | goto label_8; | } 0x0043ae55 mov rdi, rcx | rdi = rcx; 0x0043ae58 and rdi, r12 | rdi &= r12; | label_2: 0x0043ae5b movabs rdx, 0x8f2a633943a6d729 | rdx = 0x8f2a633943a6d729; 0x0043ae65 mov rax, rdi | rax = rdi; 0x0043ae68 imul rdx | rdx:rax = rax * rdx; 0x0043ae6b mov rsi, rdx | rsi = rdx; 0x0043ae6e add rsi, rdi | rsi += rdi; 0x0043ae71 mov rax, rsi | rax = rsi; 0x0043ae74 shr rax, 0x3f | rax >>= 0x3f; 0x0043ae78 sar rsi, 0x19 | rsi >>= 0x19; 0x0043ae7c add rsi, rax | rsi += rax; 0x0043ae7f movabs rbp, 0x8888888888888889 | 0x0043ae89 mov rax, rsi | rax = rsi; 0x0043ae8c imul rbp | rdx:rax = rax * rbp; 0x0043ae8f add rdx, rsi | rdx += rsi; 0x0043ae92 mov rax, rdx | rax = rdx; 0x0043ae95 shr rax, 0x3f | rax >>= 0x3f; 0x0043ae99 sar rdx, 5 | rdx >>= 5; 0x0043ae9d add rdx, rax | rdx += rax; 0x0043aea0 imul rax, rdx, 0x3c | rax = rdx * 0x3c; 0x0043aea4 sub rsi, rax | rsi -= rax; 0x0043aea7 movzx eax, sil | eax = (int32_t) sil; 0x0043aeab imul eax, eax, 0xcd | eax *= 0xcd; 0x0043aeb1 shr eax, 0xb | eax >>= 0xb; 0x0043aeb4 lea edx, [rax + rax] | edx = rax + rax; 0x0043aeb7 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043aeba sub sil, dl | sil -= dl; 0x0043aebd or sil, 0x30 | sil |= 0x30; 0x0043aec1 mov byte [rbx + 4], sil | *((rbx + 4)) = sil; 0x0043aec5 imul edx, eax, 0xcd | edx = eax * 0xcd; 0x0043aecb shr edx, 0xa | edx >>= 0xa; 0x0043aece and edx, 0xfffffffe | edx &= 0xfffffffe; 0x0043aed1 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043aed4 sub al, dl | al -= dl; 0x0043aed6 or al, 0x30 | al |= 0x30; 0x0043aed8 mov byte [rbx + 3], al | *((rbx + 3)) = al; 0x0043aedb mov byte [rbx + 5], 0x3a | *((rbx + 5)) = 0x3a; 0x0043aedf cmp rcx, r13 | | if (rcx < r13) { 0x0043aee2 jl 0x43b087 | goto label_9; | } 0x0043aee8 and rcx, r12 | rcx &= r12; | label_3: 0x0043aeeb movabs rdx, 0x431bde82d7b634db | rdx = 0x431bde82d7b634db; 0x0043aef5 mov rax, rcx | rax = rcx; 0x0043aef8 imul rdx | rdx:rax = rax * rdx; 0x0043aefb mov rcx, rdx | rcx = rdx; 0x0043aefe mov rax, rdx | rax = rdx; 0x0043af01 shr rax, 0x3f | rax >>= 0x3f; 0x0043af05 sar rcx, 0x12 | rcx >>= 0x12; 0x0043af09 add rcx, rax | rcx += rax; 0x0043af0c mov rax, rcx | rax = rcx; 0x0043af0f imul rbp | rdx:rax = rax * rbp; 0x0043af12 add rdx, rcx | rdx += rcx; 0x0043af15 mov rax, rdx | rax = rdx; 0x0043af18 shr rax, 0x3f | rax >>= 0x3f; 0x0043af1c sar rdx, 5 | rdx >>= 5; 0x0043af20 add rdx, rax | rdx += rax; 0x0043af23 imul rax, rdx, 0x3c | rax = rdx * 0x3c; 0x0043af27 sub rcx, rax | rcx -= rax; 0x0043af2a movzx eax, cl | eax = (int32_t) cl; 0x0043af2d imul eax, eax, 0xcd | eax *= 0xcd; 0x0043af33 shr eax, 0xb | eax >>= 0xb; 0x0043af36 lea edx, [rax + rax] | edx = rax + rax; 0x0043af39 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043af3c sub cl, dl | cl -= dl; 0x0043af3e or cl, 0x30 | cl |= 0x30; 0x0043af41 mov byte [rbx + 7], cl | *((rbx + 7)) = cl; 0x0043af44 imul ecx, eax, 0xcd | ecx = eax * 0xcd; 0x0043af4a shr ecx, 0xa | ecx >>= 0xa; 0x0043af4d and ecx, 0xfffffffe | ecx &= 0xfffffffe; 0x0043af50 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043af53 sub al, cl | al -= cl; 0x0043af55 or al, 0x30 | al |= 0x30; 0x0043af57 mov byte [rbx + 6], al | *((rbx + 6)) = al; 0x0043af5a lea rax, [rbx + 8] | rax = rbx + 8; 0x0043af5e mov edx, dword [r15 + 8] | edx = *((r15 + 8)); 0x0043af62 test edx, edx | | if (edx == 0) { 0x0043af64 jne 0x43af70 | 0x0043af66 test byte [r14], 8 | | if ((*(r14) & 8) != 0) { 0x0043af6a jne 0x43b049 | goto label_10; | } | } 0x0043af70 mov ecx, edx | ecx = edx; 0x0043af72 neg ecx | ecx = -ecx; | if ((*(r14) & 8) < 0) { 0x0043af74 cmovl ecx, edx | ecx = edx; | } 0x0043af77 shr edx, 0x1f | edx >>= 0x1f; 0x0043af7a add dl, dl | dl += dl; 0x0043af7c add dl, 0x2b | dl += 0x2b; 0x0043af7f mov byte [rbx + 8], dl | *((rbx + 8)) = dl; 0x0043af82 movsx edx, cx | edx = (int32_t) cx; 0x0043af85 imul edx, edx, 0xffff8889 | edx *= 0xffff8889; 0x0043af8b shr edx, 0x10 | edx >>= 0x10; 0x0043af8e add edx, ecx | edx += ecx; 0x0043af90 movzx esi, dx | esi = (int32_t) dx; 0x0043af93 movsx edx, si | edx = (int32_t) si; 0x0043af96 shr esi, 0xf | esi >>= 0xf; 0x0043af99 sar edx, 5 | edx >>= 5; 0x0043af9c add edx, esi | edx += esi; 0x0043af9e movzx esi, dl | esi = (int32_t) dl; 0x0043afa1 imul edi, esi, 0xcd | edi = esi * 0xcd; 0x0043afa7 shr edi, 0xb | edi >>= 0xb; 0x0043afaa lea ebp, [rdi + rdi] | ebp = rdi + rdi; 0x0043afad lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x0043afb1 sub sil, bpl | sil -= bpl; 0x0043afb4 or sil, 0x30 | sil |= 0x30; 0x0043afb8 mov byte [rbx + 0xa], sil | *((rbx + 0xa)) = sil; 0x0043afbc imul esi, edi, 0xcd | esi = edi * 0xcd; 0x0043afc2 shr esi, 0xa | esi >>= 0xa; 0x0043afc5 and esi, 0xfffffffe | esi &= 0xfffffffe; 0x0043afc8 lea esi, [rsi + rsi*4] | esi = rsi * 5; 0x0043afcb sub dil, sil | dil -= sil; 0x0043afce or dil, 0x30 | dil |= 0x30; 0x0043afd2 mov byte [rbx + 9], dil | *((rbx + 9)) = dil; 0x0043afd6 mov byte [rbx + 0xb], 0x3a | *((rbx + 0xb)) = 0x3a; 0x0043afda imul edx, edx, 0x3c | edx *= 0x3c; 0x0043afdd sub ecx, edx | ecx -= edx; 0x0043afdf movsx edx, cl | edx = (int32_t) cl; 0x0043afe2 imul edx, edx, 0x67 | edx *= 0x67; 0x0043afe5 movzx edx, dx | edx = (int32_t) dx; 0x0043afe8 mov esi, edx | esi = edx; 0x0043afea shr esi, 0xf | esi >>= 0xf; 0x0043afed shr edx, 8 | edx >>= 8; 0x0043aff0 sar dl, 2 | dl >>= 2; 0x0043aff3 add dl, sil | dl += sil; 0x0043aff6 movzx edx, dl | edx = (int32_t) dl; 0x0043aff9 lea esi, [rdx + rdx] | esi = rdx + rdx; 0x0043affc lea esi, [rsi + rsi*4] | esi = rsi * 5; 0x0043afff sub cl, sil | cl -= sil; 0x0043b002 add cl, 0x30 | cl += 0x30; 0x0043b005 mov byte [rbx + 0xd], cl | *((rbx + 0xd)) = cl; 0x0043b008 movsx ecx, dl | ecx = (int32_t) dl; 0x0043b00b imul ecx, ecx, 0x67 | ecx *= 0x67; 0x0043b00e movzx ecx, cx | ecx = (int32_t) cx; 0x0043b011 mov esi, ecx | esi = ecx; 0x0043b013 shr esi, 0xf | esi >>= 0xf; 0x0043b016 shr ecx, 8 | ecx >>= 8; 0x0043b019 sar cl, 2 | cl >>= 2; 0x0043b01c add cl, sil | cl += sil; 0x0043b01f movzx ecx, cl | ecx = (int32_t) cl; 0x0043b022 add ecx, ecx | ecx += ecx; 0x0043b024 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043b027 sub dl, cl | dl -= cl; 0x0043b029 add dl, 0x30 | dl += 0x30; 0x0043b02c mov byte [rbx + 0xc], dl | *((rbx + 0xc)) = dl; 0x0043b02f add rbx, 0xe | rbx += 0xe; | do { 0x0043b033 sub ebx, eax | ebx -= eax; 0x0043b035 add ebx, 8 | ebx += 8; 0x0043b038 mov eax, ebx | eax = ebx; 0x0043b03a add rsp, 8 | 0x0043b03e pop rbx | 0x0043b03f pop r12 | 0x0043b041 pop r13 | 0x0043b043 pop r14 | 0x0043b045 pop r15 | 0x0043b047 pop rbp | 0x0043b048 ret | return rax; | label_10: 0x0043b049 mov byte [rbx + 8], 0x5a | *((rbx + 8)) = 0x5a; 0x0043b04d add rbx, 9 | rbx += 9; 0x0043b051 jmp 0x43b033 | | } while (1); | label_5: 0x0043b053 mov rdi, rsp | 0x0043b056 call 0x43d420 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp); 0x0043b05b mov rcx, rax | rcx = rax; 0x0043b05e jmp 0x43adab | goto label_0; | label_6: 0x0043b063 mov rdi, rsp | 0x0043b066 call 0x43d420 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp); 0x0043b06b mov rcx, rax | rcx = rax; 0x0043b06e jmp 0x43adc1 | goto label_1; | label_8: 0x0043b073 mov rdi, rsp | 0x0043b076 call 0x43d420 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp); 0x0043b07b mov rdi, rax | rdi = rax; 0x0043b07e mov rcx, qword [rsp] | rcx = *(rsp); 0x0043b082 jmp 0x43ae5b | goto label_2; | label_9: 0x0043b087 mov rdi, rsp | 0x0043b08a call 0x43d420 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp); 0x0043b08f mov rcx, rax | rcx = rax; 0x0043b092 jmp 0x43aeeb | goto label_3; | label_7: 0x0043b097 mov rdi, rsp | 0x0043b09a call 0x43d420 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp); 0x0043b09f mov rcx, rax | rcx = rax; 0x0043b0a2 jmp 0x43adfb | goto label_4; | }