Articles of assemblage

Est-il judicieux d’utiliser l’instruction LFENCE sur les processeurs x86 / x86_64?

Souvent sur internet, je trouve que LFENCE n’a aucun sens dans les processeurs x86, c’est-à-dire qu’il ne fait rien, au lieu de MFENCE nous pouvons absolument utiliser SFENCE , car MFENCE = SFENCE + LFENCE = SFENCE + NOP = SFENCE . Mais si LFENCE n’a pas de sens, alors pourquoi avons-nous quatre approches pour […]

Des langages / compilateurs utilisent-ils l’instruction x86 ENTER avec un niveau d’imbrication différent de zéro?

Ceux qui sont familiers avec la programmation d’assemblage x86 sont très habitués à la fonction prolog / épilogue typique: push ebp mov esp, ebp sub esp, [size of local variables] … mov esp, ebp pop ebp ret Cette même séquence de code peut également être implémentée avec les instructions ENTER et LEAVE : enter [size […]

Comment le premier compilateur C a-t-il été écrit?

Est-il vrai que le premier compilateur C a été écrit en C lui-même? Alors, comment a-t-il été exécuté et compilé? Ou, ce compilateur a-t-il été écrit en langage d’assemblage?

Qu’est-ce que cela signifie d’aligner la stack?

J’ai été un codeur de haut niveau, et les architectures sont assez nouvelles pour moi, alors j’ai décidé de lire le tutoriel sur Assembly ici: http://fr.wikibooks.org/wiki/X86_Assembly/Print_Version En bas du tutoriel, des instructions sur la façon de convertir le Hello World! programme #include int main(void) { printf(“Hello, world!\n”); return 0; } en code d’assemblage équivalent a […]

Pourquoi le compilateur Intel préfère-t-il NEG + ADD sur SUB?

En examinant la sortie de divers compilateurs pour une variété d’extraits de code, j’ai remarqué que le compilateur C (ICC) d’Intel a une forte tendance à émettre deux instructions NEG + ADD où d’autres compilateurs utiliseraient une seule instruction SUB . Comme exemple simple, considérons le code C suivant: uint64_t Mod3(uint64_t value) { return (value […]

Pourquoi l’instanciation unique_ptr se comstack-elle en un binary plus grand que le pointeur brut?

J’ai toujours eu l’impression qu’un std::unique_ptr n’avait pas de surcharge par rapport à l’utilisation d’un pointeur brut. Cependant, la compilation du code suivant #include void raw_pointer() { int* p = new int[100]; delete[] p; } void smart_pointer() { auto p = std::make_unique(100); } avec g++ -std=c++14 -O3 produit l’assemblage suivant: raw_pointer(): sub rsp, 8 mov […]

Modes de micro fusion et d’adressage

J’ai trouvé quelque chose d’inattendu (à mon avis) en utilisant l’IACA ( Intel® Architecture Code Analyzer ). L’instruction suivante utilisant l’adressage [base+index] addps xmm1, xmmword ptr [rsi+rax*1] ne micro-fusible pas selon IACA. Cependant, si j’utilise [base+offset] comme ça addps xmm1, xmmword ptr [rsi] L’IACA signale qu’elle fusionne. La section 2-11 du manuel de référence d’optimisation […]

Utilisation du langage d’assemblage en C / C ++

Je me rappelle avoir lu quelque part que pour optimiser et accélérer certaines sections du code, les programmeurs écrivent cette section en langage assembleur. Mes questions sont – Est-ce que cette pratique est toujours faite? et comment fait-on cela? L’écriture dans Assembly Language n’est-elle pas un peu trop lourde et archaïque? Lorsque nous compilons du […]

GAS: explication de .cfi_def_cfa_offset

Je voudrais une explication pour les valeurs utilisées avec les directives .cfi_def_cfa_offset dans l’assembly généré par GCC. Je sais vaguement que les directives .cfi sont impliquées dans les trames d’appel et le déroulement de la stack, mais j’aimerais une explication plus détaillée des raisons pour lesquelles, par exemple, les valeurs 16 et 8 sont utilisées […]

Les compilateurs en langage de programmation sont-ils d’abord traduits en assembleur ou directement en code machine?

Je m’intéresse principalement aux compilateurs populaires et largement utilisés, tels que gcc. Mais si les choses se font différemment avec différents compilateurs, j’aimerais aussi le savoir. Prenant gcc comme exemple, comstack-t-il un programme court écrit en C directement en code machine ou le traduit-il d’abord en assemblage lisible par l’homme, puis utilise un assembleur (intégré) […]