Mode Switching
The instruction that accomplishes the mode switch is the branch and exchange (BX) instruction. The calling sequence required to call a function compiled by CLTHUMB from within a function compiled by CLARM and vice-versa must include a BX instruction, both on the caller side and on the callee side.
The BX instruction is of the form BX Rx where Rx is a register containing an address. If the low bit of the BX target address is set, BX causes a switch into THUMB mode. If the low bit of the BX target address is not set, BX causes a switch into ARM mode. The linker is responsible for setting the low bit of THUMB function addresses at link time.
An interworking call is a call made from an ARM function to a THUMB function, or vice versa. The ARM C/C++ compiler provides several facilities supporting interworking function calls and interworking returns. The following list shows the facilities that support interworking.
- Compiler flags
- Language extensions by way of interworking declspecs
- Link-time generation of thunking routines.
The use of an interworking calling sequence allows a mode switch to occur but does not require a mode switch to occur. A THUMB function may call another THUMB function — and an ARM function may call another ARM function — through an interworking calling sequence.
See Also
THUMB-enabled ARM Implementation | ARM Compiler Flags | Declspecs | Linker-Generated Thunking Routines
Last updated on Thursday, April 08, 2004
© 1992-2003 Microsoft Corporation. All rights reserved.