| .arch armv7-a | |
| .global _start | |
| .syntax unified | |
| .text | |
| .thumb | |
| .macro do_calls | |
| @ The following four instructions are accepted by gas, but generate | |
| @ meaningless code. | |
| @bl.w arm0 | |
| @bl.w arm4 | |
| @nop | |
| @bl.w arm0 | |
| @bl.w arm4 | |
| @nop | |
| blx.w arm0 | |
| blx.w arm4 | |
| nop | |
| blx.w arm0 | |
| blx.w arm4 | |
| nop | |
| bl.w thumb0 | |
| bl.w thumb2 | |
| bl.w thumb4 | |
| bl.w thumb6 | |
| nop | |
| bl.w thumb0 | |
| bl.w thumb2 | |
| bl.w thumb4 | |
| bl.w thumb6 | |
| nop | |
| @ These eight are all accepted by gas, but generate bad code. | |
| @blx.w thumb0 | |
| @blx.w thumb2 | |
| @blx.w thumb4 | |
| @blx.w thumb6 | |
| @nop | |
| @blx.w thumb0 | |
| @blx.w thumb2 | |
| @blx.w thumb4 | |
| @blx.w thumb6 | |
| .endm | |
| .thumb_func | |
| .align 3 | |
| _start: | |
| do_calls | |
| .arm | |
| .align 3 | |
| arm0: | |
| bx lr | |
| .align 3 | |
| nop | |
| arm4: | |
| bx lr | |
| .thumb | |
| .thumb_func | |
| .align 3 | |
| thumb0: | |
| bx lr | |
| .thumb_func | |
| .align 3 | |
| nop | |
| thumb2: | |
| bx lr | |
| .thumb_func | |
| .align 3 | |
| nop | |
| nop | |
| thumb4: | |
| bx lr | |
| .thumb_func | |
| .align 3 | |
| nop | |
| nop | |
| nop | |
| thumb6: | |
| bx lr | |
| backwards: | |
| do_calls |