Skip to content

Commit b0350af

Browse files
author
Colin Robertson
authored
Merge pull request #3509 from mstorsjo/remove-it-deprecation
Remove the deprecation of IT instructions in the ARM ABI
2 parents 497200a + c052f48 commit b0350af

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)