On Sat, 27 May 2000, Mark Taylor wrote:

> The problem is gfc->cw_lower_index.  It is set to 6, and is never
> changed.  Yet it has been changed to -1001465578, so there is

After several tests I noticed that the problem seems to occur at least
after gfc->en and gfc->thm tables. When I have this kind of safety table 
in util.h:

---8<---
  FLOAT8 s3_s[CBANDS + 1][CBANDS + 1];
  FLOAT8 s3_l[CBANDS + 1][CBANDS + 1];

  int safety1[1000];

  III_psy_xmin thm[4];

  int safety2[1000];

  III_psy_xmin en[4];

  int safety3[1000];

  /* unpredictability calculation
   */

  int cw_upper_index;
  int cw_lower_index;
---8<---

and this kind of checking in psymodel.c:

---8<---
for (i = 0; i < 1000; i++) {
        if (gfc->safety1[i] != i) {
                fprintf(stderr,
                        "L3psycho_anal: safety1[%d] == %d (!= %d!)\n",
                        i, gfc->safety1[i], i);
                fflush(stderr);
                gfc->safety1[i] = i;
        }
}
for (i = 0; i < 1000; i++) {
        if (gfc->safety2[i] != i) {
                fprintf(stderr,
                        "L3psycho_anal: safety2[%d] == %d (!= %d!)\n",
                        i, gfc->safety2[i], i);
                fflush(stderr);
                gfc->safety2[i] = i;
        }
}
for (i = 0; i < 1000; i++) {
        if (gfc->safety3[i] != i) {
                fprintf(stderr,
                        "L3psycho_anal: safety3[%d] == %d (!= %d!)\n",
                        i, gfc->safety3[i], i);
                fflush(stderr);
                gfc->safety3[i] = i;
        }
}
---8<---

and of course I set the values to safetyN[i] = i; at init of
L3psycho_anal, the result is:

