; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x465b90 */ | #include | ; (fcn) method.BloombergLP::bdlt::Iso8601Util.generateRaw_char__BloombergLP::bsls::TimeInterval_const__BloombergLP::bdlt::Iso8601UtilConfiguration_const_ () | int64_t method_BloombergLP::bdlt::Iso8601Util_generateRaw_char_BloombergLP::bsls::TimeInterval_const_BloombergLP::bdlt::Iso8601UtilConfiguration_const_ (int64_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlt::Iso8601Util::generateRaw(char*, BloombergLP::bsls::TimeInterval const&, BloombergLP::bdlt::Iso8601UtilConfiguration const&) */ 0x00465b90 push rbp | 0x00465b91 push r15 | 0x00465b93 push r14 | 0x00465b95 push r13 | 0x00465b97 push r12 | 0x00465b99 push rbx | 0x00465b9a mov qword [rsp - 8], rdx | *((rsp - 8)) = rdx; 0x00465b9f mov qword [rsp - 0x10], rsi | *((rsp - 0x10)) = rsi; 0x00465ba4 mov r10, qword [rsi] | r10 = *(rsi); 0x00465ba7 movabs rsi, 0x8888888888888889 | rsi = 0x8888888888888889; 0x00465bb1 mov rax, r10 | rax = r10; 0x00465bb4 imul rsi | rdx:rax = rax * rsi; 0x00465bb7 mov rbx, rdx | rbx = rdx; 0x00465bba add rbx, r10 | rbx += r10; 0x00465bbd mov rax, rbx | rax = rbx; 0x00465bc0 shr rax, 0x3f | rax >>= 0x3f; 0x00465bc4 sar rbx, 5 | rbx >>= 5; 0x00465bc8 add rbx, rax | rbx += rax; 0x00465bcb movabs rcx, 0x48d159e26af37c05 | rcx = 0x48d159e26af37c05; 0x00465bd5 mov rax, r10 | rax = r10; 0x00465bd8 imul rcx | rdx:rax = rax * rcx; 0x00465bdb mov rcx, rdx | rcx = rdx; 0x00465bde mov rax, rdx | rax = rdx; 0x00465be1 shr rax, 0x3f | rax >>= 0x3f; 0x00465be5 sar rcx, 0xa | rcx >>= 0xa; 0x00465be9 add rcx, rax | rcx += rax; 0x00465bec mov rax, rbx | rax = rbx; 0x00465bef imul rsi | rdx:rax = rax * rsi; 0x00465bf2 mov r11, rdx | r11 = rdx; 0x00465bf5 movabs rdx, 0x1845c8a0ce512957 | rdx = 0x1845c8a0ce512957; 0x00465bff mov rax, r10 | rax = r10; 0x00465c02 imul rdx | rdx:rax = rax * rdx; 0x00465c05 mov r15, rdx | r15 = rdx; 0x00465c08 mov rax, rdx | rax = rdx; 0x00465c0b shr rax, 0x3f | rax >>= 0x3f; 0x00465c0f sar r15, 0xd | r15 >>= 0xd; 0x00465c13 add r15, rax | r15 += rax; 0x00465c16 movabs rdx, 0x2aaaaaaaaaaaaaab | rdx = 0x2aaaaaaaaaaaaaab; 0x00465c20 mov rax, rcx | rax = rcx; 0x00465c23 imul rdx | rdx:rax = rax * rdx; 0x00465c26 mov r14, rdx | r14 = rdx; 0x00465c29 mov rax, rdx | rax = rdx; 0x00465c2c shr rax, 0x3f | rax >>= 0x3f; 0x00465c30 shr r14, 2 | r14 >>= 2; 0x00465c34 add r14, rax | r14 += rax; 0x00465c37 movabs rdx, 0x4924924924924925 | rdx = 0x4924924924924925; 0x00465c41 mov rax, r15 | rax = r15; 0x00465c44 imul rdx | rdx:rax = rax * rdx; 0x00465c47 mov r12, rdx | r12 = rdx; 0x00465c4a mov rax, rdx | rax = rdx; 0x00465c4d shr rax, 0x3f | rax >>= 0x3f; 0x00465c51 sar r12, 1 | r12 >>= 1; 0x00465c54 add r12, rax | r12 += rax; 0x00465c57 lea rax, [r12*8] | rax = r12*8; 0x00465c5f sub r12, rax | r12 -= rax; 0x00465c62 mov byte [rdi], 0x50 | *(rdi) = 0x50; 0x00465c65 mov rax, rdi | rax = rdi; 0x00465c68 mov qword [rsp - 0x20], rdi | *((rsp - 0x20)) = rdi; 0x00465c6d lea r8, [rdi + 1] | r8 = rdi + 1; 0x00465c71 lea rax, [r10 + 0x93a7f] | rax = r10 + 0x93a7f; 0x00465c78 movabs r9, 0x6666666666666667 | r9 = 0x6666666666666667; 0x00465c82 mov r13, r8 | r13 = r8; 0x00465c85 cmp rax, 0x1274ff | | if (rax < 0x1274ff) { 0x00465c8b jb 0x465d3f | goto label_0; | } 0x00465c91 mov rbp, rbx | 0x00465c94 movabs rdx, 0x377aef2669de1559 | rdx = 0x377aef2669de1559; 0x00465c9e mov rax, r10 | rax = r10; 0x00465ca1 imul rdx | rdx:rax = rax * rdx; 0x00465ca4 mov rbx, rdx | rbx = rdx; 0x00465ca7 mov rax, rdx | rax = rdx; 0x00465caa shr rax, 0x3f | rax >>= 0x3f; 0x00465cae sar rbx, 0x11 | rbx >>= 0x11; 0x00465cb2 add rbx, rax | rbx += rax; 0x00465cb5 xor esi, esi | esi = 0; 0x00465cb7 mov r13, r8 | r13 = r8; 0x00465cba nop word [rax + rax] | | do { 0x00465cc0 mov rax, rbx | rax = rbx; 0x00465cc3 imul r9 | rdx:rax = rax * r9; 0x00465cc6 mov rax, rdx | rax = rdx; 0x00465cc9 shr rax, 0x3f | rax >>= 0x3f; 0x00465ccd sar rdx, 2 | rdx >>= 2; 0x00465cd1 add rdx, rax | rdx += rax; 0x00465cd4 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465cd7 lea edi, [rax + rax*4] | edi = rax * 5; 0x00465cda mov eax, ebx | eax = ebx; 0x00465cdc sub eax, edi | eax -= edi; 0x00465cde add al, 0x30 | al += 0x30; 0x00465ce0 mov byte [r13], al | *(r13) = al; 0x00465ce4 add rbx, 9 | rbx += 9; 0x00465ce8 inc r13 | r13++; 0x00465ceb inc rsi | rsi++; 0x00465cee cmp rbx, 0x12 | 0x00465cf2 mov rbx, rdx | rbx = rdx; 0x00465cf5 ja 0x465cc0 | | } while (rbx > 0x12); 0x00465cf7 cmp rsi, 2 | | if (rsi < 2) { 0x00465cfb jb 0x465d3c | goto label_1; | } 0x00465cfd mov dl, byte [r8] | dl = *(r8); 0x00465d00 mov byte [r8], al | *(r8) = al; 0x00465d03 mov byte [r13 - 1], dl | *((r13 - 1)) = dl; 0x00465d07 cmp rsi, 4 | | if (rsi < 4) { 0x00465d0b jb 0x465d3c | goto label_1; | } 0x00465d0d lea rax, [r13 - 2] | rax = r13 - 2; 0x00465d11 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465d16 add rdx, 3 | rdx += 3; 0x00465d1a nop word [rax + rax] | | do { 0x00465d20 movzx ebx, byte [rax] | ebx = *(rax); 0x00465d23 movzx esi, byte [rdx - 1] | esi = *((rdx - 1)); 0x00465d27 mov byte [rdx - 1], bl | *((rdx - 1)) = bl; 0x00465d2a mov byte [rax], sil | *(rax) = sil; 0x00465d2d dec rax | rax--; 0x00465d30 lea rsi, [rdx + 1] | rsi = rdx + 1; 0x00465d34 cmp rdx, rax | 0x00465d37 mov rdx, rsi | rdx = rsi; 0x00465d3a jb 0x465d20 | | } while (rdx < rax); | label_1: 0x00465d3c mov rbx, rbp | rbx = rbp; | label_0: 0x00465d3f add r11, rbx | r11 += rbx; 0x00465d42 shl r14, 3 | r14 <<= 3; 0x00465d46 add r15, r12 | r15 += r12; 0x00465d49 sub r13, r8 | r13 -= r8; 0x00465d4c test r13d, r13d | 0x00465d4f mov rdi, rbx | rdi = rbx; | if (r13d != 0) { 0x00465d52 je 0x465d61 | 0x00465d54 movsxd rax, r13d | rax = (int64_t) r13d; 0x00465d57 mov byte [r8 + rax], 0x57 | *((r8 + rax)) = 0x57; 0x00465d5c inc r13 | r13++; 0x00465d5f jmp 0x465d64 | | } else { 0x00465d61 xor r13d, r13d | r13d = 0; | } 0x00465d64 mov rax, r11 | rax = r11; 0x00465d67 shr rax, 0x3f | rax >>= 0x3f; 0x00465d6b sar r11, 5 | r11 >>= 5; 0x00465d6f lea rdx, [r14 + r14*2] | rdx = r14 * 3; 0x00465d73 movsxd rsi, r13d | rsi = (int64_t) r13d; 0x00465d76 add r8, rsi | r8 += rsi; 0x00465d79 mov rsi, r8 | rsi = r8; 0x00465d7c test r15, r15 | | if (r15 != 0) { 0x00465d7f je 0x465d8c | 0x00465d81 add r15b, 0x30 | r15b += 0x30; 0x00465d85 mov byte [r8], r15b | *(r8) = r15b; 0x00465d88 lea rsi, [r8 + 1] | rsi = r8 + 1; | } 0x00465d8c add r11, rax | r11 += rax; 0x00465d8f sub rcx, rdx | rcx -= rdx; 0x00465d92 movabs r12, 0x100000000 | r12 = 0x100000000; 0x00465d9c sub rsi, r8 | rsi -= r8; 0x00465d9f test esi, esi | | if (esi != 0) { 0x00465da1 je 0x465dbb | 0x00465da3 mov rbp, rsi | 0x00465da6 shl rbp, 0x20 | rbp <<= 0x20; 0x00465daa movsxd rax, esi | rax = (int64_t) esi; 0x00465dad mov byte [r8 + rax], 0x44 | *((r8 + rax)) = 0x44; 0x00465db2 add rbp, r12 | rbp += r12; 0x00465db5 sar rbp, 0x20 | rbp >>= 0x20; 0x00465db9 jmp 0x465dbd | | } else { 0x00465dbb xor ebp, ebp | ebp = 0; | } 0x00465dbd imul r15, r11, 0x3c | r15 = r11 * 0x3c; 0x00465dc1 mov byte [r8 + rbp], 0x54 | *((r8 + rbp)) = 0x54; 0x00465dc6 lea r11, [r8 + rbp + 1] | r11 = r8 + rbp + 1; 0x00465dcb mov rbx, r11 | rbx = r11; 0x00465dce test rcx, rcx | | if (rcx == 0) { 0x00465dd1 je 0x465e71 | goto label_2; | } 0x00465dd7 mov r8, rdi | r8 = rdi; 0x00465dda xor esi, esi | esi = 0; 0x00465ddc mov rbx, r11 | rbx = r11; 0x00465ddf nop | | do { 0x00465de0 mov rax, rcx | rax = rcx; 0x00465de3 imul r9 | rdx:rax = rax * r9; 0x00465de6 mov rax, rdx | rax = rdx; 0x00465de9 shr rax, 0x3f | rax >>= 0x3f; 0x00465ded sar rdx, 2 | rdx >>= 2; 0x00465df1 add rdx, rax | rdx += rax; 0x00465df4 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465df7 lea edi, [rax + rax*4] | edi = rax * 5; 0x00465dfa mov eax, ecx | eax = ecx; 0x00465dfc sub eax, edi | eax -= edi; 0x00465dfe add al, 0x30 | al += 0x30; 0x00465e00 mov byte [rbx], al | *(rbx) = al; 0x00465e02 add rcx, 9 | rcx += 9; 0x00465e06 inc rbx | rbx++; 0x00465e09 inc rsi | rsi++; 0x00465e0c cmp rcx, 0x12 | 0x00465e10 mov rcx, rdx | rcx = rdx; 0x00465e13 ja 0x465de0 | | } while (rcx > 0x12); 0x00465e15 cmp rsi, 2 | | if (rsi < 2) { 0x00465e19 jb 0x465e6e | goto label_3; | } 0x00465e1b mov cl, byte [r11] | cl = *(r11); 0x00465e1e mov byte [r11], al | *(r11) = al; 0x00465e21 mov byte [rbx - 1], cl | *((rbx - 1)) = cl; 0x00465e24 cmp rsi, 4 | 0x00465e28 mov rdi, r8 | rdi = r8; | if (rsi < 4) { 0x00465e2b jb 0x465e71 | goto label_2; | } 0x00465e2d lea rax, [rbx - 2] | rax = rbx - 2; 0x00465e31 movsxd rcx, r13d | rcx = (int64_t) r13d; 0x00465e34 add rcx, rbp | rcx += rbp; 0x00465e37 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465e3c lea rcx, [rdx + rcx + 4] | rcx = rdx + rcx + 4; 0x00465e41 nop word cs:[rax + rax] | 0x00465e4b nop dword [rax + rax] | | do { 0x00465e50 movzx edx, byte [rax] | edx = *(rax); 0x00465e53 movzx esi, byte [rcx - 1] | esi = *((rcx - 1)); 0x00465e57 mov byte [rcx - 1], dl | *((rcx - 1)) = dl; 0x00465e5a mov byte [rax], sil | *(rax) = sil; 0x00465e5d dec rax | rax--; 0x00465e60 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00465e64 cmp rcx, rax | 0x00465e67 mov rcx, rdx | rcx = rdx; 0x00465e6a jb 0x465e50 | | } while (rcx < rax); 0x00465e6c jmp 0x465e71 | goto label_2; | label_3: 0x00465e6e mov rdi, r8 | rdi = r8; | label_2: 0x00465e71 mov rcx, rdi | rcx = r8; 0x00465e74 sub rcx, r15 | rcx -= r15; 0x00465e77 sub rbx, r11 | rbx -= r11; 0x00465e7a test ebx, ebx | 0x00465e7c mov qword [rsp - 0x18], rbp | *((rsp - 0x18)) = rbp; | if (ebx != 0) { 0x00465e81 je 0x465e9b | 0x00465e83 mov r15, rbx | r15 = rbx; 0x00465e86 shl r15, 0x20 | r15 <<= 0x20; 0x00465e8a movsxd rax, ebx | rax = (int64_t) ebx; 0x00465e8d mov byte [r11 + rax], 0x48 | *((r11 + rax)) = 0x48; 0x00465e92 add r15, r12 | r15 += r12; 0x00465e95 sar r15, 0x20 | r15 >>= 0x20; 0x00465e99 jmp 0x465e9e | | } else { 0x00465e9b xor r15d, r15d | r15d = 0; | } 0x00465e9e imul r8, rdi, 0x3c | r8 = rdi * 0x3c; 0x00465ea2 add r11, r15 | r11 += r15; 0x00465ea5 mov r14, r11 | r14 = r11; 0x00465ea8 test rcx, rcx | | if (rcx == 0) { 0x00465eab je 0x465f77 | goto label_4; | } 0x00465eb1 mov rax, qword [rsp - 0x18] | rax = *((rsp - 0x18)); 0x00465eb6 lea rbx, [rax + r15] | rbx = rax + r15; 0x00465eba movsxd rax, r13d | rax = (int64_t) r13d; 0x00465ebd add rax, rbx | rax += rbx; 0x00465ec0 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465ec5 lea rsi, [rdx + rax + 2] | rsi = rdx + rax + 2; 0x00465eca xor ebp, ebp | ebp = 0; 0x00465ecc nop dword [rax] | | do { 0x00465ed0 mov rax, rcx | rax = rcx; 0x00465ed3 imul r9 | rdx:rax = rax * r9; 0x00465ed6 mov rax, rdx | rax = rdx; 0x00465ed9 shr rax, 0x3f | rax >>= 0x3f; 0x00465edd sar rdx, 2 | rdx >>= 2; 0x00465ee1 add rdx, rax | rdx += rax; 0x00465ee4 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465ee7 lea eax, [rax + rax*4] | eax = rax * 5; 0x00465eea mov edi, ecx | edi = ecx; 0x00465eec sub edi, eax | edi -= eax; 0x00465eee add dil, 0x30 | dil += 0x30; 0x00465ef2 mov byte [rsi + rbp], dil | *((rsi + rbp)) = dil; 0x00465ef6 inc rbp | rbp++; 0x00465ef9 add rcx, 9 | rcx += 9; 0x00465efd cmp rcx, 0x12 | 0x00465f01 mov rcx, rdx | rcx = rdx; 0x00465f04 ja 0x465ed0 | | } while (rcx > 0x12); 0x00465f06 movsxd rax, r13d | rax = (int64_t) r13d; 0x00465f09 add rax, rbx | rax += rbx; 0x00465f0c add rax, qword [rsp - 0x20] | rax += *((rsp - 0x20)); 0x00465f11 lea r14, [rbp + rax + 2] | r14 = rbp + rax + 2; 0x00465f16 cmp rbp, 1 | | if (rbp == 1) { 0x00465f1a je 0x465f77 | goto label_4; | } 0x00465f1c lea rax, [rbp - 1] | rax = rbp - 1; 0x00465f20 movsxd rdx, r13d | rdx = (int64_t) r13d; 0x00465f23 add rdx, rbx | rdx += rbx; 0x00465f26 add rdx, qword [rsp - 0x20] | rdx += *((rsp - 0x20)); 0x00465f2b mov cl, byte [r11] | cl = *(r11); 0x00465f2e mov byte [r11], dil | *(r11) = dil; 0x00465f31 mov byte [rbp + rdx + 1], cl | *((rbp + rdx + 1)) = cl; 0x00465f35 cmp rax, 3 | | if (rax < 3) { 0x00465f39 jb 0x465f77 | goto label_4; | } 0x00465f3b add rbx, qword [rsp - 0x20] | rbx += *((rsp - 0x20)); 0x00465f40 add rbp, rbx | rbp += rbx; 0x00465f43 movsxd rcx, r13d | rcx = (int64_t) r13d; 0x00465f46 nop word cs:[rax + rax] | | do { 0x00465f50 movzx edx, byte [rbp + rcx] | edx = *((rbp + rcx)); 0x00465f55 movzx eax, byte [rbx + rcx + 3] | eax = *((rbx + rcx + 3)); 0x00465f5a mov byte [rbx + rcx + 3], dl | *((rbx + rcx + 3)) = dl; 0x00465f5e mov byte [rbp + rcx], al | *((rbp + rcx)) = al; 0x00465f62 lea rax, [rbx + rcx + 4] | rax = rbx + rcx + 4; 0x00465f67 lea rdx, [rbp + rcx - 1] | rdx = rbp + rcx - 1; 0x00465f6c dec rbp | rbp--; 0x00465f6f inc rbx | rbx++; 0x00465f72 cmp rax, rdx | 0x00465f75 jb 0x465f50 | | } while (rax < rdx); | label_4: 0x00465f77 sub r10, r8 | r10 -= r8; 0x00465f7a sub r14, r11 | r14 -= r11; 0x00465f7d test r14d, r14d | | if (r14d != 0) { 0x00465f80 je 0x465f9a | 0x00465f82 mov rsi, r14 | rsi = r14; 0x00465f85 shl rsi, 0x20 | rsi <<= 0x20; 0x00465f89 movsxd rax, r14d | rax = (int64_t) r14d; 0x00465f8c mov byte [r11 + rax], 0x4d | *((r11 + rax)) = 0x4d; 0x00465f91 add rsi, r12 | rsi += r12; 0x00465f94 sar rsi, 0x20 | rsi >>= 0x20; 0x00465f98 jmp 0x465f9c | | } else { 0x00465f9a xor esi, esi | esi = 0; | } 0x00465f9c add r11, rsi | r11 += rsi; 0x00465f9f test r10, r10 | 0x00465fa2 mov rax, qword [rsp - 0x18] | rax = *((rsp - 0x18)); | if (r10 == 0) { 0x00465fa7 je 0x46608d | goto label_5; | } 0x00465fad lea r8, [rax + r15] | r8 = rax + r15; 0x00465fb1 add r8, rsi | r8 += rsi; 0x00465fb4 mov rcx, qword [rsp - 0x20] | rcx = *((rsp - 0x20)); 0x00465fb9 lea rbp, [rcx + r8] | rbp = rcx + r8; 0x00465fbd movsxd rax, r13d | rax = (int64_t) r13d; 0x00465fc0 add rax, r8 | rax += r8; 0x00465fc3 lea rcx, [rcx + rax + 2] | rcx = rcx + rax + 2; 0x00465fc8 mov r14, 0xffffffffffffffff | r14 = 0xffffffffffffffff; 0x00465fcf xor ebx, ebx | ebx = 0; 0x00465fd1 nop word cs:[rax + rax] | 0x00465fdb nop dword [rax + rax] | | do { 0x00465fe0 mov rax, r10 | rax = r10; 0x00465fe3 imul r9 | rdx:rax = rax * r9; 0x00465fe6 mov rax, rdx | rax = rdx; 0x00465fe9 shr rax, 0x3f | rax >>= 0x3f; 0x00465fed sar rdx, 2 | rdx >>= 2; 0x00465ff1 add rdx, rax | rdx += rax; 0x00465ff4 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465ff7 lea edi, [rax + rax*4] | edi = rax * 5; 0x00465ffa mov eax, r10d | eax = r10d; 0x00465ffd sub eax, edi | eax -= edi; 0x00465fff add al, 0x30 | al += 0x30; 0x00466001 mov byte [rcx + r14 + 1], al | *((rcx + r14 + 1)) = al; 0x00466006 add r10, 9 | r10 += 9; 0x0046600a inc rbp | rbp++; 0x0046600d inc r14 | r14++; 0x00466010 add rbx, r12 | rbx += r12; 0x00466013 cmp r10, 0x12 | 0x00466017 mov r10, rdx | r10 = rdx; 0x0046601a ja 0x465fe0 | | } while (r10 > 0x12); 0x0046601c test r14, r14 | | if (r14 == 0) { 0x0046601f je 0x466087 | goto label_6; | } 0x00466021 movsxd rdx, r13d | rdx = (int64_t) r13d; 0x00466024 add r8, rdx | r8 += rdx; 0x00466027 mov rcx, qword [rsp - 0x20] | rcx = *((rsp - 0x20)); 0x0046602c lea rcx, [rcx + r8 + 2] | rcx = rcx + r8 + 2; 0x00466031 mov dl, byte [r11] | dl = *(r11); 0x00466034 mov byte [r11], al | *(r11) = al; 0x00466037 mov byte [rcx + r14], dl | *((rcx + r14)) = dl; 0x0046603b cmp r14, 3 | | if (r14 < 3) { 0x0046603f jb 0x466087 | goto label_6; | } 0x00466041 movsxd rax, r13d | rax = (int64_t) r13d; 0x00466044 add rsi, r15 | rsi += r15; 0x00466047 add rsi, qword [rsp - 0x18] | rsi += *((rsp - 0x18)); 0x0046604c add rsi, qword [rsp - 0x20] | rsi += *((rsp - 0x20)); 0x00466051 nop word cs:[rax + rax] | 0x0046605b nop dword [rax + rax] | | do { 0x00466060 movzx edx, byte [rbp + rax] | edx = *((rbp + rax)); 0x00466065 movzx ecx, byte [rsi + rax + 3] | ecx = *((rsi + rax + 3)); 0x0046606a mov byte [rsi + rax + 3], dl | *((rsi + rax + 3)) = dl; 0x0046606e mov byte [rbp + rax], cl | *((rbp + rax)) = cl; 0x00466072 lea rcx, [rsi + rax + 4] | rcx = rsi + rax + 4; 0x00466077 lea rdx, [rbp + rax - 1] | rdx = rbp + rax - 1; 0x0046607c dec rbp | rbp--; 0x0046607f inc rsi | rsi++; 0x00466082 cmp rcx, rdx | 0x00466085 jb 0x466060 | | } while (rcx < rdx); | label_6: 0x00466087 sar rbx, 0x20 | rbx >>= 0x20; 0x0046608b jmp 0x466096 | goto label_7; | label_5: 0x0046608d mov byte [r11], 0x30 | *(r11) = 0x30; 0x00466091 mov ebx, 1 | ebx = 1; | label_7: 0x00466096 add r11, rbx | r11 += rbx; 0x00466099 mov rax, qword [rsp - 8] | rax = *((rsp - 8)); 0x0046609e mov eax, dword [rax] | eax = *(rax); 0x004660a0 mov ecx, eax | ecx = *(rax); 0x004660a2 and ecx, 7 | ecx &= 7; 0x004660a5 test ecx, ecx | | if (ecx == 0) { 0x004660a7 je 0x4662d6 | goto label_8; | } 0x004660ad test al, 0x10 | 0x004660af sete al | al = ((al & 0x10) == 0) ? 1 : 0; 0x004660b2 add al, al | al += al; 0x004660b4 or al, 0x2c | al |= 0x2c; 0x004660b6 mov byte [r11], al | *(r11) = al; 0x004660b9 mov rax, qword [rsp - 0x10] | rax = *((rsp - 0x10)); 0x004660be mov esi, dword [rax + 8] | esi = *((rax + 8)); 0x004660c1 mov edx, 9 | edx = 9; 0x004660c6 sub edx, ecx | edx -= ecx; 0x004660c8 mov eax, edx | eax = edx; 0x004660ca and eax, 3 | eax &= 3; 0x004660cd cmp ecx, 5 | | if (ecx > 5) { 0x004660d0 ja 0x4660fc | goto label_9; | } 0x004660d2 and edx, 0xfffffffc | edx &= 0xfffffffc; 0x004660d5 neg edx | edx = -edx; 0x004660d7 nop word [rax + rax] | | do { 0x004660e0 movsxd rsi, esi | rsi = (int64_t) esi; 0x004660e3 imul rsi, rsi, 0x68db8bad | rsi *= 0x68db8bad; 0x004660ea mov rdi, rsi | rdi = rsi; 0x004660ed shr rdi, 0x3f | rdi >>= 0x3f; 0x004660f1 sar rsi, 0x2c | rsi >>= 0x2c; 0x004660f5 add esi, edi | esi += edi; 0x004660f7 add edx, 4 | edx += 4; 0x004660fa jne 0x4660e0 | | } while (edx != 0); | label_9: 0x004660fc test eax, eax | | if (eax == 0) { 0x004660fe je 0x46611b | goto label_10; | } | do { 0x00466100 movsxd rdx, esi | rdx = (int64_t) esi; 0x00466103 imul rsi, rdx, 0x66666667 | rsi = rdx * 0x66666667; 0x0046610a mov rdx, rsi | rdx = rsi; 0x0046610d shr rdx, 0x3f | rdx >>= 0x3f; 0x00466111 sar rsi, 0x22 | rsi >>= 0x22; 0x00466115 add esi, edx | esi += edx; 0x00466117 dec eax | eax--; 0x00466119 jne 0x466100 | | } while (eax != 0); | label_10: 0x0046611b lea rdx, [r11 + 1] | rdx = r11 + 1; 0x0046611f lea rax, [rcx + 1] | rax = rcx + 1; 0x00466123 movsxd rsi, esi | rsi = (int64_t) esi; 0x00466126 imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x0046612d mov rbp, rdi | 0x00466130 shr rbp, 0x3f | rbp >>= 0x3f; 0x00466134 sar rdi, 0x22 | rdi >>= 0x22; 0x00466138 add edi, ebp | edi += ebp; 0x0046613a lea ebp, [rdi + rdi] | ebp = rdi + rdi; 0x0046613d lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x00466141 mov ebx, esi | ebx = esi; 0x00466143 sub ebx, ebp | ebx -= ebp; 0x00466145 add bl, 0x30 | bl += 0x30; 0x00466148 mov byte [rcx + r11], bl | *((rcx + r11)) = bl; 0x0046614c cmp ecx, 1 | | if (ecx > 1) { 0x0046614f jbe 0x4662cd | 0x00466155 movsxd rbp, edi | rbp = (int64_t) edi; 0x00466158 imul rbp, rbp, 0x66666667 | rbp *= 0x66666667; 0x0046615f mov rbx, rbp | rbx = rbp; 0x00466162 shr rbx, 0x3f | rbx >>= 0x3f; 0x00466166 sar rbp, 0x22 | rbp >>= 0x22; 0x0046616a add ebp, ebx | ebp += ebx; 0x0046616c add ebp, ebp | ebp += ebp; 0x0046616e lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x00466172 sub edi, ebp | edi -= ebp; 0x00466174 add dil, 0x30 | dil += 0x30; 0x00466178 mov byte [rax + r11 - 2], dil | *((rax + r11 - 2)) = dil; 0x0046617d cmp ecx, 2 | | if (ecx == 2) { 0x00466180 je 0x4662cd | goto label_11; | } 0x00466186 imul rdi, rsi, 0x51eb851f | rdi = rsi * 0x51eb851f; 0x0046618d mov rbp, rdi | 0x00466190 shr rbp, 0x3f | rbp >>= 0x3f; 0x00466194 sar rdi, 0x25 | rdi >>= 0x25; 0x00466198 add edi, ebp | edi += ebp; 0x0046619a movsxd rdi, edi | rdi = (int64_t) edi; 0x0046619d imul rbp, rdi, 0x66666667 | rbp = rdi * 0x66666667; 0x004661a4 mov rbx, rbp | rbx = rbp; 0x004661a7 shr rbx, 0x3f | rbx >>= 0x3f; 0x004661ab sar rbp, 0x22 | rbp >>= 0x22; 0x004661af add ebp, ebx | ebp += ebx; 0x004661b1 add ebp, ebp | ebp += ebp; 0x004661b3 lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x004661b7 sub edi, ebp | edi -= ebp; 0x004661b9 add dil, 0x30 | dil += 0x30; 0x004661bd mov byte [rax + r11 - 3], dil | *((rax + r11 - 3)) = dil; 0x004661c2 cmp ecx, 4 | | if (ecx < 4) { 0x004661c5 jb 0x4662cd | goto label_11; | } 0x004661cb imul rdi, rsi, 0x10624dd3 | rdi = rsi * 0x10624dd3; 0x004661d2 mov rbp, rdi | 0x004661d5 shr rbp, 0x3f | rbp >>= 0x3f; 0x004661d9 sar rdi, 0x26 | rdi >>= 0x26; 0x004661dd add edi, ebp | edi += ebp; 0x004661df movsxd rdi, edi | rdi = (int64_t) edi; 0x004661e2 imul rbp, rdi, 0x66666667 | rbp = rdi * 0x66666667; 0x004661e9 mov rbx, rbp | rbx = rbp; 0x004661ec shr rbx, 0x3f | rbx >>= 0x3f; 0x004661f0 sar rbp, 0x22 | rbp >>= 0x22; 0x004661f4 add ebp, ebx | ebp += ebx; 0x004661f6 add ebp, ebp | ebp += ebp; 0x004661f8 lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x004661fc sub edi, ebp | edi -= ebp; 0x004661fe add dil, 0x30 | dil += 0x30; 0x00466202 mov byte [rax + r11 - 4], dil | *((rax + r11 - 4)) = dil; 0x00466207 cmp ecx, 4 | | if (ecx == 4) { 0x0046620a je 0x4662cd | goto label_11; | } 0x00466210 imul rdi, rsi, 0x68db8bad | rdi = rsi * 0x68db8bad; 0x00466217 mov rbp, rdi | 0x0046621a shr rbp, 0x3f | rbp >>= 0x3f; 0x0046621e sar rdi, 0x2c | rdi >>= 0x2c; 0x00466222 add edi, ebp | edi += ebp; 0x00466224 movsxd rdi, edi | rdi = (int64_t) edi; 0x00466227 imul rbp, rdi, 0x66666667 | rbp = rdi * 0x66666667; 0x0046622e mov rbx, rbp | rbx = rbp; 0x00466231 shr rbx, 0x3f | rbx >>= 0x3f; 0x00466235 sar rbp, 0x22 | rbp >>= 0x22; 0x00466239 add ebp, ebx | ebp += ebx; 0x0046623b add ebp, ebp | ebp += ebp; 0x0046623d lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x00466241 sub edi, ebp | edi -= ebp; 0x00466243 add dil, 0x30 | dil += 0x30; 0x00466247 mov byte [rax + r11 - 5], dil | *((rax + r11 - 5)) = dil; 0x0046624c cmp ecx, 6 | | if (ecx < 6) { 0x0046624f jb 0x4662cd | goto label_11; | } 0x00466251 imul rdi, rsi, 0x14f8b589 | rdi = rsi * 0x14f8b589; 0x00466258 mov rbp, rdi | 0x0046625b shr rbp, 0x3f | rbp >>= 0x3f; 0x0046625f sar rdi, 0x2d | rdi >>= 0x2d; 0x00466263 add edi, ebp | edi += ebp; 0x00466265 movsxd rdi, edi | rdi = (int64_t) edi; 0x00466268 imul rbp, rdi, 0x66666667 | rbp = rdi * 0x66666667; 0x0046626f mov rbx, rbp | rbx = rbp; 0x00466272 shr rbx, 0x3f | rbx >>= 0x3f; 0x00466276 sar rbp, 0x22 | rbp >>= 0x22; 0x0046627a add ebp, ebx | ebp += ebx; 0x0046627c add ebp, ebp | ebp += ebp; 0x0046627e lea ebp, [rbp + rbp*4] | ebp = rbp + rbp*4; 0x00466282 sub edi, ebp | edi -= ebp; 0x00466284 add dil, 0x30 | dil += 0x30; 0x00466288 mov byte [rax + r11 - 6], dil | *((rax + r11 - 6)) = dil; 0x0046628d cmp ecx, 6 | | if (ecx == 6) { 0x00466290 je 0x4662cd | goto label_11; | } 0x00466292 imul rsi, rsi, 0x431bde83 | rsi *= 0x431bde83; 0x00466299 mov rdi, rsi | rdi = rsi; 0x0046629c shr rdi, 0x3f | rdi >>= 0x3f; 0x004662a0 sar rsi, 0x32 | rsi >>= 0x32; 0x004662a4 add esi, edi | esi += edi; 0x004662a6 movsxd rsi, esi | rsi = (int64_t) esi; 0x004662a9 imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x004662b0 mov rbp, rdi | 0x004662b3 shr rbp, 0x3f | rbp >>= 0x3f; 0x004662b7 shr rdi, 0x22 | rdi >>= 0x22; 0x004662bb add edi, ebp | edi += ebp; 0x004662bd add edi, edi | edi += edi; 0x004662bf lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x004662c2 sub esi, edi | esi -= edi; 0x004662c4 add sil, 0x30 | sil += 0x30; 0x004662c8 mov byte [rax + r11 - 7], sil | *((rax + r11 - 7)) = sil; | } | label_11: 0x004662cd mov byte [rdx + rcx], 0x53 | *((rdx + rcx)) = 0x53; 0x004662d1 add rax, rdx | rax += rdx; 0x004662d4 jmp 0x4662e0 | goto label_12; | label_8: 0x004662d6 mov byte [r11], 0x53 | *(r11) = 0x53; 0x004662da inc r11 | r11++; 0x004662dd mov rax, r11 | rax = r11; | label_12: 0x004662e0 sub eax, dword [rsp - 0x20] | eax -= *((rsp - 0x20)); 0x004662e4 pop rbx | 0x004662e5 pop r12 | r12 = rbx; 0x004662e7 pop r13 | r13 = rbx; 0x004662e9 pop r14 | r14 = rbx; 0x004662eb pop r15 | r15 = rbx; 0x004662ed pop rbp | 0x004662ee ret | return rax; | }