; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x465c20 */ | #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&) */ 0x00465c20 push rbp | 0x00465c21 push r15 | 0x00465c23 push r14 | 0x00465c25 push r13 | 0x00465c27 push r12 | 0x00465c29 push rbx | 0x00465c2a mov qword [rsp - 8], rdx | *((rsp - 8)) = rdx; 0x00465c2f mov qword [rsp - 0x10], rsi | *((rsp - 0x10)) = rsi; 0x00465c34 mov r11, qword [rsi] | r11 = *(rsi); 0x00465c37 movabs rsi, 0x8888888888888889 | rsi = 0x8888888888888889; 0x00465c41 mov rax, r11 | rax = r11; 0x00465c44 imul rsi | rdx:rax = rax * rsi; 0x00465c47 mov rbx, rdx | rbx = rdx; 0x00465c4a add rbx, r11 | rbx += r11; 0x00465c4d mov rax, rbx | rax = rbx; 0x00465c50 shr rax, 0x3f | rax >>= 0x3f; 0x00465c54 sar rbx, 5 | rbx >>= 5; 0x00465c58 add rbx, rax | rbx += rax; 0x00465c5b movabs rcx, 0x48d159e26af37c05 | rcx = 0x48d159e26af37c05; 0x00465c65 mov rax, r11 | rax = r11; 0x00465c68 imul rcx | rdx:rax = rax * rcx; 0x00465c6b mov rcx, rdx | rcx = rdx; 0x00465c6e mov rax, rdx | rax = rdx; 0x00465c71 shr rax, 0x3f | rax >>= 0x3f; 0x00465c75 sar rcx, 0xa | rcx >>= 0xa; 0x00465c79 add rcx, rax | rcx += rax; 0x00465c7c mov rax, rbx | rax = rbx; 0x00465c7f imul rsi | rdx:rax = rax * rsi; 0x00465c82 mov r9, rdx | r9 = rdx; 0x00465c85 movabs rdx, 0x1845c8a0ce512957 | rdx = 0x1845c8a0ce512957; 0x00465c8f mov rax, r11 | rax = r11; 0x00465c92 imul rdx | rdx:rax = rax * rdx; 0x00465c95 mov r15, rdx | r15 = rdx; 0x00465c98 mov rax, rdx | rax = rdx; 0x00465c9b shr rax, 0x3f | rax >>= 0x3f; 0x00465c9f sar r15, 0xd | r15 >>= 0xd; 0x00465ca3 add r15, rax | r15 += rax; 0x00465ca6 movabs rdx, 0x2aaaaaaaaaaaaaab | rdx = 0x2aaaaaaaaaaaaaab; 0x00465cb0 mov rax, rcx | rax = rcx; 0x00465cb3 imul rdx | rdx:rax = rax * rdx; 0x00465cb6 mov r14, rdx | r14 = rdx; 0x00465cb9 mov rax, rdx | rax = rdx; 0x00465cbc shr rax, 0x3f | rax >>= 0x3f; 0x00465cc0 shr r14, 2 | r14 >>= 2; 0x00465cc4 add r14, rax | r14 += rax; 0x00465cc7 movabs rdx, 0x4924924924924925 | rdx = 0x4924924924924925; 0x00465cd1 mov rax, r15 | rax = r15; 0x00465cd4 imul rdx | rdx:rax = rax * rdx; 0x00465cd7 mov r12, rdx | r12 = rdx; 0x00465cda mov rax, rdx | rax = rdx; 0x00465cdd shr rax, 0x3f | rax >>= 0x3f; 0x00465ce1 sar r12, 1 | r12 >>= 1; 0x00465ce4 add r12, rax | r12 += rax; 0x00465ce7 lea rax, [r12*8] | rax = r12*8; 0x00465cef sub r12, rax | r12 -= rax; 0x00465cf2 mov byte [rdi], 0x50 | *(rdi) = 0x50; 0x00465cf5 mov rax, rdi | rax = rdi; 0x00465cf8 mov qword [rsp - 0x20], rdi | *((rsp - 0x20)) = rdi; 0x00465cfd lea r8, [rdi + 1] | r8 = rdi + 1; 0x00465d01 lea rax, [r11 + 0x93a7f] | rax = r11 + 0x93a7f; 0x00465d08 movabs r10, 0x6666666666666667 | r10 = 0x6666666666666667; 0x00465d12 mov r13, r8 | r13 = r8; 0x00465d15 cmp rax, 0x1274ff | | if (rax < 0x1274ff) { 0x00465d1b jb 0x465dbf | goto label_0; | } 0x00465d21 mov rbp, rbx | 0x00465d24 movabs rdx, 0x377aef2669de1559 | rdx = 0x377aef2669de1559; 0x00465d2e mov rax, r11 | rax = r11; 0x00465d31 mul rdx | rdx:rax = rax * rdx; 0x00465d34 mov rbx, rdx | rbx = rdx; 0x00465d37 shr rbx, 0x11 | rbx >>= 0x11; 0x00465d3b xor esi, esi | esi = 0; 0x00465d3d mov r13, r8 | r13 = r8; | do { 0x00465d40 mov rax, rbx | rax = rbx; 0x00465d43 imul r10 | rdx:rax = rax * r10; 0x00465d46 mov rax, rdx | rax = rdx; 0x00465d49 shr rax, 0x3f | rax >>= 0x3f; 0x00465d4d sar rdx, 2 | rdx >>= 2; 0x00465d51 add rdx, rax | rdx += rax; 0x00465d54 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465d57 lea edi, [rax + rax*4] | edi = rax * 5; 0x00465d5a mov eax, ebx | eax = ebx; 0x00465d5c sub eax, edi | eax -= edi; 0x00465d5e add al, 0x30 | al += 0x30; 0x00465d60 mov byte [r13], al | *(r13) = al; 0x00465d64 add rbx, 9 | rbx += 9; 0x00465d68 inc r13 | r13++; 0x00465d6b inc rsi | rsi++; 0x00465d6e cmp rbx, 0x12 | 0x00465d72 mov rbx, rdx | rbx = rdx; 0x00465d75 ja 0x465d40 | | } while (rbx > 0x12); 0x00465d77 cmp rsi, 2 | | if (rsi < 2) { 0x00465d7b jb 0x465dbc | goto label_1; | } 0x00465d7d mov dl, byte [r8] | dl = *(r8); 0x00465d80 mov byte [r8], al | *(r8) = al; 0x00465d83 mov byte [r13 - 1], dl | *((r13 - 1)) = dl; 0x00465d87 cmp rsi, 4 | | if (rsi < 4) { 0x00465d8b jb 0x465dbc | goto label_1; | } 0x00465d8d lea rax, [r13 - 2] | rax = r13 - 2; 0x00465d91 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465d96 add rdx, 3 | rdx += 3; 0x00465d9a nop word [rax + rax] | | do { 0x00465da0 movzx ebx, byte [rax] | ebx = *(rax); 0x00465da3 movzx esi, byte [rdx - 1] | esi = *((rdx - 1)); 0x00465da7 mov byte [rdx - 1], bl | *((rdx - 1)) = bl; 0x00465daa mov byte [rax], sil | *(rax) = sil; 0x00465dad dec rax | rax--; 0x00465db0 lea rsi, [rdx + 1] | rsi = rdx + 1; 0x00465db4 cmp rdx, rax | 0x00465db7 mov rdx, rsi | rdx = rsi; 0x00465dba jb 0x465da0 | | } while (rdx < rax); | label_1: 0x00465dbc mov rbx, rbp | rbx = rbp; | label_0: 0x00465dbf add r9, rbx | r9 += rbx; 0x00465dc2 shl r14, 3 | r14 <<= 3; 0x00465dc6 add r15, r12 | r15 += r12; 0x00465dc9 sub r13, r8 | r13 -= r8; 0x00465dcc test r13d, r13d | 0x00465dcf mov rdi, rbx | rdi = rbx; | if (r13d != 0) { 0x00465dd2 je 0x465de1 | 0x00465dd4 movsxd rax, r13d | rax = (int64_t) r13d; 0x00465dd7 mov byte [r8 + rax], 0x57 | *((r8 + rax)) = 0x57; 0x00465ddc inc r13 | r13++; 0x00465ddf jmp 0x465de4 | | } else { 0x00465de1 xor r13d, r13d | r13d = 0; | } 0x00465de4 mov rax, r9 | rax = r9; 0x00465de7 shr rax, 0x3f | rax >>= 0x3f; 0x00465deb sar r9, 5 | r9 >>= 5; 0x00465def lea rdx, [r14 + r14*2] | rdx = r14 * 3; 0x00465df3 movsxd rsi, r13d | rsi = (int64_t) r13d; 0x00465df6 add r8, rsi | r8 += rsi; 0x00465df9 mov rsi, r8 | rsi = r8; 0x00465dfc test r15, r15 | | if (r15 != 0) { 0x00465dff je 0x465e0c | 0x00465e01 add r15b, 0x30 | r15b += 0x30; 0x00465e05 mov byte [r8], r15b | *(r8) = r15b; 0x00465e08 lea rsi, [r8 + 1] | rsi = r8 + 1; | } 0x00465e0c add r9, rax | r9 += rax; 0x00465e0f sub rcx, rdx | rcx -= rdx; 0x00465e12 movabs r12, 0x100000000 | r12 = 0x100000000; 0x00465e1c sub rsi, r8 | rsi -= r8; 0x00465e1f test esi, esi | | if (esi != 0) { 0x00465e21 je 0x465e3b | 0x00465e23 mov rbp, rsi | 0x00465e26 shl rbp, 0x20 | rbp <<= 0x20; 0x00465e2a movsxd rax, esi | rax = (int64_t) esi; 0x00465e2d mov byte [r8 + rax], 0x44 | *((r8 + rax)) = 0x44; 0x00465e32 add rbp, r12 | rbp += r12; 0x00465e35 sar rbp, 0x20 | rbp >>= 0x20; 0x00465e39 jmp 0x465e3d | | } else { 0x00465e3b xor ebp, ebp | ebp = 0; | } 0x00465e3d imul r15, r9, 0x3c | r15 = r9 * 0x3c; 0x00465e41 mov byte [r8 + rbp], 0x54 | *((r8 + rbp)) = 0x54; 0x00465e46 lea r9, [r8 + rbp + 1] | r9 = r8 + rbp + 1; 0x00465e4b mov rbx, r9 | rbx = r9; 0x00465e4e test rcx, rcx | | if (rcx == 0) { 0x00465e51 je 0x465ef1 | goto label_2; | } 0x00465e57 mov r8, rdi | r8 = rdi; 0x00465e5a xor esi, esi | esi = 0; 0x00465e5c mov rbx, r9 | rbx = r9; 0x00465e5f nop | | do { 0x00465e60 mov rax, rcx | rax = rcx; 0x00465e63 imul r10 | rdx:rax = rax * r10; 0x00465e66 mov rax, rdx | rax = rdx; 0x00465e69 shr rax, 0x3f | rax >>= 0x3f; 0x00465e6d sar rdx, 2 | rdx >>= 2; 0x00465e71 add rdx, rax | rdx += rax; 0x00465e74 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465e77 lea edi, [rax + rax*4] | edi = rax * 5; 0x00465e7a mov eax, ecx | eax = ecx; 0x00465e7c sub eax, edi | eax -= edi; 0x00465e7e add al, 0x30 | al += 0x30; 0x00465e80 mov byte [rbx], al | *(rbx) = al; 0x00465e82 add rcx, 9 | rcx += 9; 0x00465e86 inc rbx | rbx++; 0x00465e89 inc rsi | rsi++; 0x00465e8c cmp rcx, 0x12 | 0x00465e90 mov rcx, rdx | rcx = rdx; 0x00465e93 ja 0x465e60 | | } while (rcx > 0x12); 0x00465e95 cmp rsi, 2 | | if (rsi < 2) { 0x00465e99 jb 0x465eee | goto label_3; | } 0x00465e9b mov cl, byte [r9] | cl = *(r9); 0x00465e9e mov byte [r9], al | *(r9) = al; 0x00465ea1 mov byte [rbx - 1], cl | *((rbx - 1)) = cl; 0x00465ea4 cmp rsi, 4 | 0x00465ea8 mov rdi, r8 | rdi = r8; | if (rsi < 4) { 0x00465eab jb 0x465ef1 | goto label_2; | } 0x00465ead lea rax, [rbx - 2] | rax = rbx - 2; 0x00465eb1 movsxd rcx, r13d | rcx = (int64_t) r13d; 0x00465eb4 add rcx, rbp | rcx += rbp; 0x00465eb7 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465ebc lea rcx, [rdx + rcx + 4] | rcx = rdx + rcx + 4; 0x00465ec1 nop word cs:[rax + rax] | 0x00465ecb nop dword [rax + rax] | | do { 0x00465ed0 movzx edx, byte [rax] | edx = *(rax); 0x00465ed3 movzx esi, byte [rcx - 1] | esi = *((rcx - 1)); 0x00465ed7 mov byte [rcx - 1], dl | *((rcx - 1)) = dl; 0x00465eda mov byte [rax], sil | *(rax) = sil; 0x00465edd dec rax | rax--; 0x00465ee0 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00465ee4 cmp rcx, rax | 0x00465ee7 mov rcx, rdx | rcx = rdx; 0x00465eea jb 0x465ed0 | | } while (rcx < rax); 0x00465eec jmp 0x465ef1 | goto label_2; | label_3: 0x00465eee mov rdi, r8 | rdi = r8; | label_2: 0x00465ef1 mov rcx, rdi | rcx = r8; 0x00465ef4 sub rcx, r15 | rcx -= r15; 0x00465ef7 sub rbx, r9 | rbx -= r9; 0x00465efa test ebx, ebx | 0x00465efc mov qword [rsp - 0x18], rbp | *((rsp - 0x18)) = rbp; | if (ebx != 0) { 0x00465f01 je 0x465f1b | 0x00465f03 mov r15, rbx | r15 = rbx; 0x00465f06 shl r15, 0x20 | r15 <<= 0x20; 0x00465f0a movsxd rax, ebx | rax = (int64_t) ebx; 0x00465f0d mov byte [r9 + rax], 0x48 | *((r9 + rax)) = 0x48; 0x00465f12 add r15, r12 | r15 += r12; 0x00465f15 sar r15, 0x20 | r15 >>= 0x20; 0x00465f19 jmp 0x465f1e | | } else { 0x00465f1b xor r15d, r15d | r15d = 0; | } 0x00465f1e imul r8, rdi, 0x3c | r8 = rdi * 0x3c; 0x00465f22 add r9, r15 | r9 += r15; 0x00465f25 mov r14, r9 | r14 = r9; 0x00465f28 test rcx, rcx | | if (rcx == 0) { 0x00465f2b je 0x465ff7 | goto label_4; | } 0x00465f31 mov rax, qword [rsp - 0x18] | rax = *((rsp - 0x18)); 0x00465f36 lea rbx, [rax + r15] | rbx = rax + r15; 0x00465f3a movsxd rax, r13d | rax = (int64_t) r13d; 0x00465f3d add rax, rbx | rax += rbx; 0x00465f40 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x00465f45 lea rsi, [rdx + rax + 2] | rsi = rdx + rax + 2; 0x00465f4a xor ebp, ebp | ebp = 0; 0x00465f4c nop dword [rax] | | do { 0x00465f50 mov rax, rcx | rax = rcx; 0x00465f53 imul r10 | rdx:rax = rax * r10; 0x00465f56 mov rax, rdx | rax = rdx; 0x00465f59 shr rax, 0x3f | rax >>= 0x3f; 0x00465f5d sar rdx, 2 | rdx >>= 2; 0x00465f61 add rdx, rax | rdx += rax; 0x00465f64 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00465f67 lea eax, [rax + rax*4] | eax = rax * 5; 0x00465f6a mov edi, ecx | edi = ecx; 0x00465f6c sub edi, eax | edi -= eax; 0x00465f6e add dil, 0x30 | dil += 0x30; 0x00465f72 mov byte [rsi + rbp], dil | *((rsi + rbp)) = dil; 0x00465f76 inc rbp | rbp++; 0x00465f79 add rcx, 9 | rcx += 9; 0x00465f7d cmp rcx, 0x12 | 0x00465f81 mov rcx, rdx | rcx = rdx; 0x00465f84 ja 0x465f50 | | } while (rcx > 0x12); 0x00465f86 movsxd rax, r13d | rax = (int64_t) r13d; 0x00465f89 add rax, rbx | rax += rbx; 0x00465f8c add rax, qword [rsp - 0x20] | rax += *((rsp - 0x20)); 0x00465f91 lea r14, [rbp + rax + 2] | r14 = rbp + rax + 2; 0x00465f96 cmp rbp, 1 | | if (rbp == 1) { 0x00465f9a je 0x465ff7 | goto label_4; | } 0x00465f9c lea rax, [rbp - 1] | rax = rbp - 1; 0x00465fa0 movsxd rdx, r13d | rdx = (int64_t) r13d; 0x00465fa3 add rdx, rbx | rdx += rbx; 0x00465fa6 add rdx, qword [rsp - 0x20] | rdx += *((rsp - 0x20)); 0x00465fab mov cl, byte [r9] | cl = *(r9); 0x00465fae mov byte [r9], dil | *(r9) = dil; 0x00465fb1 mov byte [rbp + rdx + 1], cl | *((rbp + rdx + 1)) = cl; 0x00465fb5 cmp rax, 3 | | if (rax < 3) { 0x00465fb9 jb 0x465ff7 | goto label_4; | } 0x00465fbb add rbx, qword [rsp - 0x20] | rbx += *((rsp - 0x20)); 0x00465fc0 add rbp, rbx | rbp += rbx; 0x00465fc3 movsxd rcx, r13d | rcx = (int64_t) r13d; 0x00465fc6 nop word cs:[rax + rax] | | do { 0x00465fd0 movzx edx, byte [rbp + rcx] | edx = *((rbp + rcx)); 0x00465fd5 movzx eax, byte [rbx + rcx + 3] | eax = *((rbx + rcx + 3)); 0x00465fda mov byte [rbx + rcx + 3], dl | *((rbx + rcx + 3)) = dl; 0x00465fde mov byte [rbp + rcx], al | *((rbp + rcx)) = al; 0x00465fe2 lea rax, [rbx + rcx + 4] | rax = rbx + rcx + 4; 0x00465fe7 lea rdx, [rbp + rcx - 1] | rdx = rbp + rcx - 1; 0x00465fec dec rbp | rbp--; 0x00465fef inc rbx | rbx++; 0x00465ff2 cmp rax, rdx | 0x00465ff5 jb 0x465fd0 | | } while (rax < rdx); | label_4: 0x00465ff7 sub r11, r8 | r11 -= r8; 0x00465ffa sub r14, r9 | r14 -= r9; 0x00465ffd test r14d, r14d | | if (r14d != 0) { 0x00466000 je 0x46601a | 0x00466002 mov rsi, r14 | rsi = r14; 0x00466005 shl rsi, 0x20 | rsi <<= 0x20; 0x00466009 movsxd rax, r14d | rax = (int64_t) r14d; 0x0046600c mov byte [r9 + rax], 0x4d | *((r9 + rax)) = 0x4d; 0x00466011 add rsi, r12 | rsi += r12; 0x00466014 sar rsi, 0x20 | rsi >>= 0x20; 0x00466018 jmp 0x46601c | | } else { 0x0046601a xor esi, esi | esi = 0; | } 0x0046601c add r9, rsi | r9 += rsi; 0x0046601f test r11, r11 | 0x00466022 mov rax, qword [rsp - 0x18] | rax = *((rsp - 0x18)); | if (r11 == 0) { 0x00466027 je 0x46610d | goto label_5; | } 0x0046602d lea r8, [rax + r15] | r8 = rax + r15; 0x00466031 add r8, rsi | r8 += rsi; 0x00466034 mov rcx, qword [rsp - 0x20] | rcx = *((rsp - 0x20)); 0x00466039 lea rbp, [rcx + r8] | rbp = rcx + r8; 0x0046603d movsxd rax, r13d | rax = (int64_t) r13d; 0x00466040 add rax, r8 | rax += r8; 0x00466043 lea rcx, [rcx + rax + 2] | rcx = rcx + rax + 2; 0x00466048 mov r14, 0xffffffffffffffff | r14 = 0xffffffffffffffff; 0x0046604f xor ebx, ebx | ebx = 0; 0x00466051 nop word cs:[rax + rax] | 0x0046605b nop dword [rax + rax] | | do { 0x00466060 mov rax, r11 | rax = r11; 0x00466063 imul r10 | rdx:rax = rax * r10; 0x00466066 mov rax, rdx | rax = rdx; 0x00466069 shr rax, 0x3f | rax >>= 0x3f; 0x0046606d sar rdx, 2 | rdx >>= 2; 0x00466071 add rdx, rax | rdx += rax; 0x00466074 lea eax, [rdx + rdx] | eax = rdx + rdx; 0x00466077 lea edi, [rax + rax*4] | edi = rax * 5; 0x0046607a mov eax, r11d | eax = r11d; 0x0046607d sub eax, edi | eax -= edi; 0x0046607f add al, 0x30 | al += 0x30; 0x00466081 mov byte [rcx + r14 + 1], al | *((rcx + r14 + 1)) = al; 0x00466086 add r11, 9 | r11 += 9; 0x0046608a inc rbp | rbp++; 0x0046608d inc r14 | r14++; 0x00466090 add rbx, r12 | rbx += r12; 0x00466093 cmp r11, 0x12 | 0x00466097 mov r11, rdx | r11 = rdx; 0x0046609a ja 0x466060 | | } while (r11 > 0x12); 0x0046609c test r14, r14 | | if (r14 == 0) { 0x0046609f je 0x466107 | goto label_6; | } 0x004660a1 movsxd rdx, r13d | rdx = (int64_t) r13d; 0x004660a4 add r8, rdx | r8 += rdx; 0x004660a7 mov rcx, qword [rsp - 0x20] | rcx = *((rsp - 0x20)); 0x004660ac lea rcx, [rcx + r8 + 2] | rcx = rcx + r8 + 2; 0x004660b1 mov dl, byte [r9] | dl = *(r9); 0x004660b4 mov byte [r9], al | *(r9) = al; 0x004660b7 mov byte [rcx + r14], dl | *((rcx + r14)) = dl; 0x004660bb cmp r14, 3 | | if (r14 < 3) { 0x004660bf jb 0x466107 | goto label_6; | } 0x004660c1 movsxd rax, r13d | rax = (int64_t) r13d; 0x004660c4 add rsi, r15 | rsi += r15; 0x004660c7 add rsi, qword [rsp - 0x18] | rsi += *((rsp - 0x18)); 0x004660cc add rsi, qword [rsp - 0x20] | rsi += *((rsp - 0x20)); 0x004660d1 nop word cs:[rax + rax] | 0x004660db nop dword [rax + rax] | | do { 0x004660e0 movzx edx, byte [rbp + rax] | edx = *((rbp + rax)); 0x004660e5 movzx ecx, byte [rsi + rax + 3] | ecx = *((rsi + rax + 3)); 0x004660ea mov byte [rsi + rax + 3], dl | *((rsi + rax + 3)) = dl; 0x004660ee mov byte [rbp + rax], cl | *((rbp + rax)) = cl; 0x004660f2 lea rcx, [rsi + rax + 4] | rcx = rsi + rax + 4; 0x004660f7 lea rdx, [rbp + rax - 1] | rdx = rbp + rax - 1; 0x004660fc dec rbp | rbp--; 0x004660ff inc rsi | rsi++; 0x00466102 cmp rcx, rdx | 0x00466105 jb 0x4660e0 | | } while (rcx < rdx); | label_6: 0x00466107 sar rbx, 0x20 | rbx >>= 0x20; 0x0046610b jmp 0x466116 | goto label_7; | label_5: 0x0046610d mov byte [r9], 0x30 | *(r9) = 0x30; 0x00466111 mov ebx, 1 | ebx = 1; | label_7: 0x00466116 add r9, rbx | r9 += rbx; 0x00466119 mov rax, qword [rsp - 8] | rax = *((rsp - 8)); 0x0046611e mov ecx, dword [rax] | ecx = *(rax); 0x00466120 mov eax, ecx | eax = *(rax); 0x00466122 and eax, 7 | eax &= 7; 0x00466125 test eax, eax | | if (eax == 0) { 0x00466127 je 0x466350 | goto label_8; | } 0x0046612d test cl, 0x10 | 0x00466130 sete cl | cl = ((cl & 0x10) == 0) ? 1 : 0; 0x00466133 add cl, cl | cl += cl; 0x00466135 or cl, 0x2c | cl |= 0x2c; 0x00466138 mov byte [r9], cl | *(r9) = cl; 0x0046613b mov rcx, qword [rsp - 0x10] | rcx = *((rsp - 0x10)); 0x00466140 mov edx, dword [rcx + 8] | edx = *((rcx + 8)); 0x00466143 mov esi, 9 | esi = 9; 0x00466148 sub esi, eax | esi -= eax; 0x0046614a mov ecx, esi | ecx = esi; 0x0046614c and ecx, 3 | ecx &= 3; 0x0046614f cmp eax, 5 | | if (eax > 5) { 0x00466152 ja 0x46617c | goto label_9; | } 0x00466154 and esi, 0xfffffffc | esi &= 0xfffffffc; 0x00466157 neg esi | esi = -esi; 0x00466159 nop dword [rax] | | do { 0x00466160 movsxd rdx, edx | rdx = (int64_t) edx; 0x00466163 imul rdx, rdx, 0x68db8bad | rdx *= 0x68db8bad; 0x0046616a mov rdi, rdx | rdi = rdx; 0x0046616d shr rdi, 0x3f | rdi >>= 0x3f; 0x00466171 sar rdx, 0x2c | rdx >>= 0x2c; 0x00466175 add edx, edi | edx += edi; 0x00466177 add esi, 4 | esi += 4; 0x0046617a jne 0x466160 | | } while (esi != 0); | label_9: 0x0046617c test ecx, ecx | | if (ecx == 0) { 0x0046617e je 0x46619b | goto label_10; | } | do { 0x00466180 movsxd rdx, edx | rdx = (int64_t) edx; 0x00466183 imul rdx, rdx, 0x66666667 | rdx *= 0x66666667; 0x0046618a mov rsi, rdx | rsi = rdx; 0x0046618d shr rsi, 0x3f | rsi >>= 0x3f; 0x00466191 sar rdx, 0x22 | rdx >>= 0x22; 0x00466195 add edx, esi | edx += esi; 0x00466197 dec ecx | ecx--; 0x00466199 jne 0x466180 | | } while (ecx != 0); | label_10: 0x0046619b lea rcx, [r9 + 1] | rcx = r9 + 1; 0x0046619f movsxd rdx, edx | rdx = (int64_t) edx; 0x004661a2 imul rsi, rdx, 0x66666667 | rsi = rdx * 0x66666667; 0x004661a9 mov rdi, rsi | rdi = rsi; 0x004661ac shr rdi, 0x3f | rdi >>= 0x3f; 0x004661b0 sar rsi, 0x22 | rsi >>= 0x22; 0x004661b4 add esi, edi | esi += edi; 0x004661b6 lea edi, [rsi + rsi] | edi = rsi + rsi; 0x004661b9 lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x004661bc mov ebp, edx | 0x004661be sub ebp, edi | ebp -= edi; 0x004661c0 add bpl, 0x30 | bpl += 0x30; 0x004661c4 mov byte [r9 + rax], bpl | *((r9 + rax)) = bpl; 0x004661c8 cmp eax, 1 | | if (eax > 1) { 0x004661cb jbe 0x466343 | 0x004661d1 movsxd rdi, esi | rdi = (int64_t) esi; 0x004661d4 imul rdi, rdi, 0x66666667 | rdi *= 0x66666667; 0x004661db mov rbp, rdi | 0x004661de shr rbp, 0x3f | rbp >>= 0x3f; 0x004661e2 sar rdi, 0x22 | rdi >>= 0x22; 0x004661e6 add edi, ebp | edi += ebp; 0x004661e8 add edi, edi | edi += edi; 0x004661ea lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x004661ed sub esi, edi | esi -= edi; 0x004661ef add sil, 0x30 | sil += 0x30; 0x004661f3 mov byte [rax + r9 - 1], sil | *((rax + r9 - 1)) = sil; 0x004661f8 cmp eax, 2 | | if (eax == 2) { 0x004661fb je 0x466343 | goto label_11; | } 0x00466201 imul rsi, rdx, 0x51eb851f | rsi = rdx * 0x51eb851f; 0x00466208 mov rdi, rsi | rdi = rsi; 0x0046620b shr rdi, 0x3f | rdi >>= 0x3f; 0x0046620f sar rsi, 0x25 | rsi >>= 0x25; 0x00466213 add esi, edi | esi += edi; 0x00466215 movsxd rsi, esi | rsi = (int64_t) esi; 0x00466218 imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x0046621f mov rbp, rdi | 0x00466222 shr rbp, 0x3f | rbp >>= 0x3f; 0x00466226 sar rdi, 0x22 | rdi >>= 0x22; 0x0046622a add edi, ebp | edi += ebp; 0x0046622c add edi, edi | edi += edi; 0x0046622e lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x00466231 sub esi, edi | esi -= edi; 0x00466233 add sil, 0x30 | sil += 0x30; 0x00466237 mov byte [rax + r9 - 2], sil | *((rax + r9 - 2)) = sil; 0x0046623c cmp eax, 4 | | if (eax < 4) { 0x0046623f jb 0x466343 | goto label_11; | } 0x00466245 imul rsi, rdx, 0x10624dd3 | rsi = rdx * 0x10624dd3; 0x0046624c mov rdi, rsi | rdi = rsi; 0x0046624f shr rdi, 0x3f | rdi >>= 0x3f; 0x00466253 sar rsi, 0x26 | rsi >>= 0x26; 0x00466257 add esi, edi | esi += edi; 0x00466259 movsxd rsi, esi | rsi = (int64_t) esi; 0x0046625c imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x00466263 mov rbp, rdi | 0x00466266 shr rbp, 0x3f | rbp >>= 0x3f; 0x0046626a sar rdi, 0x22 | rdi >>= 0x22; 0x0046626e add edi, ebp | edi += ebp; 0x00466270 add edi, edi | edi += edi; 0x00466272 lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x00466275 sub esi, edi | esi -= edi; 0x00466277 add sil, 0x30 | sil += 0x30; 0x0046627b mov byte [rax + r9 - 3], sil | *((rax + r9 - 3)) = sil; 0x00466280 cmp eax, 4 | | if (eax == 4) { 0x00466283 je 0x466343 | goto label_11; | } 0x00466289 imul rsi, rdx, 0x68db8bad | rsi = rdx * 0x68db8bad; 0x00466290 mov rdi, rsi | rdi = rsi; 0x00466293 shr rdi, 0x3f | rdi >>= 0x3f; 0x00466297 sar rsi, 0x2c | rsi >>= 0x2c; 0x0046629b add esi, edi | esi += edi; 0x0046629d movsxd rsi, esi | rsi = (int64_t) esi; 0x004662a0 imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x004662a7 mov rbp, rdi | 0x004662aa shr rbp, 0x3f | rbp >>= 0x3f; 0x004662ae sar rdi, 0x22 | rdi >>= 0x22; 0x004662b2 add edi, ebp | edi += ebp; 0x004662b4 add edi, edi | edi += edi; 0x004662b6 lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x004662b9 sub esi, edi | esi -= edi; 0x004662bb add sil, 0x30 | sil += 0x30; 0x004662bf mov byte [rax + r9 - 4], sil | *((rax + r9 - 4)) = sil; 0x004662c4 cmp eax, 6 | | if (eax < 6) { 0x004662c7 jb 0x466343 | goto label_11; | } 0x004662c9 imul rsi, rdx, 0x14f8b589 | rsi = rdx * 0x14f8b589; 0x004662d0 mov rdi, rsi | rdi = rsi; 0x004662d3 shr rdi, 0x3f | rdi >>= 0x3f; 0x004662d7 sar rsi, 0x2d | rsi >>= 0x2d; 0x004662db add esi, edi | esi += edi; 0x004662dd movsxd rsi, esi | rsi = (int64_t) esi; 0x004662e0 imul rdi, rsi, 0x66666667 | rdi = rsi * 0x66666667; 0x004662e7 mov rbp, rdi | 0x004662ea shr rbp, 0x3f | rbp >>= 0x3f; 0x004662ee sar rdi, 0x22 | rdi >>= 0x22; 0x004662f2 add edi, ebp | edi += ebp; 0x004662f4 add edi, edi | edi += edi; 0x004662f6 lea edi, [rdi + rdi*4] | edi = rdi * 5; 0x004662f9 sub esi, edi | esi -= edi; 0x004662fb add sil, 0x30 | sil += 0x30; 0x004662ff mov byte [rax + r9 - 5], sil | *((rax + r9 - 5)) = sil; 0x00466304 cmp eax, 7 | | if (eax != 7) { 0x00466307 jne 0x466343 | goto label_11; | } 0x00466309 imul rdx, rdx, 0x431bde83 | rdx *= 0x431bde83; 0x00466310 mov rsi, rdx | rsi = rdx; 0x00466313 shr rsi, 0x3f | rsi >>= 0x3f; 0x00466317 sar rdx, 0x32 | rdx >>= 0x32; 0x0046631b add edx, esi | edx += esi; 0x0046631d movsxd rdx, edx | rdx = (int64_t) edx; 0x00466320 imul rsi, rdx, 0x66666667 | rsi = rdx * 0x66666667; 0x00466327 mov rdi, rsi | rdi = rsi; 0x0046632a shr rdi, 0x3f | rdi >>= 0x3f; 0x0046632e shr rsi, 0x22 | rsi >>= 0x22; 0x00466332 add esi, edi | esi += edi; 0x00466334 add esi, esi | esi += esi; 0x00466336 lea esi, [rsi + rsi*4] | esi = rsi * 5; 0x00466339 sub edx, esi | edx -= esi; 0x0046633b add dl, 0x30 | dl += 0x30; 0x0046633e mov byte [rax + r9 - 6], dl | *((rax + r9 - 6)) = dl; | } | label_11: 0x00466343 mov byte [rcx + rax], 0x53 | *((rcx + rax)) = 0x53; 0x00466347 mov eax, eax | 0x00466349 lea r9, [rax + rcx + 1] | r9 = rax + rcx + 1; 0x0046634e jmp 0x466357 | goto label_12; | label_8: 0x00466350 mov byte [r9], 0x53 | *(r9) = 0x53; 0x00466354 inc r9 | r9++; | label_12: 0x00466357 sub r9d, dword [rsp - 0x20] | r9d -= *((rsp - 0x20)); 0x0046635c mov eax, r9d | eax = r9d; 0x0046635f pop rbx | 0x00466360 pop r12 | r12 = rbx; 0x00466362 pop r13 | r13 = rbx; 0x00466364 pop r14 | r14 = rbx; 0x00466366 pop r15 | r15 = rbx; 0x00466368 pop rbp | 0x00466369 ret | return rax; | }