-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathx86_extensions.language.txt
42 lines (36 loc) · 2.14 KB
/
x86_extensions.language.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
┏━━━━━━━━━━━━━━━━━━━━┓
┃ X86 EXTENSIONS ┃
┗━━━━━━━━━━━━━━━━━━━━┛
Une extension est un ensemble d'opcodes disponibles en plus des opcodes x86 classiques. On peut mélanger les unes et les autres dans un même fichier.
Toute extension a un but précis.
Le CPU doit pouvoir comprendre l'extension.
C'est le compilateur qui choisit (via des options à passer et/ou en fonction de l'architecture actuelle) les extensions à utiliser.
________________________________________________________________________________
Liste des extensions :
- supporté par AMD + Intel :
- x87 : opération sur les floats
- extensions SIMD
- AES-NI, pour faire du chiffrement AES
- CLMUL, pour faire des "carry-less multiplication", utilisé dans les block ciphers en counter mode
- supporté que par Intel :
- Intel VT-x/VMX, pour permettre virtualisation hardware, concurrent de AMD-V
- SMX, pour mettre des DRM ???
- supporté que par AMD :
- 3DNow, XOP, FMA4, CVT16
________________________________________________________________________________
Extensions SIMD :
- opérant sur les registres mm* (MMX-SSE2), xmm* (SSE1-SSE4) et ymm* (AVX):
- utilisé principalement par des bibliothèques de video, audio et image processing, où cela améliore l'efficience
- Intel :
- MMX -> SSE1 -> SSE2 -> SSE3 -> SSSE3 -> SSE4 (SSE4.1 puis SSE4.2) -> AVX -> AVX2
- supporté aussi par les CPU AMD, avec 1 ou 2 ans de retard. Pas encore supportés : SSE4 et supérieur
- AMD :
- 3DNow :
- implémenté seulement sur les CPU AMD, et plus supporté aujourd'hui
- concurrent (très similaire) à SSE1/SSE2, mais utilisant les mm*
- SSE4a, ajout de deux instructions à SSE4
- SSE5, normalement prévu, mais abandonné au profit de XOP, FMA4 et CVT16, compétiteur de SSE4/AVX
- en général supporté que par AMD
- ymm* :
- arrays de 256 bits, donc la première moitié est un alias des xmm*
- compiler support : "auto-vectorization"