Advertisement
Kurausukun

GCC

Aug 1st, 2024
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.46 KB | None | 0 0
  1. /* WARNING: Type propagation algorithm not settling */
  2. /* DWARF original prototype: void Update(Channel * this) */
  3.  
  4. void __thiscall Channel::Update(Channel *this)
  5.  
  6. {
  7.   uint32_t uVar1;
  8.   uint32_t uVar2;
  9.   SharpInterpolator *pSVar3;
  10.   SWAV *pSVar4;
  11.   undefined2 uVar5;
  12.   undefined2 uVar6;
  13.   byte bVar7;
  14.   uint32_t uVar8;
  15.   uint32_t uVar9;
  16.   uint16_t uVar10;
  17.   ushort uVar11;
  18.   uint uVar12;
  19.   uint uVar13;
  20.   int iVar14;
  21.   ulong uVar15;
  22.   byte bVar16;
  23.   uint uVar17;
  24.   ulong uVar18;
  25.   int iVar19;
  26.   _WordT _Var20;
  27.   byte bVar21;
  28.   byte bVar22;
  29.   byte bVar23;
  30.   byte bVar24;
  31.   int iVar25;
  32.   int iVar26;
  33.   uint uVar27;
  34.   char cVar28;
  35.   uint8_t uVar29;
  36.   bool bVar30;
  37.   double dVar31;
  38.   char cVar32;
  39.  
  40.                     /* WARNING (jumptable): Read-only address (ram,0x0013a944) is written */
  41.                     /* WARNING (jumptable): Read-only address (ram,0x0013a954) is written */
  42.   bVar24 = this->state;
  43.   if (bVar24 < 2) {
  44.     bVar22 = bVar24 & 1;
  45.     if (this->sweepPitch == 0) {
  46.       _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  47.       uVar29 = this->modDepth;
  48.       bVar30 = false;
  49.     }
  50.     else {
  51.       uVar12 = this->sweepLen;
  52.       if (uVar12 != 0) {
  53. LAB_0010d231:
  54.         bVar30 = this->sweepCnt <= uVar12;
  55.         goto LAB_0010ce15;
  56.       }
  57.       uVar29 = this->modDepth;
  58.       _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  59.       bVar30 = false;
  60.     }
  61. LAB_0010ceee:
  62.     if ((_Var20 & 2) == 0) {
  63.       bVar21 = bVar22;
  64.       bVar23 = 0;
  65.       if (bVar22 == 0) goto LAB_0010cf02;
  66. LAB_0010d243:
  67.       uVar8 = (this->tempReg).REPEAT_POINT;
  68.       uVar9 = (this->tempReg).LENGTH;
  69.       pSVar3 = (this->sharp)._M_t.
  70.                super___uniq_ptr_impl<SharpInterpolator,_std::default_delete<SharpInterpolator>_>.
  71.                _M_t.
  72.                super__Tuple_impl<0,_SharpInterpolator*,_std::default_delete<SharpInterpolator>_>.
  73.                super__Head_base<0,_SharpInterpolator*,_false>._M_head_impl;
  74.       (this->reg).volumeMul = '\0';
  75.       (this->reg).volumeDiv = '\0';
  76.       (this->reg).panning = '\0';
  77.       (this->reg).waveDuty = '\0';
  78.       (this->reg).repeatMode = '\0';
  79.       (this->reg).format = '\0';
  80.       pSVar4 = (this->tempReg).SOURCE;
  81.       (this->reg).enable = false;
  82.       (this->reg).source = pSVar4;
  83.       uVar1 = (this->tempReg).LENGTH;
  84.       uVar2 = (this->tempReg).REPEAT_POINT;
  85.       (this->reg).loopStart = uVar8;
  86.       (this->reg).length = uVar9;
  87.       (this->reg).totalLength = uVar1 + uVar2;
  88.       this->ampl = -0x16980;
  89.       (this->sharp)._M_t.
  90.       super___uniq_ptr_impl<SharpInterpolator,_std::default_delete<SharpInterpolator>_>._M_t.
  91.       super__Tuple_impl<0,_SharpInterpolator*,_std::default_delete<SharpInterpolator>_>.
  92.       super__Head_base<0,_SharpInterpolator*,_false>._M_head_impl = (SharpInterpolator *)0x0;
  93.       if (pSVar3 == (SharpInterpolator *)0x0) {
  94.         iVar25 = -0x2d3;
  95.         iVar19 = -0x16980;
  96.       }
  97.       else {
  98.         operator.delete(pSVar3,0x18);
  99.         iVar19 = this->ampl;
  100.         iVar25 = iVar19 >> 7;
  101.       }
  102.       this->state = '\x02';
  103. LAB_0010d2b1:
  104.       do {
  105.         iVar19 = iVar19 * (uint)this->attackLvl;
  106.         iVar14 = iVar19 + 0xff;
  107.         if (-1 < iVar19) {
  108.           iVar14 = iVar19;
  109.         }
  110.         iVar19 = iVar14 >> 8;
  111.       } while (iVar14 >> 0xf == iVar25);
  112.       this->ampl = iVar19;
  113.       if (iVar19 == 0) {
  114.         this->state = '\x03';
  115.         if (uVar29 != '\0') {
  116. LAB_0010d440:
  117.           bVar24 = 1;
  118.           bVar23 = 1;
  119.           goto LAB_0010cf77;
  120.         }
  121.         if (bVar22 == 0) {
  122.           uVar12 = (this->tempReg).CR;
  123.           goto LAB_0010d703;
  124.         }
  125.       }
  126.       else {
  127.         if (uVar29 != '\0') goto LAB_0010d440;
  128.         if (bVar22 == 0) {
  129.           uVar12 = (this->tempReg).CR;
  130.           iVar19 = 0;
  131.           iVar25 = (iVar14 >> 0xf) + (int)this->extAmpl + (int)this->velocity;
  132.           goto LAB_0010d470;
  133.         }
  134.       }
  135.       _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  136.       bVar24 = bVar22;
  137.       bVar23 = bVar22;
  138. LAB_0010ce62:
  139.       bVar22 = 0;
  140.       iVar19 = 0;
  141.       iVar25 = this->extTune;
  142.       goto LAB_0010cfa3;
  143.     }
  144.     bVar23 = 1;
  145. LAB_0010cf02:
  146.     bVar21 = bVar23;
  147.     bVar22 = (byte)(_Var20 >> 2) & 1 | bVar22 | bVar30;
  148.     switch(bVar24) {
  149.     case 0:
  150.       goto switchD_0010cf24_caseD_0;
  151.     case 1:
  152.       goto LAB_0010d243;
  153.     case 2:
  154.       iVar19 = this->ampl;
  155.       iVar25 = iVar19 >> 7;
  156.       goto LAB_0010d2b1;
  157.     case 3:
  158.       iVar19 = this->ampl - (uint)this->decayRate;
  159.       iVar25 = 0;
  160.       this->ampl = iVar19;
  161.       if (-1 < (char)this->sustainLvl) {
  162.         iVar25 = (int)*(short *)(Cnv_Sust(int)::lut + (ulong)this->sustainLvl * 2) << 7;
  163.       }
  164.       if (iVar19 <= iVar25) {
  165.         this->ampl = iVar25;
  166.         this->state = '\x04';
  167.       }
  168.       break;
  169.     case 5:
  170.       iVar19 = this->ampl - (uint)this->releaseRate;
  171.       this->ampl = iVar19;
  172.       if (iVar19 < -0x1697f) {
  173. LAB_0010ce90:
  174.         this->prio = '\0';
  175.         this->state = '\0';
  176.         this->trackId = -1;
  177.         (this->reg).repeatMode = '\0';
  178.         (this->reg).format = '\0';
  179.         (this->reg).volumeMul = '\0';
  180.         (this->reg).volumeDiv = '\0';
  181.         (this->reg).panning = '\0';
  182.         (this->reg).waveDuty = '\0';
  183.         (this->reg).enable = false;
  184.         this->vol = 0;
  185.         this->noteLength = -1;
  186.         return;
  187.       }
  188.     }
  189.     if (uVar29 == '\0') {
  190.       if (bVar22 != 0) {
  191.         bVar24 = 1;
  192.         bVar23 = 1;
  193.         goto LAB_0010ce62;
  194.       }
  195.       uVar12 = (this->tempReg).CR;
  196. LAB_0010d703:
  197.       iVar19 = 0;
  198.       bVar22 = 0;
  199.       iVar25 = (this->ampl >> 7) + (int)this->extAmpl + (int)this->velocity;
  200. LAB_0010d470:
  201.       iVar14 = iVar25 + 0x2d3;
  202.       uVar17 = uVar12 & 0xfffffc80;
  203.       if (0x2d3 < iVar14) {
  204.         iVar14 = 0x2d3;
  205.       }
  206.       if (iVar14 < 0) {
  207.         iVar14 = 0;
  208.       }
  209.       bVar24 = ""[iVar14];
  210.       uVar12 = bVar24 | uVar17;
  211.       uVar5 = (undefined2)(uVar17 >> 0x10);
  212.       uVar6 = (undefined2)uVar12;
  213.       if (iVar25 < -0xf0) {
  214.         uVar12 = CONCAT22(uVar5,uVar6) | 0x300;
  215.         uVar11 = bVar24 & 0x7f;
  216.       }
  217.       else if (iVar25 < -0x78) {
  218.         uVar12 = CONCAT22(uVar5,uVar6) | 0x200;
  219.         uVar11 = (short)uVar12 * 4 & 0x1fc;
  220.       }
  221.       else if (iVar25 < -0x3c) {
  222.         uVar12 = CONCAT22(uVar5,uVar6) | 0x100;
  223.         uVar11 = (short)uVar12 * 8 & 0x3f8;
  224.       }
  225.       else {
  226.         uVar11 = (ushort)((bVar24 & 0x7f) << 4);
  227.       }
  228.       (this->flags).super__Base_bitset<1>._M_w =
  229.            (this->flags).super__Base_bitset<1>._M_w & 0xfffffffffffffffe;
  230.       this->vol = uVar11;
  231.     }
  232.     else {
  233.       bVar24 = 1;
  234.       bVar23 = 1;
  235. LAB_0010cf77:
  236.       if (this->modDelayCnt < this->modDelay) {
  237.         iVar19 = 0;
  238.         this->modDelayCnt = this->modDelayCnt + 1;
  239.         if (bVar22 != 0) {
  240.           _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  241.           bVar22 = 0;
  242.           iVar19 = 0;
  243.           iVar25 = this->extTune;
  244. LAB_0010cfa3:
  245.           if (bVar30 != false) {
  246.             uVar1 = this->sweepCnt;
  247.             if (this->manualSweep == false) {
  248.               this->sweepCnt = uVar1 + 1;
  249.             }
  250.             iVar25 = iVar25 + (int)(((long)(int)(this->sweepLen - uVar1) * (long)this->sweepPitch)  /
  251.                                    (long)(int)this->sweepLen);
  252.           }
  253.           uVar11 = (this->tempReg).TIMER;
  254.           uVar15 = (ulong)uVar11;
  255.           if (iVar25 == 0) {
  256. LAB_0010d100:
  257.             uVar10 = (uint16_t)-(int)uVar15;
  258.             dVar31 = (double)(0x10000 - (-(int)uVar15 & 0xffffU));
  259.           }
  260.           else {
  261.             uVar12 = -iVar25;
  262.             if (iVar25 < 1) {
  263.               if (iVar25 < -0x2ff) {
  264.                 uVar17 = (-iVar25 - 0x300U) / 0x300 + 1;
  265.                 if (-iVar25 - 0x300U < 0xc00) {
  266.                   uVar13 = 0;
  267. LAB_0010d5fc:
  268.                   iVar26 = uVar12 - 0x300;
  269.                   uVar27 = uVar13;
  270.                   uVar17 = uVar13 + 1;
  271.                   if (0x2ff < iVar26) {
  272.                     iVar26 = uVar12 - 0x600;
  273.                     uVar27 = uVar13 + 1;
  274.                     uVar17 = uVar13 + 2;
  275.                     if (0x2ff < iVar26) {
  276.                       iVar26 = uVar12 - 0x900;
  277.                       uVar17 = uVar13 + 3;
  278.                       uVar27 = uVar13 + 2;
  279.                       if (0x2ff < iVar26) {
  280.                         iVar26 = uVar12 - 0xc00;
  281.                         uVar27 = uVar17;
  282.                         uVar17 = uVar13 + 4;
  283.                       }
  284.                     }
  285.                   }
  286.                 }
  287.                 else {
  288.                   uVar13 = 0;
  289.                   iVar14 = uVar12 - 0x900;
  290.                   uVar12 = 3;
  291.                   do {
  292.                     uVar27 = uVar12;
  293.                     iVar26 = iVar14;
  294.                     uVar13 = uVar13 + 1;
  295.                     iVar14 = iVar26 + -0xc00;
  296.                     uVar12 = uVar27 + 4;
  297.                   } while (uVar13 != uVar17 >> 2);
  298.                   uVar13 = uVar17 & 0xfffffffc;
  299.                   uVar12 = uVar13 * -0x300 - iVar25;
  300.                   if ((uVar17 & 3) != 0) goto LAB_0010d5fc;
  301.                   iVar26 = iVar26 + -0x300;
  302.                   uVar17 = uVar27 + 1;
  303.                 }
  304.                 cVar28 = (char)uVar17;
  305.                 iVar25 = uVar27 - 0xf;
  306.                 uVar15 = ((ulong)getpitchtbl[iVar26] + 0x10000) * (ulong)uVar11;
  307.                 if (iVar25 < 1) goto LAB_0010d8a0;
  308.                 if ((iVar25 < 0x20) && ((-1L << (0x20 - (byte)iVar25 & 0x3f) & uVar15) == 0)) {
  309.                   uVar15 = uVar15 << ((byte)iVar25 & 0x3f);
  310.                   goto LAB_0010d68f;
  311.                 }
  312.               }
  313.               else {
  314.                 cVar28 = '\0';
  315.                 uVar15 = ((ulong)getpitchtbl[(int)uVar12] + 0x10000) * (ulong)uVar11;
  316. LAB_0010d8a0:
  317.                 uVar15 = uVar15 >> (0x10U - cVar28 & 0x3f);
  318. LAB_0010d68f:
  319.                 if (uVar15 < 0x10) goto LAB_0010d7ac;
  320.                 if (uVar15 < 0x10000) goto LAB_0010d100;
  321.               }
  322.               dVar31 = 65535.0;
  323.               uVar10 = 1;
  324.             }
  325.             else {
  326.               uVar17 = (iVar25 - 1U) / 0x300 + 1;
  327.               if (uVar12 < 0xfffff400) {
  328.                 uVar13 = 0;
  329.                 iVar14 = uVar12 + 0x900;
  330.                 cVar28 = -3;
  331.                 do {
  332.                   cVar32 = cVar28;
  333.                   iVar26 = iVar14;
  334.                   uVar13 = uVar13 + 1;
  335.                   iVar14 = iVar26 + 0xc00;
  336.                   cVar28 = cVar32 + -4;
  337.                 } while (uVar13 != uVar17 >> 2);
  338.                 if ((uVar17 & 3) == 0) {
  339.                   iVar26 = iVar26 + 0x300;
  340.                   bVar16 = cVar32 - 1;
  341.                 }
  342.                 else {
  343.                   bVar7 = (byte)(uVar17 & 0xfffffffc);
  344.                   bVar16 = ~bVar7;
  345.                   cVar28 = -bVar7;
  346.                   uVar12 = (uVar17 & 0xfffffffc) * 0x300 - iVar25;
  347.                   iVar26 = uVar12 + 0x300;
  348.                   if (iVar26 < 0) goto LAB_0010d0a8;
  349.                 }
  350.                 uVar15 = ((ulong)getpitchtbl[iVar26] + 0x10000) * uVar15 >> (0x10 - bVar16 & 0x3f) ;
  351. joined_r0x0010d0ef:
  352.                 if (0xf < uVar15) goto LAB_0010d100;
  353.               }
  354.               else {
  355.                 cVar28 = '\0';
  356.                 if (0x300 - iVar25 < 0) {
  357. LAB_0010d0a8:
  358.                   if ((int)(uVar12 + 0x600) < 0) {
  359.                     if ((int)(uVar12 + 0x900) < 0) {
  360.                       uVar15 = ((ulong)getpitchtbl[(int)(uVar12 + 0xc00)] + 0x10000) * uVar15 >>
  361.                                (0x14U - cVar28 & 0x3f);
  362.                     }
  363.                     else {
  364.                       uVar15 = ((ulong)getpitchtbl[(int)(uVar12 + 0x900)] + 0x10000) * uVar15 >>
  365.                                (0x13U - cVar28 & 0x3f);
  366.                     }
  367.                   }
  368.                   else {
  369.                     uVar15 = ((ulong)getpitchtbl[(int)(uVar12 + 0x600)] + 0x10000) * uVar15 >>
  370.                              (0x12U - cVar28 & 0x3f);
  371.                   }
  372.                   goto joined_r0x0010d0ef;
  373.                 }
  374.                 uVar18 = ((ulong)getpitchtbl[0x300 - iVar25] + 0x10000) * (ulong)uVar11;
  375.                 uVar15 = uVar18 >> 0x11;
  376.                 if (0x1fffff < uVar18) goto LAB_0010d100;
  377.               }
  378. LAB_0010d7ac:
  379.               dVar31 = 16.0;
  380.               uVar10 = 0xfff0;
  381.             }
  382.           }
  383.           (this->reg).timer = uVar10;
  384.           uVar1 = this->ply->sampleRate;
  385.           (this->flags).super__Base_bitset<1>._M_w = _Var20 & 0xfffffffffffffffb;
  386.           (this->reg).sampleIncrease = (33513982.0 / (double)(ulong)(uVar1 * 2)) / dVar31;
  387.         }
  388.       }
  389.       else {
  390.         uVar29 = this->modType;
  391.         if (uVar29 == '\x01') {
  392.           bVar24 = 1;
  393.           bVar23 = 1;
  394.         }
  395.         else if (uVar29 == '\x02') {
  396.           bVar24 = 1;
  397.           bVar21 = 1;
  398.         }
  399.         else {
  400.           bVar22 = bVar22 | uVar29 == '\0';
  401.         }
  402.         uVar11 = this->modCounter;
  403.         uVar12 = (uint)(uVar11 >> 8);
  404.         if (uVar11 < 0x2000) {
  405.           iVar19 = (int)(char)Cnv_Sine(int)::lut[(int)uVar12];
  406.         }
  407.         else if (uVar11 >> 8 < 0x40) {
  408.           iVar19 = (int)(char)Cnv_Sine(int)::lut[(int)(0x40 - uVar12)];
  409.         }
  410.         else if (uVar11 >> 8 < 0x60) {
  411.           iVar19 = (int)(char)-Cnv_Sine(int)::lut[(int)(uVar12 - 0x40)];
  412.         }
  413.         else {
  414.           iVar19 = (int)(char)-Cnv_Sine(int)::lut[(int)(0x80 - uVar12)];
  415.         }
  416.         iVar25 = (uint)this->modRange * iVar19 * (uint)this->modDepth;
  417.         iVar19 = iVar25 >> 8;
  418.         if (uVar29 == '\x01') {
  419.           iVar19 = iVar25 * 0x3c >> 0xe;
  420.         }
  421.         uVar12 = (uint)this->modSpeed * 0x40 + (uint)uVar11 >> 8;
  422.         if (0x7f < uVar12) {
  423.           uVar12 = uVar12 & 0x7f;
  424.         }
  425.         this->modCounter = (ushort)(uVar12 << 8) | (ushort)this->modSpeed * 0x40 + uVar11 & 0xff;
  426.         if (bVar22 != 0) {
  427.           _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  428.           iVar25 = this->extTune;
  429.           if (uVar29 == '\0') {
  430.             iVar25 = this->extTune + iVar19;
  431.           }
  432.           goto LAB_0010cfa3;
  433.         }
  434.         bVar22 = 1;
  435.       }
  436.       if (bVar24 == 0) {
  437. switchD_0010cf24_caseD_0:
  438.         return;
  439.       }
  440.       uVar12 = (this->tempReg).CR;
  441.       if (bVar23 != 0) {
  442.         iVar25 = (this->ampl >> 7) + (int)this->extAmpl + (int)this->velocity;
  443.         if ((bVar22 != 0) && (this->modType == '\x01')) {
  444.           iVar25 = iVar25 + iVar19;
  445.         }
  446.         goto LAB_0010d470;
  447.       }
  448.     }
  449.     if (bVar21 == 0) goto LAB_0010d1b4;
  450.     iVar25 = (int)this->pan + (int)this->extPan;
  451.     if ((bVar22 != 0) && (this->modType == '\x02')) {
  452.       iVar25 = iVar25 + iVar19;
  453.     }
  454.   }
  455.   else {
  456.     if ((this->reg).enable == false) goto LAB_0010ce90;
  457.     if (this->sweepPitch == 0) {
  458.       bVar22 = 0;
  459.       bVar30 = false;
  460.     }
  461.     else {
  462.       uVar12 = this->sweepLen;
  463.       bVar22 = 0;
  464.       bVar30 = false;
  465.       if (uVar12 != 0) goto LAB_0010d231;
  466.     }
  467. LAB_0010ce15:
  468.     _Var20 = (this->flags).super__Base_bitset<1>._M_w;
  469.     uVar29 = this->modDepth;
  470.     if ((bVar24 != 4 | (byte)_Var20 & 1) != 0) goto LAB_0010ceee;
  471.     bVar21 = (byte)(_Var20 >> 2) & 1 | bVar30;
  472.     bVar23 = 0;
  473.     bVar22 = bVar21;
  474.     if ((_Var20 & 2) == 0) {
  475.       if (uVar29 != '\0') {
  476.         bVar24 = 0;
  477.         bVar21 = 0;
  478.         goto LAB_0010cf77;
  479.       }
  480.       if (bVar21 == 0) {
  481.         return;
  482.       }
  483.       bVar21 = 0;
  484.       bVar24 = bVar23;
  485.       goto LAB_0010ce62;
  486.     }
  487.     if (uVar29 != '\0') {
  488.       bVar24 = 1;
  489.       bVar21 = 1;
  490.       goto LAB_0010cf77;
  491.     }
  492.     bVar24 = bVar21;
  493.     if (bVar21 != 0) goto LAB_0010ce62;
  494.     uVar12 = (this->tempReg).CR;
  495.     iVar25 = (int)this->extPan + (int)this->pan;
  496.   }
  497.   iVar25 = iVar25 + 0x40;
  498.   if (0x7f < iVar25) {
  499.     iVar25 = 0x7f;
  500.   }
  501.   if (iVar25 < 0) {
  502.     iVar25 = 0;
  503.   }
  504.   (this->flags).super__Base_bitset<1>._M_w =
  505.        (this->flags).super__Base_bitset<1>._M_w & 0xfffffffffffffffd;
  506.   uVar12 = uVar12 & 0xff80ffff | iVar25 << 0x10;
  507. LAB_0010d1b4:
  508.   (this->tempReg).CR = uVar12;
  509.   uVar17 = uVar12 & 0x77f037f;
  510.   (this->reg).volumeMul = (char)uVar17;
  511.   (this->reg).volumeDiv = (char)(uVar17 >> 8);
  512.   (this->reg).panning = (char)(uVar17 >> 0x10);
  513.   (this->reg).waveDuty = (char)(uVar17 >> 0x18);
  514.   bVar24 = (byte)(uVar12 >> 0x18);
  515.   (this->reg).repeatMode = bVar24 >> 3 & 3;
  516.   (this->reg).enable = (bool)(bVar24 >> 7);
  517.   (this->reg).format = bVar24 >> 5 & 3;
  518.   return;
  519. }
  520.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement