; assembly | /* r2dec pseudo code output */ | /* bdlpcre_regex.t/none @ 0x42a7d0 */ | #include | ; (fcn) method.BloombergLP::bdlpcre::RegEx.prepareImp_char__unsigned_long__unsigned_long__char_const__int__unsigned_long_ () | uint64_t method_BloombergLP::bdlpcre::RegEx_prepareImp_char_unsigned_long_unsigned_long_char_const_int_unsigned_long_ (int64_t arg_70h, int64_t arg6, char * arg5, char * arg4, char * arg3, char * arg2, char * arg1) { | char * var_8h; | char * dest; | int64_t var_1ch; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlpcre::RegEx::prepareImp(char*, unsigned long, unsigned long*, char const*, int, unsigned long) */ 0x0042a7d0 push rbp | 0x0042a7d1 push r15 | 0x0042a7d3 push r14 | 0x0042a7d5 push r13 | 0x0042a7d7 push r12 | 0x0042a7d9 push rbx | 0x0042a7da sub rsp, 0x38 | 0x0042a7de mov r13d, r9d | r13d = r9d; 0x0042a7e1 mov rbp, r8 | 0x0042a7e4 mov r12, rcx | r12 = rcx; 0x0042a7e7 mov qword [rsp + 8], rdx | *((rsp + 8)) = rdx; 0x0042a7ec mov qword [rsp + 0x10], rsi | *((rsp + 0x10)) = rsi; 0x0042a7f1 mov rbx, rdi | rbx = rdi; 0x0042a7f4 mov rdi, qword [rdi + 0x48] | rdi = *((rdi + 0x48)); 0x0042a7f8 test rdi, rdi | | if (rdi != 0) { 0x0042a7fb je 0x42a823 | 0x0042a7fd call 0x455f60 | pcre2_code_free_8 (); 0x0042a802 mov qword [rbx + 0x48], 0 | *((rbx + 0x48)) = 0; 0x0042a80a mov dword [rbx], 0 | *(rbx) = 0; 0x0042a810 mov qword [rbx + 0x58], 0 | *((rbx + 0x58)) = 0; 0x0042a818 lea rdi, [rbx + 8] | 0x0042a81c xor esi, esi | esi = 0; 0x0042a81e call 0x433ce0 | bsl::basic_string,bsl::allocator>::privateClear(bool) (rbx + 8); | } 0x0042a823 lea r14, [rbx + 8] | r14 = rbx + 8; 0x0042a827 mov rdi, rbp | 0x0042a82a call 0x403bd0 | rax = strlen (rbp); 0x0042a82f mov r15, qword [rbx + 0x20] | r15 = *((rbx + 0x20)); 0x0042a833 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x0042a83b mov ecx, 0x4da403 | 0x0042a840 mov rdi, r14 | 0x0042a843 mov rsi, rbp | 0x0042a846 mov rdx, rax | 0x0042a849 call 0x433920 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, rbp, rax, "string<...>::assign(char*...): string too long"); 0x0042a84e mov rax, qword [rsp + 0x70] | rax = *((rsp + 0x70)); 0x0042a853 mov dword [rbx], r13d | *(rbx) = r13d; 0x0042a856 xor ecx, ecx | ecx = 0; 0x0042a858 test r13b, 0x10 | | if ((r13b & 0x10) != 0) { 0x0042a85c cmovne rcx, rax | rcx = rax; | } 0x0042a860 mov qword [rbx + 0x58], rcx | *((rbx + 0x58)) = rcx; 0x0042a864 movd xmm0, r13d | xmm0 = r13d; 0x0042a869 pshufd xmm0, xmm0, 0 | __asm ("pshufd xmm0, xmm0, 0"); 0x0042a86e pmulld xmm0, xmmword [rip + 0xafe99] | __asm ("pmulld xmm0, xmmword [0x004da710]"); 0x0042a877 pand xmm0, xmmword [rip + 0xafea1] | xmm0 &= *(0x004da720); 0x0042a87f pshufd xmm1, xmm0, 0xee | __asm ("pshufd xmm1, xmm0, 0xee"); 0x0042a884 por xmm1, xmm0 | xmm1 |= xmm0; 0x0042a888 pshufd xmm0, xmm1, 0x55 | __asm ("pshufd xmm0, xmm1, 0x55"); 0x0042a88d por xmm0, xmm1 | xmm0 |= xmm1; 0x0042a891 movd edx, xmm0 | edx = xmm0; 0x0042a895 mov r9, qword [rbx + 0x40] | r9 = *((rbx + 0x40)); 0x0042a899 lea rcx, [rsp + 0x1c] | rcx = rsp + 0x1c; 0x0042a89e lea r8, [rsp + 0x30] | r8 = rsp + 0x30; 0x0042a8a3 mov rdi, rbp | rdi = rbp; 0x0042a8a6 mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x0042a8ad call 0x456d40 | rax = pcre2_compile_8 (); 0x0042a8b2 test rax, rax | | if (rax != 0) { 0x0042a8b5 je 0x42a995 | 0x0042a8bb mov r14, rax | r14 = rax; 0x0042a8be test r13b, 0x10 | | if ((r13b & 0x10) != 0) { 0x0042a8c2 je 0x42a903 | 0x0042a8c4 mov rdi, r14 | rdi = r14; 0x0042a8c7 mov esi, 1 | esi = 1; 0x0042a8cc call 0x462c90 | eax = pcre2_jit_compile_8 (); 0x0042a8d1 test eax, eax | | if (eax != 0) { 0x0042a8d3 je 0x42a903 | 0x0042a8d5 mov rdi, r14 | rdi = r14; 0x0042a8d8 call 0x455f60 | pcre2_code_free_8 (); 0x0042a8dd mov esi, 0x4da738 | 0x0042a8e2 mov rdi, qword [rsp + 0x10] | 0x0042a8e7 mov rdx, qword [rsp + 8] | 0x0042a8ec call 0x403fa0 | strncpy (*((rsp + 0x10)), "JIT compilation failed.", *((rsp + 8))); 0x0042a8f1 mov qword [r12], 0 | *(r12) = 0; 0x0042a8f9 mov eax, 0xffffffff | eax = 0xffffffff; 0x0042a8fe jmp 0x42a9cd | | } 0x0042a903 mov qword [rsp + 0x20], r12 | *((rsp + 0x20)) = r12; 0x0042a908 mov rbp, qword [rbx + 0x60] | rbp = *((rbx + 0x60)); 0x0042a90c mov r15, qword [rbx + 0x38] | r15 = *((rbx + 0x38)); 0x0042a910 mov r12d, dword [rbx + 0x50] | r12d = *((rbx + 0x50)); 0x0042a914 mov r13, qword [rbx + 0x58] | r13 = *((rbx + 0x58)); 0x0042a918 lea rax, [rbp + 0x28] | rax = rbp + 0x28; 0x0042a91c mov qword [rsp + 0x28], rax | *((rsp + 0x28)) = rax; 0x0042a921 mov rdi, qword [rbp + 0x30] | rdi = *((rbp + 0x30)); 0x0042a925 call 0x4cc220 | pcre2_match_data_free_8 (); 0x0042a92a mov rdi, qword [rbp + 0x38] | rdi = *((rbp + 0x38)); 0x0042a92e call 0x47e2a0 | pcre2_jit_stack_free_8 (); 0x0042a933 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x0042a937 call 0x462980 | pcre2_match_context_free_8 (); 0x0042a93c call 0x403cb0 | rax = pthread_self (); 0x0042a941 mov qword [rbp + 0x20], rax | *((rbp + 0x20)) = rax; 0x0042a945 mov qword [rbp], r15 | *(rbp) = r15; 0x0042a949 mov qword [rbp + 8], r14 | *((rbp + 8)) = r14; 0x0042a94d mov dword [rbp + 0x10], r12d | *((rbp + 0x10)) = r12d; 0x0042a951 mov qword [rbp + 0x18], r13 | *((rbp + 0x18)) = r13; 0x0042a955 mov rdi, rbp | 0x0042a958 mov rsi, qword [rsp + 0x28] | 0x0042a95d call 0x42a600 | eax = BloombergLP::bdlpcre::RegEx_MatchContext::allocateMatchContext(BloombergLP::bdlpcre::RegEx_MatchContextData*)const (rbp, *((rsp + 0x28))); 0x0042a962 test eax, eax | | } else { | } else { | } | } | if (eax != 0) { 0x0042a964 je 0x42a9c7 | 0x0042a966 mov rdi, r14 | rdi = r14; 0x0042a969 call 0x455f60 | pcre2_code_free_8 (); 0x0042a96e mov esi, 0x4da750 | 0x0042a973 mov rdi, qword [rsp + 0x10] | 0x0042a978 mov rdx, qword [rsp + 8] | 0x0042a97d call 0x403fa0 | strncpy (*((rsp + 0x10)), "Unable to create match contexts.", *((rsp + 8))); 0x0042a982 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0042a987 mov qword [rax], 0 | *(rax) = 0; 0x0042a98e mov eax, 0xffffffff | eax = 0xffffffff; 0x0042a993 jmp 0x42a9cd | 0x0042a995 mov edi, dword [rsp + 0x1c] | edi = *((rsp + 0x1c)); 0x0042a999 mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); 0x0042a99e mov rsi, rbx | rsi = *((rsp + 0x10)); 0x0042a9a1 mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x0042a9a6 call 0x462b20 | eax = pcre2_get_error_message_8 (); 0x0042a9ab test eax, eax | | if (eax < 0) { 0x0042a9ad jns 0x42a9b7 | 0x0042a9af cmp eax, 0xffffffd0 | | if (eax == 0xffffffd0) { 0x0042a9b2 je 0x42a9b7 | goto label_0; | } 0x0042a9b4 mov byte [rbx], 0 | *(rbx) = 0; | } | label_0: 0x0042a9b7 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0042a9bc mov qword [r12], rax | *(r12) = rax; 0x0042a9c0 mov eax, 0xffffffff | eax = 0xffffffff; 0x0042a9c5 jmp 0x42a9cd | | } else { 0x0042a9c7 mov qword [rbx + 0x48], r14 | *((rbx + 0x48)) = r14; 0x0042a9cb xor eax, eax | eax = 0; | } 0x0042a9cd add rsp, 0x38 | 0x0042a9d1 pop rbx | 0x0042a9d2 pop r12 | 0x0042a9d4 pop r13 | 0x0042a9d6 pop r14 | 0x0042a9d8 pop r15 | 0x0042a9da pop rbp | 0x0042a9db ret | return rax; | }