63 lines
		
	
	
		
			978 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			978 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								// See LICENSE for license details.
							 | 
						||
| 
								 | 
							
								#include "encoding.h"
							 | 
						||
| 
								 | 
							
								    .section .init
							 | 
						||
| 
								 | 
							
								    .globl _start_2
							 | 
						||
| 
								 | 
							
								    .type _start_2,@function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_start_2:
							 | 
						||
| 
								 | 
							
								    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_2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#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
							 |