 510c72ad2d
			
		
	
	
	510c72ad2d
	
	
	
		
			
			There were a number of places that made evil PAGE_SIZE == 4k assumptions that ended up breaking when trying to play with 8k and 64k page sizes, this fixes those up. The most significant change is the way we load THREAD_SIZE, previously this was done via: mov #(THREAD_SIZE >> 8), reg shll8 reg to avoid a memory access and allow the immediate load. With a 64k PAGE_SIZE, we're out of range for the immediate load size without resorting to special instructions available in later ISAs (movi20s and so on). The "workaround" for this is to bump up the shift to 10 and insert a shll2, which gives a bit more flexibility while still being much cheaper than a memory access. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
		
			
				
	
	
		
			33 lines
		
	
	
	
		
			457 B
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			457 B
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| ! entry.S macro define
 | |
| 	
 | |
| 	.macro	cli
 | |
| 	stc	sr, r0
 | |
| 	or	#0xf0, r0
 | |
| 	ldc	r0, sr
 | |
| 	.endm
 | |
| 
 | |
| 	.macro	sti
 | |
| 	mov	#0xf0, r11
 | |
| 	extu.b	r11, r11
 | |
| 	not	r11, r11
 | |
| 	stc	sr, r10
 | |
| 	and	r11, r10
 | |
| #ifdef CONFIG_HAS_SR_RB
 | |
| 	stc	k_g_imask, r11
 | |
| 	or	r11, r10
 | |
| #endif
 | |
| 	ldc	r10, sr
 | |
| 	.endm
 | |
| 
 | |
| 	.macro	get_current_thread_info, ti, tmp
 | |
| #ifdef CONFIG_HAS_SR_RB
 | |
| 	stc	r7_bank, \ti
 | |
| #else
 | |
| 	mov	#((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp
 | |
| 	shll8	\tmp
 | |
| 	shll2	\tmp
 | |
| 	mov	r15, \ti
 | |
| 	and	\tmp, \ti
 | |
| #endif	
 | |
| 	.endm
 | |
| 
 |