	.TITLE SWAPBYTES - SWAP 2 OR 4 BYTE QUANTITIES - JWB - 81-JUL-13
	.PSECT SWAP24,EXE,RD,NOWRT
;
;	SUBROUTINE SWAP2 (NWORDS,INBUF,  OUTBUF)
;
;	INPUTS:  NWORDS - NUMBER OF 2-BYTE WORDS TO SWAP
;		 INBUF  - INTEGER*2 - ORIGIN OF INPUT BUFFER CONTAINING
;			  WORDS TO BE SWAPPED
;	OUTPUT:  OUTBUF - INTEGER*2 - ORIGIN OF OUTPUT BUFFER CONTAINING RESULT
;
	.ENTRY SWAP2,^M<R6,R7,R8>
	MOVL	4(AP),R6		; ADDRESS OF NWORDS
	MOVL	(R6),R6			; NWORDS
	DECL	R6			; NWORDS-1
	ASHL	#1,R6,R6		; (NWORDS-1)*2
	MOVL	8(AP),R7		; ADDRESS OF INBUF
	MOVL	12(AP),R8		; ADDRESS OF OUTBUF
	CLRL	R1			; I = 0
LOOP2:	MOVW	(R7)+,R0		; TEMP = INBUF(I)
	MOVB	R0,1(R8)[R1]		; OUTBUF(I)[BYTE 2] = TEMP[BYTE 1]
	ROTL	#-8,R0,R0
	MOVB	R0,(R8)[R1]		; OUTBUF(I)[BYTE 1] = TEMP[BYTE 2]
	ACBL	R6,#2,R1,LOOP2		; LOOP FOR I=0,(NWORDS-1)*2,2
	RET
;
;	SUBROUTINE SWAP4 (NLWRDS,INBUF,  OUTBUF)	
;
;	INPUTS:  NLWRDS - NUMBER OF 4-BYTE LONGWORDS TO SWAP
;		 INBUF  - INTEGER*4 - ORIGIN OF INPUT BUFFER CONTAINING
;			  LONGWORDS TO BE SWAPPED
;	OUTPUT:  OUTBUF - INTEGER*4 - ORIGIN OF OUTPUT BUFFER CONTAINING RESULT
;
	.ENTRY SWAP4,^M<R6,R7,R8>
	MOVL	4(AP),R6		; ADDRESS OF NLWRDS
	MOVL	(R6),R6			; NLWRDS
	DECL	R6			; NLWRDS-1
	ASHL	#2,R6,R6		; (NLWRDS-1)*4
	MOVL	8(AP),R7		; ADDRESS OF INBUF
	MOVL	12(AP),R8		; ADDRESS OF OUTBUF
	CLRL	R1			; I = 0
LOOP4:	MOVL	(R7)+,R0		; TEMP = INBUF(I)
	MOVB	R0,3(R8)[R1]
	ROTL	#-8,R0,R0
	MOVB	R0,2(R8)[R1]
	ROTL	#-8,R0,R0
	MOVB	R0,1(R8)[R1]
	ROTL	#-8,R0,R0
	MOVB	R0,(R8)[R1]
	ACBL	R6,#4,R1,LOOP4		; LOOP FOR I=0,(NLWRDS-1)*4,4
	RET
	.END
