.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 |