1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
3 <html>
4
5 <head>
6 <title>cmp<kind></title>
7 <link rel=stylesheet href="opcode.css">
8 </head>
9
10 <body>
11
12 <h1>cmp<kind></h1>
13
14 <h2>Purpose</h2>
15
16 <p>
17 Perform the indicated floating point or long comparison, storing 0 if the two
18 arguments are equal, 1 if the second argument is larger, or -1 if the first
19 argument is larger. The "bias" listed for the floating point operations
20 indicates how NaN comparisons are treated: "Gt bias" instructions return 1 for
21 NaN comparisons, and "lt bias" instructions return -1.
22 </p>
23 <p>
24 For example, to check to see if floating point a < b, then it is advisable to
25 use cmpg-float; a result of -1 indicates that the test was true, and the other
26 values indicate it was false either due to a valid comparison or because one
27 or the other values was NaN.
28 </p>
29
30 <h2>Details</h2>
31
32 <table class="instruc">
33 <thead>
34 <tr>
35 <th>Op & Format</th>
36 <th>Mnemonic / Syntax</th>
37 <th>Arguments</th>
38 </tr>
39 </thead>
40 <tbody>
41 <tr>
42 <td>2d..31 23x</td>
43 <td>cmp<i>kind</i> vAA, vBB, vCC<br/>
44 2d: cmpl-float <i>(lt bias)</i><br/>
45 2e: cmpg-float <i>(gt bias)</i><br/>
46 2f: cmpl-double <i>(lt bias)</i><br/>
47 30: cmpg-double <i>(gt bias)</i><br/>
48 31: cmp-long
49 </td>
50 <td><code>A:</code> destination register (8 bits)<br/>
51 <code>B:</code> first source register or pair<br/>
52 <code>C:</code> second source register or pair</td>
53 </tr>
54 </tbody>
55 </table>
56
57 <h2>Constraints</h2>
58
59 <ul>
60 <li>
61 A, B and C must be valid register indices in the current stack frame.
62 </li>
63 <li>
64 For the two -float variants, both vB and vC must be of type float.
65 </li>
66 <li>
67 For the two -double variants, both vB and vC must be the lower part of a
68 register pair holding a double value.
69 </li>
70 <li>
71 For the -long variant, both both vB and vC must be the lower part of a
72 register pair holding a long value.
73 </li>
74 </ul>
75
76 <h2>Behavior</h2>
77
78 <ul>
79 <li>
80 The values of registers vB and vC are compared. The result, which is stored
81 in vA, is one of the following three:
82 <ul>
83 <li>
84 If vB < vC, then vA'=-1.
85
86
87 If vB == vC, then vA'=0.
88 </li>
89 <li>
90 If vC > vC, then vA'=1.
91 </li>
92 </ul>
93 </li>
94 <li>
95 For the -float and -double variants, an addition "bias" specifies what
96 happens if one or both of the arguments are NaN:
97 <ul>
98 <li>
99 A "lt bias" results in vA'=-1.
100 </li>
101 <li>
102 A "gt bias" results in vA'=1.
103 </li>
104 </ul>
105 </li>
106 <li>
107 If v(A-1) is the lower half of a register pair, v(A-1)' becomes undefined.
108 </li>
109 <li>
110 If v(A+1) is the upper half of a register pair, v(A+1)' becomes undefined.
111 </li>
112 </ul>
113
114 <h2>Exceptions</h2>
115
116 <p>
117 None.
118 </p>
119
120 </body>
121 </html>
122