; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42b460 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::VectorExtractor_bsl::vector_std::__1::basic_string_view_char__std::__1::char_traits_char_____bsl::allocator_std::__1::basic_string_view_char__std::__1::char_trai () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::VectorExtractor_bsl::vector_std::_1::basic_string_view_char_std::_1::char_traits_char_bsl::allocator_std::_1::basic_string_view_char_std::_1::char_trai (int64_t arg6, char * arg5, char * arg4, char * arg3, int64_t arg2, int64_t arg1) { | int64_t var_10h; | char * var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | char * var_40h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlpcre::RegEx::matchImp >, bsl::allocator > > > > >(BloombergLP::bdlpcre::(anonymous namespace)::VectorExtractor >, bsl::allocator > > > > const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042b460 push rbp | 0x0042b461 push r15 | 0x0042b463 push r14 | 0x0042b465 push r13 | 0x0042b467 push r12 | 0x0042b469 push rbx | 0x0042b46a sub rsp, 0x48 | 0x0042b46e mov ebp, r9d | 0x0042b471 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x0042b476 mov qword [rsp + 0x40], rcx | *((rsp + 0x40)) = rcx; 0x0042b47b mov r14, rdx | r14 = rdx; 0x0042b47e mov r12, rsi | r12 = rsi; 0x0042b481 mov r15, rdi | r15 = rdi; 0x0042b484 mov rbx, qword [rdi + 0x60] | rbx = *((rdi + 0x60)); 0x0042b488 call 0x403cb0 | rax = pthread_self (); 0x0042b48d mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0042b492 cmp qword [rbx + 0x20], rax | | if (*((rbx + 0x20)) == rax) { 0x0042b496 jne 0x42b4ac | 0x0042b498 mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x0042b49c mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042b4a1 movups xmm0, xmmword [rbx + 0x28] | __asm ("movups xmm0, xmmword [rbx + 0x28]"); 0x0042b4a5 movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0042b4aa jmp 0x42b4c7 | | } else { 0x0042b4ac lea rsi, [rsp + 0x20] | 0x0042b4b1 mov rdi, rbx | 0x0042b4b4 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbx, rsp + 0x20); 0x0042b4b9 mov r13d, 0xffffffff | r13d = 0xffffffff; 0x0042b4bf test eax, eax | | if (eax != 0) { 0x0042b4c1 jne 0x42b5f2 | goto label_0; | } | } 0x0042b4c7 test r14, r14 | 0x0042b4ca mov esi, 0x4dfabc | esi = 0x4dfabc; | if (r14 != 0) { 0x0042b4cf cmovne rsi, r14 | rsi = r14; | } 0x0042b4d3 test byte [r15], 8 | | if ((*(r15) & 8) != 0) { 0x0042b4d7 je 0x42b4ff | 0x0042b4d9 test bpl, bpl | | if (bpl == 0) { 0x0042b4dc jne 0x42b4ff | 0x0042b4de mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b4e2 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042b4e7 mov r9, qword [rsp + 0x28] | r9 = *((rsp + 0x28)); 0x0042b4ec mov qword [rsp], rax | *(rsp) = rax; 0x0042b4f0 mov rdx, qword [rsp + 0x40] | rdx = *((rsp + 0x40)); 0x0042b4f5 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b4fa xor r8d, r8d | r8d = 0; 0x0042b4fd jmp 0x42b521 | | } | } else { 0x0042b4ff mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b503 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042b508 mov r9, qword [rsp + 0x28] | r9 = *((rsp + 0x28)); 0x0042b50d mov qword [rsp], rax | *(rsp) = rax; 0x0042b511 mov rdx, qword [rsp + 0x40] | rdx = *((rsp + 0x40)); 0x0042b516 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b51b mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b521 call 0x4ba620 | eax = pcre2_match_8 (); 0x0042b526 cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042b529 je 0x42b53b | 0x0042b52b cmp eax, 0xffffffd2 | | if (eax != 0xffffffd2) { 0x0042b52e jne 0x42b546 | goto label_1; | } 0x0042b530 mov r13d, 2 | r13d = 2; 0x0042b536 jmp 0x42b5c5 | goto label_2; | } 0x0042b53b mov r13d, 1 | r13d = 1; 0x0042b541 jmp 0x42b5c5 | goto label_2; | label_1: 0x0042b546 mov r13d, eax | r13d = eax; 0x0042b549 sar r13d, 0x1f | r13d >>= 0x1f; 0x0042b54d test eax, eax | | if (eax < 0) { 0x0042b54f js 0x42b5c5 | goto label_2; | } 0x0042b551 mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b556 call 0x4cc0b0 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b55b mov rbp, rax | 0x0042b55e mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b563 call 0x4cc0c0 | eax = pcre2_get_ovector_count_8 (); 0x0042b568 mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x0042b56c mov rdi, qword [r12] | 0x0042b570 mov ebx, eax | ebx = eax; 0x0042b572 mov rsi, rbx | 0x0042b575 call 0x42c320 | eax = bsl::vector>,bsl::allocator>>>::resize(unsigned long) (*(r12), rbx); 0x0042b57a cmp dword [rsp + 0x18], 0 | | if (*((rsp + 0x18)) == 0) { 0x0042b57f je 0x42b5c5 | goto label_2; | } 0x0042b581 add rbx, rbx | rbx += rbx; 0x0042b584 xor eax, eax | eax = 0; 0x0042b586 nop word cs:[rax + rax] | | do { 0x0042b590 mov rcx, qword [r12] | rcx = *(r12); 0x0042b594 mov rcx, qword [rcx] | rcx = *(rcx); 0x0042b597 mov edx, eax | edx = eax; 0x0042b599 mov rsi, qword [rbp + rdx*8] | rsi = *((rbp + rdx*8)); 0x0042b59e mov rdx, qword [rbp + rdx*8 + 8] | rdx = *((rbp + rdx*8 + 8)); 0x0042b5a3 lea rdi, [r14 + rsi] | rdi = r14 + rsi; 0x0042b5a7 sub rdx, rsi | rdx -= rsi; 0x0042b5aa mov esi, 0 | esi = 0; | if (rdx != 0) { 0x0042b5af cmovne rsi, rdi | rsi = rdi; | } 0x0042b5b3 mov qword [rcx + rax*8], rsi | *((rcx + rax*8)) = rsi; 0x0042b5b7 mov qword [rcx + rax*8 + 8], rdx | *((rcx + rax*8 + 8)) = rdx; 0x0042b5bc add rax, 2 | rax += 2; 0x0042b5c0 cmp rbx, rax | 0x0042b5c3 jne 0x42b590 | | } while (rbx != rax); | label_2: 0x0042b5c5 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0042b5ca mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x0042b5ce cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b5d2 je 0x42b5f2 | 0x0042b5d4 mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b5d9 call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042b5de mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0042b5e3 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042b5e8 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042b5ed call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_0: 0x0042b5f2 mov eax, r13d | eax = r13d; 0x0042b5f5 add rsp, 0x48 | 0x0042b5f9 pop rbx | 0x0042b5fa pop r12 | 0x0042b5fc pop r13 | 0x0042b5fe pop r14 | 0x0042b600 pop r15 | 0x0042b602 pop rbp | 0x0042b603 ret | return rax; | }