; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42ad40 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::DataExtractor_bsl::pair_unsigned_long__unsigned_long______BloombergLP::bdlpcre::_anonymous_namespace_::DataExtractor_bsl::pair_unsigned_long__unsigned_long____co () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::DataExtractor_bsl::pair_unsigned_long_unsigned_long_BloombergLP::bdlpcre::_anonymous_namespace_::DataExtractor_bsl::pair_unsigned_long_unsigned_long_co (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 > >(BloombergLP::bdlpcre::(anonymous namespace)::DataExtractor > const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042ad40 push rbp | 0x0042ad41 push r15 | 0x0042ad43 push r14 | 0x0042ad45 push r13 | 0x0042ad47 push r12 | 0x0042ad49 push rbx | 0x0042ad4a sub rsp, 0x38 | 0x0042ad4e mov r15d, r9d | r15d = r9d; 0x0042ad51 mov r12, r8 | r12 = r8; 0x0042ad54 mov r13, rcx | r13 = rcx; 0x0042ad57 mov r14, rdx | r14 = rdx; 0x0042ad5a mov qword [rsp + 0x28], rsi | *((rsp + 0x28)) = rsi; 0x0042ad5f mov rbx, rdi | rbx = rdi; 0x0042ad62 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042ad66 call 0x403cb0 | rax = pthread_self (); 0x0042ad6b cmp qword [rbp + 0x20], rax | 0x0042ad6f mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; | if (*((rbp + 0x20)) == rax) { 0x0042ad74 jne 0x42ad8a | 0x0042ad76 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042ad7a mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042ad7f movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042ad83 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0042ad88 jmp 0x42ada4 | | } else { 0x0042ad8a lea rsi, [rsp + 0x10] | 0x0042ad8f mov rdi, rbp | 0x0042ad92 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x10); 0x0042ad97 mov ebp, 0xffffffff | 0x0042ad9c test eax, eax | | if (eax != 0) { 0x0042ad9e jne 0x42ae78 | goto label_0; | } | } 0x0042ada4 test r14, r14 | 0x0042ada7 mov esi, 0x4dfabc | esi = 0x4dfabc; | if (r14 != 0) { 0x0042adac cmovne rsi, r14 | rsi = r14; | } 0x0042adb0 test byte [rbx], 8 | | if ((*(rbx) & 8) != 0) { 0x0042adb3 je 0x42add7 | 0x0042adb5 test r15b, r15b | | if (r15b == 0) { 0x0042adb8 jne 0x42add7 | 0x0042adba mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042adbe mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042adc3 mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042adc8 mov qword [rsp], rax | *(rsp) = rax; 0x0042adcc mov rdx, r13 | rdx = r13; 0x0042adcf mov rcx, r12 | rcx = r12; 0x0042add2 xor r8d, r8d | r8d = 0; 0x0042add5 jmp 0x42adf5 | | } | } else { 0x0042add7 mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0042addb mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0042ade0 mov r9, qword [rsp + 0x18] | r9 = *((rsp + 0x18)); 0x0042ade5 mov qword [rsp], rax | *(rsp) = rax; 0x0042ade9 mov rdx, r13 | rdx = r13; 0x0042adec mov rcx, r12 | rcx = r12; 0x0042adef mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042adf5 call 0x4ba620 | eax = pcre2_match_8 (); 0x0042adfa cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042adfd je 0x42ae0b | 0x0042adff cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042ae02 jne 0x42ae12 | 0x0042ae04 mov ebp, 2 | 0x0042ae09 jmp 0x42ae4b | | } else { 0x0042ae0b mov ebp, 1 | 0x0042ae10 jmp 0x42ae4b | | } else { 0x0042ae12 mov ebp, eax | | } 0x0042ae14 sar ebp, 0x1f | ebp >>= 0x1f; 0x0042ae17 test eax, eax | | if (eax < 0) { 0x0042ae19 js 0x42ae4b | goto label_1; | } 0x0042ae1b mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042ae20 call 0x4cc0b0 | rax = pcre2_get_ovector_pointer_8 (); 0x0042ae25 mov r14, rax | r14 = rax; 0x0042ae28 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042ae2d call 0x4cc0c0 | pcre2_get_ovector_count_8 (); 0x0042ae32 mov rax, qword [r14] | rax = *(r14); 0x0042ae35 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0042ae39 sub rcx, rax | rcx -= rax; 0x0042ae3c mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x0042ae41 mov rdx, qword [rdx] | rdx = *(rdx); 0x0042ae44 mov qword [rdx], rax | *(rdx) = rax; 0x0042ae47 mov qword [rdx + 8], rcx | *((rdx + 8)) = rcx; | } | label_1: 0x0042ae4b mov rax, qword [rbx + 0x60] | rax = *((rbx + 0x60)); 0x0042ae4f mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042ae54 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042ae58 je 0x42ae78 | 0x0042ae5a mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0042ae5f call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042ae64 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042ae69 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042ae6e mov rdi, qword [rsp + 0x10] | rdi = *((rsp + 0x10)); 0x0042ae73 call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_0: 0x0042ae78 mov eax, ebp | eax = ebp; 0x0042ae7a add rsp, 0x38 | 0x0042ae7e pop rbx | 0x0042ae7f pop r12 | 0x0042ae81 pop r13 | 0x0042ae83 pop r14 | 0x0042ae85 pop r15 | 0x0042ae87 pop rbp | 0x0042ae88 ret | return rax; | }