63 lines
		
	
	
		
			875 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			875 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								// See LICENSE for license details.
							 | 
						||
| 
								 | 
							
								#include "encoding.h"
							 | 
						||
| 
								 | 
							
									.section .init
							 | 
						||
| 
								 | 
							
									.globl _start_1
							 | 
						||
| 
								 | 
							
									.type _start_1,@function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_start_1:
							 | 
						||
| 
								 | 
							
								    li t0, MSTATUS_MIE
							 | 
						||
| 
								 | 
							
								    csrc mstatus, t0
							 | 
						||
| 
								 | 
							
								    li t0, MIP_MTIP
							 | 
						||
| 
								 | 
							
								    csrc mie, t0
							 | 
						||
| 
								 | 
							
								    li t0, MIP_MEIP
							 | 
						||
| 
								 | 
							
								    csrc mie, t0
							 | 
						||
| 
								 | 
							
								    li t0, 0
							 | 
						||
| 
								 | 
							
								    csrc mcause, t0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									la gp, _gp
							 | 
						||
| 
								 | 
							
									la sp, _sp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Load data section */
							 | 
						||
| 
								 | 
							
									la a0, _data_lma
							 | 
						||
| 
								 | 
							
									la a1, _data
							 | 
						||
| 
								 | 
							
									la a2, _edata
							 | 
						||
| 
								 | 
							
									bgeu a1, a2, 2f
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
									lw t0, (a0)
							 | 
						||
| 
								 | 
							
									sw t0, (a1)
							 | 
						||
| 
								 | 
							
									addi a0, a0, 4
							 | 
						||
| 
								 | 
							
									addi a1, a1, 4
							 | 
						||
| 
								 | 
							
									bltu a1, a2, 1b
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* Clear bss section */
							 | 
						||
| 
								 | 
							
									la a0, __bss_start
							 | 
						||
| 
								 | 
							
									la a1, _end
							 | 
						||
| 
								 | 
							
									bgeu a0, a1, 2f
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
									sw zero, (a0)
							 | 
						||
| 
								 | 
							
									addi a0, a0, 4
							 | 
						||
| 
								 | 
							
									bltu a0, a1, 1b
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* init function*/
							 | 
						||
| 
								 | 
							
								    call _init_1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __riscv_float_abi_soft
							 | 
						||
| 
								 | 
							
									/* Enable FPU */
							 | 
						||
| 
								 | 
							
									li t0, MSTATUS_FS
							 | 
						||
| 
								 | 
							
									csrs mstatus, t0
							 | 
						||
| 
								 | 
							
									csrr t1, mstatus
							 | 
						||
| 
								 | 
							
									and t1, t1, t0
							 | 
						||
| 
								 | 
							
									beqz t1, 1f
							 | 
						||
| 
								 | 
							
									fssr x0
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/* argc = argv = 0 */
							 | 
						||
| 
								 | 
							
									li a0, 0
							 | 
						||
| 
								 | 
							
									li a1, 0
							 | 
						||
| 
								 | 
							
									call main
							 | 
						||
| 
								 | 
							
								#	tail exit
							 | 
						||
| 
								 | 
							
								1:  j 1b
							 |