aboutsummaryrefslogtreecommitdiff
path: root/unix/as.vax/aluir.s
blob: 30a37d0df6f116d0bea49f5b711536396b2ec520 (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
43
44
45
46
47
48
49
50
51
52
53
54
# ALUIR -- Lookup an interpolate a vector of type real onto a real grid.
# [OBSOLETE - NO LONGER USED.  5/27/87]

	.data	0
	.align	2
	.text
	.globl	_aluir_

	.set	A,	4
	.set	B,	8
	.set	X,	12
	.set	NPIX,	16

	# ALUIR (a, b, x, npix)
	#
	# left = int (x[i])
	# tau = x[i] - left
	# b[i] = (a[left] * (1-tau)) + (a[left+1] * tau)
	#
	# registers:
	#	r0	max_b
	#	r1	a
	#	r2	b
	#	r3	x
	#	r4	x[i], tau
	#	r5	left
	#	r6

_aluir_:
	.word	0374			# save r2-r7
	subl3	$4, A(ap), r1
	movl	B(ap), r2
	movl	X(ap), r3
	mull3	$4, *NPIX(ap), r0
	addl2	r2, r0
L1:
	movf	(r3)+, r4		# get X into r4
	cvtfl	r4, r5			# r5 = left
	cvtlf	r5, r6
	subf2	r6, r4			# r4 = tau = (x[i] - left)

	movf	(r1)[r5], r6
	mulf3	r4, r6, r7
	subf2	r7, r6			# r6 = (a[left] * (1-tau))

	incl	r5
	mulf3	r4, (r1)[r5], r7	# r7 = (a[left+1] * tau)

	addf3	r6, r7, (r2)+		# output result to B

	cmpl	r2, r0
	blssu	L1

	ret