1d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee%verify "executed"
2d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee%verify "basic lt, gt, eq */
3d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee%verify "left arg NaN"
4d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee%verify "right arg NaN"
5d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    /*
6d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     * Compare two floating-point values.  Puts 0, 1, or -1 into the
7d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     * destination register based on the results of the comparison.
8d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *
9d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     * int compare(x, y) {
10d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *     if (x == y) {
11d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *         return 0;
12d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *     } else if (x > y) {
13d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *         return 1;
14d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *     } else if (x < y) {
15d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *         return -1;
16d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *     } else {
17d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *         return -1;
18d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *     }
19d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     * }
20d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     * On entry:
21d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *    r0 = &op1 [vBB]
22d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     *    r1 = &op2 [vCC]
23d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee     */
24d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    /* op vAA, vBB, vCC */
25d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    fldd    d0, [r0]                    @ d0<- vBB
26d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    fldd    d1, [r1]                    @ d1<- vCC
27d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    fcmped  d0, d1                      @ compare (vBB, vCC)
28d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    mvn     r0, #0                      @ r0<- -1 (default)
29d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    fmstat                              @ export status flags
30d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    movgt   r0, #1                      @ (greater than) r0<- 1
31d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    moveq   r0, #0                      @ (equal) r0<- 0
32d45ba37dd5aeb6b37dd3091a4d6fa0a87f75fdf9Bill Buzbee    bx      lr
33