; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/assume @ 0x42b050 */ | #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_10h; | 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, bsl::allocator > > > >(BloombergLP::bdlpcre::(anonymous namespace)::VectorExtractor, bsl::allocator > > > const&, char const*, unsigned long, unsigned long, bool) const */ 0x0042b050 push rbp | 0x0042b051 push r15 | 0x0042b053 push r14 | 0x0042b055 push r13 | 0x0042b057 push r12 | 0x0042b059 push rbx | 0x0042b05a sub rsp, 0x48 | 0x0042b05e mov r14d, r9d | r14d = r9d; 0x0042b061 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x0042b066 mov qword [rsp + 0x40], rcx | *((rsp + 0x40)) = rcx; 0x0042b06b mov r12, rdx | r12 = rdx; 0x0042b06e mov r13, rsi | r13 = rsi; 0x0042b071 mov rbx, rdi | rbx = rdi; 0x0042b074 mov r15, qword [rdi + 0x60] | r15 = *((rdi + 0x60)); 0x0042b078 call 0x403cb0 | rax = pthread_self (); 0x0042b07d mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0042b082 cmp qword [r15 + 0x20], rax | | if (*((r15 + 0x20)) == rax) { 0x0042b086 jne 0x42b09d | 0x0042b088 mov rax, qword [r15 + 0x38] | rax = *((r15 + 0x38)); 0x0042b08c mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0042b091 movups xmm0, xmmword [r15 + 0x28] | __asm ("movups xmm0, xmmword [r15 + 0x28]"); 0x0042b096 movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x0042b09b jmp 0x42b0b7 | | } else { 0x0042b09d lea rsi, [rsp + 0x20] | 0x0042b0a2 mov rdi, r15 | 0x0042b0a5 call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (r15, rsp + 0x20); 0x0042b0aa mov ebp, 0xffffffff | 0x0042b0af test eax, eax | | if (eax != 0) { 0x0042b0b1 jne 0x42b258 | goto label_0; | } | } 0x0042b0b7 test r12, r12 | 0x0042b0ba mov esi, 0x4dfabc | esi = 0x4dfabc; | if (r12 != 0) { 0x0042b0bf cmovne rsi, r12 | rsi = r12; | } 0x0042b0c3 mov r12, rbx | r12 = rbx; 0x0042b0c6 test byte [rbx], 8 | | if ((*(rbx) & 8) != 0) { 0x0042b0c9 je 0x42b0f2 | 0x0042b0cb test r14b, r14b | | if (r14b == 0) { 0x0042b0ce jne 0x42b0f2 | 0x0042b0d0 mov rdi, qword [r12 + 0x48] | rdi = *((r12 + 0x48)); 0x0042b0d5 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042b0da mov r9, qword [rsp + 0x28] | r9 = *((rsp + 0x28)); 0x0042b0df mov qword [rsp], rax | *(rsp) = rax; 0x0042b0e3 mov rdx, qword [rsp + 0x40] | rdx = *((rsp + 0x40)); 0x0042b0e8 mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b0ed xor r8d, r8d | r8d = 0; 0x0042b0f0 jmp 0x42b115 | | } | } else { 0x0042b0f2 mov rdi, qword [r12 + 0x48] | rdi = *((r12 + 0x48)); 0x0042b0f7 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042b0fc mov r9, qword [rsp + 0x28] | r9 = *((rsp + 0x28)); 0x0042b101 mov qword [rsp], rax | *(rsp) = rax; 0x0042b105 mov rdx, qword [rsp + 0x40] | rdx = *((rsp + 0x40)); 0x0042b10a mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x0042b10f mov r8d, 0x40000000 | r8d = 0x40000000; | } 0x0042b115 call 0x4ba620 | eax = pcre2_match_8 (); 0x0042b11a cmp eax, 0xffffffd1 | | if (eax != 0xffffffd1) { 0x0042b11d je 0x42b133 | 0x0042b11f cmp eax, 0xffffffd2 | | if (eax != 0xffffffd2) { 0x0042b122 jne 0x42b142 | goto label_1; | } 0x0042b124 mov ebp, 2 | 0x0042b129 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0042b12e jmp 0x42b22f | goto label_2; | } 0x0042b133 mov ebp, 1 | 0x0042b138 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0042b13d jmp 0x42b22f | goto label_2; | label_1: 0x0042b142 mov ebp, eax | 0x0042b144 sar ebp, 0x1f | ebp >>= 0x1f; 0x0042b147 test eax, eax | | if (eax >= 0) { 0x0042b149 js 0x42b196 | 0x0042b14b mov dword [rsp + 0x18], ebp | *((rsp + 0x18)) = ebp; 0x0042b14f mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b154 call 0x4cc0b0 | rax = pcre2_get_ovector_pointer_8 (); 0x0042b159 mov rbp, rax | 0x0042b15c mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b161 call 0x4cc0c0 | eax = pcre2_get_ovector_count_8 (); 0x0042b166 mov r14d, eax | r14d = eax; 0x0042b169 mov rdi, qword [r13] | 0x0042b16d mov r15d, eax | r15d = eax; 0x0042b170 mov rsi, r15 | 0x0042b173 call 0x42be20 | eax = bsl::vector,bsl::allocator>>::resize(unsigned long) (*(r13), r15); 0x0042b178 test r14d, r14d | | if (r14d == 0) { 0x0042b17b je 0x42b226 | goto label_3; | } 0x0042b181 cmp r15d, 1 | | if (r15d != 1) { 0x0042b185 jne 0x42b1a0 | goto label_4; | } 0x0042b187 xor eax, eax | eax = 0; 0x0042b189 xor ecx, ecx | ecx = 0; 0x0042b18b test r15b, 1 | | if ((r15b & 1) != 0) { 0x0042b18f jne 0x42b205 | goto label_5; | } 0x0042b191 jmp 0x42b226 | goto label_3; | } 0x0042b196 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0042b19b jmp 0x42b22f | goto label_2; | label_4: 0x0042b1a0 mov ecx, r15d | ecx = r15d; 0x0042b1a3 and ecx, 0xfffffffe | ecx &= 0xfffffffe; 0x0042b1a6 xor edx, edx | edx = 0; 0x0042b1a8 xor eax, eax | eax = 0; 0x0042b1aa nop word [rax + rax] | | do { 0x0042b1b0 mov rsi, qword [r13] | rsi = *(r13); 0x0042b1b4 mov rsi, qword [rsi] | rsi = *(rsi); 0x0042b1b7 mov edi, edx | edi = edx; 0x0042b1b9 mov rbx, qword [rbp + rdi*8] | rbx = *((rbp + rdi*8)); 0x0042b1be mov rdi, qword [rbp + rdi*8 + 8] | rdi = *((rbp + rdi*8 + 8)); 0x0042b1c3 sub rdi, rbx | rdi -= rbx; 0x0042b1c6 mov qword [rsi + rdx*8], rbx | *((rsi + rdx*8)) = rbx; 0x0042b1ca mov qword [rsi + rdx*8 + 8], rdi | *((rsi + rdx*8 + 8)) = rdi; 0x0042b1cf lea esi, [rdx + 2] | esi = rdx + 2; 0x0042b1d2 mov rdi, qword [r13] | rdi = *(r13); 0x0042b1d6 mov rdi, qword [rdi] | rdi = *(rdi); 0x0042b1d9 mov rbx, qword [rbp + rsi*8] | rbx = *((rbp + rsi*8)); 0x0042b1de mov rsi, qword [rbp + rsi*8 + 8] | rsi = *((rbp + rsi*8 + 8)); 0x0042b1e3 sub rsi, rbx | rsi -= rbx; 0x0042b1e6 mov qword [rdi + rdx*8 + 0x10], rbx | *((rdi + rdx*8 + 0x10)) = rbx; 0x0042b1eb mov qword [rdi + rdx*8 + 0x18], rsi | *((rdi + rdx*8 + 0x18)) = rsi; 0x0042b1f0 add rax, 2 | rax += 2; 0x0042b1f4 add rdx, 4 | rdx += 4; 0x0042b1f8 cmp rcx, rax | 0x0042b1fb jne 0x42b1b0 | | } while (rcx != rax); 0x0042b1fd mov ecx, edx | ecx = edx; 0x0042b1ff test r15b, 1 | | if ((r15b & 1) != 0) { 0x0042b203 je 0x42b226 | | label_5: 0x0042b205 mov rdx, qword [r13] | rdx = *(r13); 0x0042b209 mov rdx, qword [rdx] | rdx = *(rdx); 0x0042b20c mov rsi, qword [rbp + rcx*8] | rsi = *((rbp + rcx*8)); 0x0042b211 mov rcx, qword [rbp + rcx*8 + 8] | rcx = *((rbp + rcx*8 + 8)); 0x0042b216 sub rcx, rsi | rcx -= rsi; 0x0042b219 shl rax, 4 | rax <<= 4; 0x0042b21d mov qword [rdx + rax], rsi | *((rdx + rax)) = rsi; 0x0042b221 mov qword [rdx + rax + 8], rcx | *((rdx + rax + 8)) = rcx; | } | label_3: 0x0042b226 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0042b22b mov ebp, dword [rsp + 0x18] | ebp = *((rsp + 0x18)); | label_2: 0x0042b22f mov rax, qword [r12 + 0x60] | rax = *((r12 + 0x60)); 0x0042b234 cmp qword [rax + 0x20], rcx | | if (*((rax + 0x20)) != rcx) { 0x0042b238 je 0x42b258 | 0x0042b23a mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042b23f call 0x4cc070 | pcre2_match_data_free_8 (); 0x0042b244 mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0042b249 call 0x47e0f0 | pcre2_jit_stack_free_8 (); 0x0042b24e mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0042b253 call 0x4627d0 | pcre2_match_context_free_8 (); | } | label_0: 0x0042b258 mov eax, ebp | eax = ebp; 0x0042b25a add rsp, 0x48 | 0x0042b25e pop rbx | 0x0042b25f pop r12 | 0x0042b261 pop r13 | 0x0042b263 pop r14 | 0x0042b265 pop r15 | 0x0042b267 pop rbp | 0x0042b268 ret | return rax; | }