; ; sub_521D8 from 0x521d8 to 0x52448 (624 bytes) ; ; 1 xrefs: ; > @ 0x10c058 ; ; This function is hookable on this platform! ; ; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA ; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings ; SUB SP, SP, #0x40 ; +0x0, 0x521d8 STR X21, [SP,#0x30+var_20] ; +0x4, 0x521dc STP X20, X19, [SP,#0x30+var_10] ; +0x8, 0x521e0 STP X29, X30, [SP,#0x30+var_s0] ; +0xc, 0x521e4 ADD X29, SP, #0x30 ; +0x10, 0x521e8 MOV W20, W1 ; +0x14, 0x521ec MOV X19, X0 ; +0x18, 0x521f0 BL loc_5251C ; +0x1c, 0x521f4 CBNZ W0, loc_523F0 ; +0x20, 0x521f8 LDR W8, [X19,#0x3C] ; +0x24, 0x521fc AND W8, W8, #0x60 ; '`' ; +0x28, 0x52200 CMP W8, #0x40 ; '@' ; +0x2c, 0x52204 B.NE loc_523EC ; +0x30, 0x52208 LDR X0, [X19,#0x18] ; +0x34, 0x5220c LDR W8, [X0,#0x48] ; +0x38, 0x52210 AND W8, W8, #0x30000 ; +0x3c, 0x52214 CMP W8, #0x10,LSL#12 ; +0x40, 0x52218 B.EQ loc_523EC ; +0x44, 0x5221c LDR W8, [X19,#0x38] ; +0x48, 0x52220 TBNZ W8, #0x1F, loc_523EC ; +0x4c, 0x52224 STR XZR, [SP,#0x30+var_18] ; +0x50, 0x52228 STR XZR, [SP,#0x30+var_28] ; +0x54, 0x5222c STRB WZR, [SP,#0x30+var_2C] ; +0x58, 0x52230 LDR X8, [X0] ; +0x5c, 0x52234 LDR X21, [X0,#0x60] ; +0x60, 0x52238 ADD X1, SP, #0x30+var_18 ; +0x64, 0x5223c ADD X2, SP, #0x30+var_28 ; +0x68, 0x52240 LDR X8, [X8,#0xE8] ; +0x6c, 0x52244 ADD X3, SP, #0x30+var_2C ; +0x70, 0x52248 BLR X8 ; +0x74, 0x5224c CBNZ W0, loc_523F0 ; +0x78, 0x52250 LDR X9, [SP,#0x30+var_18] ; +0x7c, 0x52254 LDR X8, [SP,#0x30+var_28] ; +0x80, 0x52258 ORR X10, X8, X9 ; +0x84, 0x5225c CBZ X10, loc_522B4 ; +0x88, 0x52260 CBZ X21, loc_52278 ; +0x8c, 0x52264 LDR X10, [X21,#0x38] ; +0x90, 0x52268 CBZ X10, loc_5227C ; +0x94, 0x5226c LDR X10, [X10] ; +0x98, 0x52270 B loc_5227C ; +0x9c, 0x52274 MOV X10, XZR ; +0xa0, 0x52278 CMP X10, X9 ; +0xa4, 0x5227c B.CS loc_52290 ; +0xa8, 0x52280 MOV W20, WZR ; +0xac, 0x52284 CBNZ X21, loc_522B8 ; +0xb0, 0x52288 B loc_522CC ; +0xb4, 0x5228c SUB X8, X8, #1 ; +0xb8, 0x52290 CMP X8, X10 ; +0xbc, 0x52294 B.CS loc_522B4 ; +0xc0, 0x52298 LDRB W8, [SP,#0x30+var_2C] ; +0xc4, 0x5229c CBZ W8, loc_52284 ; +0xc8, 0x522a0 LDR W8, [X19,#0x3C] ; +0xcc, 0x522a4 MOV W20, WZR ; +0xd0, 0x522a8 AND W8, W8, #0xFFFFFFBF ; +0xd4, 0x522ac STR W8, [X19,#0x3C] ; +0xd8, 0x522b0 CBZ X21, loc_522CC ; +0xdc, 0x522b4 LDRB W8, [X21,#0x31] ; +0xe0, 0x522b8 CBZ W8, loc_522CC ; +0xe4, 0x522bc LDR W8, [X19,#0x3C] ; +0xe8, 0x522c0 AND W8, W8, #0xFFFFFFBF ; +0xec, 0x522c4 STR W8, [X19,#0x3C] ; +0xf0, 0x522c8 CBZ W20, loc_5232C ; +0xf4, 0x522cc LDR X8, [X19,#0x18] ; +0xf8, 0x522d0 FMOV S0, #1.0 ; +0xfc, 0x522d4 MOV W11, #0x3E8 ; +0x100, 0x522d8 LDR S1, [X8,#0xF0] ; +0x104, 0x522dc LDR S2, [X8,#0x7C] ; +0x108, 0x522e0 LDR X9, [X8,#0x20] ; +0x10c, 0x522e4 LDR S3, [X8,#0x22C] ; +0x110, 0x522e8 FSUB S0, S0, S1 ; +0x114, 0x522ec FMADD S0, S2, S1, S0 ; +0x118, 0x522f0 LDR S2, [X9,#0x1F8] ; +0x11c, 0x522f4 LDR S1, [X8,#0x34] ; +0x120, 0x522f8 FMUL S0, S3, S0 ; +0x124, 0x522fc LDP W9, W8, [X19,#0x4C] ; +0x128, 0x52300 FMUL S0, S0, S2 ; +0x12c, 0x52304 FMUL S0, S1, S0 ; +0x130, 0x52308 FCVTZS W10, S0 ; +0x134, 0x5230c MUL W10, W20, W10 ; +0x138, 0x52310 SDIV W10, W10, W11 ; +0x13c, 0x52314 CMP W8, #1 ; +0x140, 0x52318 CNEG W8, W10, EQ ; +0x144, 0x5231c ADD W9, W8, W9 ; +0x148, 0x52320 STR W9, [X19,#0x4C] ; +0x14c, 0x52324 B loc_52330 ; +0x150, 0x52328 MOV W8, WZR ; +0x154, 0x5232c LDR X10, [X19,#0x28] ; +0x158, 0x52330 CBZ X10, loc_523EC ; +0x15c, 0x52334 LDR W9, [X19,#0x38] ; +0x160, 0x52338 TBNZ W9, #1, loc_5234C ; +0x164, 0x5233c TBZ W9, #2, loc_523DC ; +0x168, 0x52340 LDR W11, [X19,#0x54] ; +0x16c, 0x52344 CBZ W11, loc_523DC ; +0x170, 0x52348 LDR X10, [X19,#0x18] ; +0x174, 0x5234c LDR S0, [X10,#0x22C] ; +0x178, 0x52350 FCMP S0, #0.0 ; +0x17c, 0x52354 B.LE loc_52370 ; +0x180, 0x52358 LDP W11, W13, [X19,#0x58] ; +0x184, 0x5235c LDR W12, [X19,#0x4C] ; +0x188, 0x52360 ADD W13, W13, W11 ; +0x18c, 0x52364 CMP W12, W13 ; +0x190, 0x52368 B.CS loc_52388 ; +0x194, 0x5236c FCMP S0, #0.0 ; +0x198, 0x52370 B.GE loc_523EC ; +0x19c, 0x52374 LDR W12, [X19,#0x4C] ; +0x1a0, 0x52378 LDR W11, [X19,#0x58] ; +0x1a4, 0x5237c CMP W12, W11 ; +0x1a8, 0x52380 B.HI loc_523EC ; +0x1ac, 0x52384 LDR W13, [X19,#0x54] ; +0x1b0, 0x52388 CBZ W13, loc_52404 ; +0x1b4, 0x5238c TBNZ W9, #1, loc_523B0 ; +0x1b8, 0x52390 TBZ W9, #2, loc_523CC ; +0x1bc, 0x52394 LDR W11, [X19,#0x50] ; +0x1c0, 0x52398 CMP W11, #0 ; +0x1c4, 0x5239c CSET W11, EQ ; +0x1c8, 0x523a0 STR W11, [X19,#0x50] ; +0x1cc, 0x523a4 SUB W11, W12, W8 ; +0x1d0, 0x523a8 B loc_523C8 ; +0x1d4, 0x523ac LDR W11, [X19,#0x5C] ; +0x1d8, 0x523b0 FCMP S0, #0.0 ; +0x1dc, 0x523b4 B.LE loc_523C4 ; +0x1e0, 0x523b8 SUB W11, W12, W11 ; +0x1e4, 0x523bc B loc_523C8 ; +0x1e8, 0x523c0 ADD W11, W12, W11 ; +0x1ec, 0x523c4 STR W11, [X19,#0x4C] ; +0x1f0, 0x523c8 TBNZ W13, #0x1F, loc_52350 ; +0x1f4, 0x523cc SUB W11, W13, #1 ; +0x1f8, 0x523d0 STR W11, [X19,#0x54] ; +0x1fc, 0x523d4 B loc_52350 ; +0x200, 0x523d8 LDR W9, [X19,#0x4C] ; +0x204, 0x523dc LDR W8, [X10,#0x44] ; +0x208, 0x523e0 CMP W9, W8 ; +0x20c, 0x523e4 B.CS loc_52430 ; +0x210, 0x523e8 MOV W0, WZR ; +0x214, 0x523ec LDP X29, X30, [SP,#0x30+var_s0] ; +0x218, 0x523f0 LDP X20, X19, [SP,#0x30+var_10] ; +0x21c, 0x523f4 LDR X21, [SP,#0x30+var_20] ; +0x220, 0x523f8 ADD SP, SP, #0x40 ; '@' ; +0x224, 0x523fc RET ; +0x228, 0x52400 LDR W8, [X19,#0x50] ; +0x22c, 0x52404 CBNZ W8, loc_5241C ; +0x230, 0x52408 FCMP S0, #0.0 ; +0x234, 0x5240c B.LE loc_5241C ; +0x238, 0x52410 LDR W8, [X19,#0x5C] ; +0x23c, 0x52414 ADD W11, W8, W11 ; +0x240, 0x52418 LDR W8, [X19,#0x3C] ; +0x244, 0x5241c MOV W0, WZR ; +0x248, 0x52420 STR W11, [X19,#0x4C] ; +0x24c, 0x52424 AND W8, W8, #0xFFFFFFBF ; +0x250, 0x52428 B loc_52440 ; +0x254, 0x5242c LDR W9, [X19,#0x3C] ; +0x258, 0x52430 MOV W0, WZR ; +0x25c, 0x52434 STR W8, [X19,#0x4C] ; +0x260, 0x52438 AND W8, W9, #0xFFFFFFBF ; +0x264, 0x5243c STR W8, [X19,#0x3C] ; +0x268, 0x52440 B loc_523F0 ; +0x26c, 0x52444