~andersk/ubuntu/oneiric/openssl/spurious-reboot

« back to all changes in this revision

Viewing changes to crypto/bn/asm/alpha/sqr.pl

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Martin
  • Date: 2004-05-24 17:02:29 UTC
  • Revision ID: james.westby@ubuntu.com-20040524170229-ixlo08bbbly0xied
Tags: upstream-0.9.7d
ImportĀ upstreamĀ versionĀ 0.9.7d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/local/bin/perl
 
2
# alpha assember 
 
3
 
 
4
sub 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"));
 
84
EOF
 
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
 
 
113
1;