Je cet extrait C, ce qui donne une erreur de compilation et je n'ai pas la moindre idée pourquoi:de Windows/Intel compilateur/Inline Assembleur et problèmes de syntaxe GNU
// compiler dependent inline assemble
#ifdef __INTEL_COMPILER
#define ASM __asm
#else
#define ASM __asm__
#endif
int getfpucw(
/* Get FPU control word */
) {
int mode = 0;
// load mode value into register %0, no output ...: :...
ASM fnstcw *&mode;
ASM("fnstcw %0" : "m"(*&mode));
return mode;
}
Je reçois:
../src/fpucw.c(28): error: invalid constant in assembly language instruction ASM("fnstcw %0" : : "m"(*&mode)); ^
../src/fpucw.c(28): error: invalid constant in assembly language instruction ASM("fnstcw %0" : : "m"(*&mode));
La première instruction ASM est transmise. Je pense que c'est la syntaxe MS ASM?
Cependant, je veux éviter de toujours utiliser #ifdef autour des instructions ASM car nous utilisons également GCC.
Est-ce que votre code est écrit en C ou est-il écrit en C++? Veuillez choisir au plus une des deux langues. – fuz
L'assemblage en ligne est spécifique au compilateur. Si vous voulez éviter un tas d'ifdefs, n'utilisez pas l'assemblage en ligne. Placez plutôt le code d'assemblage dans les fichiers d'assemblage et assemblez-les avec le même assembleur, quel que soit le compilateur C que vous utilisez. – Michael
Je ne peux pas reproduire votre erreur. Pouvez-vous nous montrer l'assemblée générée s'il vous plaît? – fuz