.TITLE SWAPW .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: SWAPW ; ; DATE: 08-NOV-79 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL SWAPW(VAR1,[VAR2,[NWORD]]) ; ; VAR1,VAR2 ; ; = VARIABLES OR ARRAYS TO BE SWAPPED. ; ; NWORD = NUMBER OF WORDS TO SWAP (DEFAULT=1). ; ; = 1 LOGICAL INTEGER ; = 2 INTEGER*4 REAL ; = 4 REAL*8 COMPLEX DOUBLE PRECISION ; ; ; DESCRIPTION: ; ; "SWAPW" PERFORMS A WORD-FOR-WORD SWAP OF TWO VARIABLES. THE ; NUMBER OF WORDS TO BE SWAPPED IS OPTIONALLY SET THROUGH THE "NWORD" ; PARAMETER (DEFAULT=1). THE NUMBER OF WORDS TO BE SWAPPED IS NORMALLY ; DEPENDENT UPON THE INPUT VARIABLE TYPES (SEE TABLE ABOVE). CALLING ; SWAPW WITH A SINGLE ARGUMENT CAUSES THE HIGH AND LOW ORDER WORDS OF ; THAT ARGUMENT TO BE SWAPPED. ; ; EXAMPLES: ; ; CALL SWAPW(INT1, INT2, 1) SWAP INTEGER VARIABLES ; CALL SWAPW(REAL1, REAL2, 2) SWAP REAL VARIABLES ; ; CALL SWAPW(INT*4) SWAP HI/LO WORDS ; ; .SBTTL ENTRY POINT -- WORD-FOR-WORD SWAP ; ; ; .PSECT ; ; SWAPW:: ; ; MOV 2(R5),R1 ; ADDRESS OF VAR1 TO R1 CMPB #1,(R5) ; SINGLE ARGUMENT? BEQ 4$ ; YES, ASSUME WORD SWAP MOV 4(R5),R2 ; ADDRESS OF VAR2 TO R2 MOV #1,R0 ; DEFAULT WORD COUNT TO R0 CMPB #3,(R5) ; THREE ARGUMENTS? BGT 2$ ; NO, USE DEFAULT WORD COUNT TST 6(R5) ; NULL ARGUMENT? BEQ 2$ ; YES, USE DEFAULT WORD COUNT MOV @6(R5),R0 ; WORD COUNT TO R0 ; 2$: MOV (R1),R3 ; VAR1 WORD TO TEMP MOV (R2),(R1)+ ; VAR2 WORD TO VAR1 MOV R3,(R2)+ ; TEMP WORD TO VAR2 SOB R0,2$ ; DECREMENT WORD COUNT AND BRANCH RTS PC ; RETURN TO CALLER ; 4$: MOV R1,R2 ; ADDRESS OF WORD1 TO R2 MOV (R1)+,R3 ; WORD1 TO TEMP MOV (R1),(R2) ; WORD2 TO WORD1 MOV R3,(R1) ; TEMP TO WORD2 RTS PC ; RETURN TO CALLER .END ;