UXTAH |
Étendre des demi-mots et addition non-signé |
|---|---|
| ARM | |
Syntaxe
| UXTAH{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 d'un demi-mot et d'effectuer une addition.
Remarques
- UXTAH combine extension et addition en une seule instruction : UXTAH effectue l'extension non signée d'un demi-mot (16 bits) à 32 bits, puis ajoute cette valeur au contenu d'un autre registre (Rn). Le résultat est stocké dans le registre de destination (Rd). Cela permet un traitement compact et rapide de données partielles.
- Idéal pour manipuler des données 16 bits dans des boucles optimisées : Cette instruction est particulièrement utile lorsqu'on manipule des structures de données 16 bits (comme des pixels RGB565, des échantillons audio,...), tout en travaillant dans un environnement 32 bits, pour éviter des manipulations manuelles supplémentaires.
- Le paramètre rotation permet une extraction dynamique : Grâce au champ rotation, on peut faire une rotation à droite du registre Rm avant l'extension, ce qui permet de sélectionner dynamiquement le demi-mot d'intérêt (sur 16 bits) parmi différentes positions dans un registre de 32 bits.
- Extension non signée : les bits de poids fort sont toujours des zéros : Puisqu'il s'agit d'une extension non signée, les 16 bits ajoutés lors du passage à 32 bits sont toujours des zéros, ce qui garantit qu'aucune information de signe erronée ne perturbera l'addition.
- Permet de remplacer plusieurs instructions par une seule : UXTAH remplace efficacement une combinaison de LSR + AND + ADD, ce qui économise des cycles d'horloge et réduit l'encombrement du code. Cette compacité est cruciale dans des contextes temps-réel ou embarqués.
- Rôle important dans les optimisations SIMD de haut niveau : Bien qu'elle ne fasse pas directement du SIMD, UXTAH est souvent utilisée dans des algorithmes traitant plusieurs sous-parties de registres en parallèle, simulant une approche SIMD (Single Instruction, Multiple Data) sans instructions NEON.
- Compatible avec l'exécution conditionnelle {cond} : Comme la plupart des instructions ARM classiques, UXTAH accepte un suffixe conditionnel, ce qui permet de l'exécuter uniquement si une certaine condition est remplie, évitant ainsi des branchements inutiles dans le code.
- Attention aux erreurs de rotation : bien choisir le déplacement : Une rotation mal choisie peut entraîner l'extraction d'un demi-mot non souhaité, ce qui produira une addition incorrecte. Il faut donc bien connaître la disposition des données dans le registre Rm pour sélectionner la bonne rotation.
Dernière mise à jour : Dimanche, le 12 novembre 2017