| .syntax unified |
| .arch armv7 |
| .thumb |
| main: |
| |
| @These branches are to see the labels in the generated file |
| bl .L888 |
| bl .L111 |
| bl .L777 |
| |
| @No IT block here: |
| bne .L4 |
| |
| @The following groups should be an IT block each. |
| @it ne |
| addne.n pc, r0 |
| |
| @it ne |
| tbbne [r0, r1] |
| |
| @it eq |
| tbheq [r1, r0] |
| |
| @The following group should be left as is: |
| itet eq |
| .L111: moveq r0, #2 |
| movne r0, #3 |
| moveq r0, #4 |
| |
| @Same, reverted condition: |
| itet ne |
| movne r0, #2 |
| moveq r0, #3 |
| movne r0, #4 |
| |
| |
| @Two groups shall be generated, due to the label: |
| movne r0, #1 |
| @ second group, the label should be at the IT insn |
| .L777: moveq r0, #2 |
| ldrne pc, [r1] |
| |
| @it ne |
| blne .L4 |
| |
| @it lt |
| bllt .L9 |
| |
| @itett ne |
| .L888: movne r0, #45 |
| moveq r0, #5 |
| movne r0, #6 |
| addne.n pc, r0 |
| |
| @iteet eq |
| moveq r0, #7 |
| movne r0, #8 |
| movne r0, #3 |
| moveq r0, #4 |
| |
| @itete eq |
| moveq r0, #5 |
| movne r0, #6 |
| moveq r0, #7 |
| movne r0, #8 |
| |
| @ite eq - this group finishes due to the mov.n pc, rn |
| moveq r0, #5 |
| movne r0, #6 |
| mov.n pc, r0 |
| |
| @itete eq |
| moveq r0, #7 |
| movne r0, #8 |
| moveq r0, #5 |
| movne r0, #6 |
| |
| @this shall not generate an IT block |
| add.n pc, r0 |
| |
| @ite eq - testing condition change (eq -> gt) |
| moveq r0, #7 |
| movne r0, #8 |
| |
| @ite gt (group shall finish due to another condition change) |
| movgt r0, #9 |
| movle r0, #10 |
| |
| @it eq |
| moveq r0, #11 |
| |
| @it le |
| movle r0, #12 |
| |
| @it ne |
| movne r0, #13 |
| |
| bl f |
| .L4: |
| pop {r4, pc} |
| .L9: |
| bl f |
| |
| @Only the movlt shall be enclosed in the IT block |
| movlt r0, #0 |
| muls r0, r0, r1 |
| |
| @Same here: |
| movlt r0, #0 |
| muls r0, r0, r1 |