]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/tcgen/bitpos.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / tcgen / bitpos.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/02/15 17:49:41 mclareni
6* Kernlib
7*
8*
9#include "kerngen/pilot.h"
10 SUBROUTINE BITPOS(I,N,K,M)
11C
12C CERN PROGLIB# M508 BITPOS .VERSION KERNFOR 4.16 870601
13C ORIG. OCT 81, M.METCALF, CERN/DD
14C
15C TO INDICATE WHICH BITS IN A SERIES OF WORDS ARE SET.
16C BITS WITHIN A WORD ARE NUMBERED RIGHT-TO-LEFT, STARTING AT 0.
17C
18C I=INPUT WORDS
19C N=NO. OF BITS TO BE TESTED
20C K=POSITION ARRAY
21C M=NO. OF SET BITS IN THE FIRST N POSITIONS
22C
23#include "kerngen/wordsize.inc"
24 PARAMETER (LBIT = NBITPW)
25C
26 INTEGER I(*),K(*)
27 LOGICAL BTEST
28C
29C INITIALIZE
30 NWORD=(N-1)/LBIT+1
31 M=0
32 JND=1
33 NBIT = LBIT
34C
35C UNPACK EACH WORD
36 DO 1 MM=1,NWORD
37 NSET = 0
38 IMM = I(MM)
39 IF(MM.EQ.NWORD) NBIT=N-(NWORD-1)*LBIT
40 JU = JND-1
41C
42C LOCATE SET BITS
43 DO 4 MMU = 1,NBIT
44 IF (BTEST(IMM,0)) THEN
45 JU = JU+1
46 K(JU)=MMU-1
47 NSET = NSET+1
48 ENDIF
49 IMM = ISHFT(IMM,-1)
50 4 CONTINUE
51 9 M = JU
52 IF(MM.EQ.1) GO TO 2
53C
54C BIAS WORDS OTHER THAN THE FIRST
55 KND=JND+NSET-1
56 IBIAS=(MM-1)*LBIT
57 DO 3 NN=JND,KND
58 3 K(NN)=K(NN)+IBIAS
59 2 JND=JND+NSET
60 1 CONTINUE
61 END