| /* | 
 |  * 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 | 
 |  | 
 | ENTRY(_outsl) | 
 | 	CC = R2 == 0; | 
 | 	IF CC JUMP 1f; | 
 | 	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; | 
 | 1:	RTS; | 
 | ENDPROC(_outsl) | 
 |  | 
 | ENTRY(_outsw) | 
 | 	CC = R2 == 0; | 
 | 	IF CC JUMP 1f; | 
 | 	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; | 
 | 1:	RTS; | 
 | ENDPROC(_outsw) | 
 |  | 
 | ENTRY(_outsb) | 
 | 	CC = R2 == 0; | 
 | 	IF CC JUMP 1f; | 
 | 	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; | 
 | 1:	RTS; | 
 | ENDPROC(_outsb) | 
 |  | 
 | ENTRY(_outsw_8) | 
 | 	CC = R2 == 0; | 
 | 	IF CC JUMP 1f; | 
 | 	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; | 
 | 1:	RTS; | 
 | ENDPROC(_outsw_8) |