Articles of x86

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 […]

Registre Windows 64 bits vs registre 32 bits

J’ai entendu sur l’architecture Windows x64, afin de prendre en charge l’exécution des applications x86 et x64, il existe deux ensembles distincts / différents de registre Windows: un pour accéder à l’application x86 et l’autre pour accéder à l’application x64? Par exemple, si un COM enregistre CLSID dans le jeu de registre x86, alors l’application […]

Pourquoi x86 little endian?

Une vraie question que je me posais dernièrement: quels choix de conception ont permis à x86 d’être une petite architecture endian au lieu d’une architecture big endian?

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 […]

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 […]

Google Maps SDK avec le nouvel émulateur Intel Atom x86

Est-il possible d’obtenir une nouvelle image x86 pour un émulateur Android avec Google Maps SDK?

Instruction LEA ou ADD?

Quand je suis en écriture manuscrite, je choisis généralement le formulaire lea eax, [eax+4] Sur la forme .. add eax, 4 J’ai entendu dire que lea est une instruction “0-clock” (comme NOP), alors que “add” ne l’est pas. Cependant, lorsque je regarde l’assemblage produit par le compilateur, je vois souvent la dernière forme utilisée au […]

Pourquoi l’instruction de boucle est-elle lente? Intel ne pouvait-il pas le mettre en œuvre efficacement?

LOOP ( entrée manuelle de la référence Intel ) décrémente ecx / rcx, puis saute si elle est non nulle . C’est lent, mais Intel n’a-t-il pas pu faire vite? dec/jnz déjà macro-fusible en un seul uop sur la famille Sandybridge; la seule différence est que cela définit des drapeaux. loop sur diverses microarchitectures, à […]

Démarrer avec SSE

Je veux en savoir plus sur l’utilisation du SSE . Quels sont les moyens d’apprendre, en plus de la lecture évidente des manuels du développeur du logiciel Intel® 64 et IA-32 Architectures ? Je suis principalement intéressé par les fonctions intégrées du GCC X86 .