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 |