From 0195404a74d4a2d6e006bae4d49dba9070c1e86e Mon Sep 17 00:00:00 2001 From: Yisheng Jiang Date: Mon, 20 Mar 2023 19:46:55 -0700 Subject: [PATCH] a --- .vscode/settings.json | 5 +- sf2-service | 2 +- spin/Makefile | 4 +- spin/build/spin.ll | 1814 ----------------------------------------- spin/build/spin.o | Bin 165351 -> 0 bytes spin/spin-proc.js | 89 +- spin/spin.wasm | Bin 32913 -> 469 bytes spin/spin.wasm.js | 2 +- spin/spin.wat | 68 ++ spin/src/calc.h | 16 +- spin/src/sf2.h | 1 - spin/src/spin.c | 13 +- spin/src/spin.h | 3 +- src/createChannel.js | 4 +- src/index.js | 5 +- 15 files changed, 139 insertions(+), 1887 deletions(-) delete mode 100644 spin/build/spin.ll delete mode 100644 spin/build/spin.o create mode 100644 spin/spin.wat diff --git a/.vscode/settings.json b/.vscode/settings.json index 52ec14ba..037b605d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,9 @@ "files.associations": { "*.js": "javascriptreact", "p1200.h": "c", - "spin.h": "c" + "spin.h": "c", + "sf2.h": "c", + "eg.h": "c", + "calc.h": "c" } } diff --git a/sf2-service b/sf2-service index 261dcdef..1c8457ea 160000 --- a/sf2-service +++ b/sf2-service @@ -1 +1 @@ -Subproject commit 261dcdef81fc359f0b717d6eea28d5eb9e66cc70 +Subproject commit 1c8457ea36eb7122a3526e489efdbac1db43d2ba diff --git a/spin/Makefile b/spin/Makefile index 94327413..38197ef8 100644 --- a/spin/Makefile +++ b/spin/Makefile @@ -4,10 +4,10 @@ clean: src/spin.c rm -f build/* build/spin.ll: clean - clang -O3 src/spin.c -o build/spin.ll --target=wasm32 -emit-llvm -c -S + clang -O1 src/spin.c -o build/spin.ll --target=wasm32 -emit-llvm -c -S build/spin.o: build/spin.ll llc -march=wasm32 -filetype=obj build/spin.ll -o build/spin.o spin.wasm: build/spin.o - wasm-ld -O 4 --features=atomics,mutable-global,bulk-memory --no-check-features --allow-undefined --shared-memory --import-memory --no-entry --export-all -o spin.wasm build/spin.o + wasm-ld --features=atomics,mutable-global,bulk-memory --no-check-features --allow-undefined --shared-memory --import-memory --no-entry --export-all -o spin.wasm build/spin.o diff --git a/spin/build/spin.ll b/spin/build/spin.ll deleted file mode 100644 index 8685799f..00000000 --- a/spin/build/spin.ll +++ /dev/null @@ -1,1814 +0,0 @@ -; ModuleID = 'src/spin.c' -source_filename = "src/spin.c" -target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20" -target triple = "wasm32" - -%struct.spinner = type { ptr, ptr, float, i32, i32, i32, float, float, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32 } -%struct.EG = type { float, float, i32, i32, i16, i16, i16, i16, i16, i16, i16, i16 } -%struct.LFO = type { i16, i16, i16 } -%struct.pcm_t = type { i32, i32, i32, i32, i32, ptr } -%struct.zone_t = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, %struct.rangesType, %struct.rangesType, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16 } -%struct.rangesType = type { i8, i8 } -%struct.LFOEffects = type { float, float, float } - -@p2over1200 = hidden local_unnamed_addr global [1201 x double] [double 1.000000e+00, double 0x3FF0025E13B18DAC, double 0x3FF004BC27631B58, double 0x3FF0071A3B14A904, double 0x3FF009795B35B0BC, double 0x3FF00BD87B56B873, double 0x3FF00E38A7E73A36, double 0x3FF01098D477BBF9, double 0x3FF012F901083DBC, double 0x3FF015592D98BF7F, double 0x3FF017BA6698BB4D, double 0x3FF01A1B9F98B71C, double 0x3FF01C7DE5082CF5, double 0x3FF01EDF1E0828C3, double 1.008120e+00, double 0x3FF023A4B5568E82, double 0x3FF0260807357E67, double 0x3FF0286B59146E4C, double 0x3FF02ACEAAF35E31, double 0x3FF02D330941C821, double 0x3FF02F9767903212, double 0x3FF031FCD24E160E, double 0x3FF034623D0BFA09, double 0x3FF036C7A7C9DE05, double 0x3FF0392D1287C201, double 0x3FF03B9389B52008, double 0x3FF03DFB0D51F81A, double 0x3FF04061847F5621, double 0x3FF042C9081C2E34, double 0x3FF045308BB90646, double 1.017480e+00, double 0x3FF04A01ABD1AA82, double 0x3FF04C6A3BDDFCA0, double 0x3FF04ED2CBEA4EBE, double 0x3FF0513C68661AE7, double 0x3FF053A71151611C, double 0x3FF05610ADCD2D45, double 0x3FF0587B56B87379, double 0x3FF05AE5FFA3B9AE, double 0x3FF05D51B4FE79EE, double 0x3FF05FBD6A593A2E, double 0x3FF062291FB3FA6E, double 0x3FF06495E17E34B9, double 0x3FF06702A3486F05, double 0x3FF0696F6512A950, double 0x3FF06BDD334C5DA7, double 0x3FF06E4B018611FD, double 1.027520e+00, double 0x3FF07327AA68F4B6, double 0x3FF0759685122318, double 0x3FF078055FBB517A, double 0x3FF07A7546D3F9E8, double 0x3FF07CE52DECA255, double 0x3FF07F5515054AC3, double 0x3FF081C6088D6D3B, double 0x3FF08436FC158FB4, double 0x3FF086A8FC0D2C38, double 0x3FF08919EF954EB1, double 1.034070e+00, double 0x3FF08DFEFBF401C5, double 0x3FF09072085B1855, double 0x3FF092E514C22EE4, double 0x3FF095592D98BF7F, double 1.037060e+00, double 1.037660e+00, double 0x3FF09CB5781C7150, double 0x3FF09F2A9D627BF6, double 0x3FF0A19FC2A8869C, double 1.040060e+00, double 0x3FF0A68C26139000, double 0x3FF0A90257C914B1, double 0x3FF0AB7995EE136E, double 0x3FF0ADF0D413122B, double 0x3FF0B068123810E9, double 0x3FF0B2E05CCC89B1, double 0x3FF0B558A7610279, double 0x3FF0B7D0F1F57B42, double 0x3FF0BA4A48F96E16, double 0x3FF0BCC39FFD60E9, double 0x3FF0BF3CF70153BD, double 0x3FF0C1B75A74C09C, double 0x3FF0C431BDE82D7B, double 0x3FF0C6AD2DCB1466, double 0x3FF0C9289DADFB50, double 0x3FF0CBA40D90E23B, double 0x3FF0CE1F7D73C925, double 1.050930e+00, double 0x3FF0D31876188B11, double 0x3FF0D595FEDA6613, double 0x3FF0D813879C4114, double 0x3FF0DA91105E1C15, double 1.053970e+00, double 0x3FF0DF8E3AC0C62E, double 0x3FF0E20CCFF21B3B, double 0x3FF0E48C7192EA53, double 0x3FF0E70C1333B96B, double 0x3FF0E98BB4D48883, double 0x3FF0EC0C62E4D1A6, double 1.058240e+00, double 0x3FF0F10DBF0563ED, double 0x3FF0F38F7985271C, double 0x3FF0F6113404EA4B, double 0x3FF0F893FAF42785, double 0x3FF0FB16C1E364BF, double 0x3FF0FD9988D2A1F9, double 0x3FF1001C4FC1DF33, double 0x3FF102A023209678, double 0x3FF1052502EEC7C9, double 1.064370e+00, double 0x3FF10A2DB61BB060, double 0x3FF10CB3A2595BBC, double 0x3FF10F3882278D0D, double 0x3FF111BE6E653869, double 0x3FF1144567125DD1, double 0x3FF116CB5350092D, double 0x3FF11953586CA8A0, double 1.069300e+00, double 0x3FF11E6256366D7A, double 0x3FF120EA5B530CED, double 0x3FF123736CDF266C, double 0x3FF125FB71FBC5DF, double 0x3FF128858FF75968, double 0x3FF12B0EA18372E7, double 0x3FF12D98BF7F0670, double 0x3FF13023E9EA1405, double 0x3FF132AE07E5A78F, double 0x3FF135393250B524, double 0x3FF137C5692B3CC5, double 0x3FF13A51A005C465, double 1.077360e+00, double 0x3FF13F6A0DBAD3A6, double 0x3FF141F75104D552, double 0x3FF14484944ED6FE, double 0x3FF14712E40852B5, double 0x3FF149A133C1CE6C, double 1.081100e+00, double 0x3FF14EBEDFA43FE6, double 1.082350e+00, double 0x3FF153DD97F62B6B, double 0x3FF1566E008E9B39, double 0x3FF158FE69270B07, double 0x3FF15B8ED1BF7AD5, double 1.085480e+00, double 0x3FF160B1BBCF4E87, double 0x3FF163443D46B26C, double 0x3FF165D6BEBE1651, double 0x3FF1686940357A35, double 1.088620e+00, double 0x3FF16D905C033615, double 0x3FF17023E9EA1405, double 0x3FF172B884406C01, double 0x3FF1754D1E96C3FC, double 0x3FF177E1B8ED1BF8, double 0x3FF17A775FB2EDFE, double 1.093030e+00, double 0x3FF17FA3B9AE0C17, double 0x3FF1823A6CE3582A, double 0x3FF184D12018A43C, double 0x3FF18768DFBD6A59, double 0x3FF18A009F623077, double 0x3FF18C985F06F694, double 0x3FF18F312B1B36BD, double 0x3FF191C9F72F76E6, double 0x3FF19462C343B70F, double 0x3FF196FC9BC77143, double 0x3FF19996744B2B77, double 0x3FF19C31593E5FB7, double 0x3FF19ECC3E3193F7, double 0x3FF1A1672324C836, double 0x3FF1A40314877681, double 0x3FF1A69F05EA24CC, double 0x3FF1A93AF74CD317, double 0x3FF1ABD7F51EFB6E, double 0x3FF1AE74F2F123C4, double 0x3FF1B112FD32C626, double 1.106370e+00, double 0x3FF1B64F11B60AE9, double 0x3FF1B8ED1BF7AD4B, double 0x3FF1BB8C32A8C9B8, double 0x3FF1BE2C55C96031, double 0x3FF1C0CB6C7A7C9E, double 0x3FF1C36C9C0A8D22, double 0x3FF1C60CBF2B239A, double 0x3FF1C8ADEEBB341E, double 0x3FF1CB4F1E4B44A2, double 0x3FF1CDF15A4ACF31, double 0x3FF1D093964A59C0, double 0x3FF1D335D249E450, double 0x3FF1D5D91AB8E8EA, double 0x3FF1D87C6327ED85, double 0x3FF1DB1FAB96F21F, double 0x3FF1DDC4007570C5, double 0x3FF1E0685553EF6B, double 0x3FF1E30DB6A1E81D, double 0x3FF1E5B317EFE0CE, double 0x3FF1E858793DD97F, double 0x3FF1EAFEE6FB4C3C, double 0x3FF1EDA554B8BEF9, double 0x3FF1F04BC27631B6, double 0x3FF1F2F33CA31E7E, double 0x3FF1F59AB6D00B46, double 0x3FF1F8433D6C7219, double 1.123760e+00, double 0x3FF1FD944AA53FC0, double 0x3FF2003CD141A693, double 0x3FF202E770BD017E, double 0x3FF2059103C8E25D, double 1.127010e+00, double 0x3FF20AE642BF9831, double 0x3FF20D90E23AF31B, double 0x3FF2103C8E25C811, double 0x3FF212E946801712, double 0x3FF21594F26AEC07, double 0x3FF21841AAC53B08, double 0x3FF21AEF6F8F0414, double 1.132230e+00, double 0x3FF2204AF922962D, double 0x3FF222F8BDEC5F39, double 0x3FF225A78F25A251, double 0x3FF228576CCE5F74, double 0x3FF22B063E07A28C, double 0x3FF22DB7281FD9BA, double 0x3FF2306705C896DD, double 0x3FF23317EFE0CE0C, double 0x3FF235C8D9F9053A, double 0x3FF2387AD080B674, double 0x3FF23B2CC70867AE, double 0x3FF23DDEBD9018E7, double 0x3FF24091C087442C, double 0x3FF24344C37E6F72, double 0x3FF245F7C6759AB7, double 0x3FF248ABD5DC4007, double 0x3FF24B5FE542E558, double 0x3FF24E15011904B4, double 0x3FF250CA1CEF2410, double 0x3FF253804534BD77, double 0x3FF25635610ADCD3, double 1.146710e+00, double 0x3FF25BA2BE0589AD, double 0x3FF25E59F2BA9D1F, double 0x3FF26111276FB092, double 0x3FF263C968943E10, double 0x3FF26681A9B8CB8E, double 0x3FF2693AF74CD317, double 0x3FF26BF338716095, double 0x3FF26EAD9274E22A, double 0x3FF27166E008E9B4, double 0x3FF274213A0C6B48, double 0x3FF276DCA07F66E8, double 0x3FF2799806F26289, double 0x3FF27C536D655E29, double 1.156020e+00, double 0x3FF281CB46BACF74, double 0x3FF28488C60CBF2B, double 0x3FF2874538EF34D7, double 0x3FF28A02B841248D, double 0x3FF28CC144028E50, double 0x3FF28F7FCFC3F812, double 0x3FF2923E5B8561D4, double 0x3FF294FDF3B645A2, double 0x3FF297BD8BE7296F, double 0x3FF29A7D24180D3D, double 0x3FF29D3DC8B86B16, double 0x3FF29FFE6D58C8EF, double 0x3FF2A2C01E68A0D3, double 0x3FF2A581CF7878B8, double 1.166080e+00, double 0x3FF2AB063E07A28C, double 0x3FF2ADC8FB86F47B, double 0x3FF2B08BB906466B, double 0x3FF2B34F82F51266, double 0x3FF2B6145953586D, double 0x3FF2B8D823422468, double 0x3FF2BB9CF9A06A6E, double 0x3FF2BE62DC6E2A80, double 0x3FF2C128BF3BEA92, double 0x3FF2C3EEA209AAA4, double 0x3FF2C6B59146E4C1, double 0x3FF2C97C80841EDE, double 0x3FF2CC436FC158FB, double 0x3FF2CF0B6B6E0D24, double 0x3FF2D1D3671AC14C, double 0x3FF2D49C6F36EF80, double 0x3FF2D76577531DB4, double 0x3FF2DA2E7F6F4BE8, double 0x3FF2DCF893FAF428, double 0x3FF2DFC2A8869C67, double 0x3FF2E28DC981BEB2, double 0x3FF2E558EA7CE0FC, double 0x3FF2E8240B780347, double 0x3FF2EAF038E29F9D, double 0x3FF2EDBC664D3BF3, double 0x3FF2F08893B7D849, double 0x3FF2F355CD91EEAA, double 0x3FF2F62413DB7F17, double 0x3FF2F8F25A250F84, double 0x3FF2FBC0A06E9FF1, double 0x3FF2FE8EE6B8305E, double 0x3FF3015E39713AD6, double 1.188520e+00, double 0x3FF306FDEB52C9D1, double 0x3FF309CE4A7B4E55, double 0x3FF30C9FB6134CE4, double 1.191270e+00, double 0x3FF312428D434A02, double 0x3FF31515054AC29C, double 0x3FF317E77D523B36, double 0x3FF31AB9F559B3D0, double 0x3FF31D8D79D0A676, double 0x3FF32060FE47991C, double 0x3FF323358F2E05CD, double 0x3FF3260A2014727E, double 0x3FF328DFBD6A593A, double 0x3FF32BB55AC03FF7, double 0x3FF32E8AF81626B3, double 0x3FF33161A1DB877B, double 0x3FF334384BA0E842, double 0x3FF3370EF566490A, double 0x3FF339E6AB9B23DD, double 1.202330e+00, double 0x3FF33F972474538F, double 1.203720e+00, double 0x3FF34549B62C7757, double 0x3FF3482385404641, double 0x3FF34AFD5454152B, double 0x3FF34DD82FD75E20, double 0x3FF350B30B5AA716, double 0x3FF3538DE6DDF00B, double 0x3FF35669CED0B30B, double 0x3FF35945B6C3760C, double 0x3FF35C22AB25B318, double 0x3FF35EFF9F87F024, double 0x3FF361DDA059A73B, double 0x3FF364BBA12B5E53, double 0x3FF36799A1FD156A, double 0x3FF36A78AF3E468D, double 0x3FF36D57BC7F77AF, double 0x3FF37036C9C0A8D2, double 0x3FF37316E3715400, double 0x3FF375F80991793A, double 0x3FF378D92FB19E73, double 0x3FF37BBA55D1C3AD, double 1.218410e+00, double 0x3FF3817DAE81882B, double 0x3FF38460ED80A17B, double 0x3FF38743201040C0, double 0x3FF38A276B7ED41B, double 0x3FF38D0AAA7DED6C, double 1.222640e+00, double 0x3FF392D44DCA8E2E, double 0x3FF395B9A5A89B95, double 0x3FF3989EFD86A8FC, double 0x3FF39B845564B663, double 0x3FF39E6AB9B23DD5, double 0x3FF3A1522A6F3F53, double 0x3FF3A4399B2C40D1, double 0x3FF3A7210BE9424E, double 0x3FF3AA098915BDD7, double 0x3FF3ACF206423960, double 0x3FF3AFDA836EB4EA, double 0x3FF3B2C40D0AAA7E, double 0x3FF3B5AEA3161A1E, double 0x3FF3B899392189BE, double 1.233280e+00, double 0x3FF3BE6E653868FD, double 0x3FF3C15A07B352A8, double 0x3FF3C446B69DB65F, double 0x3FF3C7325918A00A, double 0x3FF3CA2014727DCC, double 0x3FF3CD0CC35CE182, double 0x3FF3CFFA7EB6BF44, double 0x3FF3D2E946801712, double 0x3FF3D5D80E496EDF, double 0x3FF3D8C6D612C6AC, double 0x3FF3DBB6AA4B9885, double 0x3FF3DEA67E846A5D, double 0x3FF3E19652BD3C36, double 0x3FF3E4873365881A, double 0x3FF3E779207D4E09, double 1.244730e+00, double 1.245450e+00, double 0x3FF3F04EE7C49FD8, double 0x3FF3F341E14BDFD2, double 1.247610e+00, double 0x3FF3F929ED3953DF, double 0x3FF3FC1DF3300DE5, double 0x3FF3FF13059641F6, double 0x3FF4020817FC7608, double 0x3FF404FD2A62AA19, double 0x3FF407F349385836, double 0x3FF40AE9680E0653, double 0x3FF40DE093532E7B, double 0x3FF410D7BE9856A3, double 0x3FF413CFF64CF8D7, double 0x3FF416C82E019B0B, double 0x3FF419C17225B74A, double 0x3FF41CB9A9DA597D, double 1.257740e+00, double 0x3FF422AD3E920C07, double 0x3FF425A89B951C5C, double 0x3FF428A2EC28B2A7, double 0x3FF42B9E492BC2FC, double 0x3FF42E99A62ED352, double 0x3FF431960FA15DB3, double 0x3FF434927913E814, double 0x3FF4378FEEF5EC81, double 0x3FF43A8D64D7F0ED, double 0x3FF43D8BE7296F65, double 0x3FF4408A697AEDDD, double 0x3FF44388EBCC6C55, double 1.267220e+00, double 0x3FF44988094E5D5B, double 0x3FF44C87980F55DE, double 0x3FF44F893FAF4278, double 0x3FF45289DADFB507, double 0x3FF4558B827FA1A1, double 0x3FF4588D2A1F8E3B, double 0x3FF45B8FDE2EF4E0, double 0x3FF45E92923E5B85, double 0x3FF4619652BD3C36, double 0x3FF4649A133C1CE7, double 0x3FF4679DD3BAFD97, double 0x3FF46AA2A0A95853, double 0x3FF46DA76D97B310, double 0x3FF470AD46F587D7, double 0x3FF473B320535C9E, double 0x3FF476BA0620AB71, double 0x3FF479C0EBEDFA44, double 0x3FF47CC7D1BB4917, double 0x3FF47FCFC3F811F5, double 0x3FF482D7B634DAD3, double 0x3FF485E0B4E11DBD, double 0x3FF488E9B38D60A6, double 0x3FF48BF2B239A390, double 0x3FF48EFCBD556085, double 0x3FF49207D4E09785, double 0x3FF49512EC6BCE85, double 0x3FF4981E03F70585, double 0x3FF49B2A27F1B691, double 0x3FF49E364BEC679D, double 1.289370e+00, double 0x3FF4A44FA05143BF, double 0x3FF4A75DDD2AE8E2, double 0x3FF4AA6C1A048E04, double 0x3FF4AD7A56DE3327, double 1.293100e+00, double 0x3FF4B398E9707182, double 0x3FF4B6A832B990B0, double 0x3FF4B9B8887229E9, double 0x3FF4BCC9EA9A3D2E, double 1.296840e+00, double 0x3FF4C2ECAEEA63B7, double 0x3FF4C5FF1D81F106, double 0x3FF4C9118C197E56, double 0x3FF4CC23FAB10BA6, double 1.300590e+00, double 0x3FF4D24BFD2E9468, double 0x3FF4D56084A515CF, double 0x3FF4D8750C1B9735, double 0x3FF4DB8AA00192A7, double 0x3FF4DEA033E78E19, double 0x3FF4E1B6D43D0397, double 1.305860e+00, double 0x3FF4E7E414E7EE91, double 0x3FF4EAFBC1ACDE1A, double 0x3FF4EE147AE147AE, double 1.308880e+00, double 0x3FF4F445ED4A1AD6, double 0x3FF4F75EA67E846A, double 0x3FF4FA797891E215, double 0x3FF4FD933E35C5B5, double 0x3FF500AE10492360, double 0x3FF503C9EECBFB16, double 0x3FF506E4C0DF58C1, double 0x3FF50A01ABD1AA82, double 0x3FF50D1E96C3FC44, double 0x3FF5103B81B64E05, double 0x3FF513586CA89FC7, double 0x3FF51676640A6B94, double 0x3FF5199567DBB16C, double 0x3FF51CB46BACF744, double 1.320270e+00, double 0x3FF522F37FBEFD00, double 0x3FF526138FFFBCE4, double 1.322560e+00, double 0x3FF52C55C96030C2, double 0x3FF52F77F27FE4BD, double 0x3FF5329A1B9F98B7, double 0x3FF535BC44BF4CB2, double 0x3FF538DF7A4E7AB7, double 0x3FF53C03BC4D22C9, double 0x3FF53F27FE4BCADA, double 0x3FF5424C404A72EB, double 0x3FF545718EB89507, double 0x3FF54896DD26B724, double 1.330990e+00, double 0x3FF54EE286727568, double 0x3FF55209EDBF8B9C, double 0x3FF55531550CA1CF, double 0x3FF55858BC59B802, double 1.334840e+00, double 0x3FF55EA9A3D2D880, double 0x3FF561D323FEE2CA, double 0x3FF564FCA42AED14, double 0x3FF5682730C67169, double 0x3FF56B51BD61F5BE, double 0x3FF56E7C49FD7A14, double 0x3FF571A7E3087875, double 0x3FF574D37C1376D5, double 0x3FF57800218DEF41, double 0x3FF57B2DD377E1B9, double 0x3FF57E5A78F25A25, double 0x3FF581882ADC4C9D, double 0x3FF584B6E935B91F, double 0x3FF587E5A78F25A2, double 0x3FF58B1572580C31, double 0x3FF58E453D20F2BF, double 0x3FF5917507E9D94D, double 0x3FF594A5DF2239E7, double 1.349570e+00, double 1.350350e+00, double 1.351130e+00, double 0x3FF5A16D6DC1A47B, double 0x3FF5A4A05DD8F92B, double 0x3FF5A7D45A5FC7E7, double 0x3FF5AB0856E696A2, double 0x3FF5AE3C536D655E, double 0x3FF5B1715C63AE25, double 0x3FF5B4A66559F6EC, double 0x3FF5B7DC7ABFB9BF, double 0x3FF5BB1290257C91, double 0x3FF5BE49B1FAB96F, double 0x3FF5C180D3CFF64D, double 0x3FF5C4B90214AD36, double 0x3FF5C7F13059641F, double 0x3FF5CB2A6B0D9514, double 0x3FF5CE63A5C1C609, double 0x3FF5D19CE075F6FD, double 0x3FF5D4D72799A1FD, double 0x3FF5D8116EBD4CFD, double 1.366040e+00, double 1.366830e+00, double 0x3FF5E1C475E6362A, double 0x3FF5E500D5E8D541, double 1.369200e+00, double 0x3FF5EB7BAECD0785, double 0x3FF5EEBA27AE9AB3, double 0x3FF5F1F8A0902DE0, double 0x3FF5F5371971C10D, double 1.373160e+00, double 0x3FF5FBB73083558A, double 0x3FF5FEF7C243DCCF, double 0x3FF6023854046413, double 0x3FF60579F2346562, double 0x3FF608BB906466B2, double 0x3FF60BFE3B03E20D, double 0x3FF60F40E5A35D68, double 1.379520e+00, double 0x3FF615C74751CE29, double 0x3FF6190C0AD03D9B, double 0x3FF61C50CE4EAD0C, double 0x3FF61F9591CD1C7E, double 1.383510e+00, double 1.384310e+00, double 0x3FF629680E065300, double 1.385910e+00, double 0x3FF62FF7DFA00E28, double 0x3FF6333FC86CEBBC, double 0x3FF63687B139C94F, double 0x3FF639D1B2E59AFA, double 0x3FF63D1AA821F299, double 0x3FF64064A9CDC444, double 0x3FF643AFB7E90FF9, double 0x3FF646FAC6045BAF, double 0x3FF64A45D41FA765, double 0x3FF64D91EEAA6D26, double 0x3FF650DF15A4ACF3, double 1.395550e+00, double 0x3FF6577963992C8C, double 0x3FF65AC79702E664, double 1.397970e+00, double 0x3FF661650A45D420, double 0x3FF664B44A1F0803, double 0x3FF668049667B5F2, double 0x3FF66B54E2B063E0, double 0x3FF66EA52EF911CF, double 0x3FF671F687B139C9, double 0x3FF67548ECD8DBCF, double 0x3FF6789B52007DD4, double 0x3FF67BEDB7281FDA, double 0x3FF67F4128BF3BEB, double 0x3FF68295A6C5D207, double 0x3FF685EA24CC6823, double 0x3FF6893EA2D2FE3F, double 0x3FF68C942D490E67, double 0x3FF68FE9B7BF1E8E, double 1.410950e+00, double 0x3FF69696E58A32F4, double 0x3FF699EE88DF3733, double 0x3FF69D462C343B71, double 0x3FF6A09EDBF8B9BB, double 0x3FF6A3F78BBD3804, double 0x3FF6A7503B81B64E, double 0x3FF6AAA9F7B5AEA3, double 0x3FF6AE04C0592104, double 0x3FF6B15F88FC9364, double 0x3FF6B4BA51A005C4, double 0x3FF6B81626B2F230, double 0x3FF6BB73083558A7, double 0x3FF6BECFE9B7BF1F, double 0x3FF6C22CCB3A2596, double 0x3FF6C58AB92C0618, double 1.424050e+00, double 0x3FF6CC47A17F4129, double 0x3FF6CFA69BE09BB7, double 1.426520e+00, double 0x3FF6D666A98244E9, double 0x3FF6D9C7BCC2938E, double 0x3FF6DD28D002E233, double 1.429820e+00, double 0x3FF6E3ED0F627393, double 0x3FF6E7503B81B64E, double 1.432300e+00, double 0x3FF6EE1693C03BC5, double 0x3FF6F17ACC4EF88C, double 0x3FF6F4E0114D2F5E, double 0x3FF6F845564B6630, double 0x3FF6FBAA9B499D02, double 0x3FF6FF10ECB74DE0, double 0x3FF702784A9478C8, double 0x3FF705DFA871A3B1, double 0x3FF70947064ECE9A, double 0x3FF70CAF709B738E, double 0x3FF71017DAE81883, double 0x3FF7138151A43782, double 0x3FF716EAC8605682, double 0x3FF71A554B8BEF8D, double 0x3FF71DBFCEB78898, double 0x3FF7212B5E529BAE, double 0x3FF72497FA5D28D0, double 0x3FF7280389F83BE6, double 0x3FF72B702602C908, double 0x3FF72EDDCE7CD035, double 0x3FF7324B76F6D762, double 0x3FF735BA2BE0589B, double 0x3FF73928E0C9D9D3, double 0x3FF73C98A222D517, double 0x3FF74008637BD05B, double 0x3FF74379314445AA, double 0x3FF746E9FF0CBAF9, double 0x3FF74A5ACCD53049, double 0x3FF74DCCA70D1FA3, double 0x3FF7513F8DB48909, double 0x3FF754B2745BF26F, double 1.459020e+00, double 0x3FF75B994E1A3F46, double 0x3FF75F0E4DA09CC3, double 0x3FF762834D26FA40, double 0x3FF765F84CAD57BC, double 1.463240e+00, double 0x3FF76CE5710880D8, double 0x3FF7705C896DD26B, double 0x3FF773D3A1D323FF, double 0x3FF7774BC6A7EF9E, double 0x3FF77AC3EB7CBB3D, double 1.468320e+00, double 0x3FF781B75A74C09C, double 0x3FF7853198288052, double 0x3FF788ABD5DC4007, double 0x3FF78C271FFF79C8, double 0x3FF78FA26A22B389, double 0x3FF7931EC0B56755, double 0x3FF7969B17481B22, double 0x3FF79A187A4A48F9, double 0x3FF79D95DD4C76D1, double 0x3FF7A1144CBE1EB4, double 0x3FF7A492BC2FC697, double 0x3FF7A8123810E886, double 0x3FF7AB92C061847F, double 0x3FF7AF123C42A66E, double 0x3FF7B293D102BC73, double 0x3FF7B6145953586D, double 1.482810e+00, double 0x3FF7BD188F42FE82, double 0x3FF7C09C3CE2089E, double 0x3FF7C41EDE1198AF, double 1.486240e+00, double 0x3FF7CB2745BF26F2, double 0x3FF7CEAD0C3D2524, double 0x3FF7D231C64BA94C, double 0x3FF7D5B78CC9A77E, double 0x3FF7D93E5FB71FBC, double 0x3FF7DCC532A497FA, double 0x3FF7E04D12018A44, double 0x3FF7E3D4F15E7C8D, double 0x3FF7E75DDD2AE8E2, double 0x3FF7EAE6C8F75537, double 0x3FF7EE70C1333B97, double 0x3FF7F1FAB96F21F7, double 0x3FF7F585BE1A8262, double 0x3FF7F910C2C5E2CE, double 0x3FF7FC9CD3E0BD45, double 0x3FF80028E4FB97BB, double 0x3FF803B60285EC3E, double 0x3FF80743201040C0, double 0x3FF80AD14A0A0F4D, double 0x3FF80E5F7403DDDB, double 0x3FF811EEAA6D2674, double 0x3FF8157DE0D66F0D, double 0x3FF8190D173FB7A6, double 0x3FF81C9E6687F456, double 0x3FF8202EA960B6FA, double 0x3FF823C105186DB5, double 1.509600e+00, double 0x3FF82AE5BC87DB2B, double 0x3FF82E78183F91E6, double 0x3FF8320C8CD63CB8, double 0x3FF8359FF4FD6D7F, double 0x3FF839357603925C, double 0x3FF83CC9EA9A3D2E, double 0x3FF84060780FDC16, double 0x3FF843F5F91600F3, double 0x3FF8478D92FB19E7, double 0x3FF84B242070B8D0, double 0x3FF84EBCC6C54BCF, double 1.520100e+00, double 0x3FF855EE136E71CE, double 0x3FF85987C6327ED8, double 0x3FF85D2178F68BE3, double 0x3FF860BC382A12F9, double 0x3FF86456F75D9A0F, double 0x3FF867F2C3009B30, double 0x3FF86B8E8EA39C52, double 0x3FF86F2B66B6177F, double 0x3FF872C83EC892AB, double 0x3FF87666234A87E4, double 1.529790e+00, double 0x3FF87DA4052D666B, double 0x3FF88142F61ED5AE, double 0x3FF884E2F37FBEFD, double 0x3FF88882F0E0A84C, double 0x3FF88C23FAB10BA6, double 0x3FF88FC610F0E90C, double 0x3FF893682730C671, double 0x3FF8970A3D70A3D7, double 0x3FF89AAD601FFB48, double 0x3FF89E518F3ECCC4, double 0x3FF8A1F5BE5D9E41, double 1.540430e+00, double 1.541320e+00, double 0x3FF8ACE5710880D8, double 0x3FF8B08BB906466B, double 0x3FF8B43201040BFE, double 0x3FF8B7DA61E0C5A8, double 0x3FF8BB81B64E0547, double 0x3FF8BF2A172ABEF0, double 0x3FF8C2D38476F2A6, double 0x3FF8C67CF1C3265B, double 0x3FF8CA276B7ED41B, double 0x3FF8CDD1E53A81DC, double 0x3FF8D17D6B65A9A8, double 0x3FF8D528F190D174, double 0x3FF8D8D5842B734B, double 0x3FF8DC8216C61523, double 0x3FF8E02FB5D03105, double 0x3FF8E3DD54DA4CE8, double 1.556530e+00, double 0x3FF8EB3AABCD78C4, double 0x3FF8EEEA63B688BE, double 1.559230e+00, double 1.560130e+00, double 0x3FF8F9FCB0C026CC, double 0x3FF8FDAE81882ADC, double 0x3FF9016052502EEC, double 0x3FF905132F87AD08, double 0x3FF908C7192EA52F, double 0x3FF90C7B02D59D56, double 0x3FF9102EEC7C957D, double 0x3FF913E3E29307AF, double 0x3FF91799E518F3ED, double 0x3FF91B4FE79EE02A, double 0x3FF91F06F6944674, double 0x3FF922BE0589ACBD, double 1.571890e+00, double 0x3FF92A2E3C536D65, double 0x3FF92DE76427C7C5, double 0x3FF931A08BFC2225, double 0x3FF9355AC03FF690, double 0x3FF93914F483CAFB, double 0x3FF93CD035371972, double 0x3FF9408B75EA67E8, double 1.579170e+00, double 0x3FF948051C9F72F7, double 0x3FF94BC27631B585, double 0x3FF94F7FCFC3F812, double 0x3FF9533E35C5B4AB, double 0x3FF956FDA836EB4F, double 0x3FF95ABD1AA821F3, double 0x3FF95E7C8D195897, double 0x3FF9623D0BFA0946, double 0x3FF965FE974A3401, double 0x3FF969C0229A5EBB, double 0x3FF96D82BA5A0382, double 0x3FF971455219A848, double 0x3FF97508F648C719, double 0x3FF978CC9A77E5EB, double 0x3FF97C914B167EC8, double 0x3FF98055FBB517A4, double 0x3FF9841BB8C32A8D, double 0x3FF987E28240B780, double 0x3FF98BA94BBE4474, double 0x3FF98F70153BD167, double 0x3FF99337EB28D866, double 0x3FF99700CD855971, double 1.600290e+00, double 0x3FF99E939EADD591, double 1.602140e+00, double 0x3FF9A6277C45CBBC, double 0x3FF9A9F383F0BAE9, double 0x3FF9ADBE7F2C300A, double 0x3FF9B18B93469942, double 0x3FF9B558A7610279, double 0x3FF9B925BB7B6BB1, double 0x3FF9BCF3DC054EF4, double 1.609560e+00, double 1.610490e+00, double 0x3FF9C86162F166E0, double 0x3FF9CC319C5A3E3A, double 0x3FF9D002E2328F9F, double 0x3FF9D3D4280AE105, double 0x3FF9D7A56DE3326A, double 0x3FF9DB78CC9A77E6, double 0x3FF9DF4B1EE24357, double 1.617950e+00, double 0x3FF9E6F2E8C0485A, double 1.619820e+00, double 0x3FF9EE9DD7ECBB80, double 0x3FF9F2734F82F512, double 0x3FF9F649D388A8B1, double 0x3FF9FA2163FDD65A, double 0x3FF9FDF8F4730404, double 0x3FFA01D084E831AD, double 0x3FFA05AA2E3C536D, double 0x3FFA0982CB20FB22, double 0x3FFA0D5D80E496EE, double 0x3FFA11372A38B8AE, double 0x3FFA1512EC6BCE85, double 0x3FFA18EEAE9EE45C, double 0x3FFA1CCA70D1FA33, double 0x3FFA20A73F748A16, double 0x3FFA24840E1719F8, double 0x3FFA2861E92923E6, double 0x3FFA2C40D0AAA7DF, double 0x3FFA301FB82C2BD8, double 0x3FFA33FFAC1D29DC, double 0x3FFA37DFA00E27E1, double 0x3FFA3BC0A06E9FF1, double 0x3FFA3FA1A0CF1801, double 0x3FFA4383AD9F0A1C, double 0x3FFA4766C6DE7642, double 0x3FFA4B49E01DE269, double 1.644330e+00, double 1.645280e+00, double 0x3FFA56F6512A94FF, double 0x3FFA5ADB8348F53C, double 0x3FFA5EC1C1D6CF85, double 0x3FFA62A80064A9CE, double 0x3FFA668F4B61FE22, double 0x3FFA6A76965F5276, double 0x3FFA6E5EEDCC20D5, double 0x3FFA724851A86940, double 0x3FFA7631B584B1AB, double 0x3FFA7A1B1960FA16, double 0x3FFA7E0589ACBC8C, double 0x3FFA81F10667F90E, double 0x3FFA85DC8323358F, double 0x3FFA89C90C4DEC1C, double 0x3FFA8DB59578A2A9, double 0x3FFA91A32B12D341, double 0x3FFA9591CD1C7DE5, double 0x3FFA99806F262889, double 0x3FFA9D6F112FD32C, double 0x3FFAA15EBFA8F7DB, double 0x3FFAA54F7A919696, double 0x3FFAA940357A3550, double 0x3FFAAD31FCD24E16, double 0x3FFAB124D099E0E7, double 0x3FFAB51697F1F9AD, double 0x3FFAB90A7829068A, double 0x3FFABCFE58601366, double 0x3FFAC0F238972043, double 0x3FFAC4E831AD2136, double 0x3FFAC8DD1E53A81E, double 0x3FFACCD31769A911, double 0x3FFAD0CA1CEF2410, double 0x3FFAD4C22EE4191A, double 0x3FFAD8BA40D90E24, double 0x3FFADCB252CE032E, double 0x3FFAE0AB71327243, double 0x3FFAE4A59C065B64, double 0x3FFAE89FC6DA4485, double 0x3FFAEC9AFE1DA7B1, double 0x3FFAF09635610ADD, double 1.684710e+00, double 0x3FFAF88EBCC6C54C, double 0x3FFAFC8C0CE91C8F, double 0x3FFB008A697AEDDD, double 0x3FFB0488C60CBF2B, double 0x3FFB0887229E9079, double 0x3FFB0C87980F55DE, double 0x3FFB10870110A138, double 0x3FFB148882F0E0A8, double 0x3FFB188A04D12019, double 0x3FFB1C8B86B15F89, double 0x3FFB208E15011905, double 0x3FFB2491AFC04C8C, double 0x3FFB28954A7F8013, double 0x3FFB2C99F1AE2DA5, double 1.699370e+00, double 0x3FFB34A44C7B02D6, double 0x3FFB38AA00192A73, double 0x3FFB3CB0C026CC1D, double 0x3FFB40B88CA3E7D1, double 0x3FFB44C059210386, double 1.705270e+00, double 0x3FFB4CD20AFA2F06, double 0x3FFB50DBF0563ED1, double 0x3FFB54E5D5B24E9C, double 0x3FFB58F0C77DD873, double 0x3FFB5CFCC5B8DC55, double 1.711190e+00, double 0x3FFB6515CE9E5E24, double 0x3FFB6922D948DC12, double 0x3FFB6D30F062D40B, double 0x3FFB713F077CCC03, double 0x3FFB754E2B063E08, double 0x3FFB795E5AFF2A17, double 0x3FFB7D6E8AF81627, double 0x3FFB817FC7607C42, double 0x3FFB859103C8E25D, double 0x3FFB89A34CA0C283, double 0x3FFB8DB59578A2A9, double 0x3FFB91C8EABFFCDB, double 0x3FFB95DD4C76D118, double 0x3FFB99F1AE2DA555, double 0x3FFB9E071C53F39D, double 0x3FFBA21C8A7A41E5, double 0x3FFBA63305100A39, double 0x3FFBAA497FA5D28D, double 0x3FFBAE62131A8EF7, double 0x3FFBB2799A1FD157, double 0x3FFBB6922D948DC1, double 0x3FFBBAABCD78C437, double 0x3FFBBEC56D5CFAAD, double 0x3FFBC2E019B0AB2E, double 1.736080e+00, double 0x3FFBCB178B370047, double 0x3FFBCF345069A4DF, double 0x3FFBD351159C4977, double 0x3FFBD76EE73E681B, double 0x3FFBDB8CB8E086BE, double 0x3FFBDFAB96F21F6D, double 0x3FFBE3CB81733227, double 0x3FFBE7EB6BF444E1, double 0x3FFBEC0C62E4D1A6, double 0x3FFBF02D59D55E6C, double 0x3FFBF44F5D35653D, double 0x3FFBF87160956C0D, double 0x3FFBFC947064ECEA, double 0x3FFC00B88CA3E7D1, double 0x3FFC04DCA8E2E2B9, double 0x3FFC0901D19157AC, double 0x3FFC0D26FA3FCC9F, double 0x3FFC114D2F5DBB9D, double 0x3FFC157470EB24A7, double 0x3FFC199BB2788DB0, double 0x3FFC1DC4007570C5, double 0x3FFC21EC4E7253DA, double 0x3FFC2615A8DEB0FB, double 0x3FFC2A400FBA8827, double 0x3FFC2E6A76965F52, double 0x3FFC3294DD72367E, double 0x3FFC36C15D2D01C1, double 0x3FFC3AEDDCE7CD03, double 0x3FFC3F1A5CA29846, double 0x3FFC4347E8CCDD94, double 0x3FFC477681669CED, double 0x3FFC4BA51A005C46, double 1.769490e+00, double 0x3FFC54046412CF10, double 0x3FFC5835158B8280, double 0x3FFC5C66D373AFFB, double 0x3FFC6098915BDD76, double 0x3FFC64CB5BB384FD, double 0x3FFC68FE260B2C84, double 0x3FFC6D31FCD24E16, double 0x3FFC7165D3996FA8, double 0x3FFC759AB6D00B46, double 1.779740e+00, double 0x3FFC7E07A28BB0A3, double 0x3FFC823D9231C64C, double 0x3FFC86759AB6D00B, double 0x3FFC8AADA33BD9CB, double 0x3FFC8EE6B8305D96, double 0x3FFC931FCD24E161, double 0x3FFC9759EE88DF37, double 0x3FFC9B940FECDD0E, double 0x3FFC9FCF3DC054EF, double 1.790050e+00, double 0x3FFCA847B24638C9, double 0x3FFCAC84F8F8A4C2, double 0x3FFCB0C34C1A8AC6, double 0x3FFCB5019F3C70CA, double 0x3FFCB940FECDD0D9, double 0x3FFCBD805E5F30E8, double 0x3FFCC1C0CA600B03, double 0x3FFCC6013660E51D, double 1.799380e+00, double 1.800420e+00, double 1.801460e+00, double 0x3FFCD70B49E01DE2, double 0x3FFCDB4EDB2F661F, double 0x3FFCDF9378EE2867, double 0x3FFCE3D9231C64BB, double 1.806670e+00, double 0x3FFCEC6583E8576D, double 0x3FFCF0AD46F587D7, double 0x3FFCF4F50A02B841, double 1.810850e+00, double 0x3FFCFD86A8FC0D2C, double 0x3FFD01D084E831AD, double 1.813990e+00, double 0x3FFD0A65492FF4BA, double 0x3FFD0EB13DFB0D52, double 0x3FFD12FD32C625EA, double 0x3FFD174A3400B88D, double 0x3FFD1B9841AAC53B, double 0x3FFD1FE64F54D1E9, double 1.821340e+00, double 0x3FFD28848387DF5D, double 0x3FFD2CD4AA10E022, double 0x3FFD3125DD095AF3, double 0x3FFD35771001D5C3, double 0x3FFD39C94F69CA9F, double 0x3FFD3E1B8ED1BF7B, double 0x3FFD426EDAA92E62, double 0x3FFD46C332F01755, double 0x3FFD4B178B370047, double 0x3FFD4F6CEFED6345, double 0x3FFD53C254A3C643, double 0x3FFD5818C5C9A34D, double 0x3FFD5C70435EFA61, double 0x3FFD60C7C0F45176, double 0x3FFD65204AF92296, double 1.838250e+00, double 0x3FFD6DD377E1B8ED, double 0x3FFD722D0E560419, double 0x3FFD7688BDA9435B, double 0x3FFD7AE46CFC829D, double 0x3FFD7F401C4FC1DF, double 0x3FFD839CD8127B2D, double 0x3FFD87FAA044AE86, double 0x3FFD8C5974E65BEA, double 0x3FFD90B84988094E, double 0x3FFD95171E29B6B3, double 0x3FFD99780BAA582E, double 0x3FFD9DD7ECBB7F9D, double 0x3FFDA239E6AB9B24, double 0x3FFDA69BE09BB6AA, double 0x3FFDAAFEE6FB4C3C, double 0x3FFDAF61ED5AE1CE, double 1.856390e+00, double 0x3FFDB82B1F687B14, double 0x3FFDBC903EA704BC, double 1.859610e+00, double 0x3FFDC55C96030C24, double 0x3FFDC9C3CE2089E3, double 0x3FFDCE2C12AD81AE, double 0x3FFDD294573A7979, double 0x3FFDD6FDA836EB4F, double 0x3FFDDB6805A2D730, double 0x3FFDDFD2630EC311, double 0x3FFDE43DCCEA28FE, double 0x3FFDE8A936C58EEB, double 0x3FFDED15AD106EE3, double 0x3FFDF1832FCAC8E7, double 0x3FFDF5F0B28522EA, double 0x3FFDFA5F41AEF6F9, double 0x3FFDFECEDD484513, double 0x3FFE033E78E1932D, double 0x3FFE07AF20EA5B53, double 1.877960e+00, double 0x3FFE109289DADFB5, double 0x3FFE15043E5321E6, double 0x3FFE19780BAA582E, double 0x3FFE1DEACC92146A, double 0x3FFE225FA658C4BD, double 1.884480e+00, double 0x3FFE2B4A66559F6F, double 0x3FFE2FC158FB43D9, double 0x3FFE34384BA0E842, double 0x3FFE38AF3E468CAC, double 0x3FFE3D2849CB252D, double 0x3FFE41A1554FBDAD, double 0x3FFE461A60D4562E, double 0x3FFE4A958537E2C5, double 0x3FFE4F0F9D2BF551, double 0x3FFE538BCDFEFBF4, double 0x3FFE5807FED20297, double 0x3FFE5C853C148345, double 0x3FFE6102795703F3, double 0x3FFE6580C308FEAC, double 0x3FFE6A00192A7371, double 0x3FFE6E7F6F4BE836, double 0x3FFE72FFD1DCD706, double 0x3FFE778140DD3FE2, double 0x3FFE7C02AFDDA8BD, double 0x3FFE80852B4D8BA4, double 0x3FFE8507A6BD6E8B, double 1.908580e+00, double 0x3FFE8E0FC2EBA27B, double 0x3FFE929563A9F384, double 0x3FFE971B0468448D, double 0x3FFE9BA0A5269596, double 0x3FFEA0285EC3DAB6, double 0x3FFEA4B018611FD6, double 0x3FFEA937D1FE64F5, double 1.917420e+00, double 0x3FFEB24A6A875D57, double 0x3FFEB6D549731099, double 0x3FFEBB60285EC3DB, double 0x3FFEBFEC13B9F128, double 0x3FFEC477FF151E75, double 0x3FFEC904F6DFC5CE, double 0x3FFECD92FB19E732, double 0x3FFED220FF540896, double 0x3FFED6B00FFDA405, double 0x3FFEDB402D16B980, double 0x3FFEDFD04A2FCEFB, double 0x3FFEE46173B85E81, double 0x3FFEE8F3A9B06812, double 0x3FFEED85DFA871A4, double 0x3FFEF219220FF541, double 0x3FFEF6AC647778DD, double 0x3FFEFB40B34E7686, double 1.937460e+00, double 1.938580e+00, double 1.939700e+00, double 1.940820e+00, double 0x3FFF1231C64BA94C, double 0x3FFF16CA46E08F21, double 0x3FFF1B63D3E4EF03, double 1.945310e+00, double 0x3FFF2497FA5D28D0, double 0x3FFF293293D102BC, double 0x3FFF2DCF4623D0C0, double 1.949810e+00, double 0x3FFF3708AAC96CC6, double 0x3FFF3BA6698BB4D5, double 0x3FFF404534BD76EE, double 1.954320e+00, double 0x3FFF4984E3FFEF39, double 0x3FFF4E25C810A56A, double 0x3FFF52C6AC215B9A, double 0x3FFF5769A91105E2, double 0x3FFF5C0B9991361E, double 0x3FFF60AFA2F05A71, double 0x3FFF6553AC4F7EC3, double 0x3FFF69F8C21E1D21, double 0x3FFF6E9DD7ECBB80, double 0x3FFF7343FA2AD3E9, double 0x3FFF77EB28D8665E, double 0x3FFF7C925785F8D3, double 1.969050e+00, double 0x3FFF85E3DA2F8BDF, double 0x3FFF8A8D21BC126A, double 0x3FFF8F3775B81301, double 0x3FFF93E2D6238DA4, double 0x3FFF988E368F0846, double 0x3FFF9D3AA369FCF4, double 0x3FFFA1E81CB46BAD, double 1.978170e+00, double 0x3FFFAB441BB8C32B, double 0x3FFFAFF3ADE225FA, double 0x3FFFB4A3400B88CA, double 0x3FFFB953DEA465A5, double 0x3FFFBE0589ACBC8C, double 0x3FFFC2B734B51373, double 0x3FFFC769EC2CE465, double 0x3FFFCC1DB0142F62, double 0x3FFFD0D173FB7A5F, double 1.989630e+00, double 0x3FFFDA3B14A90471, double 1.991930e+00, double 0x3FFFE3A8E71476B0, double 0x3FFFE85FD04A2FCF, double 0x3FFFED17C5EF62FA, double 0x3FFFF1D0C8041030, double 0x3FFFF68AD6883772, double 0x3FFFFB44E50C5EB3, double 2.000000e+00], align 16 -@p10over200 = hidden local_unnamed_addr global [1441 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 0x3EB0C6F7A0B5ED8D, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 2.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 3.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 4.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 5.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 6.000000e-06, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EDD5C31593E5FB7, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 0x3EE0C6F7A0B5ED8D, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 9.000000e-06, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.000000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.100000e-05, double 1.200000e-05, double 1.200000e-05, double 1.200000e-05, double 1.200000e-05, double 1.200000e-05, double 1.200000e-05, double 1.200000e-05, double 1.300000e-05, double 1.300000e-05, double 1.300000e-05, double 1.300000e-05, double 1.300000e-05, double 1.300000e-05, double 1.300000e-05, double 1.400000e-05, double 1.400000e-05, double 1.400000e-05, double 1.400000e-05, double 1.400000e-05, double 1.400000e-05, double 1.500000e-05, double 1.500000e-05, double 1.500000e-05, double 1.500000e-05, double 1.500000e-05, double 1.500000e-05, double 1.600000e-05, double 1.600000e-05, double 1.600000e-05, double 1.600000e-05, double 1.600000e-05, double 1.700000e-05, double 1.700000e-05, double 1.700000e-05, double 1.700000e-05, double 1.700000e-05, double 1.800000e-05, double 1.800000e-05, double 1.800000e-05, double 1.800000e-05, double 1.800000e-05, double 1.900000e-05, double 1.900000e-05, double 1.900000e-05, double 1.900000e-05, double 1.900000e-05, double 2.000000e-05, double 2.000000e-05, double 2.000000e-05, double 2.000000e-05, double 2.100000e-05, double 2.100000e-05, double 2.100000e-05, double 2.100000e-05, double 2.200000e-05, double 2.200000e-05, double 2.200000e-05, double 2.200000e-05, double 2.300000e-05, double 2.300000e-05, double 2.300000e-05, double 2.300000e-05, double 2.400000e-05, double 2.400000e-05, double 2.400000e-05, double 2.500000e-05, double 2.500000e-05, double 2.500000e-05, double 2.500000e-05, double 2.600000e-05, double 2.600000e-05, double 2.600000e-05, double 2.700000e-05, double 2.700000e-05, double 2.700000e-05, double 2.800000e-05, double 2.800000e-05, double 2.800000e-05, double 2.900000e-05, double 2.900000e-05, double 2.900000e-05, double 3.000000e-05, double 3.000000e-05, double 3.000000e-05, double 3.100000e-05, double 3.100000e-05, double 3.100000e-05, double 3.200000e-05, double 3.200000e-05, double 3.200000e-05, double 3.300000e-05, double 3.300000e-05, double 3.300000e-05, double 3.400000e-05, double 3.400000e-05, double 3.500000e-05, double 3.500000e-05, double 3.500000e-05, double 3.600000e-05, double 3.600000e-05, double 3.700000e-05, double 3.700000e-05, double 3.800000e-05, double 3.800000e-05, double 3.800000e-05, double 3.900000e-05, double 3.900000e-05, double 4.000000e-05, double 4.000000e-05, double 4.100000e-05, double 4.100000e-05, double 4.200000e-05, double 4.200000e-05, double 4.300000e-05, double 4.300000e-05, double 4.400000e-05, double 4.400000e-05, double 4.500000e-05, double 4.500000e-05, double 4.600000e-05, double 4.600000e-05, double 4.700000e-05, double 4.700000e-05, double 4.800000e-05, double 4.800000e-05, double 4.900000e-05, double 5.000000e-05, double 5.000000e-05, double 5.100000e-05, double 5.100000e-05, double 5.200000e-05, double 5.200000e-05, double 5.300000e-05, double 5.400000e-05, double 5.400000e-05, double 5.500000e-05, double 5.600000e-05, double 5.600000e-05, double 5.700000e-05, double 5.800000e-05, double 5.800000e-05, double 5.900000e-05, double 6.000000e-05, double 6.000000e-05, double 6.100000e-05, double 6.200000e-05, double 6.200000e-05, double 6.300000e-05, double 6.400000e-05, double 6.500000e-05, double 6.500000e-05, double 6.600000e-05, double 6.700000e-05, double 0x3F11D3671AC14C66, double 0x3F11D3671AC14C66, double 6.900000e-05, double 0x3F12599ED7C6FBD2, double 7.100000e-05, double 7.200000e-05, double 7.200000e-05, double 7.300000e-05, double 7.400000e-05, double 7.500000e-05, double 7.600000e-05, double 7.700000e-05, double 7.800000e-05, double 0x3F14B599AA60913A, double 0x3F14B599AA60913A, double 8.000000e-05, double 8.100000e-05, double 8.200000e-05, double 8.300000e-05, double 8.400000e-05, double 8.500000e-05, double 8.600000e-05, double 8.700000e-05, double 0x3F1711947CFA26A2, double 8.900000e-05, double 9.000000e-05, double 9.100000e-05, double 9.200000e-05, double 9.300000e-05, double 9.400000e-05, double 9.500000e-05, double 0x3F196D8F4F93BC0A, double 9.800000e-05, double 0x3F19F3C70C996B76, double 1.000000e-04, double 1.010000e-04, double 1.020000e-04, double 1.040000e-04, double 1.050000e-04, double 1.060000e-04, double 1.070000e-04, double 1.080000e-04, double 1.100000e-04, double 1.110000e-04, double 1.120000e-04, double 1.140000e-04, double 1.150000e-04, double 1.160000e-04, double 1.170000e-04, double 1.190000e-04, double 1.200000e-04, double 1.220000e-04, double 1.230000e-04, double 1.240000e-04, double 1.260000e-04, double 1.270000e-04, double 1.290000e-04, double 1.300000e-04, double 1.320000e-04, double 1.330000e-04, double 1.350000e-04, double 1.360000e-04, double 1.380000e-04, double 1.400000e-04, double 1.410000e-04, double 1.430000e-04, double 1.450000e-04, double 1.460000e-04, double 1.480000e-04, double 1.500000e-04, double 1.510000e-04, double 1.530000e-04, double 1.550000e-04, double 1.570000e-04, double 1.580000e-04, double 1.600000e-04, double 1.620000e-04, double 1.640000e-04, double 1.660000e-04, double 1.680000e-04, double 1.700000e-04, double 1.720000e-04, double 1.740000e-04, double 1.760000e-04, double 1.780000e-04, double 1.800000e-04, double 1.820000e-04, double 1.840000e-04, double 1.860000e-04, double 1.880000e-04, double 1.910000e-04, double 1.930000e-04, double 1.950000e-04, double 1.970000e-04, double 2.000000e-04, double 2.020000e-04, double 2.040000e-04, double 2.070000e-04, double 2.090000e-04, double 2.110000e-04, double 2.140000e-04, double 2.160000e-04, double 2.190000e-04, double 2.210000e-04, double 2.240000e-04, double 2.260000e-04, double 2.290000e-04, double 2.320000e-04, double 2.340000e-04, double 2.370000e-04, double 2.400000e-04, double 2.430000e-04, double 2.450000e-04, double 2.480000e-04, double 2.510000e-04, double 2.540000e-04, double 2.570000e-04, double 2.600000e-04, double 2.630000e-04, double 2.660000e-04, double 2.690000e-04, double 2.720000e-04, double 2.750000e-04, double 2.790000e-04, double 2.820000e-04, double 2.850000e-04, double 2.880000e-04, double 2.920000e-04, double 2.950000e-04, double 2.990000e-04, double 3.020000e-04, double 3.050000e-04, double 3.090000e-04, double 3.130000e-04, double 3.160000e-04, double 3.200000e-04, double 3.240000e-04, double 3.270000e-04, double 3.310000e-04, double 3.350000e-04, double 3.390000e-04, double 3.430000e-04, double 3.470000e-04, double 3.510000e-04, double 3.550000e-04, double 3.590000e-04, double 3.630000e-04, double 3.670000e-04, double 3.720000e-04, double 3.760000e-04, double 3.800000e-04, double 3.850000e-04, double 3.890000e-04, double 3.940000e-04, double 3.980000e-04, double 4.030000e-04, double 4.070000e-04, double 4.120000e-04, double 4.170000e-04, double 4.220000e-04, double 4.270000e-04, double 4.320000e-04, double 4.370000e-04, double 4.420000e-04, double 4.470000e-04, double 4.520000e-04, double 4.570000e-04, double 4.620000e-04, double 4.680000e-04, double 4.730000e-04, double 4.790000e-04, double 4.840000e-04, double 4.900000e-04, double 4.950000e-04, double 5.010000e-04, double 5.070000e-04, double 5.130000e-04, double 5.190000e-04, double 5.250000e-04, double 5.310000e-04, double 5.370000e-04, double 5.430000e-04, double 5.500000e-04, double 5.560000e-04, double 5.620000e-04, double 5.690000e-04, double 5.750000e-04, double 5.820000e-04, double 5.890000e-04, double 5.960000e-04, double 6.030000e-04, double 6.100000e-04, double 6.170000e-04, double 6.240000e-04, double 6.310000e-04, double 6.380000e-04, double 6.460000e-04, double 6.530000e-04, double 6.610000e-04, double 6.680000e-04, double 0x3F4626B2F23033A4, double 6.840000e-04, double 6.920000e-04, double 7.000000e-04, double 7.080000e-04, double 7.160000e-04, double 7.240000e-04, double 7.330000e-04, double 7.410000e-04, double 7.500000e-04, double 7.590000e-04, double 7.670000e-04, double 7.760000e-04, double 7.850000e-04, double 7.940000e-04, double 8.040000e-04, double 8.130000e-04, double 8.220000e-04, double 0x3F4B43526527A205, double 8.410000e-04, double 8.510000e-04, double 8.610000e-04, double 8.710000e-04, double 0x3F4CDE5D18090B41, double 0x3F4D323FEE2C98E5, double 9.020000e-04, double 9.120000e-04, double 9.230000e-04, double 9.330000e-04, double 0x3F4EEED8904F6DFC, double 9.550000e-04, double 0x3F4FA76534373F31, double 9.770000e-04, double 9.890000e-04, double 1.000000e-03, double 1.012000e-03, double 1.023000e-03, double 1.035000e-03, double 1.047000e-03, double 1.059000e-03, double 1.072000e-03, double 1.084000e-03, double 1.096000e-03, double 1.109000e-03, double 1.122000e-03, double 1.135000e-03, double 1.148000e-03, double 1.161000e-03, double 1.175000e-03, double 1.189000e-03, double 1.202000e-03, double 1.216000e-03, double 1.230000e-03, double 1.245000e-03, double 1.259000e-03, double 1.274000e-03, double 1.288000e-03, double 1.303000e-03, double 1.318000e-03, double 1.334000e-03, double 1.349000e-03, double 1.365000e-03, double 1.380000e-03, double 1.396000e-03, double 1.413000e-03, double 1.429000e-03, double 1.445000e-03, double 1.462000e-03, double 1.479000e-03, double 1.496000e-03, double 1.514000e-03, double 1.531000e-03, double 1.549000e-03, double 1.567000e-03, double 1.585000e-03, double 1.603000e-03, double 1.622000e-03, double 1.641000e-03, double 1.660000e-03, double 1.679000e-03, double 1.698000e-03, double 1.718000e-03, double 1.738000e-03, double 1.758000e-03, double 1.778000e-03, double 1.799000e-03, double 1.820000e-03, double 1.841000e-03, double 1.862000e-03, double 1.884000e-03, double 1.905000e-03, double 1.928000e-03, double 1.950000e-03, double 1.972000e-03, double 1.995000e-03, double 2.018000e-03, double 2.042000e-03, double 2.065000e-03, double 2.089000e-03, double 2.113000e-03, double 2.138000e-03, double 2.163000e-03, double 2.188000e-03, double 2.213000e-03, double 2.239000e-03, double 2.265000e-03, double 2.291000e-03, double 2.317000e-03, double 2.344000e-03, double 2.371000e-03, double 2.399000e-03, double 2.427000e-03, double 2.455000e-03, double 2.483000e-03, double 2.512000e-03, double 2.541000e-03, double 2.570000e-03, double 2.600000e-03, double 2.630000e-03, double 2.661000e-03, double 2.692000e-03, double 2.723000e-03, double 2.754000e-03, double 2.786000e-03, double 2.818000e-03, double 2.851000e-03, double 2.884000e-03, double 2.917000e-03, double 2.951000e-03, double 2.985000e-03, double 3.020000e-03, double 3.055000e-03, double 3.090000e-03, double 3.126000e-03, double 3.162000e-03, double 3.199000e-03, double 3.236000e-03, double 3.273000e-03, double 3.311000e-03, double 3.350000e-03, double 3.388000e-03, double 3.428000e-03, double 3.467000e-03, double 3.508000e-03, double 3.548000e-03, double 3.589000e-03, double 3.631000e-03, double 3.673000e-03, double 3.715000e-03, double 3.758000e-03, double 3.802000e-03, double 3.846000e-03, double 3.890000e-03, double 3.936000e-03, double 3.981000e-03, double 4.027000e-03, double 4.074000e-03, double 4.121000e-03, double 4.169000e-03, double 4.217000e-03, double 4.266000e-03, double 4.315000e-03, double 4.365000e-03, double 4.416000e-03, double 4.467000e-03, double 4.519000e-03, double 4.571000e-03, double 4.624000e-03, double 4.677000e-03, double 4.732000e-03, double 4.786000e-03, double 4.842000e-03, double 4.898000e-03, double 4.955000e-03, double 5.012000e-03, double 5.070000e-03, double 5.129000e-03, double 5.188000e-03, double 5.248000e-03, double 5.309000e-03, double 5.370000e-03, double 5.433000e-03, double 5.495000e-03, double 5.559000e-03, double 5.623000e-03, double 5.689000e-03, double 5.754000e-03, double 5.821000e-03, double 5.888000e-03, double 5.957000e-03, double 6.026000e-03, double 6.095000e-03, double 6.166000e-03, double 6.237000e-03, double 6.310000e-03, double 6.383000e-03, double 6.457000e-03, double 6.531000e-03, double 6.607000e-03, double 6.683000e-03, double 6.761000e-03, double 6.839000e-03, double 0x3F7C560C7C0F4517, double 0x3F7CA9EF5232D2BB, double 7.079000e-03, double 0x3F7D54DA4CE8101F, double 0x3F7DABE27179BFDF, double 7.328000e-03, double 7.413000e-03, double 0x3F7EB7457C0B1359, double 0x3F7F127F5E84F095, double 7.674000e-03, double 7.762000e-03, double 0x3F8014B599AA6091, double 7.943000e-03, double 8.035000e-03, double 8.128000e-03, double 8.222000e-03, double 8.318000e-03, double 0x3F813B5BF6A0DBAD, double 0x3F816E3715400325, double 0x3F81A21EA35935FC, double 8.710000e-03, double 8.810000e-03, double 8.913000e-03, double 9.016000e-03, double 9.120000e-03, double 0x3F82E514C22EE419, double 0x3F831D2E0E30446B, double 0x3F8355CD91EEAA6D, double 9.550000e-03, double 9.661000e-03, double 9.772000e-03, double 9.886000e-03, double 1.000000e-02, double 1.011600e-02, double 1.023300e-02, double 1.035100e-02, double 1.047100e-02, double 1.059300e-02, double 1.071500e-02, double 1.083900e-02, double 1.096500e-02, double 1.109200e-02, double 1.122000e-02, double 1.135000e-02, double 1.148200e-02, double 1.161400e-02, double 1.174900e-02, double 1.188500e-02, double 1.202300e-02, double 1.216200e-02, double 1.230300e-02, double 1.244500e-02, double 1.258900e-02, double 1.273500e-02, double 1.288200e-02, double 1.303200e-02, double 1.318300e-02, double 1.333500e-02, double 1.349000e-02, double 1.364600e-02, double 1.380400e-02, double 1.396400e-02, double 1.412500e-02, double 1.428900e-02, double 1.445400e-02, double 1.462200e-02, double 1.479100e-02, double 1.496200e-02, double 1.513600e-02, double 1.531100e-02, double 1.548800e-02, double 1.566800e-02, double 1.584900e-02, double 1.603200e-02, double 1.621800e-02, double 1.640600e-02, double 1.659600e-02, double 1.678800e-02, double 1.698200e-02, double 1.717900e-02, double 1.737800e-02, double 1.757900e-02, double 1.778300e-02, double 1.798900e-02, double 1.819700e-02, double 1.840800e-02, double 1.862100e-02, double 1.883600e-02, double 1.905500e-02, double 1.927500e-02, double 1.949800e-02, double 1.972400e-02, double 1.995300e-02, double 2.018400e-02, double 2.041700e-02, double 2.065400e-02, double 2.089300e-02, double 2.113500e-02, double 2.138000e-02, double 2.162700e-02, double 2.187800e-02, double 2.213100e-02, double 2.238700e-02, double 2.264600e-02, double 2.290900e-02, double 2.317400e-02, double 2.344200e-02, double 2.371400e-02, double 2.398800e-02, double 2.426600e-02, double 2.454700e-02, double 2.483100e-02, double 2.511900e-02, double 2.541000e-02, double 2.570400e-02, double 2.600200e-02, double 2.630300e-02, double 2.660700e-02, double 2.691500e-02, double 2.722700e-02, double 2.754200e-02, double 2.786100e-02, double 2.818400e-02, double 2.851000e-02, double 2.884000e-02, double 2.917400e-02, double 2.951200e-02, double 2.985400e-02, double 3.020000e-02, double 3.054900e-02, double 3.090300e-02, double 3.126100e-02, double 3.162300e-02, double 3.198900e-02, double 3.235900e-02, double 3.273400e-02, double 3.311300e-02, double 3.349700e-02, double 3.388400e-02, double 3.427700e-02, double 3.467400e-02, double 3.507500e-02, double 3.548100e-02, double 3.589200e-02, double 3.630800e-02, double 3.672800e-02, double 3.715400e-02, double 3.758400e-02, double 3.801900e-02, double 3.845900e-02, double 3.890500e-02, double 3.935500e-02, double 3.981100e-02, double 4.027200e-02, double 4.073800e-02, double 4.121000e-02, double 4.168700e-02, double 4.217000e-02, double 4.265800e-02, double 4.315200e-02, double 4.365200e-02, double 4.415700e-02, double 4.466800e-02, double 4.518600e-02, double 4.570900e-02, double 4.623800e-02, double 4.677400e-02, double 4.731500e-02, double 4.786300e-02, double 4.841700e-02, double 4.897800e-02, double 4.954500e-02, double 5.011900e-02, double 5.069900e-02, double 5.128600e-02, double 5.188000e-02, double 5.248100e-02, double 5.308800e-02, double 5.370300e-02, double 5.432500e-02, double 5.495400e-02, double 5.559000e-02, double 5.623400e-02, double 5.688500e-02, double 5.754400e-02, double 5.821000e-02, double 5.888400e-02, double 5.956600e-02, double 6.025600e-02, double 6.095400e-02, double 6.166000e-02, double 0x3FAFEF5A964E8B7E, double 0x3FB0270F3882278D, double 6.382600e-02, double 0x3FB08754F3775B81, double 0x3FB0B85A4F00EF13, double 6.606900e-02, double 6.683400e-02, double 6.760800e-02, double 0x3FB1821294573A79, double 6.918300e-02, double 6.998400e-02, double 7.079500e-02, double 0x3FB2554B8BEF8CEB, double 0x3FB28BB0A2CA9AC3, double 0x3FB2C29BF162AE4B, double 7.413100e-02, double 7.498900e-02, double 0x3FB36B6E0D23D4F1, double 0x3FB3A4F8726D04E6, double 7.762500e-02, double 0x3FB41A261BF37B8D, double 7.943300e-02, double 0x3FB49203A322AF57, double 0x3FB4CEF672B88440, double 8.222400e-02, double 0x3FB54B05B7CFE586, double 8.414000e-02, double 0x3FB5CA07F66E86C6, double 0x3FB60A958537E2C5, double 8.709600e-02, double 8.810500e-02, double 0x3FB6D0E560418937, double 9.015700e-02, double 9.120100e-02, double 9.225700e-02, double 9.332500e-02, double 9.440600e-02, double 9.549900e-02, double 0x3FB8BB1AF3A14CEC, double 9.772400e-02, double 0x3FB94E8FB00BCBE6, double 1.000000e-01, double 1.011580e-01, double 1.023290e-01, double 1.035140e-01, double 1.047130e-01, double 1.059250e-01, double 1.071520e-01, double 1.083930e-01, double 1.096480e-01, double 1.109170e-01, double 1.122020e-01, double 1.135010e-01, double 1.148150e-01, double 1.161450e-01, double 1.174900e-01, double 1.188500e-01, double 1.202260e-01, double 1.216190e-01, double 1.230270e-01, double 1.244510e-01, double 1.258930e-01, double 1.273500e-01, double 1.288250e-01, double 1.303170e-01, double 1.318260e-01, double 1.333520e-01, double 1.348960e-01, double 1.364580e-01, double 1.380380e-01, double 1.396370e-01, double 1.412540e-01, double 1.428890e-01, double 1.445440e-01, double 1.462180e-01, double 1.479110e-01, double 1.496240e-01, double 1.513560e-01, double 1.531090e-01, double 1.548820e-01, double 1.566750e-01, double 1.584890e-01, double 1.603250e-01, double 1.621810e-01, double 1.640590e-01, double 1.659590e-01, double 1.678800e-01, double 1.698240e-01, double 1.717910e-01, double 1.737800e-01, double 1.757920e-01, double 1.778280e-01, double 1.798870e-01, double 1.819700e-01, double 1.840770e-01, double 1.862090e-01, double 1.883650e-01, double 1.905460e-01, double 1.927520e-01, double 1.949840e-01, double 1.972420e-01, double 1.995260e-01, double 2.018370e-01, double 2.041740e-01, double 2.065380e-01, double 2.089300e-01, double 2.113490e-01, double 2.137960e-01, double 2.162720e-01, double 2.187760e-01, double 2.213090e-01, double 2.238720e-01, double 2.264640e-01, double 2.290870e-01, double 2.317390e-01, double 2.344230e-01, double 2.371370e-01, double 2.398830e-01, double 2.426610e-01, double 2.454710e-01, double 2.483130e-01, double 2.511890e-01, double 2.540970e-01, double 2.570400e-01, double 2.600160e-01, double 2.630270e-01, double 2.660730e-01, double 2.691530e-01, double 2.722700e-01, double 2.754230e-01, double 2.786120e-01, double 2.818380e-01, double 2.851020e-01, double 2.884030e-01, double 2.917430e-01, double 2.951210e-01, double 2.985380e-01, double 3.019950e-01, double 3.054920e-01, double 3.090300e-01, double 3.126080e-01, double 3.162280e-01, double 3.198900e-01, double 3.235940e-01, double 3.273410e-01, double 3.311310e-01, double 3.349650e-01, double 3.388440e-01, double 3.427680e-01, double 3.467370e-01, double 3.507520e-01, double 3.548130e-01, double 3.589220e-01, double 3.630780e-01, double 3.672820e-01, double 3.715350e-01, double 3.758370e-01, double 3.801890e-01, double 3.845920e-01, double 3.890450e-01, double 3.935500e-01, double 3.981070e-01, double 4.027170e-01, double 4.073800e-01, double 4.120980e-01, double 4.168690e-01, double 4.216970e-01, double 4.265800e-01, double 4.315190e-01, double 4.365160e-01, double 4.415700e-01, double 4.466840e-01, double 4.518560e-01, double 4.570880e-01, double 4.623810e-01, double 4.677350e-01, double 4.731510e-01, double 4.786300e-01, double 4.841720e-01, double 4.897790e-01, double 4.954500e-01, double 5.011870e-01, double 5.069910e-01, double 5.128610e-01, double 5.188000e-01, double 5.248070e-01, double 5.308840e-01, double 5.370320e-01, double 5.432500e-01, double 5.495410e-01, double 5.559040e-01, double 5.623410e-01, double 5.688530e-01, double 5.754400e-01, double 5.821030e-01, double 5.888440e-01, double 5.956620e-01, double 6.025600e-01, double 6.095370e-01, double 6.165950e-01, double 6.237350e-01, double 6.309570e-01, double 6.382630e-01, double 6.456540e-01, double 6.531310e-01, double 0x3FE52465A57646AE, double 6.683440e-01, double 0x3FE5A278D0CC35CE, double 6.839120e-01, double 6.918310e-01, double 6.998420e-01, double 0x3FE6A77E5EAAB042, double 0x3FE6EAA4B9884C6A, double 7.244360e-01, double 7.328250e-01, double 7.413100e-01, double 7.498940e-01, double 7.585780e-01, double 0x3FE88E38A7E73A36, double 7.762470e-01, double 7.852360e-01, double 7.943280e-01, double 0x3FE9B67C286F8AD2, double 8.128310e-01, double 8.222430e-01, double 0x3FEA9DCF893FAF42, double 8.413950e-01, double 0x3FEB3C85C24C404A, double 8.609940e-01, double 8.709640e-01, double 8.810490e-01, double 8.912510e-01, double 9.015710e-01, double 9.120110e-01, double 9.225710e-01, double 9.332540e-01, double 9.440610e-01, double 0x3FEE8F4D7ADD15F0, double 0x3FEEE9E3C968943E, double 9.772370e-01, double 9.885530e-01, double 1.000000e+00], align 16 -@midi_log_10 = hidden local_unnamed_addr global [128 x double] [double 1.440000e+03, double 0x409A4C2C0229A5EC, double 0x409688E03C4B09EA, double 0x40945562491AFC05, double 0x4092C59476AF89C6, double 0x40918F77CA2120E2, double 0x40909216837F7BE1, double 0x408F77B7646AE3A4, double 0x408E049161A1DB87, double 0x408CBD3117B5286B, double 0x408B9858090B417D, double 0x408A8F6E3A3A8E71, double 0x40899D957B41BFBE, double 0x4088BF1B36BD2B6F, double 0x4087F11FD8ADAB9F, double 0x4087315C1DF3300E, double 0x40867DF9D66ADB40, double 0x4085D578811B1D93, double 0x408536998BF7F067, double 0x4084A0521B3AEEE9, double 0x408411C07D4E0978, double 0x40838A23EC892AB7, double 0x408308D6AF038E2A, double 0x40828D492146A1A5, double 0x408216FDF00ABF77, double 0x4081A58715831F04, double 0x40813883AB862B28, double 0x4080CF9D9F4D37C1, double 0x40806A884D76AB58, double 0x408008FF26F1DC51, double 0x407F5589246BF013, double 0x407E9F4213A0C6B5, double 0x407DEEC4955B4678, double 0x407D43B5903A7547, double 0x407C9DC1EABBCB1D, double 0x407BFC9DDD2AE8E2, double 0x407B60040181E03F, double 0x407AC7B49F0E4DA1, double 0x407A33751EFB6DCA, double 0x4079A30F8B588E37, double 0x40791651E42E1262, double 0x40788D0DE2AC3223, double 0x40780718C197E564, double 0x4077844A8E2E2B8C, double 0x4077047E468CAC4B, double 0x4076879141A6937D, double 0x40760D632C1F42BB, double 0x407595D5CB790FB6, double 0x407520CCC89B0EE5, double 0x4074AE2D80A17B0F, double 0x40743DDF138BCDFF, double 0x4073CFCA148BA83F, double 0x407363D83F91E647, double 0x4072F9F4D9C6B053, double 0x4072920C271FFF7A, double 0x40722C0B9A9DA598, double 0x4071C7E18372E6A7, double 0x4071657D4067CF1C, double 0x407104CF3775B813, double 0x4070A5C8387DF5CF, double 0x4070485A0DFDEF85, double 0x406FD8EE7E62DC6E, double 0x406F2425FA658C4C, double 0x406E7241DB0142F6, double 0x406DC32AFDDA8BD2, double 0x406D16CB09E98DCE, double 0x406C6D0CF398E970, double 0x406BC5DC2B0EA183, double 0x406B2125A89B951C, double 0x406A7ED692B3CC4B, double 0x4069DEDD8D79D0A6, double 0x406941296D4C33B5, double 0x4068A5A9D40EE06E, double 0x40680C4F5B1C8649, double 0x4067750B0F27BB30, double 0x4066DFCE8FB00BCC, double 0x40664C8C111ADA77, double 0x4065BB365ECC3E32, double 0x40652BC0E7BC3C5C, double 0x40649E1F127F5E85, double 0x40641245996744B3, double 0x40638828B8F14DB6, double 0x4062FFBD96638434, double 0x406278F9EE02A77A, double 0x4061F3D35653C9AC, double 0x4061704031487768, double 0x4060EE36ED677708, double 0x40606DAEAB7995EE, double 0x405FDD3CC07AAEF3, double 0x405EE1FB506DD69D, double 0x405DE988ACE24BBA, double 0x405CF3D4E8FB00BD, double 0x405C00D052934ACB, double 0x405B106C7EAE5BC8, double 0x405A229ACFFA7EB7, double 0x4059374D48882F0E, double 0x40584E76C8B43958, double 0x40576809A671EF31, double 0x405683F9A49C2C1B, double 0x4055A23A71151612, double 0x4054C2BFF47735C2, double 0x4053E57F1737542A, double 0x40530A6BF444E0DB, double 0x4052317C3504C48B, double 0x40515AA4A48F96E1, double 0x405085DBBE0157EF, double 0x404F662E12620254, double 0x404DC499D883BA34, double 0x404C26E8858FF759, double 0x404A8D06DD69D302, double 0x4048F6E4217D284A, double 0x4047646D8B1DD5D4, double 0x4045D593682730C6, double 0x40444A446B69DB66, double 0x4042C2714FCE746D, double 0x40413E0ABF76A2F5, double 0x403F7A01FFB480A6, double 0x403C7E8997C3D684, double 0x4039899220FF5409, double 0x40369AFC04C8BC9D, double 0x4033B2AF6837F7BE, double 0x4030D08E68E3EF28, double 0x402BE904F6DFC5CE, double 0x40263CDEA033E78E, double 0x40209C7CB70AC3A8, double 0x40160F53C579F234, double 0x4005F8EB8950763A, double 0.000000e+00], align 16 -@panleftLUT = hidden local_unnamed_addr global [128 x double] [double 0.000000e+00, double 0xBF7BA5E353F7CED9, double -2.700200e-02, double -6.076100e-02, double -1.080400e-01, double -1.688510e-01, double -2.432150e-01, double -3.311550e-01, double -4.326970e-01, double -5.478750e-01, double -6.767230e-01, double -8.192840e-01, double -9.756010e-01, double 0xBFF254E2B063E07A, double 0xBFF5467BE553AC4F, double 0xBFF8711947CFA26A, double 0xBFFBD4FBDAD7518B, double 0xBFFF726D04E618CE, double 0xC001A4DCA8E2E2B9, double 0xC003AD9945B6C376, double 0xC005D397DD00F777, double 0xC0081707182235B5, double 0xC00A7818C5C9A34D, double 0xC00CF6FFC115DF65, double 0xC00F93F4A98AA865, double 0xC01127980F55DE59, double -4.644990e+00, double 0xC01410BAA582DBE8, double 0xC0159C814D72799A, double 0xC01737EF9DB22D0E, double 0xC018E32ACFB762D8, double 0xC01A9E5A35D67BA2, double 0xC01C69A671EF30A5, double 0xC01E453A81DC0DB2, double 0xC02018A19C9D5A18, double 0xC02116F7A0B5ED8D, double 0xC0221DB7CFE58601, double 0xC0232CFBDAD7518B, double 0xC02444DE7EA5F84D, double 0xC025657BC7F77AF6, double 0xC0268EF0AE536502, double 0xC027C15BBBE878FB, double 0xC028FCDD0D8CB07D, double 0xC02A41958969A0AE, double 0xC02B8FA80CF9E386, double 0xC02CE738E6D15AD1, double 0xC02E486DB50F40E6, double 0xC02FB36E503FB374, double 0xC0309431DF761CBD, double 0xC03153BC903EA705, double 0xC032186DD69D3027, double 0xC032E25D28D002E2, double 0xC033B1A32B12D341, double 0xC03486598E10CF5B, double 0xC035609B41398634, double 0xC036408461F9F01C, double 0xC03726326E115593, double 0xC03811C422036007, double 0xC0390359DDC1E796, double 0xC039FB1572580C31, double 0xC03AF91A65061416, double 0xC03BFD8DCDB37C9A, double 0xC03D0896BB98C7E3, double -3.010300e+01, double 0xC03F330F3882278D, double 0xC040296B87379746, double 0xC040BCF2AE07E5A8, double -3.465790e+01, double 0xC041EF5019F3C70D, double 0xC0428E5C9A34CA0C, double 0xC0433178DD616F87, double 0xC043D8C3DAB5C39C, double 0xC044845E56CD6C2F, double 0xC045346AE3A3A8E7, double 0xC045E90E23AF31B1, double 0xC046A26EE30CAA32, double 0xC04760B649D388A9, double 0xC04824100E6AFCCE, double 0xC048ECAA9F7B5AEA, double 0xC049BAB76F6D7625, double 0xC04A8E6B26BF876A, double 0xC04B67FDEF8487BA, double 0xC04C47ABC947064F, double 0xC04D2DB4F6167232, double 0xC04E1A5E2CDC011D, double 0xC04F0DF141205BC0, double 0xC050045EBB7739F3, double 0xC050858C154C985F, double 0xC0510AAEBC408D8F, double 0xC05193F865D7CB2E, double 0xC052219EECBFB15B, double 0xC052B3DCBDDB9842, double 0xC0534AF15E7C8D19, double 0xC053E7220791C4B9, double 0xC05488BA5E353F7D, double 0xC055300D413122B8, double 0xC055DD75C0767D35, double 0xC0569158298CC144, double 0xC0574C23704790B8, double 0xC0580E529BAE46D0, double 0xC058D86EA4228998, double 0xC059AB10BA6266FD, double 0xC05A86E4C0DF58C1, double 0xC05B6CACA7935760, double 0xC05C5D443914F484, double 0xC05D59A5F41AEF70, double 0xC05E62F112FD32C6, double 0xC05F7A710880D802, double 0xC06050D38EF34D6A, double 0xC060ED2B5E529BAE, double 0xC061934AC083126F, double 0xC062447038E29F9D, double 0xC063021C4B90214B, double 0xC063CE2517E77D52, double 0xC064AAD1CE28ED5F, double 0xC0659B0214AD362F, double 0xC066A2685DB76B3C, double 0xC067C5E2EB1C432D, double 0xC0690C09A459103D, double 0xC06A7E1B0468448D, double 0xC06C29A0EE8D10F5, double 0xC06E2398AC9F2FDC, double 0xC070479610ADCD2D, double 0xC071D7235C5B4AA9, double 0xC0740A733CA31E7E, double 0xC077CDA35D67BA23, double -9.600000e+02, double 0.000000e+00], align 16 -@panrightLUT = hidden local_unnamed_addr global [128 x double] [double -9.600000e+02, double 0xC077CDA35D67BA23, double 0xC0740A733CA31E7E, double 0xC071D7235C5B4AA9, double 0xC070479610ADCD2D, double 0xC06E2398AC9F2FDC, double 0xC06C29A0EE8D10F5, double 0xC06A7E1B0468448D, double 0xC0690C09A459103D, double 0xC067C5E2EB1C432D, double 0xC066A2685DB76B3C, double 0xC0659B0214AD362F, double 0xC064AAD1CE28ED5F, double 0xC063CE2517E77D52, double 0xC063021C4B90214B, double 0xC062447038E29F9D, double 0xC061934AC083126F, double 0xC060ED2B5E529BAE, double 0xC06050D38EF34D6A, double 0xC05F7A710880D802, double 0xC05E62F112FD32C6, double 0xC05D59A5F41AEF70, double 0xC05C5D443914F484, double 0xC05B6CACA7935760, double 0xC05A86E4C0DF58C1, double 0xC059AB10BA6266FD, double 0xC058D86EA4228998, double 0xC0580E529BAE46D0, double 0xC0574C23704790B8, double 0xC0569158298CC144, double 0xC055DD75C0767D35, double 0xC055300D413122B8, double 0xC05488BA5E353F7D, double 0xC053E7220791C4B9, double 0xC0534AF15E7C8D19, double 0xC052B3DCBDDB9842, double 0xC052219EECBFB15B, double 0xC05193F865D7CB2E, double 0xC0510AAEBC408D8F, double 0xC050858C154C985F, double 0xC050045EBB7739F3, double 0xC04F0DF141205BC0, double 0xC04E1A5E2CDC011D, double 0xC04D2DB4F6167232, double 0xC04C47ABC947064F, double 0xC04B67FDEF8487BA, double 0xC04A8E6B26BF876A, double 0xC049BAB76F6D7625, double 0xC048ECAA9F7B5AEA, double 0xC04824100E6AFCCE, double 0xC04760B649D388A9, double 0xC046A26EE30CAA32, double 0xC045E90E23AF31B1, double 0xC045346AE3A3A8E7, double 0xC044845E56CD6C2F, double 0xC043D8C3DAB5C39C, double 0xC0433178DD616F87, double 0xC0428E5C9A34CA0C, double 0xC041EF5019F3C70D, double -3.465790e+01, double 0xC040BCF2AE07E5A8, double 0xC040296B87379746, double 0xC03F330F3882278D, double -3.010300e+01, double 0xC03D0896BB98C7E3, double 0xC03BFD8DCDB37C9A, double 0xC03AF91A65061416, double 0xC039FB1572580C31, double 0xC0390359DDC1E796, double 0xC03811C422036007, double 0xC03726326E115593, double 0xC036408461F9F01C, double 0xC035609B41398634, double 0xC03486598E10CF5B, double 0xC033B1A32B12D341, double 0xC032E25D28D002E2, double 0xC032186DD69D3027, double 0xC03153BC903EA705, double 0xC0309431DF761CBD, double 0xC02FB36E503FB374, double 0xC02E486DB50F40E6, double 0xC02CE738E6D15AD1, double 0xC02B8FA80CF9E386, double 0xC02A41958969A0AE, double 0xC028FCDD0D8CB07D, double 0xC027C15BBBE878FB, double 0xC0268EF0AE536502, double 0xC025657BC7F77AF6, double 0xC02444DE7EA5F84D, double 0xC0232CFBDAD7518B, double 0xC0221DB7CFE58601, double 0xC02116F7A0B5ED8D, double 0xC02018A19C9D5A18, double 0xC01E453A81DC0DB2, double 0xC01C69A671EF30A5, double 0xC01A9E5A35D67BA2, double 0xC018E32ACFB762D8, double 0xC01737EF9DB22D0E, double 0xC0159C814D72799A, double 0xC01410BAA582DBE8, double -4.644990e+00, double 0xC01127980F55DE59, double 0xC00F93F4A98AA865, double 0xC00CF6FFC115DF65, double 0xC00A7818C5C9A34D, double 0xC0081707182235B5, double 0xC005D397DD00F777, double 0xC003AD9945B6C376, double 0xC001A4DCA8E2E2B9, double 0xBFFF726D04E618CE, double 0xBFFBD4FBDAD7518B, double 0xBFF8711947CFA26A, double 0xBFF5467BE553AC4F, double 0xBFF254E2B063E07A, double -9.756010e-01, double -8.192840e-01, double -6.767230e-01, double -5.478750e-01, double -4.326970e-01, double -3.311550e-01, double -2.432150e-01, double -1.688510e-01, double -1.080400e-01, double -6.076100e-02, double -2.700200e-02, double 0xBF7BA5E353F7CED9, double 0.000000e+00, double 0.000000e+00], align 16 -@spsIndx = hidden local_unnamed_addr global i8 0, align 1 -@sps = hidden global [64 x %struct.spinner] zeroinitializer, align 16 -@outputs = hidden global [16384 x float] zeroinitializer, align 16 -@silence = hidden global [40 x float] zeroinitializer, align 16 -@eg = hidden global [128 x %struct.EG] zeroinitializer, align 16 -@lfos = hidden global [128 x %struct.LFO] zeroinitializer, align 16 -@midi_cc_vals = hidden local_unnamed_addr global [2048 x i8] zeroinitializer, align 16 -@pcms = hidden global [2222 x %struct.pcm_t] zeroinitializer, align 16 -@pitch_bend_msb = hidden local_unnamed_addr global [2048 x i8] zeroinitializer, align 16 - -; Function Attrs: mustprogress nofree norecurse nosync nounwind readonly willreturn -define hidden double @midi_volume_log10(i32 noundef %0) local_unnamed_addr #0 { - %2 = icmp slt i32 %0, 0 - br i1 %2, label %8, label %3 - -3: ; preds = %1 - %4 = icmp ugt i32 %0, 128 - br i1 %4, label %8, label %5 - -5: ; preds = %3 - %6 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %0 - %7 = load double, ptr %6, align 8, !tbaa !2 - br label %8 - -8: ; preds = %3, %1, %5 - %9 = phi double [ %7, %5 ], [ 1.440000e+03, %1 ], [ 0.000000e+00, %3 ] - ret double %9 -} - -; Function Attrs: nofree nosync nounwind readonly -define hidden double @timecent2second(i16 noundef signext %0) local_unnamed_addr #1 { - %2 = sext i16 %0 to i32 - %3 = icmp slt i16 %0, 0 - br i1 %3, label %6, label %10 - -4: ; preds = %12, %6, %16 - %5 = phi double [ %18, %16 ], [ %9, %6 ], [ %15, %12 ] - ret double %5 - -6: ; preds = %1 - %7 = sub i16 0, %0 - %8 = tail call double @timecent2second(i16 noundef signext %7) - %9 = fdiv double 1.000000e+00, %8 - br label %4 - -10: ; preds = %1 - %11 = icmp ugt i16 %0, 1200 - br i1 %11, label %12, label %16 - -12: ; preds = %10 - %13 = add i16 %0, -1200 - %14 = tail call double @timecent2second(i16 noundef signext %13) - %15 = fmul double %14, 2.000000e+00 - br label %4 - -16: ; preds = %10 - %17 = getelementptr inbounds [1201 x double], ptr @p2over1200, i32 0, i32 %2 - %18 = load double, ptr %17, align 8, !tbaa !2 - br label %4 -} - -; Function Attrs: nofree nosync nounwind readonly -define hidden double @timecent2hertz(i16 noundef signext %0) local_unnamed_addr #1 { - %2 = tail call double @timecent2second(i16 noundef signext %0) - %3 = fmul double %2, 0x40205A1CA0000000 - ret double %3 -} - -; Function Attrs: nofree nosync nounwind readonly -define hidden i32 @timecent2sample(i16 noundef signext %0) local_unnamed_addr #1 { - %2 = tail call double @timecent2second(i16 noundef signext %0) - %3 = fmul double %2, 4.410000e+04 - %4 = fptosi double %3 to i32 - ret i32 %4 -} - -; Function Attrs: nofree nosync nounwind readonly -define hidden double @attack_db_inc(i16 noundef signext %0) local_unnamed_addr #1 { - %2 = tail call double @timecent2second(i16 noundef signext %0) - %3 = fdiv double 9.600000e+02, %2 - %4 = fdiv double %3, 4.410000e+04 - ret double %4 -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind readonly willreturn -define hidden float @applyCentible(float noundef %0, i16 noundef signext %1) local_unnamed_addr #0 { - %3 = sext i16 %1 to i32 - %4 = icmp sgt i16 %1, 0 - br i1 %4, label %14, label %5 - -5: ; preds = %2 - %6 = icmp slt i16 %1, -1239 - br i1 %6, label %14, label %7 - -7: ; preds = %5 - %8 = fpext float %0 to double - %9 = add nsw i32 %3, 1440 - %10 = getelementptr inbounds [1441 x double], ptr @p10over200, i32 0, i32 %9 - %11 = load double, ptr %10, align 8, !tbaa !2 - %12 = fmul double %11, %8 - %13 = fptrunc double %12 to float - br label %14 - -14: ; preds = %5, %2, %7 - %15 = phi float [ %13, %7 ], [ %0, %2 ], [ 0.000000e+00, %5 ] - ret float %15 -} - -; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn -define hidden float @hermite4(float noundef %0, float noundef %1, float noundef %2, float noundef %3, float noundef %4) local_unnamed_addr #2 { - %6 = fsub float %3, %1 - %7 = fmul float %6, 5.000000e-01 - %8 = fsub float %2, %3 - %9 = fadd float %8, %7 - %10 = fadd float %8, %9 - %11 = fsub float %4, %2 - %12 = tail call float @llvm.fmuladd.f32(float %11, float 5.000000e-01, float %10) - %13 = fadd float %9, %12 - %14 = fneg float %13 - %15 = tail call float @llvm.fmuladd.f32(float %12, float %0, float %14) - %16 = tail call float @llvm.fmuladd.f32(float %15, float %0, float %7) - %17 = tail call float @llvm.fmuladd.f32(float %16, float %0, float %2) - ret float %17 -} - -; Function Attrs: mustprogress nocallback nofree nosync nounwind readnone speculatable willreturn -declare float @llvm.fmuladd.f32(float, float, float) #3 - -; Function Attrs: argmemonly nofree norecurse nosync nounwind -define hidden float @roll(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #4 { - %3 = getelementptr inbounds %struct.LFO, ptr %0, i32 0, i32 2 - %4 = load i16, ptr %3, align 2, !tbaa !6 - %5 = zext i16 %4 to i32 - %6 = icmp ugt i32 %5, %1 - br i1 %6, label %7, label %10 - -7: ; preds = %2 - %8 = trunc i32 %1 to i16 - %9 = sub i16 %4, %8 - store i16 %9, ptr %3, align 2, !tbaa !6 - br label %26 - -10: ; preds = %2 - store i16 0, ptr %3, align 2, !tbaa !6 - %11 = icmp eq i32 %5, %1 - br i1 %11, label %12, label %14 - -12: ; preds = %10 - %13 = load i16, ptr %0, align 2, !tbaa !9 - br label %22 - -14: ; preds = %10 - %15 = getelementptr inbounds %struct.LFO, ptr %0, i32 0, i32 1 - %16 = load i16, ptr %15, align 2, !tbaa !10 - %17 = load i16, ptr %0, align 2, !tbaa !9 - %18 = trunc i32 %1 to i16 - %19 = sub i16 %18, %4 - %20 = mul i16 %16, %19 - %21 = add i16 %17, %20 - store i16 %21, ptr %0, align 2, !tbaa !9 - br label %22 - -22: ; preds = %12, %14 - %23 = phi i16 [ %13, %12 ], [ %21, %14 ] - %24 = sitofp i16 %23 to float - %25 = fdiv float %24, 3.276750e+04 - br label %26 - -26: ; preds = %22, %7 - %27 = phi float [ 0.000000e+00, %7 ], [ %25, %22 ] - ret float %27 -} - -; Function Attrs: nofree nosync nounwind -define hidden void @set_frequency(ptr nocapture noundef writeonly %0, i16 noundef signext %1) local_unnamed_addr #5 { - %3 = tail call double @timecent2second(i16 noundef signext %1) - %4 = fmul double %3, 4.410000e+04 - %5 = fptosi double %4 to i32 - %6 = sitofp i32 %5 to float - %7 = fdiv float 0x40F00001A0000000, %6 - %8 = fptoui float %7 to i16 - %9 = getelementptr inbounds %struct.LFO, ptr %0, i32 0, i32 1 - store i16 %8, ptr %9, align 2, !tbaa !10 - ret void -} - -; Function Attrs: argmemonly mustprogress nofree norecurse nosync nounwind readonly willreturn -define hidden float @centdb_val(ptr nocapture noundef readonly %0) local_unnamed_addr #6 { - %2 = load i16, ptr %0, align 2, !tbaa !9 - %3 = zext i16 %2 to i32 - %4 = sub nsw i32 1, %3 - %5 = sitofp i32 %4 to double - %6 = fmul double %5, 5.000000e-01 - %7 = fptrunc double %6 to float - ret float %7 -} - -; Function Attrs: nofree nosync nounwind -define hidden float @update_eg(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #5 { - %3 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - %4 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - br label %6 - -6: ; preds = %26, %2 - %7 = phi i32 [ %1, %2 ], [ %28, %26 ] - %8 = load i32, ptr %3, align 4, !tbaa !11 - %9 = icmp eq i32 %8, 99 - br i1 %9, label %32, label %10 - -10: ; preds = %6 - %11 = load float, ptr %0, align 4, !tbaa !15 - %12 = fcmp olt float %11, -1.360000e+03 - br i1 %12, label %13, label %14 - -13: ; preds = %10 - store i32 99, ptr %3, align 4, !tbaa !11 - br label %32 - -14: ; preds = %10 - %15 = load i32, ptr %4, align 4, !tbaa !16 - %16 = tail call i32 @llvm.smin.i32(i32 %15, i32 %7) - %17 = icmp eq i32 %15, 65535 - br i1 %17, label %23, label %18 - -18: ; preds = %14 - %19 = sub nsw i32 %15, %16 - store i32 %19, ptr %4, align 4, !tbaa !16 - %20 = load float, ptr %5, align 4, !tbaa !17 - %21 = sitofp i32 %16 to float - %22 = tail call float @llvm.fmuladd.f32(float %20, float %21, float %11) - store float %22, ptr %0, align 4, !tbaa !15 - br label %23 - -23: ; preds = %18, %14 - %24 = phi float [ %22, %18 ], [ %11, %14 ] - %25 = icmp slt i32 %15, %7 - br i1 %25, label %26, label %32 - -26: ; preds = %23 - %27 = xor i32 %16, -1 - %28 = add i32 %7, %27 - tail call void @advanceStage(ptr noundef nonnull %0) - %29 = icmp sgt i32 %28, 0 - br i1 %29, label %6, label %30 - -30: ; preds = %26 - %31 = load float, ptr %0, align 4, !tbaa !15 - br label %32 - -32: ; preds = %6, %23, %30, %13 - %33 = phi float [ %11, %13 ], [ %31, %30 ], [ 0.000000e+00, %6 ], [ %24, %23 ] - ret float %33 -} - -; Function Attrs: nofree nosync nounwind -define hidden void @advanceStage(ptr nocapture noundef %0) local_unnamed_addr #5 { - %2 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - %3 = load i32, ptr %2, align 4, !tbaa !11 - switch i32 %3, label %57 [ - i32 0, label %4 - i32 1, label %12 - i32 2, label %22 - i32 3, label %30 - i32 4, label %42 - i32 5, label %55 - ] - -4: ; preds = %1 - store i32 1, ptr %2, align 4, !tbaa !11 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 4 - %6 = load i16, ptr %5, align 4, !tbaa !18 - %7 = tail call double @timecent2second(i16 noundef signext %6) - %8 = fmul double %7, 4.410000e+04 - %9 = fptosi double %8 to i32 - %10 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 %9, ptr %10, align 4, !tbaa !16 - store float -9.600000e+02, ptr %0, align 4, !tbaa !15 - %11 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - store float 0.000000e+00, ptr %11, align 4, !tbaa !17 - br label %57 - -12: ; preds = %1 - store i32 2, ptr %2, align 4, !tbaa !11 - store float -9.600000e+02, ptr %0, align 4, !tbaa !15 - %13 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - %14 = load i16, ptr %13, align 2, !tbaa !19 - %15 = tail call double @timecent2second(i16 noundef signext %14) - %16 = fmul double %15, 4.410000e+04 - %17 = fptosi double %16 to i32 - %18 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 %17, ptr %18, align 4, !tbaa !16 - %19 = sitofp i32 %17 to float - %20 = fdiv float 9.600000e+02, %19 - %21 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - store float %20, ptr %21, align 4, !tbaa !17 - br label %57 - -22: ; preds = %1 - store i32 3, ptr %2, align 4, !tbaa !11 - %23 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - %24 = load i16, ptr %23, align 4, !tbaa !20 - %25 = tail call double @timecent2second(i16 noundef signext %24) - %26 = fmul double %25, 4.410000e+04 - %27 = fptosi double %26 to i32 - %28 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 %27, ptr %28, align 4, !tbaa !16 - %29 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - store float 0.000000e+00, ptr %29, align 4, !tbaa !17 - br label %57 - -30: ; preds = %1 - %31 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - %32 = load i16, ptr %31, align 2, !tbaa !21 - %33 = tail call double @timecent2second(i16 noundef signext %32) - %34 = fmul double %33, 4.410000e+04 - %35 = fptosi double %34 to i32 - %36 = sitofp i32 %35 to float - %37 = fdiv float 1.000000e+00, %36 - %38 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - store float %37, ptr %38, align 4, !tbaa !17 - %39 = fdiv float 1.000000e+00, %37 - %40 = fptosi float %39 to i32 - %41 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 %40, ptr %41, align 4, !tbaa !16 - br label %57 - -42: ; preds = %1 - store i32 5, ptr %2, align 4, !tbaa !11 - %43 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - %44 = load i16, ptr %43, align 2, !tbaa !22 - %45 = tail call double @timecent2second(i16 noundef signext %44) - %46 = fmul double %45, 4.410000e+04 - %47 = fptosi double %46 to i32 - %48 = sitofp i32 %47 to float - %49 = fdiv float -9.600000e+02, %48 - %50 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 1 - store float %49, ptr %50, align 4, !tbaa !17 - %51 = tail call double @timecent2second(i16 noundef signext %44) - %52 = fmul double %51, 4.410000e+04 - %53 = fptosi double %52 to i32 - %54 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 %53, ptr %54, align 4, !tbaa !16 - br label %57 - -55: ; preds = %1 - store i32 6, ptr %2, align 4, !tbaa !11 - %56 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 65535, ptr %56, align 4, !tbaa !16 - br label %57 - -57: ; preds = %1, %55, %42, %30, %22, %12, %4 - ret void -} - -; Function Attrs: argmemonly nofree norecurse nosync nounwind -define hidden ptr @gmemcpy(ptr noundef returned writeonly %0, ptr nocapture noundef readonly %1, i32 noundef %2) local_unnamed_addr #4 { - %4 = icmp eq i32 %2, 0 - br i1 %4, label %23, label %5 - -5: ; preds = %3 - %6 = add i32 %2, -1 - %7 = and i32 %2, 3 - %8 = icmp ult i32 %6, 3 - br i1 %8, label %11, label %9 - -9: ; preds = %5 - %10 = and i32 %2, -4 - br label %24 - -11: ; preds = %24, %5 - %12 = phi i32 [ 0, %5 ], [ %42, %24 ] - %13 = icmp eq i32 %7, 0 - br i1 %13, label %23, label %14 - -14: ; preds = %11, %14 - %15 = phi i32 [ %20, %14 ], [ %12, %11 ] - %16 = phi i32 [ %21, %14 ], [ 0, %11 ] - %17 = getelementptr inbounds i8, ptr %1, i32 %15 - %18 = load i8, ptr %17, align 1, !tbaa !23 - %19 = getelementptr inbounds i8, ptr %0, i32 %15 - store i8 %18, ptr %19, align 1, !tbaa !23 - %20 = add nuw nsw i32 %15, 1 - %21 = add i32 %16, 1 - %22 = icmp eq i32 %21, %7 - br i1 %22, label %23, label %14, !llvm.loop !24 - -23: ; preds = %11, %14, %3 - ret ptr %0 - -24: ; preds = %24, %9 - %25 = phi i32 [ 0, %9 ], [ %42, %24 ] - %26 = phi i32 [ 0, %9 ], [ %43, %24 ] - %27 = getelementptr inbounds i8, ptr %1, i32 %25 - %28 = load i8, ptr %27, align 1, !tbaa !23 - %29 = getelementptr inbounds i8, ptr %0, i32 %25 - store i8 %28, ptr %29, align 1, !tbaa !23 - %30 = or i32 %25, 1 - %31 = getelementptr inbounds i8, ptr %1, i32 %30 - %32 = load i8, ptr %31, align 1, !tbaa !23 - %33 = getelementptr inbounds i8, ptr %0, i32 %30 - store i8 %32, ptr %33, align 1, !tbaa !23 - %34 = or i32 %25, 2 - %35 = getelementptr inbounds i8, ptr %1, i32 %34 - %36 = load i8, ptr %35, align 1, !tbaa !23 - %37 = getelementptr inbounds i8, ptr %0, i32 %34 - store i8 %36, ptr %37, align 1, !tbaa !23 - %38 = or i32 %25, 3 - %39 = getelementptr inbounds i8, ptr %1, i32 %38 - %40 = load i8, ptr %39, align 1, !tbaa !23 - %41 = getelementptr inbounds i8, ptr %0, i32 %38 - store i8 %40, ptr %41, align 1, !tbaa !23 - %42 = add nuw nsw i32 %25, 4 - %43 = add i32 %26, 4 - %44 = icmp eq i32 %43, %10 - br i1 %44, label %11, label %24, !llvm.loop !26 -} - -; Function Attrs: argmemonly mustprogress nofree norecurse nosync nounwind willreturn -define hidden void @scaleTc(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #7 { - %3 = uitofp i32 %1 to float - %4 = fdiv float 4.410000e+04, %3 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - %6 = load i16, ptr %5, align 2, !tbaa !19 - %7 = sitofp i16 %6 to float - %8 = fmul float %4, %7 - %9 = fptosi float %8 to i16 - store i16 %9, ptr %5, align 2, !tbaa !19 - %10 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 4 - %11 = load i16, ptr %10, align 4, !tbaa !18 - %12 = sitofp i16 %11 to float - %13 = fmul float %4, %12 - %14 = fptosi float %13 to i16 - store i16 %14, ptr %10, align 4, !tbaa !18 - %15 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - %16 = load i16, ptr %15, align 2, !tbaa !21 - %17 = sitofp i16 %16 to float - %18 = fmul float %4, %17 - %19 = fptosi float %18 to i16 - store i16 %19, ptr %15, align 2, !tbaa !21 - %20 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - %21 = load i16, ptr %20, align 2, !tbaa !22 - %22 = sitofp i16 %21 to float - %23 = fmul float %4, %22 - %24 = fptosi float %23 to i16 - store i16 %24, ptr %20, align 2, !tbaa !22 - %25 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - %26 = load i16, ptr %25, align 4, !tbaa !20 - %27 = sitofp i16 %26 to float - %28 = fmul float %4, %27 - %29 = fptosi float %28 to i16 - store i16 %29, ptr %25, align 4, !tbaa !20 - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden void @init_vol_eg(ptr nocapture noundef %0, ptr nocapture noundef readonly %1, i32 noundef %2) local_unnamed_addr #5 { - %4 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 33 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 4 - %6 = load i8, ptr %4, align 1, !tbaa !23 - store i8 %6, ptr %5, align 1, !tbaa !23 - %7 = getelementptr inbounds i8, ptr %1, i32 67 - %8 = load i8, ptr %7, align 1, !tbaa !23 - %9 = getelementptr inbounds i8, ptr %0, i32 17 - store i8 %8, ptr %9, align 1, !tbaa !23 - %10 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 34 - %11 = load i8, ptr %10, align 1, !tbaa !23 - %12 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - store i8 %11, ptr %12, align 1, !tbaa !23 - %13 = getelementptr inbounds i8, ptr %1, i32 69 - %14 = load i8, ptr %13, align 1, !tbaa !23 - %15 = getelementptr inbounds i8, ptr %0, i32 19 - store i8 %14, ptr %15, align 1, !tbaa !23 - %16 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 35 - %17 = load i8, ptr %16, align 1, !tbaa !23 - %18 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - store i8 %17, ptr %18, align 1, !tbaa !23 - %19 = getelementptr inbounds i8, ptr %1, i32 71 - %20 = load i8, ptr %19, align 1, !tbaa !23 - %21 = getelementptr inbounds i8, ptr %0, i32 21 - store i8 %20, ptr %21, align 1, !tbaa !23 - %22 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 36 - %23 = load i8, ptr %22, align 1, !tbaa !23 - %24 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - store i8 %23, ptr %24, align 1, !tbaa !23 - %25 = getelementptr inbounds i8, ptr %1, i32 73 - %26 = load i8, ptr %25, align 1, !tbaa !23 - %27 = getelementptr inbounds i8, ptr %0, i32 23 - store i8 %26, ptr %27, align 1, !tbaa !23 - %28 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 37 - %29 = load i8, ptr %28, align 1, !tbaa !23 - %30 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 8 - store i8 %29, ptr %30, align 1, !tbaa !23 - %31 = getelementptr inbounds i8, ptr %1, i32 75 - %32 = load i8, ptr %31, align 1, !tbaa !23 - %33 = getelementptr inbounds i8, ptr %0, i32 25 - store i8 %32, ptr %33, align 1, !tbaa !23 - %34 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 38 - %35 = load i8, ptr %34, align 1, !tbaa !23 - %36 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - store i8 %35, ptr %36, align 1, !tbaa !23 - %37 = getelementptr inbounds i8, ptr %1, i32 77 - %38 = load i8, ptr %37, align 1, !tbaa !23 - %39 = getelementptr inbounds i8, ptr %0, i32 27 - store i8 %38, ptr %39, align 1, !tbaa !23 - %40 = uitofp i32 %2 to float - %41 = fdiv float 4.410000e+04, %40 - %42 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - %43 = load i16, ptr %42, align 2, !tbaa !19 - %44 = sitofp i16 %43 to float - %45 = fmul float %41, %44 - %46 = fptosi float %45 to i16 - store i16 %46, ptr %42, align 2, !tbaa !19 - %47 = load i16, ptr %5, align 4, !tbaa !18 - %48 = sitofp i16 %47 to float - %49 = fmul float %41, %48 - %50 = fptosi float %49 to i16 - store i16 %50, ptr %5, align 4, !tbaa !18 - %51 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - %52 = load i16, ptr %51, align 2, !tbaa !21 - %53 = sitofp i16 %52 to float - %54 = fmul float %41, %53 - %55 = fptosi float %54 to i16 - store i16 %55, ptr %51, align 2, !tbaa !21 - %56 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - %57 = load i16, ptr %56, align 2, !tbaa !22 - %58 = sitofp i16 %57 to float - %59 = fmul float %41, %58 - %60 = fptosi float %59 to i16 - store i16 %60, ptr %56, align 2, !tbaa !22 - %61 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - %62 = load i16, ptr %61, align 4, !tbaa !20 - %63 = sitofp i16 %62 to float - %64 = fmul float %41, %63 - %65 = fptosi float %64 to i16 - store i16 %65, ptr %61, align 4, !tbaa !20 - %66 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - store i32 0, ptr %66, align 4, !tbaa !11 - %67 = icmp sgt i16 %46, -1 - br i1 %67, label %68, label %69 - -68: ; preds = %3 - store i16 0, ptr %42, align 2, !tbaa !19 - br label %69 - -69: ; preds = %68, %3 - tail call void @advanceStage(ptr noundef nonnull %0) - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden void @init_mod_eg(ptr nocapture noundef %0, ptr nocapture noundef readonly %1, i32 noundef %2) local_unnamed_addr #5 { - %4 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 25 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 4 - %6 = load i8, ptr %4, align 1, !tbaa !23 - store i8 %6, ptr %5, align 1, !tbaa !23 - %7 = getelementptr inbounds i8, ptr %1, i32 51 - %8 = load i8, ptr %7, align 1, !tbaa !23 - %9 = getelementptr inbounds i8, ptr %0, i32 17 - store i8 %8, ptr %9, align 1, !tbaa !23 - %10 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 26 - %11 = load i8, ptr %10, align 1, !tbaa !23 - %12 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - store i8 %11, ptr %12, align 1, !tbaa !23 - %13 = getelementptr inbounds i8, ptr %1, i32 53 - %14 = load i8, ptr %13, align 1, !tbaa !23 - %15 = getelementptr inbounds i8, ptr %0, i32 19 - store i8 %14, ptr %15, align 1, !tbaa !23 - %16 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 27 - %17 = load i8, ptr %16, align 1, !tbaa !23 - %18 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - store i8 %17, ptr %18, align 1, !tbaa !23 - %19 = getelementptr inbounds i8, ptr %1, i32 55 - %20 = load i8, ptr %19, align 1, !tbaa !23 - %21 = getelementptr inbounds i8, ptr %0, i32 21 - store i8 %20, ptr %21, align 1, !tbaa !23 - %22 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 28 - %23 = load i8, ptr %22, align 1, !tbaa !23 - %24 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - store i8 %23, ptr %24, align 1, !tbaa !23 - %25 = getelementptr inbounds i8, ptr %1, i32 57 - %26 = load i8, ptr %25, align 1, !tbaa !23 - %27 = getelementptr inbounds i8, ptr %0, i32 23 - store i8 %26, ptr %27, align 1, !tbaa !23 - %28 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 29 - %29 = load i8, ptr %28, align 1, !tbaa !23 - %30 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 8 - store i8 %29, ptr %30, align 1, !tbaa !23 - %31 = getelementptr inbounds i8, ptr %1, i32 59 - %32 = load i8, ptr %31, align 1, !tbaa !23 - %33 = getelementptr inbounds i8, ptr %0, i32 25 - store i8 %32, ptr %33, align 1, !tbaa !23 - %34 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 30 - %35 = load i8, ptr %34, align 1, !tbaa !23 - %36 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - store i8 %35, ptr %36, align 1, !tbaa !23 - %37 = getelementptr inbounds i8, ptr %1, i32 61 - %38 = load i8, ptr %37, align 1, !tbaa !23 - %39 = getelementptr inbounds i8, ptr %0, i32 27 - store i8 %38, ptr %39, align 1, !tbaa !23 - %40 = uitofp i32 %2 to float - %41 = fdiv float 4.410000e+04, %40 - %42 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 5 - %43 = load i16, ptr %42, align 2, !tbaa !19 - %44 = sitofp i16 %43 to float - %45 = fmul float %41, %44 - %46 = fptosi float %45 to i16 - store i16 %46, ptr %42, align 2, !tbaa !19 - %47 = load i16, ptr %5, align 4, !tbaa !18 - %48 = sitofp i16 %47 to float - %49 = fmul float %41, %48 - %50 = fptosi float %49 to i16 - store i16 %50, ptr %5, align 4, !tbaa !18 - %51 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 7 - %52 = load i16, ptr %51, align 2, !tbaa !21 - %53 = sitofp i16 %52 to float - %54 = fmul float %41, %53 - %55 = fptosi float %54 to i16 - store i16 %55, ptr %51, align 2, !tbaa !21 - %56 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 9 - %57 = load i16, ptr %56, align 2, !tbaa !22 - %58 = sitofp i16 %57 to float - %59 = fmul float %41, %58 - %60 = fptosi float %59 to i16 - store i16 %60, ptr %56, align 2, !tbaa !22 - %61 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 6 - %62 = load i16, ptr %61, align 4, !tbaa !20 - %63 = sitofp i16 %62 to float - %64 = fmul float %41, %63 - %65 = fptosi float %64 to i16 - store i16 %65, ptr %61, align 4, !tbaa !20 - %66 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - store i32 0, ptr %66, align 4, !tbaa !11 - tail call void @advanceStage(ptr noundef nonnull %0) - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden void @_eg_set_stage(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #5 { - %3 = add nsw i32 %1, -1 - %4 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - store i32 %3, ptr %4, align 4, !tbaa !11 - %5 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 0, ptr %5, align 4, !tbaa !16 - tail call void @advanceStage(ptr noundef %0) - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden void @_eg_release(ptr nocapture noundef %0) local_unnamed_addr #5 { - %2 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 2 - %3 = load i32, ptr %2, align 4, !tbaa !11 - %4 = add i32 %3, -2 - %5 = icmp ult i32 %4, 3 - br i1 %5, label %6, label %8 - -6: ; preds = %1 - store i32 4, ptr %2, align 4, !tbaa !11 - %7 = getelementptr inbounds %struct.EG, ptr %0, i32 0, i32 3 - store i32 0, ptr %7, align 4, !tbaa !16 - tail call void @advanceStage(ptr noundef nonnull %0) - br label %8 - -8: ; preds = %1, %6 - ret void -} - -; Function Attrs: nofree norecurse nosync nounwind readonly -define hidden noalias ptr @get_available_spinner(i32 noundef %0) local_unnamed_addr #8 { - ret ptr null -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly -define hidden nonnull ptr @newSpinner(i32 noundef %0) local_unnamed_addr #9 { - %2 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0 - %3 = shl nsw i32 %0, 8 - %4 = getelementptr inbounds [16384 x float], ptr @outputs, i32 0, i32 %3 - %5 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 1 - store ptr %4, ptr %5, align 4, !tbaa !28 - store ptr @silence, ptr %2, align 8, !tbaa !31 - %6 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 5 - store i32 36, ptr %6, align 4, !tbaa !32 - %7 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 4 - store i32 4, ptr %7, align 8, !tbaa !33 - %8 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 2 - store float 0.000000e+00, ptr %8, align 8, !tbaa !34 - %9 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 3 - store i32 0, ptr %9, align 4, !tbaa !35 - %10 = shl nsw i32 %0, 1 - %11 = getelementptr inbounds [128 x %struct.EG], ptr @eg, i32 0, i32 %10 - %12 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 10 - store ptr %11, ptr %12, align 8, !tbaa !36 - %13 = or i32 %10, 1 - %14 = getelementptr inbounds [128 x %struct.EG], ptr @eg, i32 0, i32 %13 - %15 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 11 - store ptr %14, ptr %15, align 4, !tbaa !37 - %16 = getelementptr inbounds [128 x %struct.LFO], ptr @lfos, i32 0, i32 %10 - %17 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 12 - store ptr %16, ptr %17, align 8, !tbaa !38 - %18 = getelementptr inbounds [128 x %struct.LFO], ptr @lfos, i32 0, i32 %13 - %19 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 13 - store ptr %18, ptr %19, align 4, !tbaa !39 - %20 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0, i32 14 - store i32 %0, ptr %20, align 8, !tbaa !40 - ret ptr %2 -} - -; Function Attrs: nofree norecurse nosync nounwind writeonly -define hidden void @gm_reset() local_unnamed_addr #10 { - br label %1 - -1: ; preds = %1, %0 - %2 = phi i32 [ 0, %0 ], [ %17, %1 ] - %3 = shl nuw nsw i32 %2, 4 - %4 = or i32 %3, 7 - %5 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %4 - store i8 100, ptr %5, align 1, !tbaa !23 - %6 = or i32 %3, 10 - %7 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %6 - store i8 64, ptr %7, align 2, !tbaa !23 - %8 = or i32 %3, 11 - %9 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %8 - store i8 127, ptr %9, align 1, !tbaa !23 - %10 = shl i32 %2, 4 - %11 = or i32 %10, 23 - %12 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %11 - store i8 100, ptr %12, align 1, !tbaa !23 - %13 = or i32 %10, 26 - %14 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %13 - store i8 64, ptr %14, align 2, !tbaa !23 - %15 = or i32 %10, 27 - %16 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %15 - store i8 127, ptr %16, align 1, !tbaa !23 - %17 = add nuw nsw i32 %2, 2 - %18 = icmp eq i32 %17, 128 - br i1 %18, label %20, label %1, !llvm.loop !41 - -19: ; preds = %20 - ret void - -20: ; preds = %1, %20 - %21 = phi i32 [ %41, %20 ], [ 0, %1 ] - %22 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21 - %23 = shl nuw nsw i32 %21, 8 - %24 = getelementptr inbounds [16384 x float], ptr @outputs, i32 0, i32 %23 - %25 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 1 - store ptr %24, ptr %25, align 4, !tbaa !28 - store ptr @silence, ptr %22, align 8, !tbaa !31 - %26 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 5 - store i32 36, ptr %26, align 4, !tbaa !32 - %27 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 4 - store i32 4, ptr %27, align 8, !tbaa !33 - %28 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 2 - store float 0.000000e+00, ptr %28, align 8, !tbaa !34 - %29 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 3 - store i32 0, ptr %29, align 4, !tbaa !35 - %30 = shl nuw nsw i32 %21, 1 - %31 = getelementptr inbounds [128 x %struct.EG], ptr @eg, i32 0, i32 %30 - %32 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 10 - store ptr %31, ptr %32, align 8, !tbaa !36 - %33 = or i32 %30, 1 - %34 = getelementptr inbounds [128 x %struct.EG], ptr @eg, i32 0, i32 %33 - %35 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 11 - store ptr %34, ptr %35, align 4, !tbaa !37 - %36 = getelementptr inbounds [128 x %struct.LFO], ptr @lfos, i32 0, i32 %30 - %37 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 12 - store ptr %36, ptr %37, align 8, !tbaa !38 - %38 = getelementptr inbounds [128 x %struct.LFO], ptr @lfos, i32 0, i32 %33 - %39 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 13 - store ptr %38, ptr %39, align 4, !tbaa !39 - %40 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %21, i32 14 - store i32 %21, ptr %40, align 8, !tbaa !40 - %41 = add nuw nsw i32 %21, 1 - %42 = icmp eq i32 %41, 64 - br i1 %42, label %19, label %20, !llvm.loop !42 -} - -; Function Attrs: nofree nosync nounwind -define hidden void @eg_release(ptr nocapture noundef readonly %0) local_unnamed_addr #5 { - %2 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %3 = load ptr, ptr %2, align 4, !tbaa !36 - %4 = getelementptr inbounds %struct.EG, ptr %3, i32 0, i32 2 - %5 = load i32, ptr %4, align 4, !tbaa !11 - %6 = add i32 %5, -2 - %7 = icmp ult i32 %6, 3 - br i1 %7, label %8, label %10 - -8: ; preds = %1 - store i32 4, ptr %4, align 4, !tbaa !11 - %9 = getelementptr inbounds %struct.EG, ptr %3, i32 0, i32 3 - store i32 0, ptr %9, align 4, !tbaa !16 - tail call void @advanceStage(ptr noundef nonnull %3) - br label %10 - -10: ; preds = %1, %8 - %11 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 11 - %12 = load ptr, ptr %11, align 4, !tbaa !37 - %13 = getelementptr inbounds %struct.EG, ptr %12, i32 0, i32 2 - %14 = load i32, ptr %13, align 4, !tbaa !11 - %15 = add i32 %14, -2 - %16 = icmp ult i32 %15, 3 - br i1 %16, label %17, label %19 - -17: ; preds = %10 - store i32 4, ptr %13, align 4, !tbaa !11 - %18 = getelementptr inbounds %struct.EG, ptr %12, i32 0, i32 3 - store i32 0, ptr %18, align 4, !tbaa !16 - tail call void @advanceStage(ptr noundef nonnull %12) - br label %19 - -19: ; preds = %10, %17 - ret void -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn -define hidden void @reset(ptr nocapture noundef %0) local_unnamed_addr #11 { - %2 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 3 - store i32 0, ptr %2, align 4, !tbaa !35 - %3 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 2 - store float 0.000000e+00, ptr %3, align 4, !tbaa !34 - %4 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 12 - %5 = load ptr, ptr %4, align 4, !tbaa !38 - store i16 0, ptr %5, align 2, !tbaa !9 - %6 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 13 - %7 = load ptr, ptr %6, align 4, !tbaa !39 - store i16 0, ptr %7, align 2, !tbaa !9 - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden void @set_zone(ptr nocapture noundef %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #5 { - %4 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 9 - store ptr %1, ptr %4, align 4, !tbaa !43 - %5 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 11 - %6 = load ptr, ptr %5, align 4, !tbaa !37 - tail call void @init_mod_eg(ptr noundef %6, ptr noundef %1, i32 noundef %2) - %7 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %8 = load ptr, ptr %7, align 4, !tbaa !36 - tail call void @init_vol_eg(ptr noundef %8, ptr noundef %1, i32 noundef %2) - %9 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 21 - %10 = load i16, ptr %9, align 2, !tbaa !44 - %11 = tail call double @timecent2second(i16 noundef signext %10) - %12 = fmul double %11, 4.410000e+04 - %13 = fptosi double %12 to i32 - %14 = trunc i32 %13 to i16 - %15 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 12 - %16 = load ptr, ptr %15, align 4, !tbaa !38 - %17 = getelementptr inbounds %struct.LFO, ptr %16, i32 0, i32 2 - store i16 %14, ptr %17, align 2, !tbaa !6 - %18 = tail call double @timecent2second(i16 noundef signext %10) - %19 = fmul double %18, 4.410000e+04 - %20 = fptosi double %19 to i32 - %21 = trunc i32 %20 to i16 - %22 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 13 - %23 = load ptr, ptr %22, align 4, !tbaa !39 - %24 = getelementptr inbounds %struct.LFO, ptr %23, i32 0, i32 2 - store i16 %21, ptr %24, align 2, !tbaa !6 - %25 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 22 - %26 = load i16, ptr %25, align 2, !tbaa !47 - %27 = tail call double @timecent2second(i16 noundef signext %26) - %28 = fmul double %27, 4.410000e+04 - %29 = fptosi double %28 to i32 - %30 = sitofp i32 %29 to float - %31 = fdiv float 0x40F00001A0000000, %30 - %32 = fptoui float %31 to i16 - %33 = getelementptr inbounds %struct.LFO, ptr %16, i32 0, i32 1 - store i16 %32, ptr %33, align 2, !tbaa !10 - %34 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 24 - %35 = load i16, ptr %34, align 2, !tbaa !48 - %36 = tail call double @timecent2second(i16 noundef signext %35) - %37 = fmul double %36, 4.410000e+04 - %38 = fptosi double %37 to i32 - %39 = sitofp i32 %38 to float - %40 = fdiv float 0x40F00001A0000000, %39 - %41 = fptoui float %40 to i16 - %42 = getelementptr inbounds %struct.LFO, ptr %23, i32 0, i32 1 - store i16 %41, ptr %42, align 2, !tbaa !10 - ret void -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly -define hidden void @set_midi_cc_val(i32 noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #9 { - %4 = trunc i32 %2 to i8 - %5 = and i8 %4, 127 - %6 = shl nsw i32 %0, 7 - %7 = add nsw i32 %6, %1 - %8 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %7 - store i8 %5, ptr %8, align 1, !tbaa !23 - ret void -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn -define hidden nonnull ptr @spRef(i32 noundef %0) local_unnamed_addr #12 { - %2 = getelementptr inbounds [64 x %struct.spinner], ptr @sps, i32 0, i32 %0 - ret ptr %2 -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn -define hidden nonnull ptr @pcmRef(i32 noundef %0) local_unnamed_addr #12 { - %2 = getelementptr inbounds [2222 x %struct.pcm_t], ptr @pcms, i32 0, i32 %0 - ret ptr %2 -} - -; Function Attrs: argmemonly mustprogress nofree norecurse nosync nounwind willreturn -define hidden void @lfo_effects(ptr noalias nocapture writeonly sret(%struct.LFOEffects) align 4 %0, float noundef %1, ptr nocapture noundef readonly %2) local_unnamed_addr #7 { - %4 = fsub float 1.000000e+00, %1 - %5 = getelementptr inbounds %struct.zone_t, ptr %2, i32 0, i32 13 - %6 = load i16, ptr %5, align 2, !tbaa !49 - %7 = sitofp i16 %6 to float - %8 = fmul float %4, %7 - %9 = getelementptr inbounds %struct.zone_t, ptr %2, i32 0, i32 7 - %10 = load i16, ptr %9, align 2, !tbaa !50 - %11 = sitofp i16 %10 to float - %12 = fmul float %11, %1 - %13 = getelementptr inbounds %struct.zone_t, ptr %2, i32 0, i32 11 - %14 = load i16, ptr %13, align 2, !tbaa !51 - %15 = sitofp i16 %14 to float - %16 = fmul float %15, %1 - %17 = fmul float %16, 0x40219999A0000000 - store float %8, ptr %0, align 4, !tbaa !52 - %18 = getelementptr inbounds %struct.LFOEffects, ptr %0, i32 0, i32 1 - store float %12, ptr %18, align 4, !tbaa !54 - %19 = getelementptr inbounds %struct.LFOEffects, ptr %0, i32 0, i32 2 - store float %17, ptr %19, align 4, !tbaa !55 - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden float @trigger_attack(ptr nocapture noundef %0, ptr noundef %1, float noundef %2, i32 noundef %3) local_unnamed_addr #5 { - %5 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 53 - %6 = load i16, ptr %5, align 2, !tbaa !56 - %7 = sext i16 %6 to i32 - %8 = getelementptr inbounds %struct.pcm_t, ptr @pcms, i32 %7 - %9 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 3 - %10 = load i32, ptr %8, align 8, !tbaa !57 - %11 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 2 - %12 = load i16, ptr %11, align 2, !tbaa !59 - %13 = zext i16 %12 to i32 - %14 = add i32 %10, %13 - %15 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 45 - %16 = load i16, ptr %15, align 2, !tbaa !60 - %17 = zext i16 %16 to i32 - %18 = shl nuw nsw i32 %17, 15 - %19 = add i32 %14, %18 - %20 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 4 - store i32 %19, ptr %20, align 4, !tbaa !33 - %21 = getelementptr inbounds %struct.pcm_t, ptr @pcms, i32 %7, i32 1 - %22 = load i32, ptr %21, align 4, !tbaa !61 - %23 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 1 - %24 = load i16, ptr %23, align 2, !tbaa !62 - %25 = zext i16 %24 to i32 - %26 = add i32 %22, %25 - %27 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 50 - %28 = load i16, ptr %27, align 2, !tbaa !63 - %29 = sext i16 %28 to i32 - %30 = shl nsw i32 %29, 15 - %31 = add i32 %26, %30 - %32 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 5 - store i32 %31, ptr %32, align 4, !tbaa !32 - %33 = getelementptr inbounds %struct.pcm_t, ptr @pcms, i32 %7, i32 5 - %34 = load ptr, ptr %33, align 4, !tbaa !64 - store ptr %34, ptr %0, align 4, !tbaa !31 - store i32 0, ptr %9, align 4, !tbaa !35 - %35 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 2 - store float 0.000000e+00, ptr %35, align 4, !tbaa !34 - %36 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 6 - store float %2, ptr %36, align 4, !tbaa !65 - %37 = and i32 %3, 127 - %38 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 16 - store i32 %37, ptr %38, align 4, !tbaa !66 - %39 = getelementptr inbounds %struct.pcm_t, ptr @pcms, i32 %7, i32 3 - %40 = load i32, ptr %39, align 4, !tbaa !67 - %41 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 9 - store ptr %1, ptr %41, align 4, !tbaa !43 - %42 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 11 - %43 = load ptr, ptr %42, align 4, !tbaa !37 - tail call void @init_mod_eg(ptr noundef %43, ptr noundef nonnull %1, i32 noundef %40) - %44 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %45 = load ptr, ptr %44, align 4, !tbaa !36 - tail call void @init_vol_eg(ptr noundef %45, ptr noundef nonnull %1, i32 noundef %40) - %46 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 21 - %47 = load i16, ptr %46, align 2, !tbaa !44 - %48 = tail call double @timecent2second(i16 noundef signext %47) - %49 = fmul double %48, 4.410000e+04 - %50 = fptosi double %49 to i32 - %51 = trunc i32 %50 to i16 - %52 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 12 - %53 = load ptr, ptr %52, align 4, !tbaa !38 - %54 = getelementptr inbounds %struct.LFO, ptr %53, i32 0, i32 2 - store i16 %51, ptr %54, align 2, !tbaa !6 - %55 = tail call double @timecent2second(i16 noundef signext %47) - %56 = fmul double %55, 4.410000e+04 - %57 = fptosi double %56 to i32 - %58 = trunc i32 %57 to i16 - %59 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 13 - %60 = load ptr, ptr %59, align 4, !tbaa !39 - %61 = getelementptr inbounds %struct.LFO, ptr %60, i32 0, i32 2 - store i16 %58, ptr %61, align 2, !tbaa !6 - %62 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 22 - %63 = load i16, ptr %62, align 2, !tbaa !47 - %64 = tail call double @timecent2second(i16 noundef signext %63) - %65 = fmul double %64, 4.410000e+04 - %66 = fptosi double %65 to i32 - %67 = sitofp i32 %66 to float - %68 = fdiv float 0x40F00001A0000000, %67 - %69 = fptoui float %68 to i16 - %70 = getelementptr inbounds %struct.LFO, ptr %53, i32 0, i32 1 - store i16 %69, ptr %70, align 2, !tbaa !10 - %71 = getelementptr inbounds %struct.zone_t, ptr %1, i32 0, i32 24 - %72 = load i16, ptr %71, align 2, !tbaa !48 - %73 = tail call double @timecent2second(i16 noundef signext %72) - %74 = fmul double %73, 4.410000e+04 - %75 = fptosi double %74 to i32 - %76 = sitofp i32 %75 to float - %77 = fdiv float 0x40F00001A0000000, %76 - %78 = fptoui float %77 to i16 - %79 = getelementptr inbounds %struct.LFO, ptr %60, i32 0, i32 1 - store i16 %78, ptr %79, align 2, !tbaa !10 - %80 = load float, ptr %36, align 4, !tbaa !65 - ret float %80 -} - -; Function Attrs: mustprogress nofree nosync nounwind readnone willreturn -define hidden float @lerp(float noundef %0, float noundef %1, float noundef %2) local_unnamed_addr #2 { - %4 = fsub float %1, %0 - %5 = tail call float @llvm.fmuladd.f32(float %4, float %2, float %0) - ret float %5 -} - -; Function Attrs: mustprogress nofree norecurse nosync nounwind readonly willreturn -define hidden float @kRateAttenuate(ptr nocapture noundef readonly %0, i32 noundef %1) local_unnamed_addr #0 { - %3 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 9 - %4 = load ptr, ptr %3, align 4, !tbaa !43 - %5 = getelementptr inbounds %struct.zone_t, ptr %4, i32 0, i32 48 - %6 = load i16, ptr %5, align 2, !tbaa !68 - %7 = sitofp i16 %6 to float - %8 = fmul float %7, 2.500000e-01 - %9 = fsub float 0.000000e+00, %8 - %10 = shl nsw i32 %1, 7 - %11 = or i32 %10, 7 - %12 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %11 - %13 = load i8, ptr %12, align 1, !tbaa !23 - %14 = icmp slt i8 %13, 0 - br i1 %14, label %20, label %15 - -15: ; preds = %2 - %16 = zext i8 %13 to i32 - %17 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %16 - %18 = load double, ptr %17, align 8, !tbaa !2 - %19 = fmul double %18, 2.500000e-01 - br label %20 - -20: ; preds = %2, %15 - %21 = phi double [ %19, %15 ], [ 3.600000e+02, %2 ] - %22 = fpext float %9 to double - %23 = fsub double %22, %21 - %24 = fptrunc double %23 to float - %25 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %26 = load ptr, ptr %25, align 4, !tbaa !36 - %27 = getelementptr inbounds %struct.EG, ptr %26, i32 0, i32 2 - %28 = load i32, ptr %27, align 4, !tbaa !11 - %29 = icmp sgt i32 %28, 4 - br i1 %29, label %30, label %44 - -30: ; preds = %20 - %31 = or i32 %10, 11 - %32 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %31 - %33 = load i8, ptr %32, align 1, !tbaa !23 - %34 = icmp slt i8 %33, 0 - br i1 %34, label %39, label %35 - -35: ; preds = %30 - %36 = zext i8 %33 to i32 - %37 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %36 - %38 = load double, ptr %37, align 8, !tbaa !2 - br label %39 - -39: ; preds = %30, %35 - %40 = phi double [ %38, %35 ], [ 1.440000e+03, %30 ] - %41 = fpext float %24 to double - %42 = fsub double %41, %40 - %43 = fptrunc double %42 to float - br label %44 - -44: ; preds = %39, %20 - %45 = phi float [ %43, %39 ], [ %24, %20 ] - %46 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 16 - %47 = load i32, ptr %46, align 4, !tbaa !66 - %48 = icmp slt i32 %47, 0 - br i1 %48, label %55, label %49 - -49: ; preds = %44 - %50 = icmp ugt i32 %47, 128 - br i1 %50, label %55, label %51 - -51: ; preds = %49 - %52 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %47 - %53 = load double, ptr %52, align 8, !tbaa !2 - %54 = fmul double %53, 2.500000e-01 - br label %55 - -55: ; preds = %44, %49, %51 - %56 = phi double [ %54, %51 ], [ 3.600000e+02, %44 ], [ 0.000000e+00, %49 ] - %57 = fpext float %45 to double - %58 = fsub double %57, %56 - %59 = fptrunc double %58 to float - ret float %59 -} - -; Function Attrs: nofree nosync nounwind -define hidden void @_spinblock(ptr nocapture noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #5 { - %4 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 12 - %5 = load ptr, ptr %4, align 4, !tbaa !38 - %6 = getelementptr inbounds %struct.LFO, ptr %5, i32 0, i32 2 - %7 = load i16, ptr %6, align 2, !tbaa !6 - %8 = icmp ugt i16 %7, 64 - br i1 %8, label %9, label %11 - -9: ; preds = %3 - %10 = add i16 %7, -64 - store i16 %10, ptr %6, align 2, !tbaa !6 - br label %26 - -11: ; preds = %3 - store i16 0, ptr %6, align 2, !tbaa !6 - %12 = icmp eq i16 %7, 64 - br i1 %12, label %13, label %15 - -13: ; preds = %11 - %14 = load i16, ptr %5, align 2, !tbaa !9 - br label %22 - -15: ; preds = %11 - %16 = getelementptr inbounds %struct.LFO, ptr %5, i32 0, i32 1 - %17 = load i16, ptr %16, align 2, !tbaa !10 - %18 = load i16, ptr %5, align 2, !tbaa !9 - %19 = sub nuw nsw i16 64, %7 - %20 = mul i16 %17, %19 - %21 = add i16 %18, %20 - store i16 %21, ptr %5, align 2, !tbaa !9 - br label %22 - -22: ; preds = %15, %13 - %23 = phi i16 [ %14, %13 ], [ %21, %15 ] - %24 = sitofp i16 %23 to float - %25 = fdiv float %24, 3.276750e+04 - br label %26 - -26: ; preds = %9, %22 - %27 = phi float [ 0.000000e+00, %9 ], [ %25, %22 ] - %28 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 13 - %29 = load ptr, ptr %28, align 4, !tbaa !39 - %30 = getelementptr inbounds %struct.LFO, ptr %29, i32 0, i32 2 - %31 = load i16, ptr %30, align 2, !tbaa !6 - %32 = icmp ugt i16 %31, 64 - br i1 %32, label %33, label %35 - -33: ; preds = %26 - %34 = add i16 %31, -64 - store i16 %34, ptr %30, align 2, !tbaa !6 - br label %50 - -35: ; preds = %26 - store i16 0, ptr %30, align 2, !tbaa !6 - %36 = icmp eq i16 %31, 64 - br i1 %36, label %37, label %39 - -37: ; preds = %35 - %38 = load i16, ptr %29, align 2, !tbaa !9 - br label %46 - -39: ; preds = %35 - %40 = getelementptr inbounds %struct.LFO, ptr %29, i32 0, i32 1 - %41 = load i16, ptr %40, align 2, !tbaa !10 - %42 = load i16, ptr %29, align 2, !tbaa !9 - %43 = sub nuw nsw i16 64, %31 - %44 = mul i16 %41, %43 - %45 = add i16 %42, %44 - store i16 %45, ptr %29, align 2, !tbaa !9 - br label %46 - -46: ; preds = %39, %37 - %47 = phi i16 [ %38, %37 ], [ %45, %39 ] - %48 = sitofp i16 %47 to float - %49 = fdiv float %48, 3.276750e+04 - br label %50 - -50: ; preds = %33, %46 - %51 = phi float [ 0.000000e+00, %33 ], [ %49, %46 ] - %52 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 9 - %53 = load ptr, ptr %52, align 4, !tbaa !43 - %54 = getelementptr inbounds %struct.zone_t, ptr %53, i32 0, i32 7 - %55 = load i16, ptr %54, align 2, !tbaa !50, !noalias !69 - %56 = sitofp i16 %55 to float - %57 = fmul float %27, %56 - %58 = fmul float %51, %56 - %59 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 3 - %60 = load i32, ptr %59, align 4, !tbaa !35 - %61 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 2 - %62 = load float, ptr %61, align 4, !tbaa !34 - %63 = getelementptr inbounds %struct.zone_t, ptr %53, i32 0, i32 53 - %64 = load i16, ptr %63, align 2, !tbaa !56 - %65 = sext i16 %64 to i32 - %66 = getelementptr inbounds [2222 x %struct.pcm_t], ptr @pcms, i32 0, i32 %65, i32 2 - %67 = load i32, ptr %66, align 8, !tbaa !72 - %68 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 5 - %69 = load i32, ptr %68, align 4, !tbaa !32 - %70 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 4 - %71 = load i32, ptr %70, align 4, !tbaa !33 - %72 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 11 - %73 = load ptr, ptr %72, align 4, !tbaa !37 - %74 = load float, ptr %73, align 4, !tbaa !15 - %75 = fcmp ogt float %74, 0.000000e+00 - br i1 %75, label %82, label %76 - -76: ; preds = %50 - %77 = fcmp olt float %74, -9.600000e+02 - br i1 %77, label %82, label %78 - -78: ; preds = %76 - %79 = fadd float %74, 9.600000e+02 - %80 = fptosi float %79 to i16 - %81 = sext i16 %80 to i32 - br label %82 - -82: ; preds = %78, %76, %50 - %83 = phi i32 [ 0, %50 ], [ %81, %78 ], [ -960, %76 ] - %84 = getelementptr inbounds [1441 x double], ptr @p10over200, i32 0, i32 %83 - %85 = load double, ptr %84, align 8, !tbaa !2 - %86 = getelementptr inbounds %struct.zone_t, ptr %53, i32 0, i32 54 - %87 = load i16, ptr %86, align 2, !tbaa !73 - %88 = icmp eq i16 %87, 0 - %89 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %90 = load ptr, ptr %89, align 4, !tbaa !36 - br i1 %88, label %91, label %101 - -91: ; preds = %82 - %92 = getelementptr inbounds %struct.EG, ptr %90, i32 0, i32 2 - %93 = load i32, ptr %92, align 4, !tbaa !11 - %94 = icmp slt i32 %93, 5 - br i1 %94, label %111, label %95 - -95: ; preds = %91 - %96 = load float, ptr %90, align 4, !tbaa !15 - %97 = fpext float %96 to double - %98 = getelementptr inbounds %struct.EG, ptr %90, i32 0, i32 1 - %99 = load float, ptr %98, align 4, !tbaa !17 - %100 = fpext float %99 to double - br label %111 - -101: ; preds = %82 - %102 = load float, ptr %90, align 4, !tbaa !15 - %103 = fpext float %102 to double - %104 = getelementptr inbounds %struct.EG, ptr %90, i32 0, i32 1 - %105 = load float, ptr %104, align 4, !tbaa !17 - %106 = fpext float %105 to double - %107 = icmp sgt i16 %87, 0 - br i1 %107, label %108, label %111 - -108: ; preds = %101 - %109 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 6 - %110 = load float, ptr %109, align 4, !tbaa !65 - br label %111 - -111: ; preds = %91, %95, %101, %108 - %112 = phi i1 [ false, %108 ], [ true, %101 ], [ true, %95 ], [ true, %91 ] - %113 = phi double [ %103, %108 ], [ %103, %101 ], [ %97, %95 ], [ 0.000000e+00, %91 ] - %114 = phi double [ %106, %108 ], [ %106, %101 ], [ %100, %95 ], [ 0.000000e+00, %91 ] - %115 = phi float [ %110, %108 ], [ 1.000000e+00, %101 ], [ 1.000000e+00, %95 ], [ 1.000000e+00, %91 ] - %116 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 14 - %117 = load i32, ptr %116, align 4, !tbaa !40 - %118 = sdiv i32 %117, 2 - %119 = sitofp i16 %55 to double - %120 = fmul double %85, %119 - %121 = fdiv double %120, 1.000000e+02 - %122 = fptrunc double %121 to float - %123 = fadd float %122, 1.200000e+01 - %124 = fdiv float %57, 1.000000e+02 - %125 = fadd float %124, %123 - %126 = fdiv float %58, 1.000000e+02 - %127 = fadd float %126, %125 - %128 = fmul float %127, %115 - %129 = fdiv float %128, 1.200000e+01 - %130 = getelementptr inbounds %struct.zone_t, ptr %53, i32 0, i32 48 - %131 = load i16, ptr %130, align 2, !tbaa !68 - %132 = sitofp i16 %131 to float - %133 = fmul float %132, 2.500000e-01 - %134 = fsub float 0.000000e+00, %133 - %135 = shl nsw i32 %118, 7 - %136 = or i32 %135, 7 - %137 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %136 - %138 = load i8, ptr %137, align 1, !tbaa !23 - %139 = icmp slt i8 %138, 0 - br i1 %139, label %145, label %140 - -140: ; preds = %111 - %141 = zext i8 %138 to i32 - %142 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %141 - %143 = load double, ptr %142, align 8, !tbaa !2 - %144 = fmul double %143, 2.500000e-01 - br label %145 - -145: ; preds = %140, %111 - %146 = phi double [ %144, %140 ], [ 3.600000e+02, %111 ] - %147 = fpext float %134 to double - %148 = fsub double %147, %146 - %149 = fptrunc double %148 to float - %150 = getelementptr inbounds %struct.EG, ptr %90, i32 0, i32 2 - %151 = load i32, ptr %150, align 4, !tbaa !11 - %152 = icmp sgt i32 %151, 4 - br i1 %152, label %153, label %167 - -153: ; preds = %145 - %154 = or i32 %135, 11 - %155 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %154 - %156 = load i8, ptr %155, align 1, !tbaa !23 - %157 = icmp slt i8 %156, 0 - br i1 %157, label %162, label %158 - -158: ; preds = %153 - %159 = zext i8 %156 to i32 - %160 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %159 - %161 = load double, ptr %160, align 8, !tbaa !2 - br label %162 - -162: ; preds = %158, %153 - %163 = phi double [ %161, %158 ], [ 1.440000e+03, %153 ] - %164 = fpext float %149 to double - %165 = fsub double %164, %163 - %166 = fptrunc double %165 to float - br label %167 - -167: ; preds = %162, %145 - %168 = phi float [ %166, %162 ], [ %149, %145 ] - %169 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 16 - %170 = load i32, ptr %169, align 4, !tbaa !66 - %171 = icmp slt i32 %170, 0 - br i1 %171, label %178, label %172 - -172: ; preds = %167 - %173 = icmp ugt i32 %170, 128 - br i1 %173, label %178, label %174 - -174: ; preds = %172 - %175 = getelementptr inbounds [128 x double], ptr @midi_log_10, i32 0, i32 %170 - %176 = load double, ptr %175, align 8, !tbaa !2 - %177 = fmul double %176, 2.500000e-01 - br label %178 - -178: ; preds = %167, %172, %174 - %179 = phi double [ %177, %174 ], [ 3.600000e+02, %167 ], [ 0.000000e+00, %172 ] - %180 = or i32 %135, 10 - %181 = getelementptr inbounds [2048 x i8], ptr @midi_cc_vals, i32 0, i32 %180 - %182 = load i8, ptr %181, align 2, !tbaa !23 - %183 = sext i8 %182 to i32 - %184 = getelementptr inbounds [128 x double], ptr @panleftLUT, i32 0, i32 %183 - %185 = load double, ptr %184, align 8, !tbaa !2 - %186 = fmul double %185, 5.000000e-01 - %187 = getelementptr inbounds [128 x double], ptr @panrightLUT, i32 0, i32 %183 - %188 = load double, ptr %187, align 8, !tbaa !2 - %189 = fmul double %188, 5.000000e-01 - %190 = icmp sgt i32 %1, 0 - br i1 %190, label %191, label %279 - -191: ; preds = %178 - %192 = fpext float %168 to double - %193 = fsub double %192, %179 - %194 = fptrunc double %193 to float - %195 = sub i32 -2, %69 - %196 = add i32 %195, %71 - %197 = add i32 %67, -1 - %198 = fpext float %194 to double - %199 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 1 - br label %200 - -200: ; preds = %191, %264 - %201 = phi i1 [ true, %191 ], [ %270, %264 ] - %202 = phi double [ %113, %191 ], [ %268, %264 ] - %203 = phi i32 [ 0, %191 ], [ %269, %264 ] - %204 = phi i32 [ %60, %191 ], [ %220, %264 ] - %205 = phi float [ %62, %191 ], [ %215, %264 ] - %206 = fadd float %129, %205 - %207 = fcmp ult float %206, 1.000000e+00 - br i1 %207, label %214, label %208 - -208: ; preds = %200, %208 - %209 = phi i32 [ %211, %208 ], [ %204, %200 ] - %210 = phi float [ %212, %208 ], [ %206, %200 ] - %211 = add i32 %209, 1 - %212 = fadd float %210, -1.000000e+00 - %213 = fcmp ult float %212, 1.000000e+00 - br i1 %213, label %214, label %208, !llvm.loop !74 - -214: ; preds = %208, %200 - %215 = phi float [ %206, %200 ], [ %212, %208 ] - %216 = phi i32 [ %204, %200 ], [ %211, %208 ] - %217 = icmp ult i32 %216, %69 - %218 = or i1 %112, %217 - %219 = select i1 %218, i32 0, i32 %196 - %220 = add i32 %219, %216 - %221 = icmp ult i32 %220, %197 - br i1 %221, label %222, label %272 - -222: ; preds = %214 - %223 = load ptr, ptr %0, align 4, !tbaa !31 - %224 = getelementptr inbounds float, ptr %223, i32 %220 - %225 = load float, ptr %224, align 4, !tbaa !75 - %226 = add nuw i32 %220, 1 - %227 = getelementptr inbounds float, ptr %223, i32 %226 - %228 = load float, ptr %227, align 4, !tbaa !75 - %229 = fsub float %228, %225 - %230 = tail call float @llvm.fmuladd.f32(float %229, float %215, float %225) - %231 = fadd double %202, %198 - %232 = fadd double %186, %231 - %233 = fptosi double %232 to i16 - %234 = sext i16 %233 to i32 - %235 = icmp sgt i16 %233, 0 - br i1 %235, label %245, label %236 - -236: ; preds = %222 - %237 = icmp slt i16 %233, -1239 - br i1 %237, label %245, label %238 - -238: ; preds = %236 - %239 = fpext float %230 to double - %240 = add nsw i32 %234, 1440 - %241 = getelementptr inbounds [1441 x double], ptr @p10over200, i32 0, i32 %240 - %242 = load double, ptr %241, align 8, !tbaa !2 - %243 = fmul double %242, %239 - %244 = fptrunc double %243 to float - br label %245 - -245: ; preds = %222, %236, %238 - %246 = phi float [ %244, %238 ], [ %230, %222 ], [ 0.000000e+00, %236 ] - %247 = load ptr, ptr %199, align 4, !tbaa !28 - %248 = add i32 %203, %2 - %249 = shl i32 %248, 1 - %250 = getelementptr inbounds float, ptr %247, i32 %249 - store float %246, ptr %250, align 4, !tbaa !75 - %251 = fadd double %189, %231 - %252 = fptosi double %251 to i16 - %253 = sext i16 %252 to i32 - %254 = icmp sgt i16 %252, 0 - br i1 %254, label %264, label %255 - -255: ; preds = %245 - %256 = icmp slt i16 %252, -1239 - br i1 %256, label %264, label %257 - -257: ; preds = %255 - %258 = fpext float %230 to double - %259 = add nsw i32 %253, 1440 - %260 = getelementptr inbounds [1441 x double], ptr @p10over200, i32 0, i32 %259 - %261 = load double, ptr %260, align 8, !tbaa !2 - %262 = fmul double %261, %258 - %263 = fptrunc double %262 to float - br label %264 - -264: ; preds = %245, %255, %257 - %265 = phi float [ %263, %257 ], [ %230, %245 ], [ 0.000000e+00, %255 ] - %266 = or i32 %249, 1 - %267 = getelementptr inbounds float, ptr %247, i32 %266 - store float %265, ptr %267, align 4, !tbaa !75 - %268 = fadd double %114, %202 - %269 = add nuw nsw i32 %203, 1 - %270 = icmp slt i32 %269, %1 - %271 = icmp eq i32 %269, %1 - br i1 %271, label %279, label %200, !llvm.loop !76 - -272: ; preds = %214 - %273 = load ptr, ptr %199, align 4, !tbaa !28 - %274 = add i32 %203, %2 - %275 = shl i32 %274, 1 - %276 = getelementptr inbounds float, ptr %273, i32 %275 - store float 0.000000e+00, ptr %276, align 4, !tbaa !75 - %277 = or i32 %275, 1 - %278 = getelementptr inbounds float, ptr %273, i32 %277 - store float 0.000000e+00, ptr %278, align 4, !tbaa !75 - store i32 99, ptr %150, align 4, !tbaa !11 - br i1 %201, label %283, label %279 - -279: ; preds = %264, %178, %272 - %280 = phi i32 [ %220, %272 ], [ %60, %178 ], [ %220, %264 ] - %281 = phi float [ %215, %272 ], [ %62, %178 ], [ %215, %264 ] - store i32 %280, ptr %59, align 4, !tbaa !35 - store float %281, ptr %61, align 4, !tbaa !34 - %282 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 6 - store float %129, ptr %282, align 4, !tbaa !65 - br label %283 - -283: ; preds = %272, %279 - ret void -} - -; Function Attrs: nofree nosync nounwind -define hidden i32 @spin(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #5 { - %3 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 10 - %4 = load ptr, ptr %3, align 4, !tbaa !36 - %5 = getelementptr inbounds %struct.EG, ptr %4, i32 0, i32 2 - %6 = getelementptr inbounds %struct.EG, ptr %4, i32 0, i32 3 - %7 = getelementptr inbounds %struct.EG, ptr %4, i32 0, i32 1 - br label %8 - -8: ; preds = %27, %2 - %9 = phi i32 [ 64, %2 ], [ %29, %27 ] - %10 = load i32, ptr %5, align 4, !tbaa !11 - %11 = icmp eq i32 %10, 99 - br i1 %11, label %31, label %12 - -12: ; preds = %8 - %13 = load float, ptr %4, align 4, !tbaa !15 - %14 = fcmp olt float %13, -1.360000e+03 - br i1 %14, label %15, label %16 - -15: ; preds = %12 - store i32 99, ptr %5, align 4, !tbaa !11 - br label %31 - -16: ; preds = %12 - %17 = load i32, ptr %6, align 4, !tbaa !16 - %18 = tail call i32 @llvm.smin.i32(i32 %17, i32 %9) - %19 = icmp eq i32 %17, 65535 - br i1 %19, label %25, label %20 - -20: ; preds = %16 - %21 = sub nsw i32 %17, %18 - store i32 %21, ptr %6, align 4, !tbaa !16 - %22 = load float, ptr %7, align 4, !tbaa !17 - %23 = sitofp i32 %18 to float - %24 = tail call float @llvm.fmuladd.f32(float %22, float %23, float %13) - store float %24, ptr %4, align 4, !tbaa !15 - br label %25 - -25: ; preds = %20, %16 - %26 = icmp slt i32 %17, %9 - br i1 %26, label %27, label %31 - -27: ; preds = %25 - %28 = xor i32 %18, -1 - %29 = add i32 %9, %28 - tail call void @advanceStage(ptr noundef nonnull %4) - %30 = icmp sgt i32 %29, 0 - br i1 %30, label %8, label %31 - -31: ; preds = %27, %8, %25, %15 - %32 = getelementptr inbounds %struct.spinner, ptr %0, i32 0, i32 11 - %33 = load ptr, ptr %32, align 4, !tbaa !37 - %34 = getelementptr inbounds %struct.EG, ptr %33, i32 0, i32 2 - %35 = getelementptr inbounds %struct.EG, ptr %33, i32 0, i32 3 - %36 = getelementptr inbounds %struct.EG, ptr %33, i32 0, i32 1 - br label %37 - -37: ; preds = %56, %31 - %38 = phi i32 [ 64, %31 ], [ %58, %56 ] - %39 = load i32, ptr %34, align 4, !tbaa !11 - %40 = icmp eq i32 %39, 99 - br i1 %40, label %60, label %41 - -41: ; preds = %37 - %42 = load float, ptr %33, align 4, !tbaa !15 - %43 = fcmp olt float %42, -1.360000e+03 - br i1 %43, label %44, label %45 - -44: ; preds = %41 - store i32 99, ptr %34, align 4, !tbaa !11 - br label %60 - -45: ; preds = %41 - %46 = load i32, ptr %35, align 4, !tbaa !16 - %47 = tail call i32 @llvm.smin.i32(i32 %46, i32 %38) - %48 = icmp eq i32 %46, 65535 - br i1 %48, label %54, label %49 - -49: ; preds = %45 - %50 = sub nsw i32 %46, %47 - store i32 %50, ptr %35, align 4, !tbaa !16 - %51 = load float, ptr %36, align 4, !tbaa !17 - %52 = sitofp i32 %47 to float - %53 = tail call float @llvm.fmuladd.f32(float %51, float %52, float %42) - store float %53, ptr %33, align 4, !tbaa !15 - br label %54 - -54: ; preds = %49, %45 - %55 = icmp slt i32 %46, %38 - br i1 %55, label %56, label %60 - -56: ; preds = %54 - %57 = xor i32 %47, -1 - %58 = add i32 %38, %57 - tail call void @advanceStage(ptr noundef nonnull %33) - %59 = icmp sgt i32 %58, 0 - br i1 %59, label %37, label %60 - -60: ; preds = %56, %37, %54, %44 - tail call void @_spinblock(ptr noundef %0, i32 noundef 64, i32 noundef 0) - %61 = load ptr, ptr %3, align 4, !tbaa !36 - %62 = getelementptr inbounds %struct.EG, ptr %61, i32 0, i32 2 - %63 = getelementptr inbounds %struct.EG, ptr %61, i32 0, i32 3 - %64 = getelementptr inbounds %struct.EG, ptr %61, i32 0, i32 1 - br label %65 - -65: ; preds = %84, %60 - %66 = phi i32 [ 64, %60 ], [ %86, %84 ] - %67 = load i32, ptr %62, align 4, !tbaa !11 - %68 = icmp eq i32 %67, 99 - br i1 %68, label %88, label %69 - -69: ; preds = %65 - %70 = load float, ptr %61, align 4, !tbaa !15 - %71 = fcmp olt float %70, -1.360000e+03 - br i1 %71, label %72, label %73 - -72: ; preds = %69 - store i32 99, ptr %62, align 4, !tbaa !11 - br label %88 - -73: ; preds = %69 - %74 = load i32, ptr %63, align 4, !tbaa !16 - %75 = tail call i32 @llvm.smin.i32(i32 %74, i32 %66) - %76 = icmp eq i32 %74, 65535 - br i1 %76, label %82, label %77 - -77: ; preds = %73 - %78 = sub nsw i32 %74, %75 - store i32 %78, ptr %63, align 4, !tbaa !16 - %79 = load float, ptr %64, align 4, !tbaa !17 - %80 = sitofp i32 %75 to float - %81 = tail call float @llvm.fmuladd.f32(float %79, float %80, float %70) - store float %81, ptr %61, align 4, !tbaa !15 - br label %82 - -82: ; preds = %77, %73 - %83 = icmp slt i32 %74, %66 - br i1 %83, label %84, label %88 - -84: ; preds = %82 - %85 = xor i32 %75, -1 - %86 = add i32 %66, %85 - tail call void @advanceStage(ptr noundef nonnull %61) - %87 = icmp sgt i32 %86, 0 - br i1 %87, label %65, label %88 - -88: ; preds = %84, %65, %82, %72 - %89 = load ptr, ptr %32, align 4, !tbaa !37 - %90 = getelementptr inbounds %struct.EG, ptr %89, i32 0, i32 2 - %91 = getelementptr inbounds %struct.EG, ptr %89, i32 0, i32 3 - %92 = getelementptr inbounds %struct.EG, ptr %89, i32 0, i32 1 - br label %93 - -93: ; preds = %112, %88 - %94 = phi i32 [ 64, %88 ], [ %114, %112 ] - %95 = load i32, ptr %90, align 4, !tbaa !11 - %96 = icmp eq i32 %95, 99 - br i1 %96, label %116, label %97 - -97: ; preds = %93 - %98 = load float, ptr %89, align 4, !tbaa !15 - %99 = fcmp olt float %98, -1.360000e+03 - br i1 %99, label %100, label %101 - -100: ; preds = %97 - store i32 99, ptr %90, align 4, !tbaa !11 - br label %116 - -101: ; preds = %97 - %102 = load i32, ptr %91, align 4, !tbaa !16 - %103 = tail call i32 @llvm.smin.i32(i32 %102, i32 %94) - %104 = icmp eq i32 %102, 65535 - br i1 %104, label %110, label %105 - -105: ; preds = %101 - %106 = sub nsw i32 %102, %103 - store i32 %106, ptr %91, align 4, !tbaa !16 - %107 = load float, ptr %92, align 4, !tbaa !17 - %108 = sitofp i32 %103 to float - %109 = tail call float @llvm.fmuladd.f32(float %107, float %108, float %98) - store float %109, ptr %89, align 4, !tbaa !15 - br label %110 - -110: ; preds = %105, %101 - %111 = icmp slt i32 %102, %94 - br i1 %111, label %112, label %116 - -112: ; preds = %110 - %113 = xor i32 %103, -1 - %114 = add i32 %94, %113 - tail call void @advanceStage(ptr noundef nonnull %89) - %115 = icmp sgt i32 %114, 0 - br i1 %115, label %93, label %116 - -116: ; preds = %112, %93, %110, %100 - tail call void @_spinblock(ptr noundef %0, i32 noundef 64, i32 noundef 64) - %117 = load ptr, ptr %3, align 4, !tbaa !36 - %118 = getelementptr inbounds %struct.EG, ptr %117, i32 0, i32 2 - %119 = load i32, ptr %118, align 4, !tbaa !11 - ret i32 %119 -} - -; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn -declare i32 @llvm.smin.i32(i32, i32) #13 - -attributes #0 = { mustprogress nofree norecurse nosync nounwind readonly willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #1 = { nofree nosync nounwind readonly "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #2 = { mustprogress nofree nosync nounwind readnone willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #3 = { mustprogress nocallback nofree nosync nounwind readnone speculatable willreturn } -attributes #4 = { argmemonly nofree norecurse nosync nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #5 = { nofree nosync nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #6 = { argmemonly mustprogress nofree norecurse nosync nounwind readonly willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #7 = { argmemonly mustprogress nofree norecurse nosync nounwind willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #8 = { nofree norecurse nosync nounwind readonly "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #9 = { mustprogress nofree norecurse nosync nounwind willreturn writeonly "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #10 = { nofree norecurse nosync nounwind writeonly "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #11 = { mustprogress nofree norecurse nosync nounwind willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #12 = { mustprogress nofree norecurse nosync nounwind readnone willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" } -attributes #13 = { nocallback nofree nosync nounwind readnone speculatable willreturn } - -!llvm.module.flags = !{!0} -!llvm.ident = !{!1} - -!0 = !{i32 1, !"wchar_size", i32 4} -!1 = !{!"Homebrew clang version 15.0.7"} -!2 = !{!3, !3, i64 0} -!3 = !{!"double", !4, i64 0} -!4 = !{!"omnipotent char", !5, i64 0} -!5 = !{!"Simple C/C++ TBAA"} -!6 = !{!7, !8, i64 4} -!7 = !{!"", !8, i64 0, !8, i64 2, !8, i64 4} -!8 = !{!"short", !4, i64 0} -!9 = !{!7, !8, i64 0} -!10 = !{!7, !8, i64 2} -!11 = !{!12, !14, i64 8} -!12 = !{!"", !13, i64 0, !13, i64 4, !14, i64 8, !14, i64 12, !8, i64 16, !8, i64 18, !8, i64 20, !8, i64 22, !8, i64 24, !8, i64 26, !8, i64 28, !8, i64 30} -!13 = !{!"float", !4, i64 0} -!14 = !{!"int", !4, i64 0} -!15 = !{!12, !13, i64 0} -!16 = !{!12, !14, i64 12} -!17 = !{!12, !13, i64 4} -!18 = !{!12, !8, i64 16} -!19 = !{!12, !8, i64 18} -!20 = !{!12, !8, i64 20} -!21 = !{!12, !8, i64 22} -!22 = !{!12, !8, i64 26} -!23 = !{!4, !4, i64 0} -!24 = distinct !{!24, !25} -!25 = !{!"llvm.loop.unroll.disable"} -!26 = distinct !{!26, !27} -!27 = !{!"llvm.loop.mustprogress"} -!28 = !{!29, !30, i64 4} -!29 = !{!"", !30, i64 0, !30, i64 4, !13, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !13, i64 24, !13, i64 28, !14, i64 32, !30, i64 36, !30, i64 40, !30, i64 44, !30, i64 48, !30, i64 52, !14, i64 56, !14, i64 60, !14, i64 64, !4, i64 68} -!30 = !{!"any pointer", !4, i64 0} -!31 = !{!29, !30, i64 0} -!32 = !{!29, !14, i64 20} -!33 = !{!29, !14, i64 16} -!34 = !{!29, !13, i64 8} -!35 = !{!29, !14, i64 12} -!36 = !{!29, !30, i64 40} -!37 = !{!29, !30, i64 44} -!38 = !{!29, !30, i64 48} -!39 = !{!29, !30, i64 52} -!40 = !{!29, !14, i64 56} -!41 = distinct !{!41, !27} -!42 = distinct !{!42, !27} -!43 = !{!29, !30, i64 36} -!44 = !{!45, !8, i64 42} -!45 = !{!"", !8, i64 0, !8, i64 2, !8, i64 4, !8, i64 6, !8, i64 8, !8, i64 10, !8, i64 12, !8, i64 14, !8, i64 16, !8, i64 18, !8, i64 20, !8, i64 22, !8, i64 24, !8, i64 26, !8, i64 28, !8, i64 30, !8, i64 32, !8, i64 34, !8, i64 36, !8, i64 38, !8, i64 40, !8, i64 42, !8, i64 44, !8, i64 46, !8, i64 48, !8, i64 50, !8, i64 52, !8, i64 54, !8, i64 56, !8, i64 58, !8, i64 60, !8, i64 62, !8, i64 64, !8, i64 66, !8, i64 68, !8, i64 70, !8, i64 72, !8, i64 74, !8, i64 76, !8, i64 78, !8, i64 80, !8, i64 82, !8, i64 84, !46, i64 86, !46, i64 88, !8, i64 90, !8, i64 92, !8, i64 94, !8, i64 96, !8, i64 98, !8, i64 100, !8, i64 102, !8, i64 104, !8, i64 106, !8, i64 108, !8, i64 110, !8, i64 112, !8, i64 114, !8, i64 116, !8, i64 118} -!46 = !{!"", !4, i64 0, !4, i64 1} -!47 = !{!45, !8, i64 44} -!48 = !{!45, !8, i64 48} -!49 = !{!45, !8, i64 26} -!50 = !{!45, !8, i64 14} -!51 = !{!45, !8, i64 22} -!52 = !{!53, !13, i64 0} -!53 = !{!"", !13, i64 0, !13, i64 4, !13, i64 8} -!54 = !{!53, !13, i64 4} -!55 = !{!53, !13, i64 8} -!56 = !{!45, !8, i64 106} -!57 = !{!58, !14, i64 0} -!58 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !30, i64 20} -!59 = !{!45, !8, i64 4} -!60 = !{!45, !8, i64 90} -!61 = !{!58, !14, i64 4} -!62 = !{!45, !8, i64 2} -!63 = !{!45, !8, i64 100} -!64 = !{!58, !30, i64 20} -!65 = !{!29, !13, i64 24} -!66 = !{!29, !14, i64 64} -!67 = !{!58, !14, i64 12} -!68 = !{!45, !8, i64 96} -!69 = !{!70} -!70 = distinct !{!70, !71, !"lfo_effects: argument 0"} -!71 = distinct !{!71, !"lfo_effects"} -!72 = !{!58, !14, i64 8} -!73 = !{!45, !8, i64 108} -!74 = distinct !{!74, !27} -!75 = !{!13, !13, i64 0} -!76 = distinct !{!76, !27} diff --git a/spin/build/spin.o b/spin/build/spin.o deleted file mode 100644 index b7da319c4f5cc91b84ae40a23d85c837d4c7c8f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165351 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 V;!`H4+niRnJtDVrc20KJ{{XB`$gBVW diff --git a/spin/spin-proc.js b/spin/spin-proc.js index cf19b5de..804969e1 100644 --- a/spin/spin-proc.js +++ b/spin/spin-proc.js @@ -1,10 +1,24 @@ import { downloadData } from "../fetch-drop-ship/download.js"; import saturate from "../saturation/index.js"; import { wasmbin } from "./spin.wasm.js"; +const n_midi_channels = 16; +const n_voices = 16 * 4; +const EG_STAGES = { + INIT: 0, + DELAY: 1, + ATTACK: 2, + HOLD: 3, + DECAY: 4, + RELEASE: 5, + DONE: 99, +}; + class SpinProcessor extends AudioWorkletProcessor { constructor(options) { super(options); this.setup_wasm(); + + this.active_voices = []; this.inst.exports.gm_reset(); this.sampleIdRefs = []; this.presetRefs = []; @@ -14,15 +28,14 @@ class SpinProcessor extends AudioWorkletProcessor { this.midiccRef = new Uint8Array( this.memory.buffer, this.inst.exports.midi_cc_vals, - 128 * 16 + 128 * n_midi_channels ); this.outputfff = new Float32Array( this.memory.buffer, this.inst.exports.outputs.value, - 128 * 32 + 128 * n_voices ); this.port.postMessage({ init: 1 }); - this.eg_vol_stag = new Array(16).fill(0); } sdtaRef(sampleId) { return new Uint32Array( @@ -37,18 +50,11 @@ class SpinProcessor extends AudioWorkletProcessor { maximum: 1024 * 4, initial: 1024 * 4, }); - let lastfl; const imports = { memory: this.memory, - debugFL: (fl) => { - if (!lastfl || fl != lastfl) { - lastfl = fl; - } - }, }; - this.inst = new WebAssembly.Instance(new WebAssembly.Module(wasmbin), { - env: imports, - }); + const mdoule = new WebAssembly.Module(wasmbin) + this.inst = new WebAssembly.Instance(mdoule,{env:imports}); this.brk = 0x30000; this.malololc = (len) => { const ret = this.brk; @@ -59,7 +65,7 @@ class SpinProcessor extends AudioWorkletProcessor { } ch_occupied(ch) { - return this.eg_vol_stag[ch] && this.eg_vol_stag[ch] < 99; + return this.eg_vol_stag[ch] && this.eg_vol_stag[ch] < 6; } async handleMsg(e) { const { data } = e; @@ -72,7 +78,7 @@ class SpinProcessor extends AudioWorkletProcessor { this.presetRefs[ref] = ptr; new Int16Array(this.memory.buffer, ptr, 60).set( new Int16Array(arr, 0, 60) - ); //.set + ); } this.port.postMessage({ zack: 1 }); } else { @@ -94,18 +100,10 @@ class SpinProcessor extends AudioWorkletProcessor { if (!this.presetRefs[zoneRef]) { return; } - if (!this.spinners[channel]) { - this.instantiate(this.presetRefs[channel], channel); - } - let ch = channel; - for ( - let ch = channel; - ch < 64 && this.ch_occupied(ch); // channel occuppied - ch++ // find next one. - ); - this.inst.exports.reset(this.spinners[ch]); + const spinner = this.inst.exports.get_available_spinner(channel); + this.active_voices.push([spinner, channel]); this.inst.exports.trigger_attack( - this.spinners[ch], + spinner, this.presetRefs[zoneRef], ratio, velocity @@ -130,39 +128,22 @@ class SpinProcessor extends AudioWorkletProcessor { ); } - instantiate(zone, i) { - this.spinners[i] = this.inst.exports.newSpinner(i); - const spIO = new Uint32Array(this.memory.buffer, this.spinners[i], 2); - this.outputs[i] = new Float32Array(this.memory.buffer, spIO[1], 128 * 2); - return this.spinners[i]; - } - process(inputs, outputs, parameters) { - for (let i = 0; i < outputs.length; i++) { - if (!this.spinners[i]) continue; - if (!this.outputs[i]) continue; - for (let j = 0; j < 128 * 2; j++) { - this.outputs[i][j] = 0; + let sp_to_run=[]; + for(let i=0; i=EG_STAGES.DONE){ + this.active_voices.splice(i,1); + this.inst.exports.set_available(spinner); } - this.eg_vol_stag[i] = this.inst.exports.spin(this.spinners[i], 128); for (let j = 0; j < 128; j++) { - outputs[i][0][j] = saturate(this.outputs[i][2 * j] * 0.5); - outputs[i][1][j] = saturate(this.outputs[i][2 * j + 1] * 0.5); + outputs[channel][0][j] += rendered[2 * j]; + outputs[channel][1][j] += rendered[2 * j + 1]; } - } - - // if ( - // outputs[0][15] > 0.00000001 || - // outputs[0][44] > 0.00000001 || - // outputs[0][66] > 0.00000001 || - // outputs[0][22] > 0.00000001 - // ) { - // const pcmplayback = new Float32Array(128 * 32); - // pcmplayback.set(this.outputfff); - // new Promise((r) => r()).then(() => - // this.port.postMessage({ pcmplayback: pcmplayback }) - // ); - // } + }9 + this.active_voices.push(sp_to_run) return true; } } diff --git a/spin/spin.wasm b/spin/spin.wasm index c2d590981124c242c4d0fefc7411c20031bcc2d0..5c073470291a7b7b83019aa2f4257f288bcda65c 100755 GIT binary patch literal 469 zcmZut%TB{E5S(?=l-5O5m5`{!p(6PZa^MHx16(&bW;)l`tG_8;S$s?fhD#6Q5$@DS`v8=AOeK%o}n!XG5F{qb)pl|kHhBK?~cU5Ndx>8oJ3MNdIVq>aW z6?LY)fasjdCNufga-|xpvrQicG5^OuunRQI2##wj-7vz7qjOxXF&Opvclwzzob>pX z8(SO3$+&OR!tI68<>cY3nY*;5^e0@#?4$&f(0GqKhp1i6951J literal 32913 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 max ? max : val < min ? min : val +#endif + -double midi_volume_log10(int val) { - if (val < 0) return 1440; - if (val > 128) return 0; - return midi_log_10[val]; -} double timecent2second(short tc) { if (tc < 0) return 1.0f / timecent2second(-1 * tc); @@ -51,4 +50,9 @@ static inline short sf2midiPan(short sf2pan) { if (sf2pan < -500) return 1; return (short)64 + sf2pan / 500 * 64; } +double midi_volume_log10(int val) { + if (val < 0) return 1440; + if (val > 128) return 0; + return midi_log_10[val]; +} #endif \ No newline at end of file diff --git a/spin/src/sf2.h b/spin/src/sf2.h index 59a53dbf..bd643723 100755 --- a/spin/src/sf2.h +++ b/spin/src/sf2.h @@ -1,6 +1,5 @@ #ifndef SF2_H #define SF2_H -#include typedef unsigned int uint32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; diff --git a/spin/src/spin.c b/spin/src/spin.c index c769423f..39d85cb1 100644 --- a/spin/src/spin.c +++ b/spin/src/spin.c @@ -5,6 +5,7 @@ #define nchannels 64 #define nmidiChannels 16 extern void debugFL(float fl); +#define export __attribute__((used)) spinner sps[nchannels]; EG eg[nchannels * 2]; @@ -18,16 +19,21 @@ float silence[40]; char spsIndx = 0; pcm_t pcms[2222]; -spinner* get_available_spinner(int channelId) { +export spinner* get_available_spinner(int channelId) { spinner* sp; for (int i = 0; i < nchannels; i++) { if (sps[i].sp_avail == SP_AVAIL) { sp = &sps[i]; + sp->channelId=channelId; + sp->sp_avail=sp_NOT_AVAIL; + return sp; } } return 0; } - +export void set_available(spinner*x){ + x->sp_avail=sp_NOT_AVAIL; +} spinner* newSpinner(int idx) { spinner* x = &sps[idx]; x->outputf = &outputs[idx * RENDQ * 2]; @@ -44,7 +50,7 @@ spinner* newSpinner(int idx) { return x; } -void gm_reset() { +export void gm_reset() { for (int idx = 0; idx < 128; idx++) { midi_cc_vals[idx * nmidiChannels + TML_VOLUME_MSB] = 100; midi_cc_vals[idx * nmidiChannels + TML_PAN_MSB] = 64; @@ -82,6 +88,7 @@ void set_midi_cc_val(int channel, int metric, int val) { spinner* spRef(int idx) { return &sps[idx]; } pcm_t* pcmRef(int idx) { return &pcms[idx]; } +export float* spOutput(spinner* sp) { return sp->outputf; } LFOEffects lfo_effects(float lfoval, zone_t* z) { float mod2vol = (1 - lfoval) * z->ModLFO2Vol; diff --git a/spin/src/spin.h b/spin/src/spin.h index b2da5f19..022c3cd6 100644 --- a/spin/src/spin.h +++ b/spin/src/spin.h @@ -33,7 +33,8 @@ void set_zone(spinner* x, zone_t* z, unsigned int pcm_sampleRate); spinner* newSpinner(int idx); void eg_release(spinner* x); void reset(spinner* x); -int spin(spinner* x, int n); +int spin(spinner* x, int n); +float* spOutput(spinner*x); // borrowed from tml.h enum TMLController { diff --git a/src/createChannel.js b/src/createChannel.js index dfe53b8a..73671e64 100644 --- a/src/createChannel.js +++ b/src/createChannel.js @@ -19,7 +19,7 @@ export function createChannel(uiController, channelId, sf2, spinner) { }, keyOn(key, vel) { const zones = program.filterKV(key, vel); - zones.slice(2).map((zone, i) => { + zones.slice(3).map((zone, i) => { key_on_map[key] = channelId * +i; spinner.keyOn(channelId * 2 + i, zone, key, vel); }); @@ -51,7 +51,7 @@ export function createChannel(uiController, channelId, sf2, spinner) { }); }, keyOff(key, vel) { - while (key_on_map[key].length) { + while ((key_on_map[key] || []).length) { spinner.keyOff(key_on_map[key].shift(), key, vel); } // spinner.keyOff(channelId * 2 + 1, key, vel); diff --git a/src/index.js b/src/index.js index fd94b48e..508434e9 100644 --- a/src/index.js +++ b/src/index.js @@ -196,7 +196,10 @@ async function main(sf2file, midifile) { mkdiv2({ tag: "option", value: n, children: n }).attachTo(drumList); } }); - channels.forEach((c) => c.setSF2(sf2)); + channels.forEach((c,i) => { + c.setSF2(sf2); + c.setProgram(i,i==9 ? 128 : 0); + }); for (const [section, text] of sf2.meta) { stderr(section + ": " + text); }