223 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| @ RUN: llvm-mc -triple armv6t2-linux-eabi -filetype asm -o - %s 2>&1 \
 | |
| @ RUN:   | FileCheck %s
 | |
| 
 | |
| @ RUN: not llvm-mc -triple armv7-linux-eabi -filetype asm -o - %s 2>&1 \
 | |
| @ RUN:   | FileCheck %s -check-prefix CHECK -check-prefix CHECK-V7
 | |
| 
 | |
| 	.syntax unified
 | |
| 	.arm
 | |
| 
 | |
| 	.global stm
 | |
| 	.type stm,%function
 | |
| stm:
 | |
| 	stm sp!, {r0, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm sp!, {r0, pc}
 | |
| @ CHECK: ^
 | |
| 	stm r0!, {r0, sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm r0!, {r0, sp}
 | |
| @ CHECK: ^
 | |
| 	stm r1!, {r0, sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm r1!, {r0, sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stm r2!, {sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm r2!, {sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stm sp!, {pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm sp!, {pc}
 | |
| @ CHECK: ^
 | |
| 	stm r0!, {sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stm r0!, {sp}
 | |
| @ CHECK: ^
 | |
| 
 | |
| 	.global stmda
 | |
| 	.type stmda,%function
 | |
| stmda:
 | |
| 	stmda sp!, {r0, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda sp!, {r0, pc}
 | |
| @ CHECK: ^
 | |
| 	stmda r0!, {r0, sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda r0!, {r0, sp}
 | |
| @ CHECK: ^
 | |
| 	stmda r1!, {r0, sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda r1!, {r0, sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmda r2!, {sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda r2!, {sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmda sp!, {pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda sp!, {pc}
 | |
| @ CHECK: ^
 | |
| 	stmda r0!, {sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmda r0!, {sp}
 | |
| @ CHECK: ^
 | |
| 
 | |
| 	.global stmdb
 | |
| 	.type stmdb,%function
 | |
| stmdb:
 | |
| 	stmdb sp!, {r0, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb sp!, {r0, pc}
 | |
| @ CHECK: ^
 | |
| 	stmdb r0!, {r0, sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb r0!, {r0, sp}
 | |
| @ CHECK: ^
 | |
| 	stmdb r1!, {r0, sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb r1!, {r0, sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmdb r2!, {sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb r2!, {sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmdb sp!, {pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb sp!, {pc}
 | |
| @ CHECK: ^
 | |
| 	stmdb r0!, {sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmdb r0!, {sp}
 | |
| @ CHECK: ^
 | |
| 
 | |
| 	.global stmib
 | |
| 	.type stmib,%function
 | |
| stmib:
 | |
| 	stmib sp!, {r0, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib sp!, {r0, pc}
 | |
| @ CHECK: ^
 | |
| 	stmib r0!, {r0, sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib r0!, {r0, sp}
 | |
| @ CHECK: ^
 | |
| 	stmib r1!, {r0, sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib r1!, {r0, sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmib r2!, {sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib r2!, {sp, pc}
 | |
| @ CHECK: ^
 | |
| 	stmib sp!, {pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib sp!, {pc}
 | |
| @ CHECK: ^
 | |
| 	stmib r0!, {sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: stmib r0!, {sp}
 | |
| @ CHECK: ^
 | |
| 
 | |
| 
 | |
| 	.global push
 | |
| 	.type push,%function
 | |
| push:
 | |
| 	push {r0, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {r0, pc}
 | |
| @ CHECK: ^
 | |
| 	push {r0, sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {r0, sp}
 | |
| @ CHECK: ^
 | |
| 	push {r0, sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {r0, sp, pc}
 | |
| @ CHECK: ^
 | |
| 	push {sp, pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {sp, pc}
 | |
| @ CHECK: ^
 | |
| 	push {pc}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {pc}
 | |
| @ CHECK: ^
 | |
| 	push {sp}
 | |
| @ CHECK: warning: use of SP or PC in the list is deprecated
 | |
| @ CHECK: push {sp}
 | |
| @ CHECK: ^
 | |
| 
 | |
| 	.global ldm
 | |
| 	.type ldm,%function
 | |
| ldm:
 | |
| 	ldm r0!, {r1, sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldm r0!, {sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldm r0!, {r1, lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 	ldm r0!, {lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 
 | |
| 	.global ldmda
 | |
| 	.type ldmda,%function
 | |
| ldmda:
 | |
| 	ldmda r0!, {r1, sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmda r0!, {sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmda r0!, {r1, lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 	ldmda r0!, {lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 
 | |
| 	.global ldmdb
 | |
| 	.type ldmdb,%function
 | |
| ldmdb:
 | |
| 	ldmdb r0!, {r1, sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmdb r0!, {sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmdb r0!, {r1, lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 	ldmdb r0!, {lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 
 | |
| 	.global ldmib
 | |
| 	.type ldmib,%function
 | |
| ldmib:
 | |
| 	ldmib r0!, {r1, sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmib r0!, {sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| 	ldmib r0!, {r1, lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 	ldmib r0!, {lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 
 | |
| 	.global pop
 | |
| 	.type pop,%function
 | |
| pop:
 | |
| 	pop {r0, sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| @ CHECK-V7: error: writeback register not allowed in register list
 | |
| 	pop {sp}
 | |
| @ CHECK: warning: use of SP in the list is deprecated
 | |
| @ CHECK-V7: error: writeback register not allowed in register list
 | |
| 	pop {r0, lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 	pop {lr, pc}
 | |
| @ CHECK: warning: use of LR and PC simultaneously in the list is deprecated
 | |
| 
 | |
| 	.global valid
 | |
| 	.type valid,%function
 | |
| valid:
 | |
| 	stmdaeq r0, {r0}
 | |
| @ CHECK: stmdaeq r0, {r0}
 | |
| 	ldmdaeq r0, {r0}
 | |
| @ CHECK: ldmdaeq r0, {r0}
 | |
| 	pop {r0, pc}
 | |
| @ CHECK: pop {r0, pc}
 | |
| 
 |