GCC fournit une macro prédéfinie __BIGGEST_ALIGNMENT__
qui est le plus grand alignement jamais utilisé pour tout type de données sur la machine cible pour laquelle vous compilez. Je n'arrive pas à trouver l'équivalent d'un LLVM pour ça. Y a-t-il? Si non, quelle est la meilleure façon de le comprendre (de préférence avec pré-processeur)?LLVM équivalent de __BIGGEST_ALIGNMENT__ de gcc?
2
A
Répondre
3
Ceci n'est pas accessible depuis le préprocesseur, mais __attribute__((aligned))
ou __attribute__((__aligned__))
(avec la valeur d'alignement omise) donnera l'alignement souhaité. Ceci est supposé donner le plus grand alignement de n'importe quel type intégré, qui est 16 sur x86 et ARM.
Par exemple:
$ cat align.c
struct foo {
char c;
} __attribute__((aligned)) var;
$ clang align.c -S -o - -emit-llvm
...
@var = global %struct.foo zeroinitializer, align 16
Ceci est utilisé par unwind.h pour _Unwind_Exception:
struct _Unwind_Exception
{
_Unwind_Exception_Class exception_class;
_Unwind_Exception_Cleanup_Fn exception_cleanup;
_Unwind_Word private_1;
_Unwind_Word private_2;
/* @@@ The IA-64 ABI says that this structure must be double-word aligned.
Taking that literally does not make much sense generically. Instead we
provide the maximum alignment required by any type for the machine. */
} __attribute__((__aligned__));
1
Ceci est dans llvm internals comme TargetData :: PointerABIAlign, mais il ne semble pas être exposé au code. Je devrais coder en dur sur 16 octets, car il semblerait que cela prenne un peu de temps avant de voir des types ou des jeux d'instructions plus alignés.
Questions connexes
- 1. LLVM GCC 4.2 EXC_BAD_ACCESS
- 2. Conseils de migration de GCC à LLVM?
- 3. comparaison des performances - gcc et llvm-gcc
- 4. Xcode 4.1: Apple LLVM 2.1 se comporte différemment de LLVM GCC 4.2 et GCC 4.2
- 5. Comment imprimer des dépendances à partir de llvm/clang (équivalent de gcc -MD)?
- 6. LLVM équivalent de gcc -D macro définition sur la ligne de commande
- 7. Compatibilité entre GCC et LLVM
- 8. gcc équivalent de #pragma comment
- 9. GCC/XCode équivalent de _CrtCheckMemory?
- 10. Évaluation partielle/spécialisation avec LLVM-gcc ou gcc
- 11. _USE_32BIT_TIME_T équivalent pour gcc
- 12. Comment optimiser l'assemblage LLVM croisé avec gcc?
- 13. Xcode 3.2.1 GCC CLANG et LLVM démystification
- 14. OS X sortie llvm-gcc ELF
- 15. LLVM-gcc Erreur: plug-in Incompatible
- 16. Déterminer LLVM GCC par rapport au moment de la compilation
- 17. compilation étrange de réunion en ligne dans LLVM GCC 4.2
- 18. Compilation de gcc 4.2 de LLVM 2.9 sur le noyau 3.0 avec gcc 4.6
- 19. équivalent Visual Studio gcc -S
- 20. Construire 32 bits avec llvm-gcc 64 bits
- 21. -forwardInvocation fonctionne avec Clang - LLVM mais pas avec GCC
- 22. MSVC équivalent à l'indicateur GCC '-include'?
- 23. LLVM et GCC, sortie différente du même code
- 24. llvm-gcc-4.2 a échoué avec l'erreur xcode dans l'iphone
- 25. Appel de la fonction de bitcode LLVM dans LLVM 2.8
- 26. Debug tas/STL débogage équivalent pour GCC?
- 27. C++ modèle fonctionne bien pour GCC, mais montrant erreur de compilation de temps dans le compilateur LLVM-GCC
- 28. Problème de compilation lors de l'utilisation de blocs avec LLVM GCC 4.2
- 29. Possible bogue OpenMP + SSE lors de l'utilisation de _mm_shuffle_ps dans Xcode 4 (LLVM GCC)
- 30. Y at-il un binutils pour llvm?
Merci pour l'aperçu. Vous avez suggéré exactement ce que j'ai fait - codé en dur à 16 :-) –