; assembly | /* r2dec pseudo code output */ | /* bdlt_fixutil.t/none @ 0x4396c0 */ | #include | ; (fcn) method.BloombergLP::bdlt::FixUtil.generate_char__int__BloombergLP::bdlt::Date_const__BloombergLP::bdlt::FixUtilConfiguration_const_ () | int64_t method_BloombergLP::bdlt::FixUtil_generate_char_int_BloombergLP::bdlt::Date_const_BloombergLP::bdlt::FixUtilConfiguration_const_ (int64_t arg3, signed int64_t arg2, char * arg1) { | void * s2; | int64_t var_9h; | int64_t var_ah; | int64_t var_bh; | int64_t var_ch; | int64_t var_dh; | int64_t var_eh; | int64_t var_fh; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlt::FixUtil::generate(char*, int, BloombergLP::bdlt::Date const&, BloombergLP::bdlt::FixUtilConfiguration const&) */ 0x004396c0 push rbp | 0x004396c1 push r14 | 0x004396c3 push rbx | 0x004396c4 sub rsp, 0x10 | 0x004396c8 mov r14, rdx | r14 = rdx; 0x004396cb mov rbx, rdi | rbx = rdi; 0x004396ce cmp esi, 9 | | if (esi >= 9) { 0x004396d1 jl 0x439838 | 0x004396d7 mov edi, dword [r14] | 0x004396da call 0x43d240 | eax = BloombergLP::bdlt::PosixDateImpUtil::serialToYear(int) (*(r14), rsi); 0x004396df movsxd rcx, eax | rcx = (int64_t) eax; 0x004396e2 imul rax, rcx, 0x66666667 | rax = rcx * 0x66666667; 0x004396e9 mov rdx, rax | rdx = rax; 0x004396ec shr rdx, 0x3f | rdx >>= 0x3f; 0x004396f0 sar rax, 0x22 | rax >>= 0x22; 0x004396f4 add eax, edx | eax += edx; 0x004396f6 lea edx, [rax + rax] | edx = rax + rax; 0x004396f9 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x004396fc imul rsi, rcx, 0x51eb851f | rsi = rcx * 0x51eb851f; 0x00439703 imul rdi, rcx, 0x10624dd3 | rdi = rcx * 0x10624dd3; 0x0043970a sub ecx, edx | ecx -= edx; 0x0043970c add cl, 0x30 | cl += 0x30; 0x0043970f mov byte [rbx + 3], cl | *((rbx + 3)) = cl; 0x00439712 cdqe | rax = (int64_t) eax; 0x00439714 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043971b mov rdx, rcx | rdx = rcx; 0x0043971e shr rdx, 0x3f | rdx >>= 0x3f; 0x00439722 shr rcx, 0x22 | rcx >>= 0x22; 0x00439726 add ecx, edx | ecx += edx; 0x00439728 add ecx, ecx | ecx += ecx; 0x0043972a lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043972d sub eax, ecx | eax -= ecx; 0x0043972f add al, 0x30 | al += 0x30; 0x00439731 mov byte [rbx + 2], al | *((rbx + 2)) = al; 0x00439734 mov rax, rsi | rax = rsi; 0x00439737 shr rax, 0x3f | rax >>= 0x3f; 0x0043973b sar rsi, 0x25 | rsi >>= 0x25; 0x0043973f add esi, eax | esi += eax; 0x00439741 movsxd rax, esi | rax = (int64_t) esi; 0x00439744 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043974b mov rdx, rcx | rdx = rcx; 0x0043974e shr rdx, 0x3f | rdx >>= 0x3f; 0x00439752 shr rcx, 0x22 | rcx >>= 0x22; 0x00439756 add ecx, edx | ecx += edx; 0x00439758 add ecx, ecx | ecx += ecx; 0x0043975a lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043975d sub eax, ecx | eax -= ecx; 0x0043975f add al, 0x30 | al += 0x30; 0x00439761 mov byte [rbx + 1], al | *((rbx + 1)) = al; 0x00439764 mov rax, rdi | rax = rdi; 0x00439767 shr rax, 0x3f | rax >>= 0x3f; 0x0043976b sar rdi, 0x26 | rdi >>= 0x26; 0x0043976f add edi, eax | edi += eax; 0x00439771 movsxd rax, edi | rax = (int64_t) edi; 0x00439774 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043977b mov rdx, rcx | rdx = rcx; 0x0043977e shr rdx, 0x3f | rdx >>= 0x3f; 0x00439782 shr rcx, 0x22 | rcx >>= 0x22; 0x00439786 add ecx, edx | ecx += edx; 0x00439788 add ecx, ecx | ecx += ecx; 0x0043978a lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043978d sub eax, ecx | eax -= ecx; 0x0043978f add al, 0x30 | al += 0x30; 0x00439791 mov byte [rbx], al | *(rbx) = al; 0x00439793 mov edi, dword [r14] | 0x00439796 call 0x43d200 | rax = BloombergLP::bdlt::PosixDateImpUtil::serialToMonth(int) (*(r14), rsi); 0x0043979b cdqe | rax = (int64_t) eax; 0x0043979d imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x004397a4 mov rdx, rcx | rdx = rcx; 0x004397a7 shr rdx, 0x3f | rdx >>= 0x3f; 0x004397ab sar rcx, 0x22 | rcx >>= 0x22; 0x004397af add ecx, edx | ecx += edx; 0x004397b1 lea edx, [rcx + rcx] | edx = rcx + rcx; 0x004397b4 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x004397b7 sub eax, edx | eax -= edx; 0x004397b9 add al, 0x30 | al += 0x30; 0x004397bb mov byte [rbx + 5], al | *((rbx + 5)) = al; 0x004397be movsxd rax, ecx | rax = (int64_t) ecx; 0x004397c1 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x004397c8 mov rdx, rcx | rdx = rcx; 0x004397cb shr rdx, 0x3f | rdx >>= 0x3f; 0x004397cf shr rcx, 0x22 | rcx >>= 0x22; 0x004397d3 add ecx, edx | ecx += edx; 0x004397d5 add ecx, ecx | ecx += ecx; 0x004397d7 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x004397da sub eax, ecx | eax -= ecx; 0x004397dc add al, 0x30 | al += 0x30; 0x004397de mov byte [rbx + 4], al | *((rbx + 4)) = al; 0x004397e1 mov edi, dword [r14] | 0x004397e4 call 0x43d1c0 | rax = BloombergLP::bdlt::PosixDateImpUtil::serialToDay(int) (*(r14), rsi); 0x004397e9 cdqe | rax = (int64_t) eax; 0x004397eb imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x004397f2 mov rdx, rcx | rdx = rcx; 0x004397f5 shr rdx, 0x3f | rdx >>= 0x3f; 0x004397f9 sar rcx, 0x22 | rcx >>= 0x22; 0x004397fd add ecx, edx | ecx += edx; 0x004397ff lea edx, [rcx + rcx] | edx = rcx + rcx; 0x00439802 lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x00439805 sub eax, edx | eax -= edx; 0x00439807 add al, 0x30 | al += 0x30; 0x00439809 mov byte [rbx + 7], al | *((rbx + 7)) = al; 0x0043980c movsxd rax, ecx | rax = (int64_t) ecx; 0x0043980f imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x00439816 mov rdx, rcx | rdx = rcx; 0x00439819 shr rdx, 0x3f | rdx >>= 0x3f; 0x0043981d shr rcx, 0x22 | rcx >>= 0x22; 0x00439821 add ecx, edx | ecx += edx; 0x00439823 add ecx, ecx | ecx += ecx; 0x00439825 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x00439828 sub eax, ecx | eax -= ecx; 0x0043982a add al, 0x30 | al += 0x30; 0x0043982c mov byte [rbx + 6], al | *((rbx + 6)) = al; 0x0043982f mov byte [rbx + 8], 0 | *((rbx + 8)) = 0; 0x00439833 jmp 0x4399ab | | } else { 0x00439838 mov ebp, esi | 0x0043983a mov edi, dword [r14] | 0x0043983d call 0x43d240 | eax = BloombergLP::bdlt::PosixDateImpUtil::serialToYear(int) (*(r14), rsi); 0x00439842 movsxd rcx, eax | rcx = (int64_t) eax; 0x00439845 imul rax, rcx, 0x66666667 | rax = rcx * 0x66666667; 0x0043984c mov rdx, rax | rdx = rax; 0x0043984f shr rdx, 0x3f | rdx >>= 0x3f; 0x00439853 sar rax, 0x22 | rax >>= 0x22; 0x00439857 add eax, edx | eax += edx; 0x00439859 lea edx, [rax + rax] | edx = rax + rax; 0x0043985c lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043985f imul rsi, rcx, 0x51eb851f | rsi = rcx * 0x51eb851f; 0x00439866 imul rdi, rcx, 0x10624dd3 | rdi = rcx * 0x10624dd3; 0x0043986d sub ecx, edx | ecx -= edx; 0x0043986f add cl, 0x30 | cl += 0x30; 0x00439872 mov byte [rsp + 0xb], cl | *((rsp + 0xb)) = cl; 0x00439876 cdqe | rax = (int64_t) eax; 0x00439878 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043987f mov rdx, rcx | rdx = rcx; 0x00439882 shr rdx, 0x3f | rdx >>= 0x3f; 0x00439886 shr rcx, 0x22 | rcx >>= 0x22; 0x0043988a add ecx, edx | ecx += edx; 0x0043988c add ecx, ecx | ecx += ecx; 0x0043988e lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x00439891 sub eax, ecx | eax -= ecx; 0x00439893 add al, 0x30 | al += 0x30; 0x00439895 mov byte [rsp + 0xa], al | *((rsp + 0xa)) = al; 0x00439899 mov rax, rsi | rax = rsi; 0x0043989c shr rax, 0x3f | rax >>= 0x3f; 0x004398a0 sar rsi, 0x25 | rsi >>= 0x25; 0x004398a4 add esi, eax | esi += eax; 0x004398a6 movsxd rax, esi | rax = (int64_t) esi; 0x004398a9 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x004398b0 mov rdx, rcx | rdx = rcx; 0x004398b3 shr rdx, 0x3f | rdx >>= 0x3f; 0x004398b7 shr rcx, 0x22 | rcx >>= 0x22; 0x004398bb add ecx, edx | ecx += edx; 0x004398bd add ecx, ecx | ecx += ecx; 0x004398bf lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x004398c2 sub eax, ecx | eax -= ecx; 0x004398c4 add al, 0x30 | al += 0x30; 0x004398c6 mov byte [rsp + 9], al | *((rsp + 9)) = al; 0x004398ca mov rax, rdi | rax = rdi; 0x004398cd shr rax, 0x3f | rax >>= 0x3f; 0x004398d1 sar rdi, 0x26 | rdi >>= 0x26; 0x004398d5 add edi, eax | edi += eax; 0x004398d7 movsxd rax, edi | rax = (int64_t) edi; 0x004398da imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x004398e1 mov rdx, rcx | rdx = rcx; 0x004398e4 shr rdx, 0x3f | rdx >>= 0x3f; 0x004398e8 shr rcx, 0x22 | rcx >>= 0x22; 0x004398ec add ecx, edx | ecx += edx; 0x004398ee add ecx, ecx | ecx += ecx; 0x004398f0 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x004398f3 sub eax, ecx | eax -= ecx; 0x004398f5 add al, 0x30 | al += 0x30; 0x004398f7 mov byte [rsp + 8], al | *((rsp + 8)) = al; 0x004398fb mov edi, dword [r14] | 0x004398fe call 0x43d200 | rax = BloombergLP::bdlt::PosixDateImpUtil::serialToMonth(int) (*(r14), rsi); 0x00439903 cdqe | rax = (int64_t) eax; 0x00439905 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043990c mov rdx, rcx | rdx = rcx; 0x0043990f shr rdx, 0x3f | rdx >>= 0x3f; 0x00439913 sar rcx, 0x22 | rcx >>= 0x22; 0x00439917 add ecx, edx | ecx += edx; 0x00439919 lea edx, [rcx + rcx] | edx = rcx + rcx; 0x0043991c lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043991f sub eax, edx | eax -= edx; 0x00439921 add al, 0x30 | al += 0x30; 0x00439923 mov byte [rsp + 0xd], al | *((rsp + 0xd)) = al; 0x00439927 movsxd rax, ecx | rax = (int64_t) ecx; 0x0043992a imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x00439931 mov rdx, rcx | rdx = rcx; 0x00439934 shr rdx, 0x3f | rdx >>= 0x3f; 0x00439938 shr rcx, 0x22 | rcx >>= 0x22; 0x0043993c add ecx, edx | ecx += edx; 0x0043993e add ecx, ecx | ecx += ecx; 0x00439940 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x00439943 sub eax, ecx | eax -= ecx; 0x00439945 add al, 0x30 | al += 0x30; 0x00439947 mov byte [rsp + 0xc], al | *((rsp + 0xc)) = al; 0x0043994b mov edi, dword [r14] | 0x0043994e call 0x43d1c0 | rax = BloombergLP::bdlt::PosixDateImpUtil::serialToDay(int) (*(r14), rsi); 0x00439953 cdqe | rax = (int64_t) eax; 0x00439955 imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x0043995c mov rdx, rcx | rdx = rcx; 0x0043995f shr rdx, 0x3f | rdx >>= 0x3f; 0x00439963 sar rcx, 0x22 | rcx >>= 0x22; 0x00439967 add ecx, edx | ecx += edx; 0x00439969 lea edx, [rcx + rcx] | edx = rcx + rcx; 0x0043996c lea edx, [rdx + rdx*4] | edx = rdx * 5; 0x0043996f sub eax, edx | eax -= edx; 0x00439971 add al, 0x30 | al += 0x30; 0x00439973 mov byte [rsp + 0xf], al | *((rsp + 0xf)) = al; 0x00439977 movsxd rax, ecx | rax = (int64_t) ecx; 0x0043997a imul rcx, rax, 0x66666667 | rcx = rax * 0x66666667; 0x00439981 mov rdx, rcx | 0x00439984 shr rdx, 0x3f | rdx >>= 0x3f; 0x00439988 shr rcx, 0x22 | rcx >>= 0x22; 0x0043998c add ecx, edx | ecx += edx; 0x0043998e add ecx, ecx | ecx += ecx; 0x00439990 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x00439993 sub eax, ecx | eax -= ecx; 0x00439995 add al, 0x30 | al += 0x30; 0x00439997 mov byte [rsp + 0xe], al | *((rsp + 0xe)) = al; 0x0043999b movsxd rdx, ebp | rdx = (int64_t) ebp; 0x0043999e lea rsi, [rsp + 8] | 0x004399a3 mov rdi, rbx | 0x004399a6 call 0x4045b0 | memcpy (rbx, rsp + 8, rcx); | } 0x004399ab mov eax, 8 | eax = 8; 0x004399b0 add rsp, 0x10 | 0x004399b4 pop rbx | 0x004399b5 pop r14 | 0x004399b7 pop rbp | 0x004399b8 ret | return rax; | }