| # thumb_blx_in_range.s |
| # |
| # Test THUMB/THUMB-2 blx instructions just within the branch range limits. |
| # Because bit 1 of the branch target comes from the branch instruction |
| # address, the branch range from PC (branch instruction address + 4) is |
| # acutally -((1<<22) + 2) to ((1<<22) - 4) for THUMB and -((1<<24) + 2) to |
| # ((1<<24) - 4) from THUMB2. |
| |
| .syntax unified |
| .section .text.pre,"x" |
| |
| # Add padding so that target is just in branch range. |
| .space 8 |
| |
| .align 2 |
| .global _backward_target |
| .code 32 |
| .type _backword_target, %function |
| _backward_target: |
| bx lr |
| .size _backward_target, .-_backward_target |
| |
| .text |
| |
| # Define _start so that linker does not complain. |
| .global _start |
| .code 32 |
| .align 2 |
| .type _start, %function |
| _start: |
| bx lr |
| .size _start, .-_start |
| |
| .global _backward_test |
| .code 16 |
| .thumb_func |
| .type _backward_test, %function |
| _backward_test: |
| nop.n |
| blx _backward_target |
| .size _backward_test, .-_backward_test |
| |
| .align 2 |
| .global _forward_test |
| .code 16 |
| .thumb_func |
| .type _forward_test, %function |
| _forward_test: |
| blx _forward_target |
| .size _forward_test, .-_forward_test |
| .code 32 |
| |
| .section .text.post,"x" |
| |
| # Add padding so that target is just in branch range. |
| .space 12 |
| |
| .align 2 |
| .global _forward_target |
| .code 32 |
| .type _forward_target, %function |
| _forward_target: |
| bx lr |
| .size _forward_target, .-_forward_target |