; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42b3a0 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::VectorExtractor_bsl::vector_BloombergLP::bslstl::StringRefImp_char___bsl::allocator_BloombergLP::bslstl::StringRefImp_char__________BloombergLP::bdlpcre::_anonym () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::VectorExtractor_bsl::vector_BloombergLP::bslstl::StringRefImp_char_bsl::allocator_BloombergLP::bslstl::StringRefImp_char_BloombergLP::bdlpcre::_anonym (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; | uint32_t var_2ch; | int64_t var_30h; | int64_t var_38h; | int64_t 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 */ 0x0042b3a0 push rbp | 0x0042b3a1 push r15 | 0x0042b3a3 push r14 | 0x0042b3a5 push r13 | 0x0042b3a7 push r12 | 0x0042b3a9 push rbx | 0x0042b3aa sub rsp, 0x48 | 0x0042b3ae mov ebp, r9d | 0x0042b3b1 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x0042b3b6 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0042b3bb mov r14, rdx | r14 = rdx; 0x0042b3be mov r12, rsi | r12 = rsi; 0x0042b3c1 mov r15, rdi | r15 = rdi; 0x0042b3c4 mov rbx, qword [rdi + 0x60] | rbx = *((rdi + 0x60)); 0x0042b3c8 call 0x403cb0 | rax = pthread_self (); 0x0042b3cd mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0042b3d2 cmp qword [rbx + 0x20], rax | | if (*((rbx + 0x20)) == rax) { 0x0042b3d6 jne 0x42b3ec | 0x0042b3d8 mov rax, qword [rbx + 0x38] | rax = *((rbx + 0x38)); 0x0042b3dc mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042b3e1 movups xmm0, xmmword [rbx + 0x28] | __asm ("movups xmm0, xmmword [rbx + 0x28]"); 0x0042b3e5 movaps xmmword [rsp + 0x30], xmm0 | *((rsp + 0x30)) = xmm0; 0x0042b3ea jmp 0x42b407 | | } else { 0x0042b3ec lea rsi, [rsp + 0x30] | 0x0042b3f1 mov rdi, rbx | 0x0042b3f4 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbx, rsp + 0x30); 0x0042b3f9 mov r13d, 0xffffffff | r13d = 0xffffffff; 0x0042b3ff test eax, eax | | if (eax != 0) { 0x0042b401 jne 0x42b577 | goto label_1; | } | } 0x0042b407 test r14, r14 | 0x0042b40a mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r14 != 0) { 0x0042b40f cmovne rsi, r14 | rsi = r14; | } 0x0042b413 mov eax, dword [r15] | eax = *(r15); 0x0042b416 test al, 8 | | if ((al & 8) != 0) { 0x0042b418 je 0x42b440 | 0x0042b41a test bpl, bpl | | if (bpl == 0) { 0x0042b41d jne 0x42b440 | 0x0042b41f mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b423 mov rbx, qword [rsp + 0x30] | rbx = *((rsp + 0x30)); 0x0042b428 mov rbp, qword [rsp + 0x38] | rbp = *((rsp + 0x38)); 0x0042b42d mov qword [rsp], rbx | *(rsp) = rbx; 0x0042b431 mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0042b436 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b43b xor r8d, r8d | r8d = 0; 0x0042b43e jmp 0x42b46a | | } | } else { 0x0042b440 mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b444 mov rbx, qword [rsp + 0x30] | rbx = *((rsp + 0x30)); 0x0042b449 mov rbp, qword [rsp + 0x38] | rbp = *((rsp + 0x38)); 0x0042b44e test al, 0x10 | | if ((al & 0x10) != 0) { 0x0042b450 jne 0x42b526 | goto label_2; | } 0x0042b456 mov qword [rsp], rbx | *(rsp) = rbx; 0x0042b45a mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0042b45f mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b464 mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b46a mov r9, rbp | r9 = rbp; 0x0042b46d call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042b472 cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042b475 je 0x42b548 | goto label_3; | } | label_0: 0x0042b47b cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042b47e jne 0x42b48b | 0x0042b480 mov r13d, 2 | r13d = 2; 0x0042b486 jmp 0x42b54e | goto label_4; | } 0x0042b48b mov r13d, eax | r13d = eax; 0x0042b48e sar r13d, 0x1f | r13d >>= 0x1f; 0x0042b492 test eax, eax | | if (eax < 0) { 0x0042b494 js 0x42b54e | goto label_4; | } 0x0042b49a mov qword [rsp + 0x18], rbx | *((rsp + 0x18)) = rbx; 0x0042b49f mov rdi, rbp | rdi = rbp; 0x0042b4a2 call 0x4cc260 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b4a7 mov rdi, rbp | rdi = rbp; 0x0042b4aa mov rbp, rax | 0x0042b4ad mov qword [rsp + 0x10], rdi | *((rsp + 0x10)) = rdi; 0x0042b4b2 call 0x4cc270 | eax = pcre2_get_ovector_count_8 (); 0x0042b4b7 mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0042b4bb mov rdi, qword [r12] | 0x0042b4bf mov ebx, eax | ebx = eax; 0x0042b4c1 mov rsi, rbx | 0x0042b4c4 call 0x42c290 | eax = bsl::vector,bsl::allocator>>::resize(unsigned long) (*(r12), rbx); 0x0042b4c9 cmp dword [rsp + 0x2c], 0 | | if (*((rsp + 0x2c)) == 0) { 0x0042b4ce je 0x42b515 | goto label_5; | } 0x0042b4d0 add rbx, rbx | rbx += rbx; 0x0042b4d3 xor eax, eax | eax = 0; 0x0042b4d5 nop word cs:[rax + rax] | 0x0042b4df nop | | do { 0x0042b4e0 mov rcx, qword [r12] | rcx = *(r12); 0x0042b4e4 mov rcx, qword [rcx] | rcx = *(rcx); 0x0042b4e7 mov edx, eax | edx = eax; 0x0042b4e9 mov rsi, qword [rbp + rdx*8] | rsi = *((rbp + rdx*8)); 0x0042b4ee mov rdx, qword [rbp + rdx*8 + 8] | rdx = *((rbp + rdx*8 + 8)); 0x0042b4f3 lea rdi, [r14 + rsi] | rdi = r14 + rsi; 0x0042b4f7 sub rdx, rsi | rdx -= rsi; 0x0042b4fa mov esi, 0 | esi = 0; | if (rdx != 0) { 0x0042b4ff cmovne rsi, rdi | rsi = rdi; | } 0x0042b503 mov qword [rcx + rax*8], rsi | *((rcx + rax*8)) = rsi; 0x0042b507 mov qword [rcx + rax*8 + 8], rdx | *((rcx + rax*8 + 8)) = rdx; 0x0042b50c add rax, 2 | rax += 2; 0x0042b510 cmp rbx, rax | 0x0042b513 jne 0x42b4e0 | | } while (rbx != rax); | label_5: 0x0042b515 mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x0042b51a mov rbx, qword [rsp + 0x18] | rbx = *((rsp + 0x18)); 0x0042b51f mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); 0x0042b524 jmp 0x42b553 | goto label_6; | label_2: 0x0042b526 mov qword [rsp], rbx | *(rsp) = rbx; 0x0042b52a mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0042b52f mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b534 xor r8d, r8d | r8d = 0; 0x0042b537 mov r9, rbp | r9 = rbp; 0x0042b53a call 0x47de10 | eax = pcre2_jit_match_8 (); 0x0042b53f cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042b542 jne 0x42b47b | goto label_0; | } | label_3: 0x0042b548 mov r13d, 1 | r13d = 1; | label_4: 0x0042b54e mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); | label_6: 0x0042b553 mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x0042b557 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b55b je 0x42b577 | 0x0042b55d mov rdi, rbp | rdi = rbp; 0x0042b560 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042b565 mov rdi, qword [rsp + 0x40] | rdi = *((rsp + 0x40)); 0x0042b56a call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042b56f mov rdi, rbx | rdi = rbx; 0x0042b572 call 0x462980 | pcre2_match_context_free_8 (); | } | label_1: 0x0042b577 mov eax, r13d | eax = r13d; 0x0042b57a add rsp, 0x48 | 0x0042b57e pop rbx | 0x0042b57f pop r12 | 0x0042b581 pop r13 | 0x0042b583 pop r14 | 0x0042b585 pop r15 | 0x0042b587 pop rbp | 0x0042b588 ret | return rax; | }