BXJ |
Branchement et échange Jazelle |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rm |
Ce paramètre permet d'indiquer un registre contenant l'adresse de branchement. |
Description
Cette instruction permet d'effectuer un saut et change pour l'état de Jazelle.
Remarques
- Instruction spécifique au mode Jazelle pour l'exécution de bytecode Java : BXJ est utilisée pour passer du mode ARM standard au mode Jazelle, une
extension matérielle d'ARM conçue pour exécuter directement du bytecode Java. Ce mode permettait aux processeurs ARM d'accélérer l'exécution des applications
Java sans passer par une machine virtuelle logicielle.
- Permet un branchement vers une adresse Java interprétée : L'adresse contenue dans le registre Rm doit correspondre à une adresse pointant
vers une instruction Java ou un descripteur compatible. Lorsqu'on exécute BXJ, le processeur tente de basculer
dans le mode Jazelle et d'exécuter le bytecode ciblé, à condition que ce mode soit activé.
- Le changement de mode dépend du support matériel : Tous les processeurs ARM ne supportent pas le mode Jazelle. Même si BXJ est syntaxiquement valide,
elle peut être ignorée ou provoquer une exception si le matériel ne prend pas en charge Jazelle. Par conséquent, cette instruction est généralement utilisée dans du
code conditionnel ou réservé à certains modèles ARM.
- Peut être conditionnelle avec un suffixe cond : Comme d'autres instructions ARM, BXJ accepte un suffixe conditionnel (exemple : BXJEQ, BXJNE).
Cela permet d'activer le passage au mode Jazelle uniquement dans certaines conditions logiques, comme après une comparaison, ce qui est utile dans les machines
virtuelles Java natives.
- S'appuie sur des registres système pour le contrôle du mode Jazelle : Le mode Jazelle est activé à travers le registre JBIT du CPSR et un registre
de contrôle spécial (Jazelle State Register). Si le mode n'est pas correctement initialisé par le système ou l'OS, l'exécution de BXJ peut être redirigée vers un
descripteur de secours ou lever une exception.
- Utilisée dans des implémentations Java embarquées : BXJ a principalement été utilisée dans les appareils mobiles ou embarqués (comme certains téléphones
anciens ou systèmes Java ME) pour accélérer le lancement et l'exécution d'applications Java. Elle permettait d'atteindre de meilleures performances avec une consommation
mémoire minimale.
- Comportement incertain sur les architectures ARM modernes : Sur les processeurs ARM plus récents (ARMv8, par exemple), Jazelle n'est généralement plus
supporté, ou le support est déprécié. L'instruction BXJ peut alors ne pas fonctionner du tout, ou se comporter comme un simple BX ou NOP selon l'implémentation du
fabricant.
- Sécurité et isolement accrus nécessaires avec Jazelle : Puisque BXJ peut transférer le contrôle à du bytecode Java exécuté directement au niveau
matériel, il est impératif que ce bytecode soit vérifié et sécurisé. Une erreur dans l'interprétation ou une attaque via du code malformé pourrait compromettre le
système si le mode Jazelle est actif sans restrictions.
Dernière mise à jour : Dimanche, le 12 novembre 2017