Share via


THUMB-enabled ARM Implementation (Windows Embedded CE 6.0)

1/5/2010

THUMB-enabled ARM microprocessors can execute 16-bit THUMB instructions in addition to the usual 32-bit ARM instructions.

To execute THUMB instructions, switch the microprocessor into THUMB mode. To resume executing ARM instructions, switch the microprocessor back into ARM mode. The instruction that accomplishes the mode switch is the branch and exchange (BX) instruction.

To call a function compiled by the THUMB compiler from within a function compiled by the ARM compiler, the code sequence must include a BX instruction on the caller side and on the callee side.

The BX instruction is of the form BXRx, 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 sets the low bit of THUMB function addresses at link time.

The ARM C/C++ compiler supports function calls and returns for ARM/THUMB interworking. The following mechanisms support interworking.

  • Compiler flags
  • Language extensions by way of interworking declspec modifiers
  • Link-time generation of thunking routines

The use of an interworking calling sequence allows but does not require a mode switch to occur.

In addition, a THUMB function can call another THUMB function and an ARM function can call another ARM function through an interworking calling sequence.

See Also

Reference

Compiler Flags for Interworking

Concepts

Modifiers
Linker-Generated Thunking Routines
Code Size Considerations

Other Resources

ARM Calling Sequence Specification