---8<---
L3psycho_anal: safety2[0] == 1053546367 (!= 0!)
L3psycho_anal: safety2[1] == -1948651264 (!= 1!)
L3psycho_anal: safety2[6] == 1053329763 (!= 6!)
L3psycho_anal: safety2[7] == -1049593800 (!= 7!)
L3psycho_anal: safety2[12] == 1053297877 (!= 12!)
L3psycho_anal: safety2[13] == -350396764 (!= 13!)
L3psycho_anal: safety2[18] == 1053279186 (!= 18!)
L3psycho_anal: safety2[19] == 948091284 (!= 19!)
L3psycho_anal: safety3[1] == 0 (!= 1!)
L3psycho_anal: safety3[6] == 0 (!= 6!)
L3psycho_anal: safety3[7] == 0 (!= 7!)
L3psycho_anal: safety3[12] == 0 (!= 12!)
L3psycho_anal: safety3[13] == 0 (!= 13!)
L3psycho_anal: safety3[18] == 0 (!= 18!)
L3psycho_anal: safety3[19] == 0 (!= 19!)
L3psycho_anal: safety2[0] == 1053279186 (!= 0!)
L3psycho_anal: safety2[1] == 948091284 (!= 1!)
L3psycho_anal: safety2[6] == 1052913048 (!= 6!)
L3psycho_anal: safety2[7] == -649848756 (!= 7!)
L3psycho_anal: safety2[12] == 1053187376 (!= 12!)
L3psycho_anal: safety2[13] == -749868 (!= 13!)
L3psycho_anal: safety2[18] == 1053187926 (!= 18!)
L3psycho_anal: safety2[19] == -1049521232 (!= 19!)
L3psycho_anal: safety2[24] == 1053187926 (!= 24!)
L3psycho_anal: safety2[25] == -1049521232 (!= 25!)
L3psycho_anal: safety2[30] == 1053869815 (!= 30!)
L3psycho_anal: safety2[31] == -1598689907 (!= 31!)
L3psycho_anal: safety2[36] == 1054167508 (!= 36!)
L3psycho_anal: safety2[37] == 1722266217 (!= 37!)
L3psycho_anal: safety2[42] == 1053554064 (!= 42!)
L3psycho_anal: safety2[43] == 548418808 (!= 43!)
L3psycho_anal: safety2[48] == 1053630480 (!= 48!)
L3psycho_anal: safety2[49] == 798087112 (!= 49!)
L3psycho_anal: safety2[54] == 1053546367 (!= 54!)
L3psycho_anal: safety2[55] == -1948651264 (!= 55!)
L3psycho_anal: safety2[60] == 1053329763 (!= 60!)
L3psycho_anal: safety2[61] == -1049593800 (!= 61!)
L3psycho_anal: safety2[66] == 1053297877 (!= 66!)
L3psycho_anal: safety2[67] == -350396764 (!= 67!)
L3psycho_anal: safety2[72] == 1053279186 (!= 72!)
L3psycho_anal: safety2[73] == 948091284 (!= 73!)
L3psycho_anal: safety2[78] == 1052913048 (!= 78!)
L3psycho_anal: safety2[79] == -649848756 (!= 79!)
L3psycho_anal: safety2[84] == 1053187376 (!= 84!)
L3psycho_anal: safety2[85] == -749868 (!= 85!)
L3psycho_anal: safety2[90] == 1053187926 (!= 90!)
L3psycho_anal: safety2[91] == -1049521232 (!= 91!)
L3psycho_anal: safety2[96] == 1053187926 (!= 96!)
L3psycho_anal: safety2[97] == -1049521232 (!= 97!)
L3psycho_anal: safety2[102] == 1053869815 (!= 102!)
L3psycho_anal: safety2[103] == -1598689907 (!= 103!)
L3psycho_anal: safety2[108] == 1054167508 (!= 108!)
L3psycho_anal: safety2[109] == 1722266217 (!= 109!)
L3psycho_anal: safety2[114] == 1053554064 (!= 114!)
L3psycho_anal: safety2[115] == 548418808 (!= 115!)
L3psycho_anal: safety2[120] == 1053630480 (!= 120!)
L3psycho_anal: safety2[121] == 798087112 (!= 121!)
L3psycho_anal: safety2[126] == 1053546367 (!= 126!)
L3psycho_anal: safety2[127] == -1948651264 (!= 127!)
L3psycho_anal: safety2[132] == 1053329763 (!= 132!)
L3psycho_anal: safety2[133] == -1049593800 (!= 133!)
L3psycho_anal: safety2[138] == 1053297877 (!= 138!)
L3psycho_anal: safety2[139] == -350396764 (!= 139!)
L3psycho_anal: safety2[144] == 1053279186 (!= 144!)
L3psycho_anal: safety2[145] == 948091284 (!= 145!)
L3psycho_anal: safety3[1] == 0 (!= 1!)
L3psycho_anal: safety3[6] == 0 (!= 6!)
L3psycho_anal: safety3[7] == 0 (!= 7!)
L3psycho_anal: safety3[12] == 0 (!= 12!)
L3psycho_anal: safety3[13] == 0 (!= 13!)
L3psycho_anal: safety3[18] == 0 (!= 18!)
L3psycho_anal: safety3[19] == 0 (!= 19!)
L3psycho_anal: safety3[24] == 0 (!= 24!)
L3psycho_anal: safety3[25] == 0 (!= 25!)
L3psycho_anal: safety3[30] == 0 (!= 30!)
L3psycho_anal: safety3[31] == 0 (!= 31!)
L3psycho_anal: safety3[36] == 0 (!= 36!)
L3psycho_anal: safety3[37] == 0 (!= 37!)
L3psycho_anal: safety3[42] == 0 (!= 42!)
L3psycho_anal: safety3[43] == 0 (!= 43!)
L3psycho_anal: safety3[48] == 0 (!= 48!)
L3psycho_anal: safety3[49] == 0 (!= 49!)
L3psycho_anal: safety3[54] == 0 (!= 54!)
L3psycho_anal: safety3[55] == 0 (!= 55!)
L3psycho_anal: safety3[60] == 0 (!= 60!)
L3psycho_anal: safety3[61] == 0 (!= 61!)
L3psycho_anal: safety3[66] == 0 (!= 66!)
L3psycho_anal: safety3[67] == 0 (!= 67!)
L3psycho_anal: safety3[72] == 0 (!= 72!)
L3psycho_anal: safety3[73] == 0 (!= 73!)
L3psycho_anal: safety3[78] == 0 (!= 78!)
L3psycho_anal: safety3[79] == 0 (!= 79!)
L3psycho_anal: safety3[84] == 0 (!= 84!)
L3psycho_anal: safety3[85] == 0 (!= 85!)
L3psycho_anal: safety3[90] == 0 (!= 90!)
L3psycho_anal: safety3[91] == 0 (!= 91!)
L3psycho_anal: safety3[96] == 0 (!= 96!)
L3psycho_anal: safety3[97] == 0 (!= 97!)
L3psycho_anal: safety3[102] == 0 (!= 102!)
L3psycho_anal: safety3[103] == 0 (!= 103!)
L3psycho_anal: safety3[108] == 0 (!= 108!)
L3psycho_anal: safety3[109] == 0 (!= 109!)
L3psycho_anal: safety3[114] == 0 (!= 114!)
L3psycho_anal: safety3[115] == 0 (!= 115!)
L3psycho_anal: safety3[120] == 0 (!= 120!)
L3psycho_anal: safety3[121] == 0 (!= 121!)
L3psycho_anal: safety3[126] == 0 (!= 126!)
L3psycho_anal: safety3[127] == 0 (!= 127!)
L3psycho_anal: safety3[132] == 0 (!= 132!)
L3psycho_anal: safety3[133] == 0 (!= 133!)
L3psycho_anal: safety3[138] == 0 (!= 138!)
L3psycho_anal: safety3[139] == 0 (!= 139!)
L3psycho_anal: safety3[144] == 0 (!= 144!)
L3psycho_anal: safety3[145] == 0 (!= 145!)
L3psycho_anal: safety2[0] == 1053546367 (!= 0!)
...
---8<---

So at least some of the first 20*4=80 bytes of safety2 and safety3 have
been trashed in the first time... and the indexes are quite similar in
both tables... and those values might be some kind of floats or something
(as far as I remember, gfc->en and gfc->thm are floating point tables).

The second time, safety2:

            0, 1, 6, 7,
           12,13,18,19,
           24,25,30,31,
           36,37,42,43,
           48,49,54,55,
           60,61,66,67,
           72,73,78,79,
           84,85,90,91,
           96,97,...
          108,...
          120,...
          132,...
          144,145
----------------------------------
difference 12 12 12 12

and safety3 had similar offsets.

The following loops look similar than these two... first the offsets
0...19 have been trashed and then offsets 0...145 (each offset contains an
integer of 32 bits).

Does this help any? What could cause this kind of problem? Different size
of floating point numbers in the structure and what the code assumes or
something...? I tried to look at the indexes used at least in psymodel.c
but couldn't find anything obviously suspicious.

I think this kind of behaviour is PPC specific? AmigaOS+PPC specific? No
similar table overruns in other architectures? One might test it with this
kind of code, but if the code had this kind of overruns, it's quite
strange if it wouldn't cause lots of problems.

I will try this safety thing on m68k version as well and using different
compiler at least on PPC side.

Kimmo

--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )

Reply via email to