{"type": "func", "start": 6442505520, "end": 6442505904, "name": "cocos2d::extension::CCControlUtils::RGBfromHSV", "pseudocode": "// \n// cocos2d::extension::CCControlUtils::RGBfromHSV from 0x18000d530 to 0x18000d6b0 (384 bytes)\n// \n// 5 xrefs:\n// > cocos2d::extension::CCControlColourPicker::hueSliderValueChanged @ 0x1800080f4\n// > cocos2d::extension::CCControlColourPicker::colourSliderValueChanged @ 0x180008237\n// > cocos2d::extension::CCControlSaturationBrightnessPicker::updateWithHSV @ 0x180009d59\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x180049e10\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\n__int64 __fastcall cocos2d::extension::CCControlUtils::RGBfromHSV(__int64 a1, double *a2)\n{\n  double v2; // xmm3_8\n  double v3; // xmm6_8\n  __m128d v7; // xmm0\n  double v8; // xmm3_8\n  double v9; // xmm1_8\n  int v10; // eax\n  double v11; // xmm2_8\n  double v12; // xmm3_8\n  double v13; // xmm5_8\n  double v14; // xmm4_8\n\n  v2 = *a2;\n  v3 = a2[1];\n  *(_QWORD *)(a1 + 24) = 0x3FF0000000000000LL;\n  if ( v3 > 0.0 )\n  {\n    if ( v2 >= 360.0 )\n      v2 = 0.0;\n    v8 = v2 * 0.01666666753590107;\n    v9 = a2[2];\n    v10 = (int)v8;\n    v11 = (1.0 - v3) * v9;\n    v12 = v8 - (double)(int)v8;\n    v13 = (1.0 - v3 * v12) * v9;\n    v14 = (1.0 - (1.0 - v12) * v3) * v9;\n    switch ( v10 )\n    {\n      case 0:\n        *(double *)(a1 + 8) = v14;\n        *(double *)(a1 + 16) = v11;\n        break;\n      case 1:\n        *(double *)(a1 + 8) = v9;\n        v9 = (1.0 - v3 * v12) * v9;\n        *(double *)(a1 + 16) = v11;\n        break;\n      case 2:\n        *(double *)(a1 + 8) = v9;\n        v9 = (1.0 - v3) * v9;\n        *(double *)(a1 + 16) = v14;\n        break;\n      case 3:\n        *(double *)(a1 + 16) = v9;\n        v9 = (1.0 - v3) * v9;\n        *(double *)(a1 + 8) = v13;\n        break;\n      case 4:\n        *(double *)(a1 + 16) = v9;\n        v9 = (1.0 - (1.0 - v12) * v3) * v9;\n        goto LABEL_14;\n      default:\n        *(double *)(a1 + 16) = v13;\nLABEL_14:\n        *(double *)(a1 + 8) = v11;\n        break;\n    }\n    *(double *)a1 = v9;\n    return a1;\n  }\n  else if ( isnan(v2) )\n  {\n    *(_QWORD *)a1 = 0;\n    *(_QWORD *)(a1 + 8) = 0;\n    *(_QWORD *)(a1 + 16) = 0;\n    return a1;\n  }\n  else\n  {\n    v7 = _mm_unpacklo_pd((__m128d)*((unsigned __int64 *)a2 + 2), (__m128d)*((unsigned __int64 *)a2 + 2));\n    *(double *)(a1 + 16) = v7.m128d_f64[0];\n    *(__m128d *)a1 = v7;\n    return a1;\n  }\n}", "assembly": "; \n; cocos2d::extension::CCControlUtils::RGBfromHSV from 0x18000d530 to 0x18000d6b0 (384 bytes)\n; \n; 5 xrefs:\n; > cocos2d::extension::CCControlColourPicker::hueSliderValueChanged @ 0x1800080f4\n; > cocos2d::extension::CCControlColourPicker::colourSliderValueChanged @ 0x180008237\n; > cocos2d::extension::CCControlSaturationBrightnessPicker::updateWithHSV @ 0x180009d59\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x180049e10\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     [rsp+arg_0], rbx                                               ; +0x0, 0x18000d530\npush    rdi                                                            ; +0x5, 0x18000d535\nsub     rsp, 30h                                                       ; +0x6, 0x18000d536\nmovsd   xmm3, qword ptr [rdx]                                          ; +0xa, 0x18000d53a\nxorps   xmm0, xmm0                                                     ; +0xe, 0x18000d53e\nmovaps  [rsp+38h+var_18], xmm6                                         ; +0x11, 0x18000d541\nmov     rax, 3FF0000000000000h                                         ; +0x16, 0x18000d546\nmovsd   xmm6, qword ptr [rdx+8]                                        ; +0x20, 0x18000d550\nmov     rdi, rdx                                                       ; +0x25, 0x18000d555\ncomisd  xmm0, xmm6                                                     ; +0x28, 0x18000d558\nmov     rbx, rcx                                                       ; +0x2c, 0x18000d55c\nmov     [rcx+18h], rax                                                 ; +0x2f, 0x18000d55f\njb      short loc_18000D5B6                                            ; +0x33, 0x18000d563\nmovaps  xmm0, xmm3; X                                                  ; +0x35, 0x18000d565\ncall    cs:_isnan                                                      ; +0x38, 0x18000d568\ntest    eax, eax                                                       ; +0x3e, 0x18000d56e\njnz     short loc_18000D596                                            ; +0x40, 0x18000d570\nmovsd   xmm0, qword ptr [rdi+10h]                                      ; +0x42, 0x18000d572\nmov     rax, rbx                                                       ; +0x47, 0x18000d577\nunpcklpd xmm0, xmm0                                                    ; +0x4a, 0x18000d57a\nmovsd   qword ptr [rbx+10h], xmm0                                      ; +0x4e, 0x18000d57e\nmovups  xmmword ptr [rbx], xmm0                                        ; +0x53, 0x18000d583\nmov     rbx, [rsp+38h+arg_0]                                           ; +0x56, 0x18000d586\nmovaps  xmm6, [rsp+38h+var_18]                                         ; +0x5b, 0x18000d58b\nadd     rsp, 30h                                                       ; +0x60, 0x18000d590\npop     rdi                                                            ; +0x64, 0x18000d594\nretn                                                                   ; +0x65, 0x18000d595\nxor     eax, eax                                                       ; +0x66, 0x18000d596\nmov     [rbx], rax                                                     ; +0x68, 0x18000d598\nmov     [rbx+8], rax                                                   ; +0x6b, 0x18000d59b\nmov     [rbx+10h], rax                                                 ; +0x6f, 0x18000d59f\nmov     rax, rbx                                                       ; +0x73, 0x18000d5a3\nmov     rbx, [rsp+38h+arg_0]                                           ; +0x76, 0x18000d5a6\nmovaps  xmm6, [rsp+38h+var_18]                                         ; +0x7b, 0x18000d5ab\nadd     rsp, 30h                                                       ; +0x80, 0x18000d5b0\npop     rdi                                                            ; +0x84, 0x18000d5b4\nretn                                                                   ; +0x85, 0x18000d5b5\ncomisd  xmm3, cs:qword_180029578                                       ; +0x86, 0x18000d5b6\njb      short loc_18000D5C3                                            ; +0x8e, 0x18000d5be\nxorps   xmm3, xmm3                                                     ; +0x90, 0x18000d5c0\nmovsd   xmm4, cs:qword_180029530                                       ; +0x93, 0x18000d5c3\nxorps   xmm0, xmm0                                                     ; +0x9b, 0x18000d5cb\nmulsd   xmm3, cs:qword_180029520                                       ; +0x9e, 0x18000d5ce\nmovaps  xmm5, xmm4                                                     ; +0xa6, 0x18000d5d6\nmovsd   xmm1, qword ptr [rdx+10h]                                      ; +0xa9, 0x18000d5d9\nmovaps  xmm2, xmm4                                                     ; +0xae, 0x18000d5de\nsubsd   xmm2, xmm6                                                     ; +0xb1, 0x18000d5e1\ncvttsd2si eax, xmm3                                                    ; +0xb5, 0x18000d5e5\nmulsd   xmm2, xmm1                                                     ; +0xb9, 0x18000d5e9\ncvtsi2sd xmm0, eax                                                     ; +0xbd, 0x18000d5ed\nsubsd   xmm3, xmm0                                                     ; +0xc1, 0x18000d5f1\nmovaps  xmm0, xmm6                                                     ; +0xc5, 0x18000d5f5\nmulsd   xmm0, xmm3                                                     ; +0xc8, 0x18000d5f8\nsubsd   xmm5, xmm0                                                     ; +0xcc, 0x18000d5fc\nmovaps  xmm0, xmm4                                                     ; +0xd0, 0x18000d600\nsubsd   xmm0, xmm3                                                     ; +0xd3, 0x18000d603\nmulsd   xmm5, xmm1                                                     ; +0xd7, 0x18000d607\nmulsd   xmm0, xmm6                                                     ; +0xdb, 0x18000d60b\nsubsd   xmm4, xmm0                                                     ; +0xdf, 0x18000d60f\nmulsd   xmm4, xmm1                                                     ; +0xe3, 0x18000d613\ncmp     eax, 5; switch 6 cases                                         ; +0xe7, 0x18000d617\nja      short def_18000D62F; jumptable 000000018000D62F default case, case 5 ; +0xea, 0x18000d61a\nlea     rdx, cs:180000000h                                             ; +0xec, 0x18000d61c\ncdqe                                                                   ; +0xf3, 0x18000d623\nmov     ecx, ds:(jpt_18000D62F - 180000000h)[rdx+rax*4]                ; +0xf5, 0x18000d625\nadd     rcx, rdx                                                       ; +0xfc, 0x18000d62c\njmp     rcx; switch jump                                               ; +0xff, 0x18000d62f\nmovsd   qword ptr [rbx+8], xmm4; jumptable 000000018000D62F case 0     ; +0x101, 0x18000d631\nmovsd   qword ptr [rbx+10h], xmm2                                      ; +0x106, 0x18000d636\njmp     short loc_18000D67E                                            ; +0x10b, 0x18000d63b\nmovsd   qword ptr [rbx+8], xmm1; jumptable 000000018000D62F case 1     ; +0x10d, 0x18000d63d\nmovaps  xmm1, xmm5                                                     ; +0x112, 0x18000d642\nmovsd   qword ptr [rbx+10h], xmm2                                      ; +0x115, 0x18000d645\njmp     short loc_18000D67E                                            ; +0x11a, 0x18000d64a\nmovsd   qword ptr [rbx+8], xmm1; jumptable 000000018000D62F case 2     ; +0x11c, 0x18000d64c\nmovaps  xmm1, xmm2                                                     ; +0x121, 0x18000d651\nmovsd   qword ptr [rbx+10h], xmm4                                      ; +0x124, 0x18000d654\njmp     short loc_18000D67E                                            ; +0x129, 0x18000d659\nmovsd   qword ptr [rbx+10h], xmm1; jumptable 000000018000D62F case 3   ; +0x12b, 0x18000d65b\nmovaps  xmm1, xmm2                                                     ; +0x130, 0x18000d660\nmovsd   qword ptr [rbx+8], xmm5                                        ; +0x133, 0x18000d663\njmp     short loc_18000D67E                                            ; +0x138, 0x18000d668\nmovsd   qword ptr [rbx+10h], xmm1; jumptable 000000018000D62F case 4   ; +0x13a, 0x18000d66a\nmovaps  xmm1, xmm4                                                     ; +0x13f, 0x18000d66f\njmp     short loc_18000D679                                            ; +0x142, 0x18000d672\nmovsd   qword ptr [rbx+10h], xmm5; jumptable 000000018000D62F default case, case 5 ; +0x144, 0x18000d674\nmovsd   qword ptr [rbx+8], xmm2                                        ; +0x149, 0x18000d679\nmovsd   qword ptr [rbx], xmm1                                          ; +0x14e, 0x18000d67e\nmov     rax, rbx                                                       ; +0x152, 0x18000d682\nmov     rbx, [rsp+38h+arg_0]                                           ; +0x155, 0x18000d685\nmovaps  xmm6, [rsp+38h+var_18]                                         ; +0x15a, 0x18000d68a\nadd     rsp, 30h                                                       ; +0x15f, 0x18000d68f\npop     rdi                                                            ; +0x163, 0x18000d693\nretn                                                                   ; +0x164, 0x18000d694\nalign 8                                                                ; +0x165, 0x18000d695\ndd offset loc_18000D631 - 180000000h; jump table for switch statement  ; +0x168, 0x18000d698", "xrefs": ["cocos2d::extension::CCControlColourPicker::hueSliderValueChanged @ 0x1800080f4", "cocos2d::extension::CCControlColourPicker::colourSliderValueChanged @ 0x180008237", "cocos2d::extension::CCControlSaturationBrightnessPicker::updateWithHSV @ 0x180009d59", "<???> @ 0x18002fdf8", "<???> @ 0x180049e10"], "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"}