Mais bordel, GCC ARM, connaaaaaaaaaard !
Notez la subtile différence (en -O1) :
register u32* l_panSp __asm__("r0");
l_panSp = (u32*) __get_PSP();
__asm__ __volatile__
( " stmdb r0!, {r4-r11} \n");
Into :
MRS r2, psp @ r2 ? Mais t'as vu la vierge, connard ?
stmdb r0!, {r4-r11}
Avec :
register u32* l_panSp __asm__("r0");
l_panSp = (u32*) __get_PSP();
__asm__ __volatile__
( " stmdb r0!, {r4-r11} \n"
: [r0_out] __CMSIS_GCC_OUT_RW_REG(l_panSp));
Into
MRS r0, psp @ Ah, enfin t'as compris qu'il faut utiliser r0...
stmdb r0!, {r4-r11}
Sauf que... __CMSIS_GCC_OUT_RW_REG(r) n'existe pas dans 'cmsis_gcc.h', il faut le rajouter vers la ligne 360 :
#if defined (__thumb__) && !defined (__thumb2__)
#define __CMSIS_GCC_OUT_REG(r) "=l" (r)
#define __CMSIS_GCC_OUT_RW_REG(r) "+l" (r)
#define __CMSIS_GCC_USE_REG(r) "l" (r)
#else
#define __CMSIS_GCC_OUT_REG(r) "=r" (r)
#define __CMSIS_GCC_OUT_RW_REG(r) "+r" (r)
#define __CMSIS_GCC_USE_REG(r) "r" (r)
#endif
Parce que même si on utilise __CMSIS_GCC_OUT_REG(r), on se retrouve dans le premier cas de figure.
Thanks guys, good work.
Y'a moyen de facturer le temps perdu aux fournisseurs d'outils de merde ?
Y'a certainement moyen de couler financièrement la FSF.
Oh oui, pardon, c'est des outils gratuits produit par des bénévoles, il faut leur pardonner.
Obligatory meme :