64 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|   | 	.align	32
 | ||
|  | 	.globl	__flushw_user
 | ||
|  | 	.type	__flushw_user,#function | ||
|  | __flushw_user: | ||
|  | 	rdpr	%otherwin, %g1 | ||
|  | 	brz,pn	%g1, 2f | ||
|  | 	 clr	%g2 | ||
|  | 1:	save	%sp, -128, %sp | ||
|  | 	rdpr	%otherwin, %g1 | ||
|  | 	brnz,pt	%g1, 1b | ||
|  | 	 add	%g2, 1, %g2 | ||
|  | 1:	sub	%g2, 1, %g2 | ||
|  | 	brnz,pt	%g2, 1b | ||
|  | 	 restore %g0, %g0, %g0 | ||
|  | 2:	retl | ||
|  | 	 nop | ||
|  | 	.size	__flushw_user,.-__flushw_user | ||
|  | 
 | ||
|  | 	/* Flush %fp and %i7 to the stack for all register | ||
|  | 	 * windows active inside of the cpu.  This allows | ||
|  | 	 * show_stack_trace() to avoid using an expensive | ||
|  | 	 * 'flushw'. | ||
|  | 	 */ | ||
|  | 	.globl		stack_trace_flush
 | ||
|  | 	.type		stack_trace_flush,#function | ||
|  | stack_trace_flush: | ||
|  | 	rdpr		%pstate, %o0 | ||
|  | 	wrpr		%o0, PSTATE_IE, %pstate | ||
|  | 
 | ||
|  | 	rdpr		%cwp, %g1 | ||
|  | 	rdpr		%canrestore, %g2 | ||
|  | 	sub		%g1, 1, %g3 | ||
|  | 
 | ||
|  | 1:	brz,pn		%g2, 2f | ||
|  | 	 sub		%g2, 1, %g2 | ||
|  | 	wrpr		%g3, %cwp | ||
|  | 	stx		%fp, [%sp + STACK_BIAS + RW_V9_I6] | ||
|  | 	stx		%i7, [%sp + STACK_BIAS + RW_V9_I7] | ||
|  | 	ba,pt		%xcc, 1b | ||
|  | 	 sub		%g3, 1, %g3 | ||
|  | 
 | ||
|  | 2:	wrpr		%g1, %cwp | ||
|  | 	wrpr		%o0, %pstate | ||
|  | 
 | ||
|  | 	retl | ||
|  | 	 nop | ||
|  | 	.size		stack_trace_flush,.-stack_trace_flush | ||
|  | 
 | ||
|  | #ifdef CONFIG_SMP | ||
|  | 	.globl		hard_smp_processor_id
 | ||
|  | 	.type		hard_smp_processor_id,#function | ||
|  | hard_smp_processor_id: | ||
|  | #endif | ||
|  | 	.globl		real_hard_smp_processor_id
 | ||
|  | 	.type		real_hard_smp_processor_id,#function | ||
|  | real_hard_smp_processor_id: | ||
|  | 	__GET_CPUID(%o0) | ||
|  | 	retl | ||
|  | 	 nop | ||
|  | #ifdef CONFIG_SMP | ||
|  | 	.size		hard_smp_processor_id,.-hard_smp_processor_id | ||
|  | #endif | ||
|  | 	.size		real_hard_smp_processor_id,.-real_hard_smp_processor_id |