.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 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 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