; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42b630 */ | #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_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | 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 */ 0x0042b630 push rbp | 0x0042b631 push r15 | 0x0042b633 push r14 | 0x0042b635 push r13 | 0x0042b637 push r12 | 0x0042b639 push rbx | 0x0042b63a sub rsp, 0x38 | 0x0042b63e mov r13d, r9d | r13d = r9d; 0x0042b641 mov qword [rsp + 0x28], r8 | *((rsp + 0x28)) = r8; 0x0042b646 mov rbx, rcx | rbx = rcx; 0x0042b649 mov r14, rdx | r14 = rdx; 0x0042b64c mov r12, rsi | r12 = rsi; 0x0042b64f mov r15, rdi | r15 = rdi; 0x0042b652 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042b656 call 0x403cb0 | rax = pthread_self (); 0x0042b65b cmp qword [rbp + 0x20], rax | 0x0042b65f mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; | if (*((rbp + 0x20)) == rax) { 0x0042b664 jne 0x42b67a | 0x0042b666 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042b66a mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042b66f movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042b673 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0042b678 jmp 0x42b694 | | } else { 0x0042b67a lea rsi, [rsp + 0x10] | 0x0042b67f mov rdi, rbp | 0x0042b682 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x10); 0x0042b687 mov ebp, 0xffffffff | 0x0042b68c test eax, eax | | if (eax != 0) { 0x0042b68e jne 0x42b7e5 | goto label_0; | } | } 0x0042b694 test r14, r14 | 0x0042b697 mov esi, 0x4dfabc | esi = 0x4dfabc; | if (r14 != 0) { 0x0042b69c cmovne rsi, r14 | rsi = r14; | } 0x0042b6a0 test byte [r15], 8 | | if ((*(r15) & 8) != 0) { 0x0042b6a4 je 0x42b6ca | 0x0042b6a6 test r13b, r13b | | if (r13b == 0) { 0x0042b6a9 jne 0x42b6ca | 0x0042b6ab mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b6af mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042b6b4 mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042b6b9 mov qword [rsp], rax | *(rsp) = rax; 0x0042b6bd mov rdx, rbx | rdx = rbx; 0x0042b6c0 mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x0042b6c5 xor r8d, r8d | r8d = 0; 0x0042b6c8 jmp 0x42b6ea | | } | } else { 0x0042b6ca mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b6ce mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042b6d3 mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042b6d8 mov qword [rsp], rax | *(rsp) = rax; 0x0042b6dc mov rdx, rbx | rdx = rbx; 0x0042b6df mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x0042b6e4 mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b6ea call 0x4ba620 | eax = pcre2_match_8 (); 0x0042b6ef cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042b6f2 je 0x42b703 | 0x0042b6f4 cmp eax, 0xffffffd2 | | if (eax != 0xffffffd2) { 0x0042b6f7 jne 0x42b70d | goto label_1; | } 0x0042b6f9 mov ebp, 2 | 0x0042b6fe jmp 0x42b7b8 | goto label_2; | } 0x0042b703 mov ebp, 1 | 0x0042b708 jmp 0x42b7b8 | goto label_2; | label_1: 0x0042b70d mov ebp, eax | 0x0042b70f sar ebp, 0x1f | ebp >>= 0x1f; 0x0042b712 test eax, eax | | if (eax < 0) { 0x0042b714 js 0x42b7b8 | goto label_2; | } 0x0042b71a mov r13d, ebp | r13d = ebp; 0x0042b71d mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042b722 call 0x4cc0b0 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b727 mov rbp, rax | 0x0042b72a mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042b72f call 0x4cc0c0 | eax = pcre2_get_ovector_count_8 (); 0x0042b734 mov rdi, qword [r12] | rdi = *(r12); 0x0042b738 mov ebx, eax | ebx = eax; 0x0042b73a mov rax, qword [rdi] | rax = *(rdi); 0x0042b73d mov rcx, qword [rdi + 8] | rcx = *((rdi + 8)); 0x0042b741 sub rcx, rax | rcx -= rax; 0x0042b744 sar rcx, 4 | rcx >>= 4; 0x0042b748 cmp rcx, rbx | | if (rcx < rbx) { 0x0042b74b jae 0x42b75a | 0x0042b74d mov rsi, rbx | 0x0042b750 sub rsi, rcx | rsi -= rcx; 0x0042b753 call 0x42c5a0 | rax = std::_1::vector>,std::_1::allocator>>>::_append(unsigned long) (rdi, rbx); 0x0042b758 jmp 0x42b76a | | if (rsi <= 0) { | } else { 0x0042b75a jbe 0x42b76a | goto label_3; | } 0x0042b75c mov rcx, rbx | rcx = rbx; 0x0042b75f shl rcx, 4 | rcx <<= 4; 0x0042b763 add rax, rcx | rax += rcx; 0x0042b766 mov qword [rdi + 8], rax | *((rdi + 8)) = rax; | } | label_3: 0x0042b76a test ebx, ebx | | if (ebx == 0) { 0x0042b76c je 0x42b7b5 | goto label_4; | } 0x0042b76e add rbx, rbx | rbx += rbx; 0x0042b771 xor eax, eax | eax = 0; 0x0042b773 nop word cs:[rax + rax] | 0x0042b77d nop dword [rax] | | do { 0x0042b780 mov rcx, qword [r12] | rcx = *(r12); 0x0042b784 mov rcx, qword [rcx] | rcx = *(rcx); 0x0042b787 mov edx, eax | edx = eax; 0x0042b789 mov rsi, qword [rbp + rdx*8] | rsi = *((rbp + rdx*8)); 0x0042b78e mov rdx, qword [rbp + rdx*8 + 8] | rdx = *((rbp + rdx*8 + 8)); 0x0042b793 lea rdi, [r14 + rsi] | rdi = r14 + rsi; 0x0042b797 sub rdx, rsi | rdx -= rsi; 0x0042b79a mov esi, 0 | esi = 0; | if (rdx != 0) { 0x0042b79f cmovne rsi, rdi | rsi = rdi; | } 0x0042b7a3 mov qword [rcx + rax*8], rsi | *((rcx + rax*8)) = rsi; 0x0042b7a7 mov qword [rcx + rax*8 + 8], rdx | *((rcx + rax*8 + 8)) = rdx; 0x0042b7ac add rax, 2 | rax += 2; 0x0042b7b0 cmp rbx, rax | 0x0042b7b3 jne 0x42b780 | | } while (rbx != rax); | label_4: 0x0042b7b5 mov ebp, r13d | | label_2: 0x0042b7b8 mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x0042b7bc mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042b7c1 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b7c5 je 0x42b7e5 | 0x0042b7c7 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042b7cc call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042b7d1 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042b7d6 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042b7db mov rdi, qword [rsp + 0x10] | rdi = *((rsp + 0x10)); 0x0042b7e0 call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_0: 0x0042b7e5 mov eax, ebp | eax = ebp; 0x0042b7e7 add rsp, 0x38 | 0x0042b7eb pop rbx | 0x0042b7ec pop r12 | 0x0042b7ee pop r13 | 0x0042b7f0 pop r14 | 0x0042b7f2 pop r15 | 0x0042b7f4 pop rbp | 0x0042b7f5 ret | return rax; | }