1print ".text\n\t.type _start,@", "function\n_start:\n\n";
2
3@sf = ( "", ".s0", ".s1", ".s2", ".s3" );
4
5# Arithmetic
6
7foreach $i ( "fma", "fma.s", "fma.d", "fpma",
8	     "fms", "fms.s", "fms.d", "fpms",
9	     "fnma", "fnma.s", "fnma.d", "fpnma" ) {
10  foreach $s (@sf) {
11    print "\t${i}${s} f4 = f5, f6, f7\n";
12  }
13  print "\n";
14}
15
16foreach $i ( "fmpy", "fmpy.s", "fmpy.d", "fpmpy",
17	     "fadd", "fadd.s", "fadd.d",
18	     "fsub", "fsub.s", "fsub.d",
19	     "fnmpy", "fnmpy.s", "fnmpy.d", "fpnmpy" ) {
20  foreach $s (@sf) {
21    print "\t${i}${s} f4 = f5, f6\n";
22  }
23  print "\n";
24}
25
26foreach $i ( "fnorm", "fnorm.s", "fnorm.d" ) {
27  foreach $s (@sf) {
28    print "\t${i}${s} f4 = f5\n";
29  }
30  print "\n";
31}
32
33# Fixed Point Multiply Add
34
35foreach $s ( ".l", ".lu", ".h", ".hu" ) {
36  print "\txma${s} f4 = f5, f6, f7\n";
37}
38print "\n";
39
40foreach $s ( ".l", ".lu", ".h", ".hu" ) {
41  print "\txmpy${s} f4 = f5, f6\n";
42}
43print "\n";
44
45# Parallel Floating Point Select
46
47print "\tfselect f4 = f5, f6, f7\n\n";
48
49# Floating Point Compare
50
51@cmp = ( ".eq", ".lt", ".le", ".unord", ".gt", ".ge", ".neq", ".nlt",
52	 ".nle", ".ngt", ".nge", ".ord" );
53
54@fctype = ( "", ".unc" );
55
56foreach $c (@cmp) {
57  foreach $u (@fctype) {
58    foreach $s (@sf) {
59      print "\tfcmp${c}${u}${s} p3, p4 = f4, f5\n";
60    }
61  }
62  print "\n";
63}
64
65# Floating Point Class
66
67foreach $u (@fctype) {
68  foreach $c ( '@nat', '@qnan', '@snan', '@pos', '@neg', '@unorm',
69	       '@norm', '@inf', '0x1ff' ) {
70    foreach $m ( ".m", ".nm" ) {
71      print "\tfclass${m}${u} p3, p4 = f4, $c\n";
72    }
73  }
74  print "\n";
75}
76
77# Approximation
78
79foreach $i ( "frcpa", "fprcpa" ) {
80  foreach $s (@sf) {
81    print "\t${i}${s} f4, p5 = f6, f7\n";
82  }
83  print "\n";
84}
85
86foreach $i ( "frsqrta", "fprsqrta" ) {
87  foreach $s (@sf) {
88    print "\t${i}${s} f4, p5 = f6\n";
89  }
90  print "\n";
91}
92
93# Min/Max
94
95foreach $i ( "fmin", "fmax", "famin", "famax",
96	     "fpmin", "fpmax", "fpamin", "fpamax" ) {
97  foreach $s (@sf) {
98    print "\t${i}${s} f4 = f5, f6\n";
99  }
100  print "\n";
101}
102
103# Parallel Compare
104
105foreach $c (@cmp) {
106  foreach $s (@sf) {
107    print "\tfpcmp${c}${s} f3 = f4, f5\n";
108  }
109  print "\n";
110}
111
112# Merge and Logical
113
114foreach $i ( "fmerge.s", "fmerge.ns", "fmerge.se", "fmix.lr", "fmix.r",
115	     "fmix.l", "fsxt.l", "fpack", "fswap", "fswap.nl", "fswap.nr",
116	     "fand", "fandcm", "for", "fxor", "fpmerge.s", "fpmerge.ns",
117	     "fpmerge.se" ) {
118  print "\t$i f4 = f5, f6\n";
119}
120print "\n";
121
122foreach $i ( "fabs", "fneg", "fnegabs", "fpabs", "fpneg", "fpnegabs" ) {
123  print "\t$i f4 = f5\n";
124}
125print "\n";
126
127# Convert Floating to Fixed
128
129foreach $b ( "fcvt", "fpcvt" ) {
130  foreach $f ( ".fx", ".fxu" ) {
131    foreach $t ( "", ".trunc" ) {
132      foreach $s (@sf) {
133	print "\t${b}${f}${t}${s} f4 = f5\n";
134      }
135      print "\n";
136    }
137  }
138}
139
140# Convert Fixed to Floating
141
142foreach $e ( ".xf", ".xuf" ) {
143  print "\tfcvt$e f4 = f5\n";
144}
145print "\n";
146
147# Set Controls
148
149foreach $s (@sf) {
150  print "\tfsetc$s 0, 0\n";
151  print "\tfsetc$s 0x3f, 0x3f\n";
152}
153print "\n";
154
155# Clear flags
156
157foreach $s (@sf) {
158  print "\tfclrf$s\n";
159}
160print "\n";
161
162# Check flags
163
164foreach $s (@sf) {
165  print "\tfchkf$s _start\n";
166}
167print "\n";
168
169# Misc
170
171print "\tbreak.f 0\n";
172print "\tnop.f 0;;\n";
173print "\n";
174
175