aboutsummaryrefslogtreecommitdiff
path: root/unix/as.vax/bitfields.s
blob: 5e28cd3df7c475023b54d408857a02d45001f49d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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