Bonjour tout le monde !
J'ai un GCC cross-compilé pour PowerPC entre les mains, et il me fait des manières.
Explication:
J'ai un petit bout de code qui ressemble à ceci:
Et ce petit compilateur me répond gentillement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int ma_val; char my_diff; ma_val = (my_diff < 0);
Après une instant de réflexion, je décide de regarder le code généré, et je trouve:Envoyé par Petit gcc bien malin
En gros, lbz met à 0 les bits 0 à 23. Je perd mon info de signe, c'est la cata !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 lbz r0,12(r31)
La solution simplissime consiste à transformer mon char en int, mais c'est hors de question.
Un cast ne suffit pas (ma_val = ((int)my_diff < 0)) : j'obtiens strictement la même chose.
Est-ce dû au compilateur ?
Merci d'avance !
Partager