; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42add0 */ | #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 (uint32_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | uint32_t var_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_40h; | 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 */ 0x0042add0 push rbp | 0x0042add1 push r15 | 0x0042add3 push r14 | 0x0042add5 push r13 | 0x0042add7 push r12 | 0x0042add9 push rbx | 0x0042adda sub rsp, 0x48 | 0x0042adde mov dword [rsp + 0x14], r9d | *((rsp + 0x14)) = r9d; 0x0042ade3 mov r13, r8 | r13 = r8; 0x0042ade6 mov r12, rcx | r12 = rcx; 0x0042ade9 mov r14, rdx | r14 = rdx; 0x0042adec mov rbx, rsi | rbx = rsi; 0x0042adef mov r15, rdi | r15 = rdi; 0x0042adf2 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042adf6 call 0x403cb0 | rax = pthread_self (); 0x0042adfb cmp qword [rbp + 0x20], rax | 0x0042adff mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042ae04 mov qword [rsp + 0x18], r12 | *((rsp + 0x18)) = r12; | if (*((rbp + 0x20)) == rax) { 0x0042ae09 jne 0x42ae1f | 0x0042ae0b mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042ae0f mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042ae14 movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042ae18 movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0042ae1d jmp 0x42ae3a | | } else { 0x0042ae1f lea rsi, [rsp + 0x20] | 0x0042ae24 mov rdi, rbp | 0x0042ae27 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x20); 0x0042ae2c mov r12d, 0xffffffff | r12d = 0xffffffff; 0x0042ae32 test eax, eax | | if (eax != 0) { 0x0042ae34 jne 0x42af31 | goto label_0; | } | } 0x0042ae3a test r14, r14 | 0x0042ae3d mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r14 != 0) { 0x0042ae42 cmovne rsi, r14 | rsi = r14; | } 0x0042ae46 mov eax, dword [r15] | eax = *(r15); 0x0042ae49 test al, 8 | | if ((al & 8) != 0) { 0x0042ae4b je 0x42ae73 | 0x0042ae4d cmp byte [rsp + 0x14], 0 | | if (*((rsp + 0x14)) == 0) { 0x0042ae52 jne 0x42ae73 | 0x0042ae54 mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042ae58 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0042ae5d mov rbp, qword [rsp + 0x28] | rbp = *((rsp + 0x28)); 0x0042ae62 mov qword [rsp], r14 | *(rsp) = r14; 0x0042ae66 mov rdx, qword [rsp + 0x18] | rdx = *((rsp + 0x18)); 0x0042ae6b mov rcx, r13 | rcx = r13; 0x0042ae6e xor r8d, r8d | r8d = 0; 0x0042ae71 jmp 0x42ae97 | | } | } else { 0x0042ae73 mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042ae77 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0042ae7c mov rbp, qword [rsp + 0x28] | rbp = *((rsp + 0x28)); 0x0042ae81 test al, 0x10 | 0x0042ae83 mov rdx, qword [rsp + 0x18] | rdx = *((rsp + 0x18)); | if ((al & 0x10) != 0) { 0x0042ae88 jne 0x42aeeb | goto label_1; | } 0x0042ae8a mov qword [rsp], r14 | *(rsp) = r14; 0x0042ae8e mov rcx, r13 | rcx = r13; 0x0042ae91 mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042ae97 mov r9, rbp | r9 = rbp; 0x0042ae9a call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042ae9f cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042aea2 je 0x42af02 | goto label_2; | } | do { 0x0042aea4 cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042aea7 jne 0x42aeb1 | 0x0042aea9 mov r12d, 2 | r12d = 2; 0x0042aeaf jmp 0x42af08 | goto label_3; | } 0x0042aeb1 mov r12d, eax | r12d = eax; 0x0042aeb4 sar r12d, 0x1f | r12d >>= 0x1f; 0x0042aeb8 test eax, eax | | if (eax < 0) { 0x0042aeba js 0x42af08 | goto label_3; | } 0x0042aebc mov rdi, rbp | rdi = rbp; 0x0042aebf call 0x4cc260 | rax = pcre2_get_ovector_pointer_8 (); 0x0042aec4 mov r13, r14 | r13 = r14; 0x0042aec7 mov r14, rax | r14 = rax; 0x0042aeca mov rdi, rbp | rdi = rbp; 0x0042aecd call 0x4cc270 | pcre2_get_ovector_count_8 (); 0x0042aed2 mov rax, qword [r14] | rax = *(r14); 0x0042aed5 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0042aed9 mov r14, r13 | r14 = r13; 0x0042aedc sub rcx, rax | rcx -= rax; 0x0042aedf mov rdx, qword [rbx] | rdx = *(rbx); 0x0042aee2 mov qword [rdx], rax | *(rdx) = rax; 0x0042aee5 mov qword [rdx + 8], rcx | *((rdx + 8)) = rcx; 0x0042aee9 jmp 0x42af08 | goto label_3; | label_1: 0x0042aeeb mov qword [rsp], r14 | *(rsp) = r14; 0x0042aeef mov rcx, r13 | rcx = r13; 0x0042aef2 xor r8d, r8d | r8d = 0; 0x0042aef5 mov r9, rbp | r9 = rbp; 0x0042aef8 call 0x47de10 | eax = pcre2_jit_match_8 (); 0x0042aefd cmp eax, 0xffffffd1 | 0x0042af00 jne 0x42aea4 | | } while (eax != 0xffffffd1); | label_2: 0x0042af02 mov r12d, 1 | r12d = 1; | label_3: 0x0042af08 mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x0042af0c mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0042af11 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042af15 je 0x42af31 | 0x0042af17 mov rdi, rbp | rdi = rbp; 0x0042af1a call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042af1f mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0042af24 call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042af29 mov rdi, r14 | rdi = r14; 0x0042af2c call 0x462980 | pcre2_match_context_free_8 (); | } | label_0: 0x0042af31 mov eax, r12d | eax = r12d; 0x0042af34 add rsp, 0x48 | 0x0042af38 pop rbx | 0x0042af39 pop r12 | 0x0042af3b pop r13 | 0x0042af3d pop r14 | 0x0042af3f pop r15 | 0x0042af41 pop rbp | 0x0042af42 ret | return rax; | }