63 lines
		
	
	
		
			875 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			875 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
 |