diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /unix/as.vax/bitfields.s | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'unix/as.vax/bitfields.s')
-rw-r--r-- | unix/as.vax/bitfields.s | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/unix/as.vax/bitfields.s b/unix/as.vax/bitfields.s new file mode 100644 index 00000000..5e28cd3d --- /dev/null +++ b/unix/as.vax/bitfields.s @@ -0,0 +1,42 @@ +# BITFIELDS -- Routines for inserting and extracting bitfields into integers. + +# BITPAK -- Pack an integer into a bitfield of an array. Set all nbits +# bits regardless of the value of the integer. + + .text + .align 1 + .globl _bitpak_ + + # bitpak (intval, array, offset, nbits) + .set INTVAL, 4 + .set ARRAY, 8 + .set OFFSET, 12 # one-indexed bit offset + .set NBITS, 16 + +_bitpak_: + .word 0x0 + + subl3 $1, *OFFSET(ap), r1 + insv *INTVAL(ap), r1, *NBITS(ap), *ARRAY(ap) + ret + .data + +# BITUPK -- Unpack a bitfield from an array and return as the function +# value, an integer. Do not sign extend. + + .text + .align 1 + .globl _bitupk_ + + # bitupk (array, offset, nbits) + .set ARRAY, 4 + .set OFFSET, 8 # one-indexed bit offset + .set NBITS, 12 + +_bitupk_: + .word 0x0 + + subl3 $1, *OFFSET(ap), r1 + extzv r1, *NBITS(ap), *ARRAY(ap), r0 + ret + .data |