73 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|  | // See LICENSE for license details. | ||
|  | #include "encoding.h" | ||
|  |     .section .init | ||
|  |     .globl _start_3
 | ||
|  |     .type _start_3,@function
 | ||
|  | 
 | ||
|  | _start_3: | ||
|  |     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: | ||
|  |     /* Load iram section */ | ||
|  |     la a0, _iram_lma | ||
|  |     la a1, _iram_start | ||
|  |     la a2, _iram_end | ||
|  |     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_3 | ||
|  | 
 | ||
|  | #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 |