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
							 |