* * $Id: bunbyt.s,v 1.1.1.1 1996/03/08 15:21:59 mclareni Exp $ * * $Log: bunbyt.s,v $ * Revision 1.1.1.1 1996/03/08 15:21:59 mclareni * Epio * * #if defined(CERNLIB_UNIVAC) . EP UTILITY PROGRAM . SUBROUTINE BUNBYT(SOURCE,TARGET,NBYTES,NBITS,NSTART) MERGES THE . RIGHTMOST NBITS BITS OF EACH OF THE NBYTES WORDS OF SOURCE INTO . A CONTINUOUS BITSTRING STARTING AT BIT NSTART IN TARGET. . UNIVAC F T N VERSION BY B.S.NILSSON, NBI, MAY 1981 . AXR$ . $(0),SAVE + 0 . A6 SAVE AREA $(1),BUNBYT* . DL A1,2,A0 . LA A4,0,A1 . NBYTES TLE,U A4,1 . > 0 ? J 0,X11 . LA A5,0,A2 . NBITS TG,U A5,37 . > 36 ? J ERRBUN . TLE,U A5,1 . < 1 ? J ERRBUN . ANA,U A4,1 . LR R1,A4 . REPEAT COUNT LR R2,A5 . NBITS LA A1,4,A0 . LA A5,0,A1 . NSTART JGD A5,$+2 . < 1 ? J ERRBUN . SZ A4 . DI,U A4,36 . DL A0,0,A0 . AA A1,A4 . START WORD OF TARGET LXI,U A0,1 . LA,U A2,SAVE . SA A6,0,A2 . SAVE A6 LA A2,A5 . LEFT/RIGHT SHIFT LA A3,R2 . NBITS LOOP DL A5,0,A1 . LOOP, ONE PASS PER BYTE LA A4,0,*A0 . LDSC A5,0,A2 . SHIFT THE PIECES TOGETHER LSSL A5,0,A3 . DSL A4,0,A3 . DSC A5,0,A2 . DS A5,0,A1 . STORE BACK AA A2,R2 . CALCULATE SHIFTS FOR NEXT BYTE TLE,U A2,37 . NEW WORD ? JGD R1,LOOP . NO, REPEAT LOOP AA,U A1,1 . YES, UPDATE A1 AND A2 ANA,U A2,36 . JGD R1,LOOP . END OF LOOP RET LA,U A2,SAVE . RESTORE A6 LA A6,0,A2 . J 0,X11 . RETURN END . #endif