; assembly | /* r2dec pseudo code output */ | /* balm_configurationutil.t/assume @ 0x4043f0 */ | #include | ; (fcn) method.ThresholdPublisher.publish_BloombergLP::balm::MetricSample_const_ () | int64_t method_ThresholdPublisher_publish_BloombergLP::balm::MetricSample_const_ (signed int64_t arg2, int64_t arg1) { | signed int64_t var_8h; | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* ThresholdPublisher::publish(BloombergLP::balm::MetricSample const&) */ 0x004043f0 push rbp | 0x004043f1 push r15 | 0x004043f3 push r14 | 0x004043f5 push r13 | 0x004043f7 push r12 | 0x004043f9 push rbx | 0x004043fa sub rsp, 0x18 | 0x004043fe mov qword [rsp + 8], rsi | *((rsp + 8)) = rsi; 0x00404403 cmp dword [rsi + 0x30], 0 | | if (*((rsi + 0x30)) <= 0) { 0x00404407 jle 0x404568 | goto label_3; | } 0x0040440d mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00404412 mov r14, qword [rax + 0x10] | r14 = *((rax + 0x10)); 0x00404416 mov rax, qword [rax + 0x18] | rax = *((rax + 0x18)); 0x0040441a cmp r14, rax | | if (r14 == rax) { 0x0040441d je 0x404568 | goto label_3; | } 0x00404423 mov r12, rdi | r12 = rdi; 0x00404426 jmp 0x404446 | goto label_4; | label_0: 0x00404430 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00404435 mov rax, qword [rax + 0x18] | rax = *((rax + 0x18)); | do { 0x00404439 add r14, 0x20 | r14 += 0x20; 0x0040443d cmp r14, rax | | if (r14 == rax) { 0x00404440 je 0x404568 | goto label_3; | } | label_4: 0x00404446 cmp dword [r14 + 8], 0 | 0x0040444b je 0x404439 | | } while (*((r14 + 8)) == 0); 0x0040444d mov r15, qword [r14] | r15 = *(r14); 0x00404450 jmp 0x404480 | goto label_5; | label_1: 0x00404460 mov rdi, rbx | rdi = rbx; 0x00404463 call 0x404250 | pthread_mutex_unlock (); | label_2: 0x00404468 add r15, 0x28 | r15 += 0x28; 0x0040446c movsxd rax, dword [r14 + 8] | rax = *((r14 + 8)); 0x00404470 lea rax, [rax + rax*4] | rax *= 5; 0x00404474 shl rax, 3 | rax <<= 3; 0x00404478 add rax, qword [r14] | rax += *(r14); 0x0040447b cmp r15, rax | | if (r15 == rax) { 0x0040447e je 0x404430 | goto label_0; | } | label_5: 0x00404480 mov rbp, qword [r15] | rbp = *(r15); 0x00404483 mov r13d, dword [r12 + 8] | r13d = *((r12 + 8)); 0x00404488 lea rbx, [rbp + 0x48] | rbx = rbp + 0x48; 0x0040448c mov rdi, rbx | rdi = rbx; 0x0040448f call 0x4041b0 | pthread_mutex_lock (); 0x00404494 mov rax, qword [rbp + 0x28] | rax = *((rbp + 0x28)); 0x00404498 mov rcx, qword [rbp + 0x30] | rcx = *((rbp + 0x30)); 0x0040449c sub rcx, rax | rcx -= rax; 0x0040449f sar rcx, 3 | rcx >>= 3; 0x004044a3 cmp rcx, r13 | | if (rcx <= r13) { 0x004044a6 jbe 0x404460 | goto label_1; | } 0x004044a8 mov rbp, qword [rax + r13*8] | rbp = *((rax + r13*8)); 0x004044ac mov rdi, rbx | rdi = rbx; 0x004044af call 0x404250 | pthread_mutex_unlock (); 0x004044b4 test rbp, rbp | | if (rbp == 0) { 0x004044b7 je 0x404468 | goto label_2; | } 0x004044b9 movsd xmm0, qword [r15 + 0x10] | xmm0 = *((r15 + 0x10)); 0x004044bf mov eax, dword [rbp] | eax = *(rbp); 0x004044c2 xorps xmm1, xmm1 | __asm ("xorps xmm1, xmm1"); 0x004044c5 cvtsi2sd xmm1, rax | __asm ("cvtsi2sd xmm1, rax"); 0x004044ca ucomisd xmm0, xmm1 | __asm ("ucomisd xmm0, xmm1"); | if (rbp <= 0) { 0x004044ce jbe 0x404468 | goto label_2; | } 0x004044d0 mov edi, 0x679e68 | 0x004044d5 mov esi, 0x444360 | 0x004044da mov edx, 9 | 0x004044df call 0x40a040 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "WARNING: ", 9); 0x004044e4 mov rdi, r15 | 0x004044e7 mov rsi, rax | 0x004044ea call 0x40df00 | rax = BloombergLP::balm::MetricId::print(std::_1::basic_ostream>&)const (r15, rax); 0x004044ef mov esi, 0x44627c | 0x004044f4 mov edx, 3 | 0x004044f9 mov rdi, rax | 0x004044fc call 0x40a040 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x44627c, 3); 0x00404501 movsd xmm0, qword [r15 + 0x10] | xmm0 = *((r15 + 0x10)); 0x00404507 mov rdi, rax | rdi = rax; 0x0040450a call 0x404160 | rax = std::_1::basic_ostream>::operator << (double) (); 0x0040450f mov r13, rax | r13 = rax; 0x00404512 mov rax, qword [rax] | rax = *(rax); 0x00404515 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00404519 add rsi, r13 | rsi += r13; 0x0040451c lea rbx, [rsp + 0x10] | rbx = rsp + 0x10; 0x00404521 mov rdi, rbx | rdi = rbx; 0x00404524 call 0x403ff0 | std::_1::ios_base::getloc()const (); 0x00404529 mov esi, 0x679db0 | esi = obj.std::__1::ctype_char_::id; 0x0040452e mov rdi, rbx | rdi = rbx; 0x00404531 call 0x4040b0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00404536 mov rcx, qword [rax] | rcx = *(rax); 0x00404539 mov rdi, rax | rdi = rax; 0x0040453c mov esi, 0xa | esi = 0xa; 0x00404541 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00404544 mov ebx, eax | ebx = eax; 0x00404546 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0040454b call 0x404140 | std::_1::locale::~locale() (); 0x00404550 movsx esi, bl | esi = (int32_t) bl; 0x00404553 mov rdi, r13 | rdi = r13; 0x00404556 call 0x403e20 | std::_1::basic_ostream>::put(char) (); 0x0040455b mov rdi, r13 | rdi = r13; 0x0040455e call 0x403fb0 | std::_1::basic_ostream>::flush() (); 0x00404563 jmp 0x404468 | goto label_2; | label_3: 0x00404568 add rsp, 0x18 | 0x0040456c pop rbx | 0x0040456d pop r12 | 0x0040456f pop r13 | 0x00404571 pop r14 | 0x00404573 pop r15 | 0x00404575 pop rbp | 0x00404576 ret | return rax; | }