J'ignorais ce qu'était un quaternion, j'apprends des choses
Ton histoire de capteurs bruités me fait me dire qu'utiliser des doubles dans le projet que je prépare et qui travaille aussi avec des capteurs sur CM4F n'est peut-être pas la meilleure des idées... Il faut que j'y pense dans la suite ^^
Par curiosité, j'ai écrit une bête opération entre des doubles et entre des floats pour voir l'assembleur. J'utilise l'ABI hard pour compiler et voilà l'assembleur généré pour ceux que ça intéresse :
double d(double a, double b)
{
0: b480 push {r7}
2: b085 sub sp, #20
4: af00 add r7, sp, #0
6: ed87 0b02 vstr d0, [r7, #8]
a: ed87 1b00 vstr d1, [r7]
return a + b;
e: ed97 6b02 vldr d6, [r7, #8]
12: ed97 7b00 vldr d7, [r7]
16: ee36 7b07 vadd.f64 d7, d6, d7
}
1a: eeb0 0b47 vmov.f64 d0, d7
1e: f107 0714 add.w r7, r7, #20
22: 46bd mov sp, r7
24: bc80 pop {r7}
26: 4770 bx lr
00000028 <f>:
float f(float a, float b)
{
28: b480 push {r7}
2a: b083 sub sp, #12
2c: af00 add r7, sp, #0
2e: ed87 0a01 vstr s0, [r7, #4]
32: edc7 0a00 vstr s1, [r7]
return a + b;
36: ed97 7a01 vldr s14, [r7, #4]
3a: edd7 7a00 vldr s15, [r7]
3e: ee77 7a27 vadd.f32 s15, s14, s15
}
42: eeb0 0a67 vmov.f32 s0, s15
46: f107 070c add.w r7, r7, #12
4a: 46bd mov sp, r7
4c: bc80 pop {r7}
4e: 4770 bx lr
Je n'ai pas de doc CM4 pour voir le nombre des cycles instructions vadd.f64 et vadd.f32 mais on se doute bien que ça va être plus long. J'ai testé aussi en sommant un float et un double et en retournant un float, ce n'est pas une bonne idée ^^
Partager