UXTAB16 |
Étendre zéro de 2 octets non-signé |
|---|---|
| ARM | |
Syntaxe
| UXTAB16{cond} {Rd}, Rn, Rm {,rotation} |
Paramètres
| Nom | Description | |
|---|---|---|
| cond | Ce paramètre optionnel permet d'indiquer le code de condition. | |
| Rd | Ce paramètre permet d'indiquer le registre de destination | |
| Rn | Ce paramètre permet d'indiquer le registre contenant le nombre à ajouter. | |
| Rm | Ce paramètre permet d'indiquer le registre contenant la valeur à étendre. | |
| rotation | Ce paramètre optionnel permet d'indiquer la rotation à appliquer : | |
| Constante | Description | |
| ROR #8 | Cette constante permet d'indiquer que la valeur du paramètre Rm doit effectuer une rotation vers la gauche de 8 bits. | |
| ROR #16 | Cette constante permet d'indiquer que la valeur du paramètre Rm doit effectuer une rotation vers la gauche de 16 bits. | |
| ROR #24 | Cette constante permet d'indiquer que la valeur du paramètre Rm doit effectuer une rotation vers la gauche de 24 bits. | |
Description
Cette instruction permet d'étendre les zéro de 2 octets et d'effectuer une addition.
Remarques
- Instruction spécialisée pour traiter deux octets simultanément : UXTAB16 effectue deux extensions non signées de 8 bits à 16 bits, sur deux octets différents de Rm, puis ajoute indépendamment chaque résultat aux deux moitiés du registre Rn. C'est une instruction paire, idéale pour le traitement parallèle de données.
- Fonctionne comme une version vectorisée simple : L'instruction peut être vue comme un mini SIMD : elle traite deux éléments de 8 bits en parallèle dans des moitiés différentes d'un registre 32 bits. Chaque moitié basse et haute de Rd contient le résultat d'une addition indépendante entre un octet étendu et une moitié de Rn.
- Le paramètre rotation permet d'aligner dynamiquement les octets ciblés : Le champ rotation permet d'appliquer une rotation à droite de 8, 16 ou 24 bits sur Rm, ce qui rend possible l'extraction de n'importe quel paire d'octets alignés sur 8 bits. Cela donne une flexibilité considérable pour manipuler des registres partagés.
- L'extension est non signée : on évite la propagation du bit de signe : Les valeurs extraites de Rm sont zéro-étendues, ce qui garantit que les valeurs d'origine (de 0 à 255) ne sont pas modifiées par erreur d'interprétation de signe, comme cela pourrait être le cas avec une extension signée.
- Idéale pour des opérations de type traitement d'image ou de son : Grâce à sa capacité à manipuler deux octets en parallèle, UXTAB16 est particulièrement utile pour le traitement de flux de données, comme l'audio 8 bits stéréo ou le traitement de pixels. Cela permet de conserver des performances optimales.
- Le registre Rn agit comme base d'addition, Rd reçoit les résultats : La valeur contenue dans Rn est partitionnée en deux moitiés de 16 bits, chacune étant additionnée à un octet étendu de Rm. Le résultat est enregistré dans Rd, ce qui laisse les registres sources (Rn et Rm) inchangés.
- Peut être conditionnelle grâce au suffixe {cond} : Comme la majorité des instructions ARM, UXTAB16 accepte un suffixe conditionnel (EQ, NE,...), ce qui permet une exécution conditionnelle sans branchement explicite. Cela renforce la densité et la rapidité du code.
- Bien choisir les octets extraits pour éviter des additions incohérentes : Une mauvaise rotation peut conduire à ce que les octets extraits ne correspondent pas à ceux attendus. Par exemple, sans rotation, les octets de poids faible et moyen seront utilisés. Il est crucial de bien visualiser la disposition binaire du registre Rm.
Dernière mise à jour : Dimanche, le 12 novembre 2017