Changeset a35b458 in mainline for uspace/lib/softfloat/comparison.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/softfloat/comparison.c
r3061bc1 ra35b458 190 190 uint64_t tmp_hi; 191 191 uint64_t tmp_lo; 192 192 193 193 and128(ld.bin.hi, ld.bin.lo, 194 194 0x7FFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, &tmp_hi, &tmp_lo); 195 195 196 196 return eq128(tmp_hi, tmp_lo, 0x0ll, 0x0ll); 197 197 } … … 236 236 uint64_t tmp_hi; 237 237 uint64_t tmp_lo; 238 238 239 239 /* both are zeros (with any sign) */ 240 240 or128(a.bin.hi, a.bin.lo, … … 243 243 0x7FFFFFFFFFFFFFFFll, 0xFFFFFFFFFFFFFFFFll, &tmp_hi, &tmp_lo); 244 244 int both_zero = eq128(tmp_hi, tmp_lo, 0x0ll, 0x0ll); 245 245 246 246 /* a equals to b */ 247 247 int are_equal = eq128(a.bin.hi, a.bin.lo, b.bin.hi, b.bin.lo); 248 248 249 249 return are_equal || both_zero; 250 250 } … … 263 263 return 0; 264 264 } 265 265 266 266 if ((a.parts.sign) && (b.parts.sign)) { 267 267 /* if both are negative, smaller is that with greater binary value */ 268 268 return (a.bin > b.bin); 269 269 } 270 270 271 271 /* 272 272 * lets negate signs - now will be positive numbers always … … 292 292 return 0; 293 293 } 294 294 295 295 if ((a.parts.sign) && (b.parts.sign)) { 296 296 /* if both are negative, smaller is that with greater binary value */ 297 297 return (a.bin > b.bin); 298 298 } 299 299 300 300 /* 301 301 * lets negate signs - now will be positive numbers always … … 319 319 uint64_t tmp_hi; 320 320 uint64_t tmp_lo; 321 321 322 322 or128(a.bin.hi, a.bin.lo, 323 323 b.bin.hi, b.bin.lo, &tmp_hi, &tmp_lo); … … 328 328 return 0; 329 329 } 330 330 331 331 if ((a.parts.sign) && (b.parts.sign)) { 332 332 /* if both are negative, smaller is that with greater binary value */ 333 333 return lt128(b.bin.hi, b.bin.lo, a.bin.hi, a.bin.lo); 334 334 } 335 335 336 336 /* 337 337 * lets negate signs - now will be positive numbers always … … 357 357 return 0; 358 358 } 359 359 360 360 if ((a.parts.sign) && (b.parts.sign)) { 361 361 /* if both are negative, greater is that with smaller binary value */ 362 362 return (a.bin < b.bin); 363 363 } 364 364 365 365 /* 366 366 * lets negate signs - now will be positive numbers always … … 386 386 return 0; 387 387 } 388 388 389 389 if ((a.parts.sign) && (b.parts.sign)) { 390 390 /* if both are negative, greater is that with smaller binary value */ 391 391 return (a.bin < b.bin); 392 392 } 393 393 394 394 /* 395 395 * lets negate signs - now will be positive numbers always … … 413 413 uint64_t tmp_hi; 414 414 uint64_t tmp_lo; 415 415 416 416 or128(a.bin.hi, a.bin.lo, 417 417 b.bin.hi, b.bin.lo, &tmp_hi, &tmp_lo); … … 422 422 return 0; 423 423 } 424 424 425 425 if ((a.parts.sign) && (b.parts.sign)) { 426 426 /* if both are negative, greater is that with smaller binary value */ 427 427 return lt128(a.bin.hi, a.bin.lo, b.bin.hi, b.bin.lo); 428 428 } 429 429 430 430 /* 431 431 * lets negate signs - now will be positive numbers always … … 444 444 float32_u ua; 445 445 ua.val = a; 446 446 447 447 float32_u ub; 448 448 ub.val = b; 449 449 450 450 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 451 451 // TODO: sigNaNs 452 452 return -1; 453 453 } 454 454 455 455 if (is_float32_gt(ua.data, ub.data)) 456 456 return 1; 457 457 458 458 return 0; 459 459 } … … 463 463 float32_u ua; 464 464 ua.val = a; 465 465 466 466 float32_u ub; 467 467 ub.val = b; 468 468 469 469 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 470 470 // TODO: sigNaNs 471 471 return -1; 472 472 } 473 473 474 474 if (is_float32_eq(ua.data, ub.data)) 475 475 return 0; 476 476 477 477 if (is_float32_gt(ua.data, ub.data)) 478 478 return 1; 479 479 480 480 return -1; 481 481 } … … 485 485 float32_u ua; 486 486 ua.val = a; 487 487 488 488 float32_u ub; 489 489 ub.val = b; 490 490 491 491 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 492 492 // TODO: sigNaNs 493 493 return 1; 494 494 } 495 495 496 496 if (is_float32_lt(ua.data, ub.data)) 497 497 return -1; 498 498 499 499 return 0; 500 500 } … … 504 504 float32_u ua; 505 505 ua.val = a; 506 506 507 507 float32_u ub; 508 508 ub.val = b; 509 509 510 510 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 511 511 // TODO: sigNaNs 512 512 return 1; 513 513 } 514 514 515 515 if (is_float32_eq(ua.data, ub.data)) 516 516 return 0; 517 517 518 518 if (is_float32_lt(ua.data, ub.data)) 519 519 return -1; 520 520 521 521 return 1; 522 522 } … … 526 526 float32_u ua; 527 527 ua.val = a; 528 528 529 529 float32_u ub; 530 530 ub.val = b; 531 531 532 532 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 533 533 // TODO: sigNaNs 534 534 return 1; 535 535 } 536 536 537 537 return is_float32_eq(ua.data, ub.data) - 1; 538 538 } … … 548 548 float32_u ua; 549 549 ua.val = a; 550 550 551 551 float32_u ub; 552 552 ub.val = b; 553 553 554 554 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 555 555 /* No special constant for unordered - maybe signaled? */ 556 556 return 1; 557 557 } 558 558 559 559 if (is_float32_eq(ua.data, ub.data)) 560 560 return 0; 561 561 562 562 if (is_float32_lt(ua.data, ub.data)) 563 563 return -1; 564 564 565 565 return 1; 566 566 } … … 570 570 float32_u ua; 571 571 ua.val = a; 572 572 573 573 float32_u ub; 574 574 ub.val = b; 575 575 576 576 return ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))); 577 577 } … … 581 581 float32_u ua; 582 582 ua.val = a; 583 583 584 584 float32_u ub; 585 585 ub.val = b; 586 586 587 587 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 588 588 // TODO: sigNaNs 589 589 return -1; 590 590 } 591 591 592 592 if (is_float32_gt(ua.data, ub.data)) 593 593 return 1; 594 594 595 595 return 0; 596 596 } … … 600 600 float32_u ua; 601 601 ua.val = a; 602 602 603 603 float32_u ub; 604 604 ub.val = b; 605 605 606 606 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 607 607 // TODO: sigNaNs 608 608 return 1; 609 609 } 610 610 611 611 if (is_float32_lt(ua.data, ub.data)) 612 612 return -1; 613 613 614 614 return 0; 615 615 } … … 619 619 float32_u ua; 620 620 ua.val = a; 621 621 622 622 float32_u ub; 623 623 ub.val = b; 624 624 625 625 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 626 626 // TODO: sigNaNs 627 627 return -1; 628 628 } 629 629 630 630 if (is_float32_eq(ua.data, ub.data)) 631 631 return 0; 632 632 633 633 if (is_float32_gt(ua.data, ub.data)) 634 634 return 1; 635 635 636 636 return -1; 637 637 } … … 641 641 float32_u ua; 642 642 ua.val = a; 643 643 644 644 float32_u ub; 645 645 ub.val = b; 646 646 647 647 if ((is_float32_nan(ua.data)) || (is_float32_nan(ub.data))) { 648 648 // TODO: sigNaNs 649 649 return 1; 650 650 } 651 651 652 652 return is_float32_eq(ua.data, ub.data) - 1; 653 653 } … … 661 661 float64_u ua; 662 662 ua.val = a; 663 663 664 664 float64_u ub; 665 665 ub.val = b; 666 666 667 667 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 668 668 // TODO: sigNaNs 669 669 return -1; 670 670 } 671 671 672 672 if (is_float64_gt(ua.data, ub.data)) 673 673 return 1; 674 674 675 675 return 0; 676 676 } … … 680 680 float64_u ua; 681 681 ua.val = a; 682 682 683 683 float64_u ub; 684 684 ub.val = b; 685 685 686 686 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 687 687 // TODO: sigNaNs 688 688 return -1; 689 689 } 690 690 691 691 if (is_float64_eq(ua.data, ub.data)) 692 692 return 0; 693 693 694 694 if (is_float64_gt(ua.data, ub.data)) 695 695 return 1; 696 696 697 697 return -1; 698 698 } … … 702 702 float64_u ua; 703 703 ua.val = a; 704 704 705 705 float64_u ub; 706 706 ub.val = b; 707 707 708 708 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 709 709 // TODO: sigNaNs 710 710 return 1; 711 711 } 712 712 713 713 if (is_float64_lt(ua.data, ub.data)) 714 714 return -1; 715 715 716 716 return 0; 717 717 } … … 721 721 float64_u ua; 722 722 ua.val = a; 723 723 724 724 float64_u ub; 725 725 ub.val = b; 726 726 727 727 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 728 728 // TODO: sigNaNs 729 729 return 1; 730 730 } 731 731 732 732 if (is_float64_eq(ua.data, ub.data)) 733 733 return 0; 734 734 735 735 if (is_float64_lt(ua.data, ub.data)) 736 736 return -1; 737 737 738 738 return 1; 739 739 } … … 743 743 float64_u ua; 744 744 ua.val = a; 745 745 746 746 float64_u ub; 747 747 ub.val = b; 748 748 749 749 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 750 750 // TODO: sigNaNs 751 751 return 1; 752 752 } 753 753 754 754 return is_float64_eq(ua.data, ub.data) - 1; 755 755 } … … 765 765 float64_u ua; 766 766 ua.val = a; 767 767 768 768 float64_u ub; 769 769 ub.val = b; 770 770 771 771 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 772 772 /* No special constant for unordered - maybe signaled? */ 773 773 return 1; 774 774 } 775 775 776 776 if (is_float64_eq(ua.data, ub.data)) 777 777 return 0; 778 778 779 779 if (is_float64_lt(ua.data, ub.data)) 780 780 return -1; 781 781 782 782 return 1; 783 783 } … … 787 787 float64_u ua; 788 788 ua.val = a; 789 789 790 790 float64_u ub; 791 791 ub.val = b; 792 792 793 793 return ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))); 794 794 } … … 798 798 float64_u ua; 799 799 ua.val = a; 800 800 801 801 float64_u ub; 802 802 ub.val = b; 803 803 804 804 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 805 805 // TODO: sigNaNs 806 806 return 1; 807 807 } 808 808 809 809 if (is_float64_lt(ua.data, ub.data)) 810 810 return -1; 811 811 812 812 return 0; 813 813 } … … 817 817 float64_u ua; 818 818 ua.val = a; 819 819 820 820 float64_u ub; 821 821 ub.val = b; 822 822 823 823 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 824 824 // TODO: sigNaNs 825 825 return 1; 826 826 } 827 827 828 828 return is_float64_eq(ua.data, ub.data) - 1; 829 829 } … … 833 833 float64_u ua; 834 834 ua.val = a; 835 835 836 836 float64_u ub; 837 837 ub.val = b; 838 838 839 839 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 840 840 // TODO: sigNaNs 841 841 return -1; 842 842 } 843 843 844 844 if (is_float64_gt(ua.data, ub.data)) 845 845 return 1; 846 846 847 847 return 0; 848 848 } … … 852 852 float64_u ua; 853 853 ua.val = a; 854 854 855 855 float64_u ub; 856 856 ub.val = b; 857 857 858 858 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 859 859 // TODO: sigNaNs 860 860 return -1; 861 861 } 862 862 863 863 if (is_float64_eq(ua.data, ub.data)) 864 864 return 0; 865 865 866 866 if (is_float64_gt(ua.data, ub.data)) 867 867 return 1; 868 868 869 869 return -1; 870 870 } … … 874 874 float64_u ua; 875 875 ua.val = a; 876 876 877 877 float64_u ub; 878 878 ub.val = b; 879 879 880 880 if ((is_float64_nan(ua.data)) || (is_float64_nan(ub.data))) { 881 881 // TODO: sigNaNs 882 882 return 1; 883 883 } 884 884 885 885 if (is_float64_eq(ua.data, ub.data)) 886 886 return 0; 887 887 888 888 if (is_float64_lt(ua.data, ub.data)) 889 889 return -1; 890 890 891 891 return 1; 892 892 } … … 900 900 float128_u ua; 901 901 ua.val = a; 902 903 float128_u ub; 904 ub.val = b; 905 902 903 float128_u ub; 904 ub.val = b; 905 906 906 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 907 907 // TODO: sigNaNs 908 908 return -1; 909 909 } 910 910 911 911 if (is_float128_gt(ua.data, ub.data)) 912 912 return 1; 913 913 914 914 return 0; 915 915 } … … 919 919 float128_u ua; 920 920 ua.val = a; 921 922 float128_u ub; 923 ub.val = b; 924 921 922 float128_u ub; 923 ub.val = b; 924 925 925 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 926 926 // TODO: sigNaNs 927 927 return -1; 928 928 } 929 929 930 930 if (is_float128_eq(ua.data, ub.data)) 931 931 return 0; 932 932 933 933 if (is_float128_gt(ua.data, ub.data)) 934 934 return 1; 935 935 936 936 return -1; 937 937 } … … 941 941 float128_u ua; 942 942 ua.val = a; 943 944 float128_u ub; 945 ub.val = b; 946 943 944 float128_u ub; 945 ub.val = b; 946 947 947 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 948 948 // TODO: sigNaNs 949 949 return 1; 950 950 } 951 951 952 952 if (is_float128_lt(ua.data, ub.data)) 953 953 return -1; 954 954 955 955 return 0; 956 956 } … … 960 960 float128_u ua; 961 961 ua.val = a; 962 963 float128_u ub; 964 ub.val = b; 965 962 963 float128_u ub; 964 ub.val = b; 965 966 966 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 967 967 // TODO: sigNaNs 968 968 return 1; 969 969 } 970 970 971 971 if (is_float128_eq(ua.data, ub.data)) 972 972 return 0; 973 973 974 974 if (is_float128_lt(ua.data, ub.data)) 975 975 return -1; 976 976 977 977 return 1; 978 978 } … … 982 982 float128_u ua; 983 983 ua.val = a; 984 985 float128_u ub; 986 ub.val = b; 987 984 985 float128_u ub; 986 ub.val = b; 987 988 988 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 989 989 // TODO: sigNaNs 990 990 return 1; 991 991 } 992 992 993 993 return is_float128_eq(ua.data, ub.data) - 1; 994 994 } … … 1004 1004 float128_u ua; 1005 1005 ua.val = a; 1006 1007 float128_u ub; 1008 ub.val = b; 1009 1006 1007 float128_u ub; 1008 ub.val = b; 1009 1010 1010 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) { 1011 1011 /* No special constant for unordered - maybe signaled? */ 1012 1012 return 1; 1013 1013 } 1014 1014 1015 1015 if (is_float128_eq(ua.data, ub.data)) 1016 1016 return 0; 1017 1017 1018 1018 if (is_float128_lt(ua.data, ub.data)) 1019 1019 return -1; 1020 1020 1021 1021 return 1; 1022 1022 } … … 1026 1026 float128_u ua; 1027 1027 ua.val = a; 1028 1029 float128_u ub; 1030 ub.val = b; 1031 1028 1029 float128_u ub; 1030 ub.val = b; 1031 1032 1032 return ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))); 1033 1033 } … … 1037 1037 float128_u ua; 1038 1038 ua.val = *a; 1039 1039 1040 1040 float128_u ub; 1041 1041 ub.val = *b; 1042 1042 1043 1043 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1044 1044 return 3; 1045 1045 1046 1046 if (is_float128_eq(ua.data, ub.data)) 1047 1047 return 0; 1048 1048 1049 1049 if (is_float128_lt(ua.data, ub.data)) 1050 1050 return 1; 1051 1051 1052 1052 return 2; 1053 1053 } … … 1063 1063 float128_u ua; 1064 1064 ua.val = *a; 1065 1065 1066 1066 float128_u ub; 1067 1067 ub.val = *b; 1068 1068 1069 1069 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1070 1070 return 0; 1071 1071 1072 1072 return is_float128_gt(ua.data, ub.data); 1073 1073 } … … 1077 1077 float128_u ua; 1078 1078 ua.val = *a; 1079 1079 1080 1080 float128_u ub; 1081 1081 ub.val = *b; 1082 1082 1083 1083 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1084 1084 return 0; 1085 1085 1086 1086 return is_float128_eq(ua.data, ub.data) || 1087 1087 is_float128_gt(ua.data, ub.data); … … 1092 1092 float128_u ua; 1093 1093 ua.val = *a; 1094 1094 1095 1095 float128_u ub; 1096 1096 ub.val = *b; 1097 1097 1098 1098 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1099 1099 return 0; 1100 1100 1101 1101 return is_float128_lt(ua.data, ub.data); 1102 1102 } … … 1106 1106 float128_u ua; 1107 1107 ua.val = *a; 1108 1108 1109 1109 float128_u ub; 1110 1110 ub.val = *b; 1111 1111 1112 1112 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1113 1113 return 0; 1114 1114 1115 1115 return is_float128_eq(ua.data, ub.data) || 1116 1116 is_float128_lt(ua.data, ub.data); … … 1121 1121 float128_u ua; 1122 1122 ua.val = *a; 1123 1123 1124 1124 float128_u ub; 1125 1125 ub.val = *b; 1126 1126 1127 1127 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1128 1128 return 0; 1129 1129 1130 1130 return is_float128_eq(ua.data, ub.data); 1131 1131 } … … 1135 1135 float128_u ua; 1136 1136 ua.val = *a; 1137 1137 1138 1138 float128_u ub; 1139 1139 ub.val = *b; 1140 1140 1141 1141 if ((is_float128_nan(ua.data)) || (is_float128_nan(ub.data))) 1142 1142 return 0; 1143 1143 1144 1144 return !is_float128_eq(ua.data, ub.data); 1145 1145 }
Note:
See TracChangeset
for help on using the changeset viewer.