{"type": "func", "start": 6443728584, "end": 6443728862, "name": "should_round_up", "pseudocode": "// \n// should_round_up from 0x180137ec8 to 0x180137fde (278 bytes)\n// \n// 3 xrefs:\n// > fp_format_a @ 0x1801377c7\n// > <???> @ 0x180203620\n// > <???> @ 0x18020362c\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\nchar __fastcall should_round_up(unsigned __int64 *a1, __int64 a2, __int16 a3, int a4)\n{\n  int v4; // r14d\n  unsigned __int64 v6; // rbx\n  int v9; // eax\n  unsigned __int64 v10; // r8\n  unsigned __int64 v11; // rax\n  char v12; // dl\n\n  v4 = a3;\n  v6 = (a2 & *a1 & 0xFFFFFFFFFFFFFLL) >> a3;\n  if ( !a4 )\n    return (unsigned __int16)v6 >= 8u;\n  v9 = fegetround();\n  switch ( v9 )\n  {\n    case 0:\n      v10 = *a1;\n      v11 = (a2 & *a1 & 0xFFFFFFFFFFFFFLL) >> v4;\n      if ( (unsigned __int16)v11 > 8u )\n        return 1;\n      if ( (unsigned __int16)v11 >= 8u )\n      {\n        v12 = 1;\n        if ( (v10 & ((1LL << v4) - 1) & 0xFFFFFFFFFFFFFLL) == 0 )\n        {\n          if ( v4 == 48 )\n            LOBYTE(v10) = (v10 & 0x7FF0000000000000LL) != 0;\n          else\n            v10 = (a2 & (v10 >> 4) & 0xFFFFFFFFFFFFLL) >> v4;\n          return v10 & 1;\n        }\n        return v12;\n      }\n      return 0;\n    case 512:\n      return (_WORD)v6 && (*a1 & 0x8000000000000000uLL) == 0LL;\n    case 256:\n      return (_WORD)v6 && (*a1 & 0x8000000000000000uLL) != 0LL;\n  }\n  return 0;\n}", "assembly": "; \n; should_round_up from 0x180137ec8 to 0x180137fde (278 bytes)\n; \n; 3 xrefs:\n; > fp_format_a @ 0x1801377c7\n; > <???> @ 0x180203620\n; > <???> @ 0x18020362c\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     rax, rsp                                                       ; +0x0, 0x180137ec8\nmov     [rax+8], rbx                                                   ; +0x3, 0x180137ecb\nmov     [rax+10h], rbp                                                 ; +0x7, 0x180137ecf\nmov     [rax+18h], rsi                                                 ; +0xb, 0x180137ed3\nmov     [rax+20h], rdi                                                 ; +0xf, 0x180137ed7\npush    r12                                                            ; +0x13, 0x180137edb\npush    r14                                                            ; +0x15, 0x180137edd\npush    r15                                                            ; +0x17, 0x180137edf\nsub     rsp, 20h                                                       ; +0x19, 0x180137ee1\nmov     rbx, [rcx]                                                     ; +0x1d, 0x180137ee5\nmov     r12, 0FFFFFFFFFFFFFh                                           ; +0x20, 0x180137ee8\nand     rbx, rdx                                                       ; +0x2a, 0x180137ef2\nmovsx   r14d, r8w                                                      ; +0x2d, 0x180137ef5\nand     rbx, r12                                                       ; +0x31, 0x180137ef9\nmov     rdi, rcx                                                       ; +0x34, 0x180137efc\nmov     ecx, r14d                                                      ; +0x37, 0x180137eff\nxor     r15d, r15d                                                     ; +0x3a, 0x180137f02\nshr     rbx, cl                                                        ; +0x3d, 0x180137f05\nmov     rbp, rdx                                                       ; +0x40, 0x180137f08\ntest    r9d, r9d                                                       ; +0x43, 0x180137f0b\njnz     short loc_180137F1C                                            ; +0x46, 0x180137f0e\ncmp     bx, 8                                                          ; +0x48, 0x180137f10\nsetnb   al                                                             ; +0x4c, 0x180137f14\njmp     loc_180137FBF                                                  ; +0x4f, 0x180137f17\ncall    fegetround                                                     ; +0x54, 0x180137f1c\ntest    eax, eax                                                       ; +0x59, 0x180137f21\njnz     short loc_180137F97                                            ; +0x5b, 0x180137f23\nmov     r8, [rdi]                                                      ; +0x5d, 0x180137f25\nmov     ecx, r14d                                                      ; +0x60, 0x180137f28\nmov     rax, r8                                                        ; +0x63, 0x180137f2b\nand     rax, rbp                                                       ; +0x66, 0x180137f2e\nand     rax, r12                                                       ; +0x69, 0x180137f31\nshr     rax, cl                                                        ; +0x6c, 0x180137f34\ncmp     ax, 8                                                          ; +0x6f, 0x180137f37\njbe     short loc_180137F44                                            ; +0x73, 0x180137f3b\nmov     edx, 1                                                         ; +0x75, 0x180137f3d\njmp     short loc_180137F93                                            ; +0x7a, 0x180137f42\njnb     short loc_180137F4B                                            ; +0x7c, 0x180137f44\nmov     dl, r15b                                                       ; +0x7e, 0x180137f46\njmp     short loc_180137F93                                            ; +0x81, 0x180137f49\nmov     edx, 1                                                         ; +0x83, 0x180137f4b\nmov     eax, edx                                                       ; +0x88, 0x180137f50\nshl     rax, cl                                                        ; +0x8a, 0x180137f52\nsub     rax, rdx                                                       ; +0x8d, 0x180137f55\nand     rax, r8                                                        ; +0x90, 0x180137f58\ntest    r12, rax                                                       ; +0x93, 0x180137f5b\njnz     short loc_180137F93                                            ; +0x96, 0x180137f5e\ncmp     r14d, 30h ; '0'                                                ; +0x98, 0x180137f60\njz      short loc_180137F7F                                            ; +0x9c, 0x180137f64\nshr     r8, 4                                                          ; +0x9e, 0x180137f66\nmov     rax, 0FFFFFFFFFFFFh                                            ; +0xa2, 0x180137f6a\nand     r8, rbp                                                        ; +0xac, 0x180137f74\nand     r8, rax                                                        ; +0xaf, 0x180137f77\nshr     r8, cl                                                         ; +0xb2, 0x180137f7a\njmp     short loc_180137F90                                            ; +0xb5, 0x180137f7d\nmov     rax, 7FF0000000000000h                                         ; +0xb7, 0x180137f7f\ntest    rax, r8                                                        ; +0xc1, 0x180137f89\nsetnz   r8b                                                            ; +0xc4, 0x180137f8c\nand     dl, r8b                                                        ; +0xc8, 0x180137f90\nmov     al, dl                                                         ; +0xcb, 0x180137f93\njmp     short loc_180137FBF                                            ; +0xcd, 0x180137f95\ncmp     eax, 200h                                                      ; +0xcf, 0x180137f97\njnz     short loc_180137FAA                                            ; +0xd4, 0x180137f9c\ntest    bx, bx                                                         ; +0xd6, 0x180137f9e\njz      short loc_180137F46                                            ; +0xd9, 0x180137fa1\ncmp     [rdi], r15                                                     ; +0xdb, 0x180137fa3\njl      short loc_180137F46                                            ; +0xde, 0x180137fa6\njmp     short loc_180137F3D                                            ; +0xe0, 0x180137fa8\ncmp     eax, 100h                                                      ; +0xe2, 0x180137faa\njnz     short loc_180137FBD                                            ; +0xe7, 0x180137faf\ntest    bx, bx                                                         ; +0xe9, 0x180137fb1\njz      short loc_180137F46                                            ; +0xec, 0x180137fb4\ncmp     [rdi], r15                                                     ; +0xee, 0x180137fb6\njge     short loc_180137F46                                            ; +0xf1, 0x180137fb9\njmp     short loc_180137F3D                                            ; +0xf3, 0x180137fbb\nxor     al, al                                                         ; +0xf5, 0x180137fbd\nmov     rbx, [rsp+38h+arg_0]                                           ; +0xf7, 0x180137fbf\nmov     rbp, [rsp+38h+arg_8]                                           ; +0xfc, 0x180137fc4\nmov     rsi, [rsp+38h+arg_10]                                          ; +0x101, 0x180137fc9\nmov     rdi, [rsp+38h+arg_18]                                          ; +0x106, 0x180137fce\nadd     rsp, 20h                                                       ; +0x10b, 0x180137fd3\npop     r15                                                            ; +0x10f, 0x180137fd7\npop     r14                                                            ; +0x111, 0x180137fd9\npop     r12                                                            ; +0x113, 0x180137fdb\nretn                                                                   ; +0x115, 0x180137fdd", "xrefs": ["fp_format_a @ 0x1801377c7", "<???> @ 0x180203620", "<???> @ 0x18020362c"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}