decoder.isa (12136:1070125670e2) decoder.isa (12138:5f06b9aa2fde)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2015 RISC-V Foundation
4// Copyright (c) 2017 The University of Virginia
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions are

--- 770 unchanged lines hidden (view full) ---

779 0x10: decode FUNCT2 {
780 0x0: fmadd_s({{
781 uint32_t temp;
782 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
783 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
784 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
785 float fd;
786
1// -*- mode:c++ -*-
2
3// Copyright (c) 2015 RISC-V Foundation
4// Copyright (c) 2017 The University of Virginia
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions are

--- 770 unchanged lines hidden (view full) ---

779 0x10: decode FUNCT2 {
780 0x0: fmadd_s({{
781 uint32_t temp;
782 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
783 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
784 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
785 float fd;
786
787 if (isnan(fs1) || isnan(fs2) || isnan(fs3)) {
787 if (std::isnan(fs1) || std::isnan(fs2) ||
788 std::isnan(fs3)) {
788 if (issignalingnan(fs1) || issignalingnan(fs2)
789 || issignalingnan(fs3)) {
790 FFLAGS |= FloatInvalid;
791 }
792 fd = numeric_limits<float>::quiet_NaN();
789 if (issignalingnan(fs1) || issignalingnan(fs2)
790 || issignalingnan(fs3)) {
791 FFLAGS |= FloatInvalid;
792 }
793 fd = numeric_limits<float>::quiet_NaN();
793 } else if (isinf(fs1) || isinf(fs2) ||
794 isinf(fs3)) {
794 } else if (std::isinf(fs1) || std::isinf(fs2) ||
795 std::isinf(fs3)) {
795 if (signbit(fs1) == signbit(fs2)
796 if (signbit(fs1) == signbit(fs2)
796 && !isinf(fs3)) {
797 && !std::isinf(fs3)) {
797 fd = numeric_limits<float>::infinity();
798 } else if (signbit(fs1) != signbit(fs2)
798 fd = numeric_limits<float>::infinity();
799 } else if (signbit(fs1) != signbit(fs2)
799 && !isinf(fs3)) {
800 && !std::isinf(fs3)) {
800 fd = -numeric_limits<float>::infinity();
801 } else { // Fs3_sf is infinity
802 fd = fs3;
803 }
804 } else {
805 fd = fs1*fs2 + fs3;
806 }
807 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
808 }}, FloatMultOp);
809 0x1: fmadd_d({{
801 fd = -numeric_limits<float>::infinity();
802 } else { // Fs3_sf is infinity
803 fd = fs3;
804 }
805 } else {
806 fd = fs1*fs2 + fs3;
807 }
808 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
809 }}, FloatMultOp);
810 0x1: fmadd_d({{
810 if (isnan(Fs1) || isnan(Fs2) || isnan(Fs3)) {
811 if (std::isnan(Fs1) || std::isnan(Fs2) ||
812 std::isnan(Fs3)) {
811 if (issignalingnan(Fs1) || issignalingnan(Fs2)
812 || issignalingnan(Fs3)) {
813 FFLAGS |= FloatInvalid;
814 }
815 Fd = numeric_limits<double>::quiet_NaN();
813 if (issignalingnan(Fs1) || issignalingnan(Fs2)
814 || issignalingnan(Fs3)) {
815 FFLAGS |= FloatInvalid;
816 }
817 Fd = numeric_limits<double>::quiet_NaN();
816 } else if (isinf(Fs1) || isinf(Fs2) ||
817 isinf(Fs3)) {
818 } else if (std::isinf(Fs1) || std::isinf(Fs2) ||
819 std::isinf(Fs3)) {
818 if (signbit(Fs1) == signbit(Fs2)
820 if (signbit(Fs1) == signbit(Fs2)
819 && !isinf(Fs3)) {
821 && !std::isinf(Fs3)) {
820 Fd = numeric_limits<double>::infinity();
821 } else if (signbit(Fs1) != signbit(Fs2)
822 Fd = numeric_limits<double>::infinity();
823 } else if (signbit(Fs1) != signbit(Fs2)
822 && !isinf(Fs3)) {
824 && !std::isinf(Fs3)) {
823 Fd = -numeric_limits<double>::infinity();
824 } else {
825 Fd = Fs3;
826 }
827 } else {
828 Fd = Fs1*Fs2 + Fs3;
829 }
830 }}, FloatMultOp);
831 }
832 0x11: decode FUNCT2 {
833 0x0: fmsub_s({{
834 uint32_t temp;
835 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
836 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
837 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
838 float fd;
839
825 Fd = -numeric_limits<double>::infinity();
826 } else {
827 Fd = Fs3;
828 }
829 } else {
830 Fd = Fs1*Fs2 + Fs3;
831 }
832 }}, FloatMultOp);
833 }
834 0x11: decode FUNCT2 {
835 0x0: fmsub_s({{
836 uint32_t temp;
837 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
838 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
839 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
840 float fd;
841
840 if (isnan(fs1) || isnan(fs2) || isnan(fs3)) {
842 if (std::isnan(fs1) || std::isnan(fs2) ||
843 std::isnan(fs3)) {
841 if (issignalingnan(fs1) || issignalingnan(fs2)
842 || issignalingnan(fs3)) {
843 FFLAGS |= FloatInvalid;
844 }
845 fd = numeric_limits<float>::quiet_NaN();
844 if (issignalingnan(fs1) || issignalingnan(fs2)
845 || issignalingnan(fs3)) {
846 FFLAGS |= FloatInvalid;
847 }
848 fd = numeric_limits<float>::quiet_NaN();
846 } else if (isinf(fs1) || isinf(fs2) ||
847 isinf(fs3)) {
849 } else if (std::isinf(fs1) || std::isinf(fs2) ||
850 std::isinf(fs3)) {
848 if (signbit(fs1) == signbit(fs2)
851 if (signbit(fs1) == signbit(fs2)
849 && !isinf(fs3)) {
852 && !std::isinf(fs3)) {
850 fd = numeric_limits<float>::infinity();
851 } else if (signbit(fs1) != signbit(fs2)
853 fd = numeric_limits<float>::infinity();
854 } else if (signbit(fs1) != signbit(fs2)
852 && !isinf(fs3)) {
855 && !std::isinf(fs3)) {
853 fd = -numeric_limits<float>::infinity();
854 } else { // Fs3_sf is infinity
855 fd = -fs3;
856 }
857 } else {
858 fd = fs1*fs2 - fs3;
859 }
860 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
861 }}, FloatMultOp);
862 0x1: fmsub_d({{
856 fd = -numeric_limits<float>::infinity();
857 } else { // Fs3_sf is infinity
858 fd = -fs3;
859 }
860 } else {
861 fd = fs1*fs2 - fs3;
862 }
863 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
864 }}, FloatMultOp);
865 0x1: fmsub_d({{
863 if (isnan(Fs1) || isnan(Fs2) || isnan(Fs3)) {
866 if (std::isnan(Fs1) || std::isnan(Fs2) ||
867 std::isnan(Fs3)) {
864 if (issignalingnan(Fs1) || issignalingnan(Fs2)
865 || issignalingnan(Fs3)) {
866 FFLAGS |= FloatInvalid;
867 }
868 Fd = numeric_limits<double>::quiet_NaN();
868 if (issignalingnan(Fs1) || issignalingnan(Fs2)
869 || issignalingnan(Fs3)) {
870 FFLAGS |= FloatInvalid;
871 }
872 Fd = numeric_limits<double>::quiet_NaN();
869 } else if (isinf(Fs1) || isinf(Fs2) ||
870 isinf(Fs3)) {
873 } else if (std::isinf(Fs1) || std::isinf(Fs2) ||
874 std::isinf(Fs3)) {
871 if (signbit(Fs1) == signbit(Fs2)
875 if (signbit(Fs1) == signbit(Fs2)
872 && !isinf(Fs3)) {
876 && !std::isinf(Fs3)) {
873 Fd = numeric_limits<double>::infinity();
874 } else if (signbit(Fs1) != signbit(Fs2)
877 Fd = numeric_limits<double>::infinity();
878 } else if (signbit(Fs1) != signbit(Fs2)
875 && !isinf(Fs3)) {
879 && !std::isinf(Fs3)) {
876 Fd = -numeric_limits<double>::infinity();
877 } else {
878 Fd = -Fs3;
879 }
880 } else {
881 Fd = Fs1*Fs2 - Fs3;
882 }
883 }}, FloatMultOp);
884 }
885 0x12: decode FUNCT2 {
886 0x0: fnmsub_s({{
887 uint32_t temp;
888 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
889 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
890 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
891 float fd;
892
880 Fd = -numeric_limits<double>::infinity();
881 } else {
882 Fd = -Fs3;
883 }
884 } else {
885 Fd = Fs1*Fs2 - Fs3;
886 }
887 }}, FloatMultOp);
888 }
889 0x12: decode FUNCT2 {
890 0x0: fnmsub_s({{
891 uint32_t temp;
892 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
893 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
894 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
895 float fd;
896
893 if (isnan(fs1) || isnan(fs2) || isnan(fs3)) {
897 if (std::isnan(fs1) || std::isnan(fs2) ||
898 std::isnan(fs3)) {
894 if (issignalingnan(fs1) || issignalingnan(fs2)
895 || issignalingnan(fs3)) {
896 FFLAGS |= FloatInvalid;
897 }
898 fd = numeric_limits<float>::quiet_NaN();
899 if (issignalingnan(fs1) || issignalingnan(fs2)
900 || issignalingnan(fs3)) {
901 FFLAGS |= FloatInvalid;
902 }
903 fd = numeric_limits<float>::quiet_NaN();
899 } else if (isinf(fs1) || isinf(fs2) ||
900 isinf(fs3)) {
904 } else if (std::isinf(fs1) || std::isinf(fs2) ||
905 std::isinf(fs3)) {
901 if (signbit(fs1) == signbit(fs2)
906 if (signbit(fs1) == signbit(fs2)
902 && !isinf(fs3)) {
907 && !std::isinf(fs3)) {
903 fd = -numeric_limits<float>::infinity();
904 } else if (signbit(fs1) != signbit(fs2)
908 fd = -numeric_limits<float>::infinity();
909 } else if (signbit(fs1) != signbit(fs2)
905 && !isinf(fs3)) {
910 && !std::isinf(fs3)) {
906 fd = numeric_limits<float>::infinity();
907 } else { // Fs3_sf is infinity
908 fd = fs3;
909 }
910 } else {
911 fd = -(fs1*fs2 - fs3);
912 }
913 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
914 }}, FloatMultOp);
915 0x1: fnmsub_d({{
911 fd = numeric_limits<float>::infinity();
912 } else { // Fs3_sf is infinity
913 fd = fs3;
914 }
915 } else {
916 fd = -(fs1*fs2 - fs3);
917 }
918 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
919 }}, FloatMultOp);
920 0x1: fnmsub_d({{
916 if (isnan(Fs1) || isnan(Fs2) || isnan(Fs3)) {
921 if (std::isnan(Fs1) || std::isnan(Fs2) ||
922 std::isnan(Fs3)) {
917 if (issignalingnan(Fs1) || issignalingnan(Fs2)
918 || issignalingnan(Fs3)) {
919 FFLAGS |= FloatInvalid;
920 }
921 Fd = numeric_limits<double>::quiet_NaN();
923 if (issignalingnan(Fs1) || issignalingnan(Fs2)
924 || issignalingnan(Fs3)) {
925 FFLAGS |= FloatInvalid;
926 }
927 Fd = numeric_limits<double>::quiet_NaN();
922 } else if (isinf(Fs1) || isinf(Fs2)
923 || isinf(Fs3)) {
928 } else if (std::isinf(Fs1) || std::isinf(Fs2)
929 || std::isinf(Fs3)) {
924 if (signbit(Fs1) == signbit(Fs2)
930 if (signbit(Fs1) == signbit(Fs2)
925 && !isinf(Fs3)) {
931 && !std::isinf(Fs3)) {
926 Fd = -numeric_limits<double>::infinity();
927 } else if (signbit(Fs1) != signbit(Fs2)
932 Fd = -numeric_limits<double>::infinity();
933 } else if (signbit(Fs1) != signbit(Fs2)
928 && !isinf(Fs3)) {
934 && !std::isinf(Fs3)) {
929 Fd = numeric_limits<double>::infinity();
930 } else {
931 Fd = Fs3;
932 }
933 } else {
934 Fd = -(Fs1*Fs2 - Fs3);
935 }
936 }}, FloatMultOp);
937 }
938 0x13: decode FUNCT2 {
939 0x0: fnmadd_s({{
940 uint32_t temp;
941 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
942 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
943 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
944 float fd;
945
935 Fd = numeric_limits<double>::infinity();
936 } else {
937 Fd = Fs3;
938 }
939 } else {
940 Fd = -(Fs1*Fs2 - Fs3);
941 }
942 }}, FloatMultOp);
943 }
944 0x13: decode FUNCT2 {
945 0x0: fnmadd_s({{
946 uint32_t temp;
947 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
948 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
949 float fs3 = reinterpret_cast<float&>(temp = Fs3_bits);
950 float fd;
951
946 if (isnan(fs1) || isnan(fs2) || isnan(fs3)) {
952 if (std::isnan(fs1) || std::isnan(fs2) ||
953 std::isnan(fs3)) {
947 if (issignalingnan(fs1) || issignalingnan(fs2)
948 || issignalingnan(fs3)) {
949 FFLAGS |= FloatInvalid;
950 }
951 fd = numeric_limits<float>::quiet_NaN();
954 if (issignalingnan(fs1) || issignalingnan(fs2)
955 || issignalingnan(fs3)) {
956 FFLAGS |= FloatInvalid;
957 }
958 fd = numeric_limits<float>::quiet_NaN();
952 } else if (isinf(fs1) || isinf(fs2) ||
953 isinf(fs3)) {
959 } else if (std::isinf(fs1) || std::isinf(fs2) ||
960 std::isinf(fs3)) {
954 if (signbit(fs1) == signbit(fs2)
961 if (signbit(fs1) == signbit(fs2)
955 && !isinf(fs3)) {
962 && !std::isinf(fs3)) {
956 fd = -numeric_limits<float>::infinity();
957 } else if (signbit(fs1) != signbit(fs2)
963 fd = -numeric_limits<float>::infinity();
964 } else if (signbit(fs1) != signbit(fs2)
958 && !isinf(fs3)) {
965 && !std::isinf(fs3)) {
959 fd = numeric_limits<float>::infinity();
960 } else { // Fs3_sf is infinity
961 fd = -fs3;
962 }
963 } else {
964 fd = -(fs1*fs2 + fs3);
965 }
966 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
967 }}, FloatMultOp);
968 0x1: fnmadd_d({{
966 fd = numeric_limits<float>::infinity();
967 } else { // Fs3_sf is infinity
968 fd = -fs3;
969 }
970 } else {
971 fd = -(fs1*fs2 + fs3);
972 }
973 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
974 }}, FloatMultOp);
975 0x1: fnmadd_d({{
969 if (isnan(Fs1) || isnan(Fs2) || isnan(Fs3)) {
976 if (std::isnan(Fs1) || std::isnan(Fs2) ||
977 std::isnan(Fs3)) {
970 if (issignalingnan(Fs1) || issignalingnan(Fs2)
971 || issignalingnan(Fs3)) {
972 FFLAGS |= FloatInvalid;
973 }
974 Fd = numeric_limits<double>::quiet_NaN();
978 if (issignalingnan(Fs1) || issignalingnan(Fs2)
979 || issignalingnan(Fs3)) {
980 FFLAGS |= FloatInvalid;
981 }
982 Fd = numeric_limits<double>::quiet_NaN();
975 } else if (isinf(Fs1) || isinf(Fs2) ||
976 isinf(Fs3)) {
983 } else if (std::isinf(Fs1) || std::isinf(Fs2) ||
984 std::isinf(Fs3)) {
977 if (signbit(Fs1) == signbit(Fs2)
985 if (signbit(Fs1) == signbit(Fs2)
978 && !isinf(Fs3)) {
986 && !std::isinf(Fs3)) {
979 Fd = -numeric_limits<double>::infinity();
980 } else if (signbit(Fs1) != signbit(Fs2)
987 Fd = -numeric_limits<double>::infinity();
988 } else if (signbit(Fs1) != signbit(Fs2)
981 && !isinf(Fs3)) {
989 && !std::isinf(Fs3)) {
982 Fd = numeric_limits<double>::infinity();
983 } else {
984 Fd = -Fs3;
985 }
986 } else {
987 Fd = -(Fs1*Fs2 + Fs3);
988 }
989 }}, FloatMultOp);
990 }
991 0x14: decode FUNCT7 {
992 0x0: fadd_s({{
993 uint32_t temp;
994 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
995 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
996 float fd;
997
990 Fd = numeric_limits<double>::infinity();
991 } else {
992 Fd = -Fs3;
993 }
994 } else {
995 Fd = -(Fs1*Fs2 + Fs3);
996 }
997 }}, FloatMultOp);
998 }
999 0x14: decode FUNCT7 {
1000 0x0: fadd_s({{
1001 uint32_t temp;
1002 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1003 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1004 float fd;
1005
998 if (isnan(fs1) || isnan(fs2)) {
1006 if (std::isnan(fs1) || std::isnan(fs2)) {
999 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1000 FFLAGS |= FloatInvalid;
1001 }
1002 fd = numeric_limits<float>::quiet_NaN();
1003 } else {
1004 fd = fs1 + fs2;
1005 }
1006 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1007 }}, FloatAddOp);
1008 0x1: fadd_d({{
1007 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1008 FFLAGS |= FloatInvalid;
1009 }
1010 fd = numeric_limits<float>::quiet_NaN();
1011 } else {
1012 fd = fs1 + fs2;
1013 }
1014 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1015 }}, FloatAddOp);
1016 0x1: fadd_d({{
1009 if (isnan(Fs1) || isnan(Fs2)) {
1017 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1010 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1011 FFLAGS |= FloatInvalid;
1012 }
1013 Fd = numeric_limits<double>::quiet_NaN();
1014 } else {
1015 Fd = Fs1 + Fs2;
1016 }
1017 }}, FloatAddOp);
1018 0x4: fsub_s({{
1019 uint32_t temp;
1020 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1021 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1022 float fd;
1023
1018 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1019 FFLAGS |= FloatInvalid;
1020 }
1021 Fd = numeric_limits<double>::quiet_NaN();
1022 } else {
1023 Fd = Fs1 + Fs2;
1024 }
1025 }}, FloatAddOp);
1026 0x4: fsub_s({{
1027 uint32_t temp;
1028 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1029 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1030 float fd;
1031
1024 if (isnan(fs1) || isnan(fs2)) {
1032 if (std::isnan(fs1) || std::isnan(fs2)) {
1025 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1026 FFLAGS |= FloatInvalid;
1027 }
1028 fd = numeric_limits<float>::quiet_NaN();
1029 } else {
1030 fd = fs1 - fs2;
1031 }
1032 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1033 }}, FloatAddOp);
1034 0x5: fsub_d({{
1033 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1034 FFLAGS |= FloatInvalid;
1035 }
1036 fd = numeric_limits<float>::quiet_NaN();
1037 } else {
1038 fd = fs1 - fs2;
1039 }
1040 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1041 }}, FloatAddOp);
1042 0x5: fsub_d({{
1035 if (isnan(Fs1) || isnan(Fs2)) {
1043 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1036 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1037 FFLAGS |= FloatInvalid;
1038 }
1039 Fd = numeric_limits<double>::quiet_NaN();
1040 } else {
1041 Fd = Fs1 - Fs2;
1042 }
1043 }}, FloatAddOp);
1044 0x8: fmul_s({{
1045 uint32_t temp;
1046 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1047 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1048 float fd;
1049
1044 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1045 FFLAGS |= FloatInvalid;
1046 }
1047 Fd = numeric_limits<double>::quiet_NaN();
1048 } else {
1049 Fd = Fs1 - Fs2;
1050 }
1051 }}, FloatAddOp);
1052 0x8: fmul_s({{
1053 uint32_t temp;
1054 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1055 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1056 float fd;
1057
1050 if (isnan(fs1) || isnan(fs2)) {
1058 if (std::isnan(fs1) || std::isnan(fs2)) {
1051 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1052 FFLAGS |= FloatInvalid;
1053 }
1054 fd = numeric_limits<float>::quiet_NaN();
1055 } else {
1056 fd = fs1*fs2;
1057 }
1058 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1059 }}, FloatMultOp);
1060 0x9: fmul_d({{
1059 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1060 FFLAGS |= FloatInvalid;
1061 }
1062 fd = numeric_limits<float>::quiet_NaN();
1063 } else {
1064 fd = fs1*fs2;
1065 }
1066 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1067 }}, FloatMultOp);
1068 0x9: fmul_d({{
1061 if (isnan(Fs1) || isnan(Fs2)) {
1069 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1062 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1063 FFLAGS |= FloatInvalid;
1064 }
1065 Fd = numeric_limits<double>::quiet_NaN();
1066 } else {
1067 Fd = Fs1*Fs2;
1068 }
1069 }}, FloatMultOp);
1070 0xc: fdiv_s({{
1071 uint32_t temp;
1072 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1073 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1074 float fd;
1075
1070 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1071 FFLAGS |= FloatInvalid;
1072 }
1073 Fd = numeric_limits<double>::quiet_NaN();
1074 } else {
1075 Fd = Fs1*Fs2;
1076 }
1077 }}, FloatMultOp);
1078 0xc: fdiv_s({{
1079 uint32_t temp;
1080 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1081 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1082 float fd;
1083
1076 if (isnan(fs1) || isnan(fs2)) {
1084 if (std::isnan(fs1) || std::isnan(fs2)) {
1077 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1078 FFLAGS |= FloatInvalid;
1079 }
1080 fd = numeric_limits<float>::quiet_NaN();
1081 } else {
1082 fd = fs1/fs2;
1083 }
1084 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1085 }}, FloatDivOp);
1086 0xd: fdiv_d({{
1085 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1086 FFLAGS |= FloatInvalid;
1087 }
1088 fd = numeric_limits<float>::quiet_NaN();
1089 } else {
1090 fd = fs1/fs2;
1091 }
1092 Fd_bits = (uint64_t)reinterpret_cast<uint32_t&>(fd);
1093 }}, FloatDivOp);
1094 0xd: fdiv_d({{
1087 if (isnan(Fs1) || isnan(Fs2)) {
1095 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1088 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1089 FFLAGS |= FloatInvalid;
1090 }
1091 Fd = numeric_limits<double>::quiet_NaN();
1092 } else {
1093 Fd = Fs1/Fs2;
1094 }
1095 }}, FloatDivOp);

