97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
@ RUN: not llvm-mc %s -triple thumbv7-linux-gnueabi -filetype=obj -o /dev/null 2>&1 | FileCheck %s
 | 
						|
 | 
						|
// Thumb2 unconditional branch has a range of +- 16 Megabytes. The
 | 
						|
// conditional branch has a range of +- 1 Megabyte. We should give
 | 
						|
// an error message if we evaluate the expression at assembly
 | 
						|
// time and it is out of range.
 | 
						|
 | 
						|
        .syntax unified
 | 
						|
        .thumb
 | 
						|
        b.w end
 | 
						|
        .space 0xfffffe
 | 
						|
end:
 | 
						|
        b.w end2
 | 
						|
        .space 0xfffffe
 | 
						|
        .global end2
 | 
						|
end2:
 | 
						|
 | 
						|
// branch to arm function uses relocation
 | 
						|
        b.w end3
 | 
						|
        .space 0x1000000
 | 
						|
        .global end3
 | 
						|
        .type end3, %function
 | 
						|
        .arm
 | 
						|
end3:   bx lr
 | 
						|
        .thumb
 | 
						|
 | 
						|
// branch to thumb function is resolved at assembly time
 | 
						|
// CHECK-NOT: error
 | 
						|
// CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range
 | 
						|
// CHECK-LABEL: b.w end4
 | 
						|
        b.w end4
 | 
						|
        .space 0x1000000
 | 
						|
        .thumb_func
 | 
						|
end4:
 | 
						|
 | 
						|
        beq.w end5
 | 
						|
        .space 0xffffc
 | 
						|
end5:
 | 
						|
 | 
						|
// conditional branch to arm function uses relocation
 | 
						|
        beq.w end6
 | 
						|
        .arm
 | 
						|
        .type end6, %function
 | 
						|
        .space 0x100000
 | 
						|
end6:   bx lr
 | 
						|
        .thumb
 | 
						|
 | 
						|
// conditional branch to thumb function resolved at assembly time
 | 
						|
// CHECK-NOT: error
 | 
						|
// CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range
 | 
						|
// CHECK-LABEL: beq.w end7
 | 
						|
        beq.w end7
 | 
						|
        .space 0x100000
 | 
						|
end7:
 | 
						|
 | 
						|
start:
 | 
						|
        .space 0xfffffc
 | 
						|
        b.w start
 | 
						|
 | 
						|
        .arm
 | 
						|
        .global start2
 | 
						|
        .type start2, %function
 | 
						|
start2:
 | 
						|
        .space 0x1000000
 | 
						|
        .thumb
 | 
						|
// branch to arm function uses relocation
 | 
						|
        b.w start2
 | 
						|
 | 
						|
start3:
 | 
						|
        .space 0x1000000
 | 
						|
// branch to thumb function resolved at assembly time
 | 
						|
// CHECK-NOT: error
 | 
						|
// CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range
 | 
						|
// CHECK-LABEL: b.w start3
 | 
						|
        b.w start3
 | 
						|
 | 
						|
start4:
 | 
						|
        .space 0xffffc
 | 
						|
        b.w start4
 | 
						|
 | 
						|
        .arm
 | 
						|
        .global start5
 | 
						|
        .type start5, %function
 | 
						|
start5:
 | 
						|
        .space 0x100000
 | 
						|
        .thumb
 | 
						|
// conditional branch to arm function uses relocation
 | 
						|
        beq.w start5
 | 
						|
 | 
						|
start6:
 | 
						|
        .space 0x100000
 | 
						|
// branch to thumb function resolved at assembly time
 | 
						|
// CHECK-NOT: error
 | 
						|
// CHECK: [[@LINE+2]]:{{[0-9]}}: error: Relocation out of range
 | 
						|
// CHECK-LABEL: beq.w start6
 | 
						|
        beq.w start6
 |