; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42af70 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::DataExtractor_std::__1::basic_string_view_char__std::__1::char_traits_char________BloombergLP::bdlpcre::_anonymous_namespace_::DataExtractor_std::__1::basic_stri () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::DataExtractor_std::_1::basic_string_view_char_std::_1::char_traits_char_BloombergLP::bdlpcre::_anonymous_namespace_::DataExtractor_std::_1::basic_stri (int64_t arg6, int64_t arg5, char * arg4, char * 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 > > >(BloombergLP::bdlpcre::(anonymous namespace)::DataExtractor > > const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042af70 push rbp | 0x0042af71 push r15 | 0x0042af73 push r14 | 0x0042af75 push r13 | 0x0042af77 push r12 | 0x0042af79 push rbx | 0x0042af7a sub rsp, 0x38 | 0x0042af7e mov r14d, r9d | r14d = r9d; 0x0042af81 mov r12, r8 | r12 = r8; 0x0042af84 mov r13, rcx | r13 = rcx; 0x0042af87 mov r15, rdx | r15 = rdx; 0x0042af8a mov qword [rsp + 0x28], rsi | *((rsp + 0x28)) = rsi; 0x0042af8f mov rbx, rdi | rbx = rdi; 0x0042af92 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042af96 call 0x403cb0 | rax = pthread_self (); 0x0042af9b cmp qword [rbp + 0x20], rax | 0x0042af9f mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; | if (*((rbp + 0x20)) == rax) { 0x0042afa4 jne 0x42afba | 0x0042afa6 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042afaa mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042afaf movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042afb3 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0042afb8 jmp 0x42afd4 | | } else { 0x0042afba lea rsi, [rsp + 0x10] | 0x0042afbf mov rdi, rbp | 0x0042afc2 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x10); 0x0042afc7 mov ebp, 0xffffffff | 0x0042afcc test eax, eax | | if (eax != 0) { 0x0042afce jne 0x42b0ea | goto label_0; | } | } 0x0042afd4 test r15, r15 | 0x0042afd7 mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r15 != 0) { 0x0042afdc cmovne rsi, r15 | rsi = r15; | } 0x0042afe0 mov eax, dword [rbx] | eax = *(rbx); 0x0042afe2 test al, 8 | | if ((al & 8) == 0) { 0x0042afe4 je 0x42b029 | goto label_1; | } 0x0042afe6 test r14b, r14b | | if (r14b != 0) { 0x0042afe9 jne 0x42b029 | goto label_1; | } 0x0042afeb mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042afef mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); 0x0042aff4 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x0042aff9 mov qword [rsp], r14 | *(rsp) = r14; 0x0042affd mov rdx, r13 | rdx = r13; 0x0042b000 mov r13, rax | r13 = rax; 0x0042b003 mov rcx, r12 | rcx = r12; 0x0042b006 xor r8d, r8d | r8d = 0; 0x0042b009 mov r9, rax | r9 = rax; 0x0042b00c call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042b011 cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042b014 je 0x42b0bc | goto label_2; | } | do { 0x0042b01a cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042b01d jne 0x42b055 | 0x0042b01f mov ebp, 2 | 0x0042b024 jmp 0x42b0c1 | goto label_3; | label_1: 0x0042b029 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042b02d mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); 0x0042b032 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0042b037 test al, 0x10 | | if ((al & 0x10) == 0) { 0x0042b039 jne 0x42b09b | 0x0042b03b mov qword [rsp], r14 | *(rsp) = r14; 0x0042b03f mov rdx, r13 | rdx = r13; 0x0042b042 mov rcx, r12 | rcx = r12; 0x0042b045 mov r8d, 0x40000000 | r8d = 0x40000000; 0x0042b04b mov r9, rbp | r9 = rbp; 0x0042b04e call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042b053 jmp 0x42b0b0 | | } else { 0x0042b055 mov ebp, eax | 0x0042b057 sar ebp, 0x1f | ebp >>= 0x1f; 0x0042b05a test eax, eax | | if (eax < 0) { 0x0042b05c js 0x42b0c1 | goto label_3; | } 0x0042b05e mov rdi, r13 | rdi = r13; 0x0042b061 call 0x4cc260 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b066 mov r12, r14 | r12 = r14; 0x0042b069 mov r14, rax | r14 = rax; 0x0042b06c mov rdi, r13 | rdi = r13; 0x0042b06f call 0x4cc270 | pcre2_get_ovector_count_8 (); 0x0042b074 mov rax, qword [r14] | rax = *(r14); 0x0042b077 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0042b07b mov r14, r12 | r14 = r12; 0x0042b07e mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x0042b083 mov rdx, qword [rdx] | rdx = *(rdx); 0x0042b086 add r15, rax | r15 += rax; 0x0042b089 xor esi, esi | esi = 0; 0x0042b08b sub rcx, rax | rcx -= rax; | if (rcx != 0) { 0x0042b08e cmovne rsi, r15 | rsi = r15; | } 0x0042b092 mov qword [rdx], rsi | *(rdx) = rsi; 0x0042b095 mov qword [rdx + 8], rcx | *((rdx + 8)) = rcx; 0x0042b099 jmp 0x42b0c1 | goto label_3; | } 0x0042b09b mov qword [rsp], r14 | *(rsp) = r14; 0x0042b09f mov rdx, r13 | rdx = r13; 0x0042b0a2 mov rcx, r12 | rcx = r12; 0x0042b0a5 xor r8d, r8d | r8d = 0; 0x0042b0a8 mov r9, rbp | r9 = rbp; 0x0042b0ab call 0x47de10 | eax = pcre2_jit_match_8 (); | } 0x0042b0b0 mov r13, rbp | r13 = rbp; 0x0042b0b3 cmp eax, 0xffffffd1 | 0x0042b0b6 jne 0x42b01a | | } while (eax != 0xffffffd1); | label_2: 0x0042b0bc mov ebp, 1 | | label_3: 0x0042b0c1 mov rax, qword [rbx + 0x60] | rax = *((rbx + 0x60)); 0x0042b0c5 mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042b0ca cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b0ce je 0x42b0ea | 0x0042b0d0 mov rdi, r13 | rdi = r13; 0x0042b0d3 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042b0d8 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042b0dd call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042b0e2 mov rdi, r14 | rdi = r14; 0x0042b0e5 call 0x462980 | pcre2_match_context_free_8 (); | } | label_0: 0x0042b0ea mov eax, ebp | eax = ebp; 0x0042b0ec add rsp, 0x38 | 0x0042b0f0 pop rbx | 0x0042b0f1 pop r12 | 0x0042b0f3 pop r13 | 0x0042b0f5 pop r14 | 0x0042b0f7 pop r15 | 0x0042b0f9 pop rbp | 0x0042b0fa ret | return rax; | }