Je voudrais les multiplier avec d'autres variables, elles aussi en virgule fixe.
Mes variables sont des short, et la table précalculée est faite de char (par souci de taille, bien que ce ne soit pas tellement grand non plus).
Mais j'ai un problème qui semblerait venir du fait que les cosinus et les sinus peuvent avoir des valeurs négatives.
=(Cos64[angle]*zoom)>>6;Voici ma ligne de code : dir.y dir.y est décaré en short, ainsi que zoom. Je multiplie mes deux valeurs et je décale de 6 bits vers la droite pour me retrouver avec un nombre à virgule fixe décalé de 6 bits vers la gauche (puisque les deux nombres multpliés sont tous les deux décalés de 6 bits vers la gauche).
asr.w #6,%d2 move.w %d2,(%a3)
Voici le code généré par TIGCC : move.w angle,%a1 lea Sin64,%a0 move.b (%a0,%a1.l),%d4 move.w zoom,%d1 move.w %d4,%d2 muls.w %d1,%d2(a3 contient l'adresse de la variable dir.y, qui est une variable globale)
Le problème, je pense vient du fait que TIGCC ne fait pas d'extension de signe avant le muls, alors que la valeur renvoyée par Cos64 est un char signé négatif. Ce qui génère des erreurs de calculs. Comment faire pour que TIGCC prenne en compte le fait que les char peuvent être négatifs ?
Ensuite, j'aimerais bien que le asr.w #6,%d2 soit plutôt un asr.l au cas où le résultat de la multiplication ne tient pas sur les 16bits d'un short.
#jesors#
