Skip to content

Commit c052f48

Browse files
committed
Remove the deprecation of IT instructions in the ARM ABI
Upstream ARM has undeprecated the use of IT instructions. There's no formal announcement of the matter in itself, but the previous deprecations are being removed from the official docs. See https://reviews.llvm.org/D108679#2975603 for a discussion on the matter.
1 parent 72c26f3 commit c052f48

File tree

1 file changed

+0
-22
lines changed

1 file changed

+0
-22
lines changed

docs/build/overview-of-arm-abi-conventions.md

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,6 @@ The instruction set for Windows on ARM is strictly limited to Thumb-2. All code
3838

3939
A side-effect of this requirement is that all code pointers must have the low bit set. Then, when they're loaded and branched to via BLX or BX, the processor remains in Thumb mode. It doesn't try to execute the target code as 32-bit ARM instructions.
4040

41-
### IT Instructions
42-
43-
The use of IT instructions in Thumb-2 code is disallowed except for these specific cases:
44-
45-
- The IT instruction can only be used to modify one target instruction.
46-
47-
- The target must be one of these 16-bit instructions:
48-
49-
|16-Bit Opcodes|Class|Restrictions|
50-
|---------------------|-----------|------------------|
51-
|MOV, MVN|Move|`Rm != PC`, `Rd != PC`|
52-
|LDR, LDR[S]B, LDR[S]H|Load from memory|But not LDR literal forms|
53-
|STR, STRB, STRH|Store to memory||
54-
|ADD, ADC, RSB, SBC, SUB|Add or subtract|But not ADD/SUB SP, SP, imm7 forms<br /><br /> `Rm != PC`, `Rdn != PC`, `Rdm != PC`|
55-
|CMP, CMN|Compare|`Rm != PC`, `Rn != PC`|
56-
|MUL|Multiply||
57-
|ASR, LSL, LSR, ROR|Bit shift||
58-
|AND, BIC, EOR, ORR, TST|Bitwise arithmetic||
59-
|BX|Branch to register|`Rm != PC`|
60-
61-
Although current ARMv7 CPUs can't report the use of disallowed instruction forms, future generations are expected to. If these forms are detected, any program that uses them may be terminated with an undefined instruction exception.
62-
6341
### SDIV/UDIV instructions
6442

6543
The use of integer divide instructions SDIV and UDIV is fully supported, even on platforms without native hardware to handle them. The extra overhead per SDIV or UDIV divide on a Cortex-A9 processor is approximately 80 cycles. That's added to the overall divide time of 20-250 cycles, depending on the inputs.

0 commit comments

Comments
 (0)