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 […]
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 […]
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 […]
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?
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 […]
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 […]
Est-il possible d’obtenir une nouvelle image x86 pour un émulateur Android avec Google Maps SDK?
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 […]
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, à […]
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 .