--- 167 unchanged lines hidden (view full) ---

1263 Fd = sqrt(Fs1);
1264 }}, FloatSqrtOp);
1265 0x50: decode ROUND_MODE {
1266 0x0: fle_s({{
1267 uint32_t temp;
1268 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1269 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1270
1096 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1097 FFLAGS |= FloatInvalid;
1098 }
1099 Fd = numeric_limits<double>::quiet_NaN();
1100 } else {
1101 Fd = Fs1/Fs2;
1102 }
1103 }}, FloatDivOp);

--- 167 unchanged lines hidden (view full) ---

1271 Fd = sqrt(Fs1);
1272 }}, FloatSqrtOp);
1273 0x50: decode ROUND_MODE {
1274 0x0: fle_s({{
1275 uint32_t temp;
1276 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1277 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1278
1271 if (isnan(fs1) || isnan(fs2)) {
1279 if (std::isnan(fs1) || std::isnan(fs2)) {
1272 FFLAGS |= FloatInvalid;
1273 Rd = 0;
1274 } else {
1275 Rd = fs1 <= fs2 ? 1 : 0;
1276 }
1277 }}, FloatCmpOp);
1278 0x1: flt_s({{
1279 uint32_t temp;
1280 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1281 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1282
1280 FFLAGS |= FloatInvalid;
1281 Rd = 0;
1282 } else {
1283 Rd = fs1 <= fs2 ? 1 : 0;
1284 }
1285 }}, FloatCmpOp);
1286 0x1: flt_s({{
1287 uint32_t temp;
1288 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1289 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1290
1283 if (isnan(fs1) || isnan(fs2)) {
1291 if (std::isnan(fs1) || std::isnan(fs2)) {
1284 FFLAGS |= FloatInvalid;
1285 Rd = 0;
1286 } else {
1287 Rd = fs1 < fs2 ? 1 : 0;
1288 }
1289 }}, FloatCmpOp);
1290 0x2: feq_s({{
1291 uint32_t temp;
1292 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1293 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1294
1295 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1296 FFLAGS |= FloatInvalid;
1297 }
1298 Rd = fs1 == fs2 ? 1 : 0;
1299 }}, FloatCmpOp);
1300 }
1301 0x51: decode ROUND_MODE {
1302 0x0: fle_d({{
1292 FFLAGS |= FloatInvalid;
1293 Rd = 0;
1294 } else {
1295 Rd = fs1 < fs2 ? 1 : 0;
1296 }
1297 }}, FloatCmpOp);
1298 0x2: feq_s({{
1299 uint32_t temp;
1300 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1301 float fs2 = reinterpret_cast<float&>(temp = Fs2_bits);
1302
1303 if (issignalingnan(fs1) || issignalingnan(fs2)) {
1304 FFLAGS |= FloatInvalid;
1305 }
1306 Rd = fs1 == fs2 ? 1 : 0;
1307 }}, FloatCmpOp);
1308 }
1309 0x51: decode ROUND_MODE {
1310 0x0: fle_d({{
1303 if (isnan(Fs1) || isnan(Fs2)) {
1311 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1304 FFLAGS |= FloatInvalid;
1305 Rd = 0;
1306 } else {
1307 Rd = Fs1 <= Fs2 ? 1 : 0;
1308 }
1309 }}, FloatCmpOp);
1310 0x1: flt_d({{
1312 FFLAGS |= FloatInvalid;
1313 Rd = 0;
1314 } else {
1315 Rd = Fs1 <= Fs2 ? 1 : 0;
1316 }
1317 }}, FloatCmpOp);
1318 0x1: flt_d({{
1311 if (isnan(Fs1) || isnan(Fs2)) {
1319 if (std::isnan(Fs1) || std::isnan(Fs2)) {
1312 FFLAGS |= FloatInvalid;
1313 Rd = 0;
1314 } else {
1315 Rd = Fs1 < Fs2 ? 1 : 0;
1316 }
1317 }}, FloatCmpOp);
1318 0x2: feq_d({{
1319 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1320 FFLAGS |= FloatInvalid;
1321 }
1322 Rd = Fs1 == Fs2 ? 1 : 0;
1323 }}, FloatCmpOp);
1324 }
1325 0x60: decode CONV_SGN {
1326 0x0: fcvt_w_s({{
1327 uint32_t temp;
1328 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1329
1320 FFLAGS |= FloatInvalid;
1321 Rd = 0;
1322 } else {
1323 Rd = Fs1 < Fs2 ? 1 : 0;
1324 }
1325 }}, FloatCmpOp);
1326 0x2: feq_d({{
1327 if (issignalingnan(Fs1) || issignalingnan(Fs2)) {
1328 FFLAGS |= FloatInvalid;
1329 }
1330 Rd = Fs1 == Fs2 ? 1 : 0;
1331 }}, FloatCmpOp);
1332 }
1333 0x60: decode CONV_SGN {
1334 0x0: fcvt_w_s({{
1335 uint32_t temp;
1336 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1337
1330 if (isnan(fs1)) {
1338 if (std::isnan(fs1)) {
1331 Rd_sd = numeric_limits<int32_t>::max();
1332 FFLAGS |= FloatInvalid;
1333 } else {
1334 Rd_sd = (int32_t)fs1;
1335 if (fetestexcept(FE_INVALID)) {
1336 if (signbit(fs1)) {
1337 Rd_sd = numeric_limits<int32_t>::min();
1338 } else {

--- 17 unchanged lines hidden (view full) ---

1356 feclearexcept(FE_INEXACT);
1357 }
1358 }
1359 }}, FloatCvtOp);
1360 0x2: fcvt_l_s({{
1361 uint32_t temp;
1362 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1363
1339 Rd_sd = numeric_limits<int32_t>::max();
1340 FFLAGS |= FloatInvalid;
1341 } else {
1342 Rd_sd = (int32_t)fs1;
1343 if (fetestexcept(FE_INVALID)) {
1344 if (signbit(fs1)) {
1345 Rd_sd = numeric_limits<int32_t>::min();
1346 } else {

--- 17 unchanged lines hidden (view full) ---

1364 feclearexcept(FE_INEXACT);
1365 }
1366 }
1367 }}, FloatCvtOp);
1368 0x2: fcvt_l_s({{
1369 uint32_t temp;
1370 float fs1 = reinterpret_cast<float&>(temp = Fs1_bits);
1371
1364 if (isnan(fs1)) {
1372 if (std::isnan(fs1)) {
1365 Rd_sd = numeric_limits<int64_t>::max();
1366 FFLAGS |= FloatInvalid;
1367 } else {
1368 Rd_sd = (int64_t)fs1;
1369 if (fetestexcept(FE_INVALID)) {
1370 if (signbit(fs1)) {
1371 Rd_sd = numeric_limits<int64_t>::min();
1372 } else {

--- 321 unchanged lines hidden ---
1373 Rd_sd = numeric_limits<int64_t>::max();
1374 FFLAGS |= FloatInvalid;
1375 } else {
1376 Rd_sd = (int64_t)fs1;
1377 if (fetestexcept(FE_INVALID)) {
1378 if (signbit(fs1)) {
1379 Rd_sd = numeric_limits<int64_t>::min();
1380 } else {

--- 321 unchanged lines hidden ---