blob: 992c8948e252b6cae2bf186c2589f5fdb44d8d91 [file] [log] [blame]
%verify "executed"
%verify "basic lt, gt, eq */
%verify "left arg NaN"
%verify "right arg NaN"
/*
* Compare two floating-point values. Puts 0, 1, or -1 into the
* destination register based on the results of the comparison.
*
* int compare(x, y) {
* if (x == y) {
* return 0;
* } else if (x < y) {
* return -1;
* } else if (x > y) {
* return 1;
* } else {
* return 1;
* }
* }
*
* On entry:
* r0 = &op1 [vBB]
* r1 = &op2 [vCC]
*/
/* op vAA, vBB, vCC */
fldd d0, [r0] @ d0<- vBB
fldd d1, [r1] @ d1<- vCC
fcmpd d0, d1 @ compare (vBB, vCC)
mov r0, #1 @ r0<- 1 (default)
fmstat @ export status flags
mvnmi r0, #0 @ (less than) r0<- -1
moveq r0, #0 @ (equal) r0<- 0
bx lr