1#!/usr/local/bin/perl
2# alpha assember
3
4sub bn_sqr_words
5	{
6	local($name)=@_;
7	local($cc,$a,$b,$r,$couny);
8
9	&init_pool(3);
10	($cc)=GR("r0");
11
12	$rp=&wparam(0);
13	$ap=&wparam(1);
14	$count=&wparam(2);
15
16	&function_begin($name,"");
17
18	&comment("");
19	&sub($count,4,$count);
20	&mov("zero",$cc);
21	&br(&label("finish"));
22	&blt($count,&label("finish"));
23
24	($a0,$r0)=&NR(2);
25	&ld($a0,&QWPw(0,$ap));
26	&ld($r0,&QWPw(0,$rp));
27
28$a=<<'EOF';
29##########################################################
30	&set_label("loop");
31
32	($a1)=&NR(1); &ld($a1,&QWPw(1,$ap));
33	($b1)=&NR(1); &ld($b1,&QWPw(1,$bp));
34	($a2)=&NR(1); &ld($a2,&QWPw(2,$ap));
35	($b2)=&NR(1); &ld($b2,&QWPw(2,$bp));
36	($a3)=&NR(1); &ld($a3,&QWPw(3,$ap));
37	($b3)=&NR(1); &ld($b3,&QWPw(3,$bp));
38
39	($o0,$t0)=&NR(2);
40	&add($a0,$b0,$o0);
41	&cmpult($o0,$b0,$t0);
42	&add($o0,$cc,$o0);
43	&cmpult($o0,$cc,$cc);
44	&add($cc,$t0,$cc);	&FR($t0);
45
46	($t1,$o1)=&NR(2);
47
48	&add($a1,$b1,$o1);	&FR($a1);
49	&cmpult($o1,$b1,$t1);	&FR($b1);
50	&add($o1,$cc,$o1);
51	&cmpult($o1,$cc,$cc);
52	&add($cc,$t1,$cc);	&FR($t1);
53
54	($t2,$o2)=&NR(2);
55
56	&add($a2,$b2,$o2);	&FR($a2);
57	&cmpult($o2,$b2,$t2);	&FR($b2);
58	&add($o2,$cc,$o2);
59	&cmpult($o2,$cc,$cc);
60	&add($cc,$t2,$cc);	&FR($t2);
61
62	($t3,$o3)=&NR(2);
63
64	&add($a3,$b3,$o3);	&FR($a3);
65	&cmpult($o3,$b3,$t3);	&FR($b3);
66	&add($o3,$cc,$o3);
67	&cmpult($o3,$cc,$cc);
68	&add($cc,$t3,$cc);	&FR($t3);
69
70	&st($o0,&QWPw(0,$rp)); &FR($o0);
71	&st($o1,&QWPw(0,$rp)); &FR($o1);
72	&st($o2,&QWPw(0,$rp)); &FR($o2);
73	&st($o3,&QWPw(0,$rp)); &FR($o3);
74
75	&sub($count,4,$count);	# count-=4
76	&add($ap,4*$QWS,$ap);	# count+=4
77	&add($bp,4*$QWS,$bp);	# count+=4
78	&add($rp,4*$QWS,$rp);	# count+=4
79
80	&blt($count,&label("finish"));
81	&ld($a0,&QWPw(0,$ap));
82	 &ld($b0,&QWPw(0,$bp));
83	&br(&label("loop"));
84EOF
85##################################################
86	# Do the last 0..3 words
87
88	&set_label("last_loop");
89
90	&ld(($a0)=&NR(1),&QWPw(0,$ap));	# get a
91	&mul($a0,$a0,($l0)=&NR(1));
92	 &add($ap,$QWS,$ap);
93	 &add($rp,2*$QWS,$rp);
94	 &sub($count,1,$count);
95	&muh($a0,$a0,($h0)=&NR(1));	&FR($a0);
96	&st($l0,&QWPw(-2,$rp));		&FR($l0);
97	&st($h0,&QWPw(-1,$rp));		&FR($h0);
98
99	&bgt($count,&label("last_loop"));
100	&function_end_A($name);
101
102######################################################
103	&set_label("finish");
104	&add($count,4,$count);
105	&bgt($count,&label("last_loop"));
106
107	&set_label("end");
108	&function_end($name);
109
110	&fin_pool;
111	}
112
1131;
114