83 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *  linux/arch/m32r/mm/page.S
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Clear/Copy page with CPU
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Copyright (C) 2004  The Free Software Initiative of Japan
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Written by Niibe Yutaka
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This file is subject to the terms and conditions of the GNU General Public
							 | 
						||
| 
								 | 
							
								 * License.  See the file "COPYING" in the main directory of this archive
							 | 
						||
| 
								 | 
							
								 * for more details.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
									.text
							 | 
						||
| 
								 | 
							
									.global	copy_page
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									 * copy_page (to, from)
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * PAGE_SIZE = 4096-byte
							 | 
						||
| 
								 | 
							
									 * Cache line = 16-byte
							 | 
						||
| 
								 | 
							
									 * 16 * 256
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									.align	4
							 | 
						||
| 
								 | 
							
								copy_page:
							 | 
						||
| 
								 | 
							
									ldi	r2, #255
							 | 
						||
| 
								 | 
							
									ld	r3, @r0		/* cache line allocate */
							 | 
						||
| 
								 | 
							
									ld	r4, @r1+
							 | 
						||
| 
								 | 
							
									ld	r5, @r1+
							 | 
						||
| 
								 | 
							
									ld	r6, @r1+
							 | 
						||
| 
								 | 
							
									ld	r7, @r1+
							 | 
						||
| 
								 | 
							
									.fillinsn
							 | 
						||
| 
								 | 
							
								0:
							 | 
						||
| 
								 | 
							
									st	r4, @r0
							 | 
						||
| 
								 | 
							
									st	r5, @+r0
							 | 
						||
| 
								 | 
							
									st	r6, @+r0
							 | 
						||
| 
								 | 
							
									st	r7, @+r0
							 | 
						||
| 
								 | 
							
									ld	r4, @r1+
							 | 
						||
| 
								 | 
							
									addi	r0, #4
							 | 
						||
| 
								 | 
							
									ld	r5, @r1+
							 | 
						||
| 
								 | 
							
									ld	r6, @r1+
							 | 
						||
| 
								 | 
							
									ld	r7, @r1+
							 | 
						||
| 
								 | 
							
									ld	r3, @r0		/* cache line allocate */
							 | 
						||
| 
								 | 
							
									addi	r2, #-1
							 | 
						||
| 
								 | 
							
									bnez	r2, 0b
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									st	r4, @r0
							 | 
						||
| 
								 | 
							
									st	r5, @+r0
							 | 
						||
| 
								 | 
							
									st	r6, @+r0
							 | 
						||
| 
								 | 
							
									st	r7, @+r0
							 | 
						||
| 
								 | 
							
									jmp	r14
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									.text
							 | 
						||
| 
								 | 
							
									.global	clear_page
							 | 
						||
| 
								 | 
							
									/*
							 | 
						||
| 
								 | 
							
									 * clear_page (to)
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * PAGE_SIZE = 4096-byte
							 | 
						||
| 
								 | 
							
									 * Cache line = 16-byte
							 | 
						||
| 
								 | 
							
									 * 16 * 256
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									.align	4
							 | 
						||
| 
								 | 
							
								clear_page:
							 | 
						||
| 
								 | 
							
									ldi	r2, #255
							 | 
						||
| 
								 | 
							
									ldi	r4, #0
							 | 
						||
| 
								 | 
							
									ld	r3, @r0		/* cache line allocate */
							 | 
						||
| 
								 | 
							
									.fillinsn
							 | 
						||
| 
								 | 
							
								0:
							 | 
						||
| 
								 | 
							
									st	r4, @r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									addi	r0, #4
							 | 
						||
| 
								 | 
							
									ld	r3, @r0		/* cache line allocate */
							 | 
						||
| 
								 | 
							
									addi	r2, #-1
							 | 
						||
| 
								 | 
							
									bnez	r2, 0b
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									st	r4, @r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									st	r4, @+r0
							 | 
						||
| 
								 | 
							
									jmp	r14
							 |