; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42ac50 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::NOP__BloombergLP::bdlpcre::_anonymous_namespace_::NOP_const__char_const__unsigned_long__unsigned_long__bool__const () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::NOP_BloombergLP::bdlpcre::_anonymous_namespace_::NOP_const_char_const_unsigned_long_unsigned_long_bool_const (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_30h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlpcre::RegEx::matchImp(BloombergLP::bdlpcre::(anonymous namespace)::NOP const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042ac50 push rbp | 0x0042ac51 push r15 | 0x0042ac53 push r14 | 0x0042ac55 push r13 | 0x0042ac57 push r12 | 0x0042ac59 push rbx | 0x0042ac5a sub rsp, 0x38 | 0x0042ac5e mov r15d, r8d | r15d = r8d; 0x0042ac61 mov r12, rcx | r12 = rcx; 0x0042ac64 mov r14, rdx | r14 = rdx; 0x0042ac67 mov r13, rsi | r13 = rsi; 0x0042ac6a mov qword [rsp + 8], rdi | *((rsp + 8)) = rdi; 0x0042ac6f mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042ac73 call 0x403cb0 | rax = pthread_self (); 0x0042ac78 cmp qword [rbp + 0x20], rax | 0x0042ac7c mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042ac81 mov ebx, r15d | ebx = r15d; | if (*((rbp + 0x20)) == rax) { 0x0042ac84 jne 0x42ac9a | 0x0042ac86 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042ac8a mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042ac8f movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042ac93 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0042ac98 jmp 0x42acb5 | | } else { 0x0042ac9a lea rsi, [rsp + 0x10] | 0x0042ac9f mov rdi, rbp | 0x0042aca2 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x10); 0x0042aca7 mov r15d, 0xffffffff | r15d = 0xffffffff; 0x0042acad test eax, eax | | if (eax != 0) { 0x0042acaf jne 0x42ad94 | goto label_0; | } | } 0x0042acb5 test r13, r13 | 0x0042acb8 mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r13 != 0) { 0x0042acbd cmovne rsi, r13 | rsi = r13; | } 0x0042acc1 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0042acc6 mov eax, dword [rcx] | eax = *(rcx); 0x0042acc8 test al, 8 | | if ((al & 8) != 0) { 0x0042acca je 0x42aced | 0x0042accc test bl, bl | | if (bl == 0) { 0x0042acce jne 0x42aced | 0x0042acd0 mov rdi, qword [rcx + 0x48] | rdi = *((rcx + 0x48)); 0x0042acd4 mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x0042acd9 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0042acde mov qword [rsp], r13 | *(rsp) = r13; 0x0042ace2 mov rdx, r14 | rdx = r14; 0x0042ace5 mov rcx, r12 | rcx = r12; 0x0042ace8 xor r8d, r8d | r8d = 0; 0x0042aceb jmp 0x42ad0f | | } | } else { 0x0042aced mov rdi, qword [rcx + 0x48] | rdi = *((rcx + 0x48)); 0x0042acf1 mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x0042acf6 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0042acfb test al, 0x10 | | if ((al & 0x10) != 0) { 0x0042acfd jne 0x42ad46 | goto label_1; | } 0x0042acff mov qword [rsp], r13 | *(rsp) = r13; 0x0042ad03 mov rdx, r14 | rdx = r14; 0x0042ad06 mov rcx, r12 | rcx = r12; 0x0042ad09 mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042ad0f mov r9, rbp | r9 = rbp; 0x0042ad12 call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042ad17 cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042ad1a je 0x42ad60 | goto label_2; | } | do { 0x0042ad1c cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042ad1f jne 0x42ad29 | 0x0042ad21 mov r15d, 2 | r15d = 2; 0x0042ad27 jmp 0x42ad66 | goto label_3; | } 0x0042ad29 mov r15d, eax | r15d = eax; 0x0042ad2c sar r15d, 0x1f | r15d >>= 0x1f; 0x0042ad30 test eax, eax | | if (eax < 0) { 0x0042ad32 js 0x42ad66 | goto label_3; | } 0x0042ad34 mov rdi, rbp | rdi = rbp; 0x0042ad37 call 0x4cc260 | pcre2_get_ovector_pointer_8 (); 0x0042ad3c mov rdi, rbp | rdi = rbp; 0x0042ad3f call 0x4cc270 | pcre2_get_ovector_count_8 (); 0x0042ad44 jmp 0x42ad66 | goto label_3; | label_1: 0x0042ad46 mov qword [rsp], r13 | *(rsp) = r13; 0x0042ad4a mov rdx, r14 | rdx = r14; 0x0042ad4d mov rcx, r12 | rcx = r12; 0x0042ad50 xor r8d, r8d | r8d = 0; 0x0042ad53 mov r9, rbp | r9 = rbp; 0x0042ad56 call 0x47de10 | eax = pcre2_jit_match_8 (); 0x0042ad5b cmp eax, 0xffffffd1 | 0x0042ad5e jne 0x42ad1c | | } while (eax != 0xffffffd1); | label_2: 0x0042ad60 mov r15d, 1 | r15d = 1; | label_3: 0x0042ad66 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0042ad6b mov rax, qword [rax + 0x60] | rax = *((rax + 0x60)); 0x0042ad6f mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x0042ad74 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042ad78 je 0x42ad94 | 0x0042ad7a mov rdi, rbp | rdi = rbp; 0x0042ad7d call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042ad82 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042ad87 call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042ad8c mov rdi, r13 | rdi = r13; 0x0042ad8f call 0x462980 | pcre2_match_context_free_8 (); | } | label_0: 0x0042ad94 mov eax, r15d | eax = r15d; 0x0042ad97 add rsp, 0x38 | 0x0042ad9b pop rbx | 0x0042ad9c pop r12 | 0x0042ad9e pop r13 | 0x0042ada0 pop r14 | 0x0042ada2 pop r15 | 0x0042ada4 pop rbp | 0x0042ada5 ret | return rax; | }