227 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| @ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
 | |
| @ RUN:   | llvm-readobj -s -sd | FileCheck %s
 | |
| 
 | |
| @ Check for different stack pointer offsets.
 | |
| 
 | |
| @ The .pad directive will track the stack pointer offsets.  There are several
 | |
| @ ways to encode the stack offsets.  We have to test:
 | |
| @
 | |
| @              offset <  0x00
 | |
| @              offset == 0x00
 | |
| @     0x04  <= offset <= 0x100
 | |
| @     0x104 <= offset <= 0x200
 | |
| @     0x204 <= offset
 | |
| 
 | |
| 
 | |
| 	.syntax unified
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ TEST1
 | |
| @-------------------------------------------------------------------------------
 | |
| 	.section	.TEST1
 | |
| 	.globl	func1
 | |
| 	.align	2
 | |
| 	.type	func1,%function
 | |
| 	.fnstart
 | |
| func1:
 | |
| 	.pad	#0
 | |
| 	sub	sp, sp, #0
 | |
| 	add	sp, sp, #0
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ The assembler should emit nothing (will be filled up with finish opcode).
 | |
| @-------------------------------------------------------------------------------
 | |
| @ CHECK: Section {
 | |
| @ CHECK:   Name: .ARM.extab.TEST1
 | |
| @ CHECK:   SectionData (
 | |
| @ CHECK:     0000: 00000000 B0B0B000                    |........|
 | |
| @ CHECK:   )
 | |
| @ CHECK: }
 | |
| 
 | |
| 
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ TEST2
 | |
| @-------------------------------------------------------------------------------
 | |
| 	.section	.TEST2
 | |
| 	.globl	func2a
 | |
| 	.align	2
 | |
| 	.type	func2a,%function
 | |
| 	.fnstart
 | |
| func2a:
 | |
| 	.pad	#0x4
 | |
| 	sub	sp, sp, #0x4
 | |
| 	add	sp, sp, #0x4
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| 	.globl	func2b
 | |
| 	.align	2
 | |
| 	.type	func2b,%function
 | |
| 	.fnstart
 | |
| func2b:
 | |
| 	.pad	#0x100
 | |
| 	sub	sp, sp, #0x100
 | |
| 	add	sp, sp, #0x100
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ The assembler should emit ((offset - 4) >> 2).
 | |
| @-------------------------------------------------------------------------------
 | |
| @ CHECK: Section {
 | |
| @ CHECK:   Name: .ARM.extab.TEST2
 | |
| @ CHECK:   SectionData (
 | |
| @ CHECK:     0000: 00000000 B0B00000 00000000 B0B03F00  |..............?.|
 | |
| @ CHECK:   )
 | |
| @ CHECK: }
 | |
| 
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ TEST3
 | |
| @-------------------------------------------------------------------------------
 | |
| 	.section	.TEST3
 | |
| 	.globl	func3a
 | |
| 	.align	2
 | |
| 	.type	func3a,%function
 | |
| 	.fnstart
 | |
| func3a:
 | |
| 	.pad	#0x104
 | |
| 	sub	sp, sp, #0x104
 | |
| 	add	sp, sp, #0x104
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| 	.globl	func3b
 | |
| 	.align	2
 | |
| 	.type	func3b,%function
 | |
| 	.fnstart
 | |
| func3b:
 | |
| 	.pad	#0x200
 | |
| 	sub	sp, sp, #0x200
 | |
| 	add	sp, sp, #0x200
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ The assembler should emit 0x3F and ((offset - 0x104) >> 2).
 | |
| @-------------------------------------------------------------------------------
 | |
| @ CHECK: Section {
 | |
| @ CHECK:   Name: .ARM.extab.TEST3
 | |
| @ CHECK:   SectionData (
 | |
| @ CHECK:     0000: 00000000 B03F0000 00000000 B03F3F00  |.....?.......??.|
 | |
| @ CHECK:   )
 | |
| @ CHECK: }
 | |
| 
 | |
| 
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ TEST4
 | |
| @-------------------------------------------------------------------------------
 | |
| 	.section	.TEST4
 | |
| 	.globl	func4a
 | |
| 	.align	2
 | |
| 	.type	func4a,%function
 | |
| 	.fnstart
 | |
| func4a:
 | |
| 	.pad	#0x204
 | |
| 	sub	sp, sp, #0x204
 | |
| 	add	sp, sp, #0x204
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| 	.globl	func4b
 | |
| 	.align	2
 | |
| 	.type	func4b,%function
 | |
| 	.fnstart
 | |
| func4b:
 | |
| 	.pad	#0x580
 | |
| 	sub	sp, sp, #0x580
 | |
| 	add	sp, sp, #0x580
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ The assembler should emit 0xB2 and the ULEB128 encoding of
 | |
| @ ((offset - 0x204) >> 2).
 | |
| @-------------------------------------------------------------------------------
 | |
| @ CHECK: Section {
 | |
| @ CHECK:   Name: .ARM.extab.TEST4
 | |
| @ CHECK:   SectionData (
 | |
| @ CHECK:     0000: 00000000 B000B200 00000000 01DFB200  |................|
 | |
| @ CHECK:   )
 | |
| @ CHECK: }
 | |
| 
 | |
| 
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ TEST5
 | |
| @-------------------------------------------------------------------------------
 | |
| 	.section	.TEST5
 | |
| 	.globl	func4a
 | |
| 	.align	2
 | |
| 	.type	func4a,%function
 | |
| 	.fnstart
 | |
| func5a:
 | |
| 	.pad	#-0x4
 | |
| 	add	sp, sp, #0x4
 | |
| 	sub	sp, sp, #0x4
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| 	.globl	func5b
 | |
| 	.align	2
 | |
| 	.type	func5b,%function
 | |
| 	.fnstart
 | |
| func5b:
 | |
| 	.pad	#-0x104
 | |
| 	add	sp, sp, #0x104
 | |
| 	sub	sp, sp, #0x4
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| 	.globl	func5c
 | |
| 	.align	2
 | |
| 	.type	func5c,%function
 | |
| 	.fnstart
 | |
| func5c:
 | |
| 	.pad	#-0x204
 | |
| 	add	sp, sp, #0x204
 | |
| 	sub	sp, sp, #0x4
 | |
| 	bx	lr
 | |
| 	.personality __gxx_personality_v0
 | |
| 	.handlerdata
 | |
| 	.fnend
 | |
| 
 | |
| @-------------------------------------------------------------------------------
 | |
| @ The assembler should emit (0x40 | (-offset - 4)) >> 2.  When (-offset - 4)
 | |
| @ is greater than 0x3f, then multiple 0x7f should be emitted.
 | |
| @-------------------------------------------------------------------------------
 | |
| @ CHECK: Section {
 | |
| @ CHECK:   Name: .ARM.extab.TEST5
 | |
| @ CHECK:   SectionData (
 | |
| @ CHECK:     0000: 00000000 B0B04000 00000000 B07F4000  |......@.......@.|
 | |
| @ CHECK:     0010: 00000000 7F7F4000                    |......@.|
 | |
| @ CHECK:   )
 | |
| @ CHECK: }
 |