23 character*1,
intent(in) :: in(*)
24 integer,
intent(inout) :: iout(*)
25 integer,
intent(in) :: iskip, nbits
45 character*1,
intent(in) :: in(*)
46 integer,
intent(inout) :: siout
47 integer,
intent(in) :: iskip, nbits
48 integer (kind = 4) :: iout(1)
69 character*1,
intent(in) :: in(*)
70 real (kind = 4), intent(out) :: rout(*)
71 integer,
intent(in) :: iskip, nbits, nskip, n
72 integer (kind = 4) :: iout(n)
75 call g2_gbytesc(in, iout, iskip, nbits, nskip, n)
78 rout(1:n) = transfer(iout, rout(1:n), n)
96 character*1,
intent(in) :: in(*)
97 integer,
intent(out) :: iout(*)
98 integer,
intent(in) :: iskip, nbits, nskip, n
99 integer :: tbit, bitcnt
100 integer,
parameter :: ones(8) = (/ 1, 3, 7, 15, 31, 63, 127, 255 /)
102 integer :: nbit, i, index, ibit, itmp
103 integer,
external :: g2_mova2i
111 nbit = nbit + nbits + nskip
114 tbit = min(bitcnt, 8 - ibit)
115 itmp = iand(g2_mova2i(in(index)), ones(8 - ibit))
116 if (tbit .ne. 8 - ibit) itmp = ishft(itmp, tbit - 8 + ibit)
118 bitcnt = bitcnt - tbit
121 do while (bitcnt .ge. 8)
122 itmp = ior(ishft(itmp,8), g2_mova2i(in(index)))
128 if (bitcnt .gt. 0)
then
129 itmp = ior(ishft(itmp, bitcnt), iand(ishft(g2_mova2i(in(index)), &
130 - (8 - bitcnt)), ones(bitcnt)))
154 character*1,
intent(in) :: in(*)
155 integer (kind = 8),
intent(inout) :: iout(*)
156 integer,
intent(in) :: iskip, nbits
175 character*1,
intent(in) :: in(*)
176 integer (kind = 8),
intent(out) :: iout(*)
177 integer,
intent(in) :: iskip, nbits, nskip, n
178 integer :: tbit, bitcnt
179 integer,
parameter :: ones(8) = (/ 1, 3, 7, 15, 31, 63, 127, 255 /)
181 integer :: nbit, i, index, ibit, itmp
182 integer (kind = 8) :: itmp8, itmp8_2, itmp8_3
183 integer,
external :: g2_mova2i
184 integer (kind = 8),
external :: g2_mova2i8
192 nbit = nbit + nbits + nskip
195 tbit = min(bitcnt, 8 - ibit)
196 itmp8 = iand(g2_mova2i8(in(index)), int(ones(8 - ibit), kind = 8))
197 itmp = iand(g2_mova2i(in(index)), ones(8 - ibit))
198 if (tbit .ne. 8 - ibit) itmp = ishft(itmp, tbit - 8 + ibit)
199 if (tbit .ne. 8 - ibit) itmp8 = ishft(itmp8, tbit - 8 + ibit)
201 bitcnt = bitcnt - tbit
204 do while (bitcnt .ge. 8)
205 itmp = ior(ishft(itmp,8), g2_mova2i(in(index)))
206 itmp8 = ior(ishft(itmp8,8), g2_mova2i8(in(index)))
212 if (bitcnt .gt. 0)
then
213 itmp = ior(ishft(itmp, bitcnt), iand(ishft(g2_mova2i(in(index)), - (8 - bitcnt)), ones(bitcnt)))
214 itmp8_2 = ishft(g2_mova2i8(in(index)), int(-(8 - bitcnt), kind(8)))
215 itmp8_3 = int(ones(bitcnt), kind(8))
216 itmp8 = ior(ishft(itmp8, bitcnt), iand(itmp8_2, itmp8_3))
240 character*1,
intent(inout) :: out(*)
241 integer,
intent(in) :: in(*)
242 integer,
intent(in) :: iskip, nbits
262 character*1,
intent(inout) :: out(*)
263 integer,
intent(in) :: in
264 integer,
intent(in) :: iskip, nbits
283 character*1,
intent(out) :: out(*)
284 real,
intent(in) :: rin(n)
285 integer,
intent(in) :: iskip, nbits, nskip, n
289 in(1:n) = transfer(rin, in(1:n), n)
292 call g2_sbytesc(out, in, iskip, nbits, nskip, n)
310 character*1,
intent(out) :: out(*)
311 integer,
intent(in) :: in(n)
312 integer,
intent(in) :: iskip, nbits, nskip, n
314 integer :: bitcnt, tbit
315 integer,
parameter :: ones(8)=(/ 1, 3, 7, 15, 31, 63, 127, 255/)
316 integer :: nbit, i, itmp, index, ibit, imask, itmp2, itmp3
317 integer,
external :: g2_mova2i
321 nbit = iskip + nbits - 1
328 nbit = nbit + nbits + nskip
332 if (ibit .ne. 7)
then
333 tbit = min(bitcnt, ibit + 1)
334 imask = ishft(ones(tbit), 7 - ibit)
335 itmp2 = iand(ishft(itmp, 7 - ibit),imask)
336 itmp3 = iand(g2_mova2i(out(index)), 255 - imask)
337 out(index) = char(ior(itmp2, itmp3))
338 bitcnt = bitcnt - tbit
339 itmp = ishft(itmp, -tbit)
346 do while (bitcnt .ge. 8)
347 out(index) = char(iand(itmp, 255))
349 itmp = ishft(itmp, -8)
355 if (bitcnt .gt. 0)
then
356 itmp2 = iand(itmp, ones(bitcnt))
358 itmp3 = iand(g2_mova2i(out(index)), 255 - ones(bitcnt))
359 out(index) = char(ior(itmp2, itmp3))
382 character*1,
intent(inout) :: out(*)
383 integer (kind = 8),
intent(in) :: in(*)
384 integer,
intent(in) :: iskip, nbits
404 character*1,
intent(out) :: out(*)
405 integer (kind = 8),
intent(in) :: in(n)
406 integer,
intent(in) :: iskip, nbits, nskip, n
408 integer :: bitcnt, tbit
409 integer,
parameter :: ones(8)=(/ 1, 3, 7, 15, 31, 63, 127, 255/)
410 integer :: nbit, i, index, ibit, imask, itmp1, itmp2, itmp3
411 integer (kind = 8) :: itmp8, itmp8_2
412 integer,
external :: g2_mova2i
416 nbit = iskip + nbits - 1
423 nbit = nbit + nbits + nskip
427 if (ibit .ne. 7)
then
428 tbit = min(bitcnt, ibit + 1)
429 imask = ishft(ones(tbit), 7 - ibit)
430 itmp1 = int(ishft(itmp8, int(7 - ibit, kind(8))), kind(4))
431 itmp2 = iand(itmp1, imask)
432 itmp3 = iand(g2_mova2i(out(index)), 255 - imask)
433 out(index) = char(ior(itmp2, itmp3))
434 bitcnt = bitcnt - tbit
435 itmp8 = ishft(itmp8, -tbit)
442 do while (bitcnt .ge. 8)
444 out(index) = char(iand(itmp8, 255_8))
445 itmp8 = ishft(itmp8, -8)
451 if (bitcnt .gt. 0)
then
452 itmp8_2 = int(ones(bitcnt), kind(8))
453 itmp2 = int(iand(itmp8, itmp8_2), kind(4))
454 itmp3 = iand(g2_mova2i(out(index)), 255 - ones(bitcnt))
455 out(index) = char(ior(itmp2, itmp3))
472 character(len = 1),
intent(in) :: cieee(*)
473 real,
intent(out) :: a(num)
474 integer,
intent(in) :: num
475 real (kind = 4) :: rieee(num)
477 rieee(1:num) = transfer(cieee(1:num * 4), rieee, num)
478 call rdieee(rieee, a, num)
494 real(4),
intent(in) :: rieee(num)
495 real,
intent(out) :: a(num)
496 integer,
intent(in) :: num
499 real,
parameter :: two23 = scale(1.0, -23)
500 real,
parameter :: two126 = scale(1.0, -126)
501 integer :: iexp, imant, isign, j
506 ieee = transfer(rieee(j), ieee)
509 isign = ibits(ieee, 31, 1)
510 iexp = ibits(ieee, 23, 8)
511 imant = ibits(ieee, 0, 23)
513 if (isign .eq. 1) sign = -1.0
515 if (iexp .gt. 0 .and. iexp .lt. 255)
then
516 temp = 2.0**(iexp - 127)
517 a(j) = sign * temp * (1.0 + (two23 * real(imant)))
518 elseif (iexp .eq. 0)
then
519 if (imant .ne. 0)
then
520 a(j) = sign * two126 * two23 * real(imant)
524 elseif (iexp .eq. 255)
then
525 a(j) = sign * huge(a(j))
542 real(4),
intent(in) :: a(num)
543 real(4),
intent(out) :: rieee(num)
544 integer,
intent(in) :: num
547 real,
parameter :: two23 = scale(1.0,23)
548 real,
parameter :: two126 = scale(1.0,126)
550 integer :: iexp, imant, j, n
556 if (a(j) .eq. 0.)
then
558 rieee(j) = transfer(ieee, rieee(j))
563 if (a(j) .lt. 0.0)
then
564 ieee = ibset(ieee, 31)
567 ieee = ibclr(ieee, 31)
572 if (atemp .ge. 1.0)
then
574 do while (2.0**(n+1) .le. atemp)
579 do while (2.0**n .gt. atemp )
584 if (n .gt. 127) iexp = 255
585 if (n .lt. -127) iexp = 0
586 call mvbits(iexp, 0, 8, ieee, 23)
589 if (iexp .ne. 255)
then
590 if (iexp .ne. 0)
then
591 atemp = (atemp / (2.0**n)) - 1.0
593 atemp = atemp * two126
595 imant = nint(atemp * two23)
600 call mvbits(imant, 0, 23, ieee, 0)
603 rieee(j) = transfer(ieee, rieee(j))
subroutine g2_gbytesc(in, iout, iskip, nbits, nskip, n)
Extract arbitrary size big-endian integer values (up to 32 bits each) from a packed bit string.
subroutine rdieee(rieee, a, num)
Copy array of 32-bit IEEE floating point values to local floating point representation.
subroutine g2_sbytesc8(out, in, iskip, nbits, nskip, n)
Put arbitrary sized (up to 64 bits each) values into a packed bit string, taking the low order bits f...
subroutine g2_gbytec(in, iout, iskip, nbits)
Extract one arbitrary size big-endian value (up to 32 bits) from a packed bit string into one element...
subroutine mkieee(a, rieee, num)
Copy an array of real to an array of 32-bit IEEE floating points.
subroutine g2_sbytescr(out, rin, iskip, nbits, nskip, n)
Put real values into a packed bit string in big-endian order.
subroutine g2_gbytec8(in, iout, iskip, nbits)
Extract one arbitrary sized (up to 64-bits) values from a packed bit string, right justifying each va...
subroutine g2_sbytec(out, in, iskip, nbits)
Put one arbitrary sized (up to 32 bits) value from an integer array, into a packed bit string,...
subroutine g2_sbytec1(out, in, iskip, nbits)
Put one arbitrary sized (up to 32 bits) values from an integer scalar into a packed bit string,...
subroutine rdieeec(cieee, a, num)
Copy array of 32-bit IEEE floating point values stored in char array to local floating point represen...
subroutine g2_gbytesc8(in, iout, iskip, nbits, nskip, n)
Extract arbitrary sized (up to 64-bits) values from a packed bit string, right justifying each value ...
subroutine g2_gbytescr(in, rout, iskip, nbits, nskip, n)
Extract big-endian floating-point values (32 bits each) from a packed bit string.
subroutine g2_sbytec8(out, in, iskip, nbits)
Put one arbitrary sized (up to 64 bits) values into a packed bit string, taking the low order bits fr...
subroutine g2_gbytec1(in, siout, iskip, nbits)
Extract one arbitrary size big-endian integer value (up to 32 bits) from a packed bit string into a s...
subroutine g2_sbytesc(out, in, iskip, nbits, nskip, n)
Put arbitrary size (up to 32 bits each) integer values into a packed bit string in big-endian order.