forked from OSchip/llvm-project
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: }
|