65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
/*
 | 
						|
 * Implementation of outs{bwl} for BlackFin processors using zero overhead loops.
 | 
						|
 *
 | 
						|
 * Copyright 2005-2009 Analog Devices Inc.
 | 
						|
 *                2005 BuyWays BV
 | 
						|
 *                      Bas Vermeulen <bas@buyways.nl>
 | 
						|
 *
 | 
						|
 * Licensed under the GPL-2.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/linkage.h>
 | 
						|
 | 
						|
.align 2
 | 
						|
 | 
						|
.section .text._outsl
 | 
						|
ENTRY(_outsl)
 | 
						|
	P0 = R0;	/* P0 = port */
 | 
						|
	P1 = R1;	/* P1 = address */
 | 
						|
	P2 = R2;	/* P2 = count */
 | 
						|
 | 
						|
	LSETUP( .Llong_loop_s, .Llong_loop_e) LC0 = P2;
 | 
						|
.Llong_loop_s: R0 = [P1++];
 | 
						|
.Llong_loop_e: [P0] = R0;
 | 
						|
	RTS;
 | 
						|
ENDPROC(_outsl)
 | 
						|
 | 
						|
.section .text._outsw
 | 
						|
ENTRY(_outsw)
 | 
						|
	P0 = R0;	/* P0 = port */
 | 
						|
	P1 = R1;	/* P1 = address */
 | 
						|
	P2 = R2;	/* P2 = count */
 | 
						|
 | 
						|
	LSETUP( .Lword_loop_s, .Lword_loop_e) LC0 = P2;
 | 
						|
.Lword_loop_s: R0 = W[P1++];
 | 
						|
.Lword_loop_e: W[P0] = R0;
 | 
						|
	RTS;
 | 
						|
ENDPROC(_outsw)
 | 
						|
 | 
						|
.section .text._outsb
 | 
						|
ENTRY(_outsb)
 | 
						|
	P0 = R0;	/* P0 = port */
 | 
						|
	P1 = R1;	/* P1 = address */
 | 
						|
	P2 = R2;	/* P2 = count */
 | 
						|
 | 
						|
	LSETUP( .Lbyte_loop_s, .Lbyte_loop_e) LC0 = P2;
 | 
						|
.Lbyte_loop_s: R0 = B[P1++];
 | 
						|
.Lbyte_loop_e: B[P0] = R0;
 | 
						|
	RTS;
 | 
						|
ENDPROC(_outsb)
 | 
						|
 | 
						|
.section .text._outsw_8
 | 
						|
ENTRY(_outsw_8)
 | 
						|
	P0 = R0;	/* P0 = port */
 | 
						|
	P1 = R1;	/* P1 = address */
 | 
						|
	P2 = R2;	/* P2 = count */
 | 
						|
 | 
						|
	LSETUP( .Lword8_loop_s, .Lword8_loop_e) LC0 = P2;
 | 
						|
.Lword8_loop_s: R1 = B[P1++];
 | 
						|
		R0 = B[P1++];
 | 
						|
		R0 = R0 << 8;
 | 
						|
		R0 = R0 + R1;
 | 
						|
.Lword8_loop_e: W[P0] = R0;
 | 
						|
	RTS;
 | 
						|
ENDPROC(_outsw_8)
 |