; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42b7c0 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::VectorExtractor_std::__1::vector_std::__1::basic_string_view_char__std::__1::char_traits_char_____std::__1::allocator_std::__1::basic_string_view_char__std::__1: () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::VectorExtractor_std::_1::vector_std::_1::basic_string_view_char_std::_1::char_traits_char_std::_1::allocator_std::_1::basic_string_view_char_std::_1_ (int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlpcre::RegEx::matchImp >, std::__1::allocator > > > > >(BloombergLP::bdlpcre::(anonymous namespace)::VectorExtractor >, std::__1::allocator > > > > const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042b7c0 push rbp | 0x0042b7c1 push r15 | 0x0042b7c3 push r14 | 0x0042b7c5 push r13 | 0x0042b7c7 push r12 | 0x0042b7c9 push rbx | 0x0042b7ca sub rsp, 0x48 | 0x0042b7ce mov r14d, r9d | r14d = r9d; 0x0042b7d1 mov r12, r8 | r12 = r8; 0x0042b7d4 mov r13, rcx | r13 = rcx; 0x0042b7d7 mov r15, rdx | r15 = rdx; 0x0042b7da mov qword [rsp + 0x38], rsi | *((rsp + 0x38)) = rsi; 0x0042b7df mov rbx, rdi | rbx = rdi; 0x0042b7e2 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042b7e6 call 0x403cb0 | rax = pthread_self (); 0x0042b7eb cmp qword [rbp + 0x20], rax | 0x0042b7ef mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042b7f4 mov qword [rsp + 8], r12 | *((rsp + 8)) = r12; | if (*((rbp + 0x20)) == rax) { 0x0042b7f9 jne 0x42b80f | 0x0042b7fb mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042b7ff mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042b804 movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042b808 movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0042b80d jmp 0x42b82a | | } else { 0x0042b80f lea rsi, [rsp + 0x20] | 0x0042b814 mov rdi, rbp | 0x0042b817 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x20); 0x0042b81c mov r12d, 0xffffffff | r12d = 0xffffffff; 0x0042b822 test eax, eax | | if (eax != 0) { 0x0042b824 jne 0x42b9bc | goto label_0; | } | } 0x0042b82a test r15, r15 | 0x0042b82d mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r15 != 0) { 0x0042b832 cmovne rsi, r15 | rsi = r15; | } 0x0042b836 mov eax, dword [rbx] | eax = *(rbx); 0x0042b838 test al, 8 | | if ((al & 8) != 0) { 0x0042b83a je 0x42b860 | 0x0042b83c test r14b, r14b | | if (r14b == 0) { 0x0042b83f jne 0x42b860 | 0x0042b841 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042b845 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0042b84a mov rbp, qword [rsp + 0x28] | rbp = *((rsp + 0x28)); 0x0042b84f mov qword [rsp], r14 | *(rsp) = r14; 0x0042b853 mov rdx, r13 | rdx = r13; 0x0042b856 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0042b85b xor r8d, r8d | r8d = 0; 0x0042b85e jmp 0x42b888 | | } | } else { 0x0042b860 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042b864 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0042b869 mov rbp, qword [rsp + 0x28] | rbp = *((rsp + 0x28)); 0x0042b86e test al, 0x10 | | if ((al & 0x10) != 0) { 0x0042b870 jne 0x42b907 | goto label_1; | } 0x0042b876 mov qword [rsp], r14 | *(rsp) = r14; 0x0042b87a mov rdx, r13 | rdx = r13; 0x0042b87d mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0042b882 mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b888 mov r9, rbp | r9 = rbp; 0x0042b88b call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042b890 cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042b893 je 0x42b927 | goto label_2; | } | do { 0x0042b899 cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042b89c jne 0x42b8a9 | 0x0042b89e mov r12d, 2 | r12d = 2; 0x0042b8a4 jmp 0x42b993 | goto label_3; | } 0x0042b8a9 mov r12d, eax | r12d = eax; 0x0042b8ac sar r12d, 0x1f | r12d >>= 0x1f; 0x0042b8b0 test eax, eax | | if (eax < 0) { 0x0042b8b2 js 0x42b993 | goto label_3; | } 0x0042b8b8 mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0042b8bd mov r14, rbp | r14 = rbp; 0x0042b8c0 mov qword [rsp + 0x18], rbx | *((rsp + 0x18)) = rbx; 0x0042b8c5 mov rdi, rbp | rdi = rbp; 0x0042b8c8 call 0x4cc260 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b8cd mov rbp, rax | 0x0042b8d0 mov qword [rsp + 0x10], r14 | *((rsp + 0x10)) = r14; 0x0042b8d5 mov rdi, r14 | rdi = r14; 0x0042b8d8 call 0x4cc270 | eax = pcre2_get_ovector_count_8 (); 0x0042b8dd mov r14, qword [rsp + 0x38] | r14 = *((rsp + 0x38)); 0x0042b8e2 mov rdi, qword [r14] | rdi = *(r14); 0x0042b8e5 mov ebx, eax | ebx = eax; 0x0042b8e7 mov rax, qword [rdi] | rax = *(rdi); 0x0042b8ea mov rcx, qword [rdi + 8] | rcx = *((rdi + 8)); 0x0042b8ee sub rcx, rax | rcx -= rax; 0x0042b8f1 sar rcx, 4 | rcx >>= 4; 0x0042b8f5 cmp rcx, rbx | | if (rcx >= rbx) { 0x0042b8f8 jae 0x42b92f | goto label_4; | } 0x0042b8fa mov rsi, rbx | 0x0042b8fd sub rsi, rcx | rsi -= rcx; 0x0042b900 call 0x42c790 | std::_1::vector>,std::_1::allocator>>>::_append(unsigned long) (rdi, rbx); 0x0042b905 jmp 0x42b93f | goto label_5; | label_1: 0x0042b907 mov qword [rsp], r14 | *(rsp) = r14; 0x0042b90b mov rdx, r13 | rdx = r13; 0x0042b90e mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0042b913 xor r8d, r8d | r8d = 0; 0x0042b916 mov r9, rbp | r9 = rbp; 0x0042b919 call 0x47de10 | eax = pcre2_jit_match_8 (); 0x0042b91e cmp eax, 0xffffffd1 | 0x0042b921 jne 0x42b899 | | } while (eax != 0xffffffd1); | label_2: 0x0042b927 mov r12d, 1 | r12d = 1; 0x0042b92d jmp 0x42b993 | goto label_3; | if (eax > 0xffffffd1) { | label_4: 0x0042b92f jbe 0x42b93f | 0x0042b931 mov rcx, rbx | rcx = rbx; 0x0042b934 shl rcx, 4 | rcx <<= 4; 0x0042b938 add rax, rcx | rax += rcx; 0x0042b93b mov qword [rdi + 8], rax | *((rdi + 8)) = rax; | } | label_5: 0x0042b93f test ebx, ebx | | if (ebx == 0) { 0x0042b941 je 0x42b984 | goto label_6; | } 0x0042b943 add rbx, rbx | rbx += rbx; 0x0042b946 xor eax, eax | eax = 0; 0x0042b948 nop dword [rax + rax] | | do { 0x0042b950 mov rcx, qword [r14] | rcx = *(r14); 0x0042b953 mov rcx, qword [rcx] | rcx = *(rcx); 0x0042b956 mov edx, eax | edx = eax; 0x0042b958 mov rsi, qword [rbp + rdx*8] | rsi = *((rbp + rdx*8)); 0x0042b95d mov rdx, qword [rbp + rdx*8 + 8] | rdx = *((rbp + rdx*8 + 8)); 0x0042b962 lea rdi, [r15 + rsi] | rdi = r15 + rsi; 0x0042b966 sub rdx, rsi | rdx -= rsi; 0x0042b969 mov esi, 0 | esi = 0; | if (rdx != 0) { 0x0042b96e cmovne rsi, rdi | rsi = rdi; | } 0x0042b972 mov qword [rcx + rax*8], rsi | *((rcx + rax*8)) = rsi; 0x0042b976 mov qword [rcx + rax*8 + 8], rdx | *((rcx + rax*8 + 8)) = rdx; 0x0042b97b add rax, 2 | rax += 2; 0x0042b97f cmp rbx, rax | 0x0042b982 jne 0x42b950 | | } while (rbx != rax); | label_6: 0x0042b984 mov rbx, qword [rsp + 0x18] | rbx = *((rsp + 0x18)); 0x0042b989 mov r14, qword [rsp + 8] | r14 = *((rsp + 8)); 0x0042b98e mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); | label_3: 0x0042b993 mov rax, qword [rbx + 0x60] | rax = *((rbx + 0x60)); 0x0042b997 mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0042b99c cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b9a0 je 0x42b9bc | 0x0042b9a2 mov rdi, rbp | rdi = rbp; 0x0042b9a5 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042b9aa mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0042b9af call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042b9b4 mov rdi, r14 | rdi = r14; 0x0042b9b7 call 0x462980 | pcre2_match_context_free_8 (); | } | label_0: 0x0042b9bc mov eax, r12d | eax = r12d; 0x0042b9bf add rsp, 0x48 | 0x0042b9c3 pop rbx | 0x0042b9c4 pop r12 | 0x0042b9c6 pop r13 | 0x0042b9c8 pop r14 | 0x0042b9ca pop r15 | 0x0042b9cc pop rbp | 0x0042b9cd ret | return rax; | }