



objdata2 = objdata1;
for(k = 0; k < 30; k += 5)
{
for(j = 0; j < 30; j += 5)
{
for(i = 0; i < 30; i += 5)
{
objdata2->x = i - 15;
objdata2->y = j - 15;
objdata2->z = k - 15;
objdata2++;
}
}
}
objdata2 = objdata1 + 6 * 6 * 6;
k = 30;
while ((k -= 5))
{
j = 30;
while ((j -= 5))
{
i = 30;
while ((i -= 5))
{
objdata2->x = i - 15;
objdata2->y = j - 15;
objdata2->z = k - 15;
objdata2--;
}
}
}



for(k=0;k<30;k+=5)
{
for(j=0;j<30;j+=5)
{
for(i=0;i<30;i+=5)
{
toto *objdata=objdata1+(nvertex1++);
objdata->x=i-15;
objdata->y=j-15;
objdata->z=k-15;
checkloadbar();
}
}
}
for(k=0;k<30;k+=5)
{
for(j=0;j<30;j+=5)
{
for(i=0;i<30;i+=5)
{
objdata1->x=i-15;
objdata1->y=j-15;
(objdata1++)->z=k-15;
nvertex1++;
checkloadbar();
}
}
}
Evidemment le pb serait qu'une nouvelle version du compilo risquerait d'apporter des incompatibilités, parce que le code C n'était pas testé depuis longtemps et le compilo se met à utiliser le code C au lieu du code asm.
).movea.l objdata1(pc),a4 ; (pas de lea, objdata1 contient un pointeur) moveq #0,d4 ; nvertex1 moveq #29,d5 ; k moveq.l #29-15,d2 Next1k: moveq #29,d6 ; j moveq.l #29-15,d1 Next1j: moveq #29,d7 ; i moveq.l #29-15,d0 Next1i: subq.w #1,d0 ; i-15 subq.w #1,d1 ; j-15 subq.w #1,d2 ; k-15 move.w d0,(a4)+ ; objdata1[nvertex].x=i-15 move.w d1,(a4)+ ; objdata1[nvertex].y=j-15 move.w d2,(a4)+ ; objdata1[nvertex].z=k-15 addq.w #1,d4 ; nvertex++ bsr checkloadbar dbra d7,Next1i dbra d6,Next1j dbra d5,Next1kÇa devrait prendre 6 octets en moins je crois.

(en fait ce genre de choses est très courant, je ne compte pas le nombre de progs asm très mal écrits [code moins bon que celui généré par un compilo] - et ma remarque ne visait pas ton code en particulier, qui est presque optimal)
Je ne sais pas si le taux de compression sera fantastique vu la faible taille, mais ça éviterait des malloc et ça t'éviterait des drawline et ce genre de choses pour tes logos (bon vieux memcpy
), peut-être jusqu'à compenser le ko pris par le décompresseur.