66 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| #ifdef __mn10300__
 | |
| 	.section .text
 | |
| 	.global	_start
 | |
| _start:
 | |
| 	mov _stack-8,a0		# Load up the stack pointer
 | |
| 	mov a0,sp
 | |
| 
 | |
| 	mov _edata,a0		# Get the start/end of bss
 | |
| 	mov _end,a1
 | |
| 
 | |
| 	cmp a0,a1		# If no bss, then do nothing
 | |
| 	beq .L0
 | |
| 
 | |
| 	clr d0			# clear d0
 | |
| 
 | |
| .L1:
 | |
| 	movbu d0,(a0)		# Clear a byte and bump pointer
 | |
| 	inc a0
 | |
| 	cmp a0,a1
 | |
| 	bne .L1
 | |
| 
 | |
| .L0:
 | |
| 	call ___main,[],0	# Call __main to run ctors/dtors
 | |
| 	clr d0
 | |
| 	clr d1
 | |
| 	mov d0,(4,sp)
 | |
| 	call _main,[],0		# Call main program
 | |
| 	call _exit,[],0		# All done, no need to return or
 | |
| 				# deallocate our stack.
 | |
| 
 | |
| 	.section ._stack
 | |
| _stack:	.long 	1
 | |
| #else
 | |
| 	.section .text
 | |
| 	.global	_start
 | |
| _start:
 | |
| 	mov _stack-4,a3		# Load up the stack pointer and allocate
 | |
| 				# our current frame.
 | |
| 
 | |
| 	mov _edata,a0		# Get the start/end of bss
 | |
| 	mov _end,a1
 | |
| 
 | |
| 	cmp a0,a1		# If no bss, then do nothing
 | |
| 	beqx .L0
 | |
| 
 | |
| 	sub d0,d0		# clear d0
 | |
| 
 | |
| .L1:
 | |
| 	movb d0,(a0)		# Clear a byte and bump pointer
 | |
| 	add 1,a0
 | |
| 	cmp a0,a1
 | |
| 	bnex .L1
 | |
| 
 | |
| .L0:
 | |
| 	jsr ___main
 | |
| 	sub d0,d0
 | |
| 	mov d0,d1
 | |
| 	mov d0,(a3)
 | |
| 	jsr _main		# Call main program
 | |
| 	jmp _exit		# All done, no need to return or
 | |
| 				# deallocate our stack.
 | |
| 
 | |
| 	.section ._stack
 | |
| _stack:	.long 	1
 | |
| #endif
 |