; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42b140 */ | #include | ; (fcn) method.int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre._anonymous_namespace_::VectorExtractor_bsl::vector_bsl::pair_unsigned_long__unsigned_long___bsl::allocator_bsl::pair_unsigned_long__unsigned_long__________BloombergLP::bdlpcre::_anonym () | uint64_t method_int_BloombergLP::bdlpcre::RegEx::matchImp_BloombergLP::bdlpcre_anonymous_namespace_::VectorExtractor_bsl::vector_bsl::pair_unsigned_long_unsigned_long_bsl::allocator_bsl::pair_unsigned_long_unsigned_long_BloombergLP::bdlpcre::_anonym (int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | 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 */ 0x0042b140 push rbp | 0x0042b141 push r15 | 0x0042b143 push r14 | 0x0042b145 push r13 | 0x0042b147 push r12 | 0x0042b149 push rbx | 0x0042b14a sub rsp, 0x48 | 0x0042b14e mov r14d, r9d | r14d = r9d; 0x0042b151 mov r12, r8 | r12 = r8; 0x0042b154 mov r13, rcx | r13 = rcx; 0x0042b157 mov r15, rdx | r15 = rdx; 0x0042b15a mov rbx, rsi | rbx = rsi; 0x0042b15d mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x0042b162 mov rbp, qword [rdi + 0x60] | rbp = *((rdi + 0x60)); 0x0042b166 call 0x403cb0 | rax = pthread_self (); 0x0042b16b mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0042b170 cmp qword [rbp + 0x20], rax | | if (*((rbp + 0x20)) == rax) { 0x0042b174 jne 0x42b18a | 0x0042b176 mov rax, qword [rbp + 0x38] | rax = *((rbp + 0x38)); 0x0042b17a mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0042b17f movups xmm0, xmmword [rbp + 0x28] | __asm ("movups xmm0, xmmword [rbp + 0x28]"); 0x0042b183 movaps xmmword [rsp + 0x30], xmm0 | *((rsp + 0x30)) = xmm0; 0x0042b188 jmp 0x42b1a4 | | } else { 0x0042b18a lea rsi, [rsp + 0x30] | 0x0042b18f mov rdi, rbp | 0x0042b192 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, rsp + 0x30); 0x0042b197 mov edx, 0xffffffff | edx = 0xffffffff; 0x0042b19c test eax, eax | | if (eax != 0) { 0x0042b19e jne 0x42b36e | goto label_0; | } | } 0x0042b1a4 test r15, r15 | 0x0042b1a7 mov esi, 0x4dfc8c | esi = 0x4dfc8c; | if (r15 != 0) { 0x0042b1ac cmovne rsi, r15 | rsi = r15; | } 0x0042b1b0 mov r15, qword [rsp + 0x28] | r15 = *((rsp + 0x28)); 0x0042b1b5 mov eax, dword [r15] | eax = *(r15); 0x0042b1b8 test al, 8 | | if ((al & 8) != 0) { 0x0042b1ba je 0x42b1de | 0x0042b1bc test r14b, r14b | | if (r14b == 0) { 0x0042b1bf jne 0x42b1de | 0x0042b1c1 mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b1c5 mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); 0x0042b1ca mov rbp, qword [rsp + 0x38] | rbp = *((rsp + 0x38)); 0x0042b1cf mov qword [rsp], r14 | *(rsp) = r14; 0x0042b1d3 mov rdx, r13 | rdx = r13; 0x0042b1d6 mov rcx, r12 | rcx = r12; 0x0042b1d9 xor r8d, r8d | r8d = 0; 0x0042b1dc jmp 0x42b204 | | } | } else { 0x0042b1de mov rdi, qword [r15 + 0x48] | rdi = *((r15 + 0x48)); 0x0042b1e2 mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); 0x0042b1e7 mov rbp, qword [rsp + 0x38] | rbp = *((rsp + 0x38)); 0x0042b1ec test al, 0x10 | | if ((al & 0x10) != 0) { 0x0042b1ee jne 0x42b282 | goto label_1; | } 0x0042b1f4 mov qword [rsp], r14 | *(rsp) = r14; 0x0042b1f8 mov rdx, r13 | rdx = r13; 0x0042b1fb mov rcx, r12 | rcx = r12; 0x0042b1fe mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b204 mov r9, rbp | r9 = rbp; 0x0042b207 call 0x4ba7d0 | eax = pcre2_match_8 (); 0x0042b20c cmp eax, 0xffffffd1 | | if (eax == 0xffffffd1) { 0x0042b20f je 0x42b2a0 | goto label_2; | } | do { 0x0042b215 cmp eax, 0xffffffd2 | | if (eax == 0xffffffd2) { 0x0042b218 jne 0x42b229 | 0x0042b21a mov edx, 2 | edx = 2; 0x0042b21f mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b224 jmp 0x42b346 | goto label_3; | } 0x0042b229 mov edx, eax | edx = eax; 0x0042b22b sar edx, 0x1f | edx >>= 0x1f; 0x0042b22e test eax, eax | | if (eax < 0) { 0x0042b230 js 0x42b2a5 | goto label_4; | } 0x0042b232 mov dword [rsp + 0x14], edx | *((rsp + 0x14)) = edx; 0x0042b236 mov qword [rsp + 0x20], r14 | *((rsp + 0x20)) = r14; 0x0042b23b mov rdi, rbp | rdi = rbp; 0x0042b23e call 0x4cc260 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b243 mov r12, rax | r12 = rax; 0x0042b246 mov r13, rbp | r13 = rbp; 0x0042b249 mov rdi, rbp | rdi = rbp; 0x0042b24c call 0x4cc270 | eax = pcre2_get_ovector_count_8 (); 0x0042b251 mov ebp, eax | 0x0042b253 mov rdi, qword [rbx] | 0x0042b256 mov r14d, eax | r14d = eax; 0x0042b259 mov rsi, r14 | 0x0042b25c call 0x42c010 | eax = bsl::vector,bsl::allocator>>::resize(unsigned long) (*(rbx), r14); 0x0042b261 test ebp, ebp | | if (ebp == 0) { 0x0042b263 je 0x42b335 | goto label_5; | } 0x0042b269 cmp r14d, 1 | | if (r14d != 1) { 0x0042b26d jne 0x42b2af | goto label_6; | } 0x0042b26f xor eax, eax | eax = 0; 0x0042b271 xor ecx, ecx | ecx = 0; 0x0042b273 test r14b, 1 | | if ((r14b & 1) != 0) { 0x0042b277 jne 0x42b316 | goto label_7; | } 0x0042b27d jmp 0x42b335 | goto label_5; | label_1: 0x0042b282 mov qword [rsp], r14 | *(rsp) = r14; 0x0042b286 mov rdx, r13 | rdx = r13; 0x0042b289 mov rcx, r12 | rcx = r12; 0x0042b28c xor r8d, r8d | r8d = 0; 0x0042b28f mov r9, rbp | r9 = rbp; 0x0042b292 call 0x47de10 | eax = pcre2_jit_match_8 (); 0x0042b297 cmp eax, 0xffffffd1 | 0x0042b29a jne 0x42b215 | | } while (eax != 0xffffffd1); | label_2: 0x0042b2a0 mov edx, 1 | edx = 1; | label_4: 0x0042b2a5 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b2aa jmp 0x42b346 | goto label_3; | label_6: 0x0042b2af mov ecx, r14d | ecx = r14d; 0x0042b2b2 and ecx, 0xfffffffe | ecx &= 0xfffffffe; 0x0042b2b5 xor edx, edx | edx = 0; 0x0042b2b7 xor eax, eax | eax = 0; 0x0042b2b9 nop dword [rax] | | do { 0x0042b2c0 mov rsi, qword [rbx] | rsi = *(rbx); 0x0042b2c3 mov rsi, qword [rsi] | rsi = *(rsi); 0x0042b2c6 mov edi, edx | edi = edx; 0x0042b2c8 mov rbp, qword [r12 + rdi*8] | rbp = *((r12 + rdi*8)); 0x0042b2cc mov rdi, qword [r12 + rdi*8 + 8] | rdi = *((r12 + rdi*8 + 8)); 0x0042b2d1 sub rdi, rbp | rdi -= rbp; 0x0042b2d4 mov qword [rsi + rdx*8], rbp | *((rsi + rdx*8)) = rbp; 0x0042b2d8 mov qword [rsi + rdx*8 + 8], rdi | *((rsi + rdx*8 + 8)) = rdi; 0x0042b2dd lea esi, [rdx + 2] | esi = rdx + 2; 0x0042b2e0 mov rdi, qword [rbx] | rdi = *(rbx); 0x0042b2e3 mov rdi, qword [rdi] | rdi = *(rdi); 0x0042b2e6 mov rbp, qword [r12 + rsi*8] | rbp = *((r12 + rsi*8)); 0x0042b2ea mov rsi, qword [r12 + rsi*8 + 8] | rsi = *((r12 + rsi*8 + 8)); 0x0042b2ef sub rsi, rbp | rsi -= rbp; 0x0042b2f2 mov qword [rdi + rdx*8 + 0x10], rbp | *((rdi + rdx*8 + 0x10)) = rbp; 0x0042b2f7 mov qword [rdi + rdx*8 + 0x18], rsi | *((rdi + rdx*8 + 0x18)) = rsi; 0x0042b2fc add rax, 2 | rax += 2; 0x0042b300 add rdx, 4 | rdx += 4; 0x0042b304 cmp rcx, rax | 0x0042b307 jne 0x42b2c0 | | } while (rcx != rax); 0x0042b309 mov ecx, edx | ecx = edx; 0x0042b30b mov r15, qword [rsp + 0x28] | r15 = *((rsp + 0x28)); 0x0042b310 test r14b, 1 | | if ((r14b & 1) != 0) { 0x0042b314 je 0x42b335 | | label_7: 0x0042b316 mov rdx, qword [rbx] | rdx = *(rbx); 0x0042b319 mov rdx, qword [rdx] | rdx = *(rdx); 0x0042b31c mov rsi, qword [r12 + rcx*8] | rsi = *((r12 + rcx*8)); 0x0042b320 mov rcx, qword [r12 + rcx*8 + 8] | rcx = *((r12 + rcx*8 + 8)); 0x0042b325 sub rcx, rsi | rcx -= rsi; 0x0042b328 shl rax, 4 | rax <<= 4; 0x0042b32c mov qword [rdx + rax], rsi | *((rdx + rax)) = rsi; 0x0042b330 mov qword [rdx + rax + 8], rcx | *((rdx + rax + 8)) = rcx; | } | label_5: 0x0042b335 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b33a mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0042b33f mov rbp, r13 | 0x0042b342 mov edx, dword [rsp + 0x14] | edx = *((rsp + 0x14)); | label_3: 0x0042b346 mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x0042b34a cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b34e je 0x42b36e | 0x0042b350 mov rdi, rbp | rdi = rbp; 0x0042b353 mov ebx, edx | ebx = edx; 0x0042b355 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042b35a mov rdi, qword [rsp + 0x40] | rdi = *((rsp + 0x40)); 0x0042b35f call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042b364 mov rdi, r14 | rdi = r14; 0x0042b367 call 0x462980 | pcre2_match_context_free_8 (); 0x0042b36c mov edx, ebx | edx = ebx; | } | label_0: 0x0042b36e mov eax, edx | eax = ebx; 0x0042b370 add rsp, 0x48 | 0x0042b374 pop rbx | 0x0042b375 pop r12 | 0x0042b377 pop r13 | 0x0042b379 pop r14 | 0x0042b37b pop r15 | 0x0042b37d pop rbp | 0x0042b37e ret | return rax; | }