VirtualBox

Changeset 103049 in vbox


Ignore:
Timestamp:
Jan 24, 2024 10:34:06 PM (10 months ago)
Author:
vboxsync
Message:

tstIEMAImpl: Converted the generator functions to compress the binary output. bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/testcase/tstIEMAImpl.cpp

    r103048 r103049  
    145145#define COUNT_VARIATIONS(a_SubTest) \
    146146        (1 + ((a_SubTest).idxCpuEflFlavour == g_idxCpuEflFlavour && (a_SubTest).pfnNative) )
     147
     148
     149/*********************************************************************************************************************************
     150*   Structures and Typedefs                                                                                                      *
     151*********************************************************************************************************************************/
     152typedef struct IEMBINARYOUTPUT
     153{
     154    /** The output file. */
     155    RTVFSFILE       hVfsFile;
     156    /** The stream we write uncompressed binary test data to. */
     157    RTVFSIOSTREAM   hVfsUncompressed;
     158    /** Write status. */
     159    int             rcWrite;
     160    /** Set if NULL. */
     161    bool            fNull;
     162    /** Filename.   */
     163    char            szFilename[79];
     164} IEMBINARYOUTPUT;
     165typedef IEMBINARYOUTPUT *PIEMBINARYOUTPUT;
    147166
    148167
     
    980999                 pszName, pszName);
    9811000}
     1001
     1002
     1003static bool GenerateBinaryOpen(PIEMBINARYOUTPUT pBinOut, const char *pszFilenameFmt, const char *pszName,
     1004                               const char *pszCpuType = NULL)
     1005{
     1006    pBinOut->hVfsFile         = NIL_RTVFSFILE;
     1007    pBinOut->hVfsUncompressed = NIL_RTVFSIOSTREAM;
     1008    if (pszFilenameFmt)
     1009    {
     1010        pBinOut->fNull = false;
     1011        if (RTStrPrintf2(pBinOut->szFilename, sizeof(pBinOut->szFilename), pszFilenameFmt, pszName, pszCpuType) > 0)
     1012        {
     1013            RTMsgInfo("GenerateBinaryOpen: %s...\n", pBinOut->szFilename);
     1014            pBinOut->rcWrite = RTVfsFileOpenNormal(pBinOut->szFilename,
     1015                                                   RTFILE_O_CREATE_REPLACE | RTFILE_O_WRITE | RTFILE_O_DENY_READWRITE,
     1016                                                   &pBinOut->hVfsFile);
     1017            if (RT_SUCCESS(pBinOut->rcWrite))
     1018            {
     1019                RTVFSIOSTREAM hVfsIoFile = RTVfsFileToIoStream(pBinOut->hVfsFile);
     1020                if (hVfsIoFile != NIL_RTVFSIOSTREAM)
     1021                {
     1022                    pBinOut->rcWrite = RTZipGzipCompressIoStream(hVfsIoFile, 0 /*fFlags*/, 9, &pBinOut->hVfsUncompressed);
     1023                    RTVfsIoStrmRelease(hVfsIoFile);
     1024                    if (RT_SUCCESS(pBinOut->rcWrite))
     1025                    {
     1026                        pBinOut->rcWrite = VINF_SUCCESS;
     1027                        return true;
     1028                    }
     1029
     1030                    RTMsgError("RTZipGzipCompressIoStream: %Rrc", pBinOut->rcWrite);
     1031                }
     1032                else
     1033                {
     1034                    RTMsgError("RTVfsFileToIoStream failed!");
     1035                    pBinOut->rcWrite = VERR_VFS_CHAIN_CAST_FAILED;
     1036                }
     1037                RTVfsFileRelease(pBinOut->hVfsFile);
     1038                RTFileDelete(pBinOut->szFilename);
     1039            }
     1040            else
     1041                RTMsgError("Failed to open '%s' for writing: %Rrc", pBinOut->szFilename, pBinOut->rcWrite);
     1042        }
     1043        else
     1044        {
     1045            RTMsgError("filename too long: %s + %s + %s", pszFilenameFmt, pszName, pszCpuType);
     1046            pBinOut->rcWrite = VERR_BUFFER_OVERFLOW;
     1047        }
     1048        return false;
     1049    }
     1050    RTMsgInfo("GenerateBinaryOpen: %s -> /dev/null\n", pszName);
     1051    pBinOut->rcWrite       = VERR_IGNORED;
     1052    pBinOut->fNull         = true;
     1053    pBinOut->szFilename[0] = '\0';
     1054    return true;
     1055}
     1056
     1057
     1058static void GenerateBinaryWrite(PIEMBINARYOUTPUT pBinOut, const void *pvData, size_t cbData)
     1059{
     1060    if (RT_SUCCESS_NP(pBinOut->rcWrite))
     1061    {
     1062        pBinOut->rcWrite = RTVfsIoStrmWrite(pBinOut->hVfsUncompressed, pvData, cbData, true /*fBlocking*/, NULL);
     1063        if (RT_SUCCESS(pBinOut->rcWrite))
     1064            return;
     1065        RTMsgError("Error writing '%s': %Rrc", pBinOut->szFilename, pBinOut->rcWrite);
     1066    }
     1067}
     1068
     1069
     1070static bool GenerateBinaryClose(PIEMBINARYOUTPUT pBinOut)
     1071{
     1072    if (!pBinOut->fNull)
     1073    {
     1074        /* This is rather jovial about rcWrite. */
     1075        int const rc1 = RTVfsIoStrmFlush(pBinOut->hVfsUncompressed);
     1076        RTVfsIoStrmRelease(pBinOut->hVfsUncompressed);
     1077        pBinOut->hVfsUncompressed = NIL_RTVFSIOSTREAM;
     1078        if (RT_FAILURE(rc1))
     1079            RTMsgError("Error flushing '%s' (uncompressed stream): %Rrc", pBinOut->szFilename, rc1);
     1080
     1081        int const rc2 = RTVfsFileFlush(pBinOut->hVfsFile);
     1082        RTVfsFileRelease(pBinOut->hVfsFile);
     1083        pBinOut->hVfsFile = NIL_RTVFSFILE;
     1084        if (RT_FAILURE(rc2))
     1085            RTMsgError("Error flushing '%s' (compressed file): %Rrc", pBinOut->szFilename, rc2);
     1086
     1087        return RT_SUCCESS(rc2) && RT_SUCCESS(rc1) && RT_SUCCESS(pBinOut->rcWrite);
     1088    }
     1089    return true;
     1090}
     1091
    9821092
    9831093#endif /* TSTIEMAIMPL_WITH_GENERATOR */
     
    48044914        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseBinaryR32[iFn].pfnNative ? g_aSseBinaryR32[iFn].pfnNative : g_aSseBinaryR32[iFn].pfn;
    48054915
    4806         PRTSTREAM pStrmOut = NULL;
    4807         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR32[iFn].pszName);
    4808         if (RT_FAILURE(rc))
    4809         {
    4810             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR32[iFn].pszName, rc);
    4811             return RTEXITCODE_FAILURE;
    4812         }
     4916        IEMBINARYOUTPUT BinOut;
     4917        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR32[iFn].pszName), RTEXITCODE_FAILURE);
    48134918
    48144919        uint32_t cNormalInputPairs  = 0;
     
    48534958                        TestData.fMxcsrOut = ResM.MXCSR;
    48544959                        TestData.OutVal    = ResM.uResult;
    4855                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     4960                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    48564961
    48574962                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    48614966                        TestData.fMxcsrOut = ResU.MXCSR;
    48624967                        TestData.OutVal    = ResU.uResult;
    4863                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     4968                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    48644969
    48654970                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    48724977                            TestData.fMxcsrOut = Res1.MXCSR;
    48734978                            TestData.OutVal    = Res1.uResult;
    4874                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     4979                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    48754980
    48764981                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    48834988                                TestData.fMxcsrOut = Res2.MXCSR;
    48844989                                TestData.OutVal    = Res2.uResult;
    4885                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     4990                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    48864991                            }
    48874992                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    48955000                                        TestData.fMxcsrOut = Res3.MXCSR;
    48965001                                        TestData.OutVal    = Res3.uResult;
    4897                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5002                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    48985003                                    }
    48995004                        }
    49005005                    }
    49015006        }
    4902         rc = RTStrmClose(pStrmOut);
    4903         if (RT_FAILURE(rc))
    4904         {
    4905             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR32[iFn].pszName, rc);
    4906             return RTEXITCODE_FAILURE;
    4907         }
     5007        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    49085008    }
    49095009
     
    50035103        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseBinaryR64[iFn].pfnNative ? g_aSseBinaryR64[iFn].pfnNative : g_aSseBinaryR64[iFn].pfn;
    50045104
    5005         PRTSTREAM pStrmOut = NULL;
    5006         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR64[iFn].pszName);
    5007         if (RT_FAILURE(rc))
    5008         {
    5009             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR64[iFn].pszName, rc);
    5010             return RTEXITCODE_FAILURE;
    5011         }
     5105        IEMBINARYOUTPUT BinOut;
     5106        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR64[iFn].pszName), RTEXITCODE_FAILURE);
    50125107
    50135108        uint32_t cNormalInputPairs  = 0;
     
    50455140                        TestData.fMxcsrOut = ResM.MXCSR;
    50465141                        TestData.OutVal    = ResM.uResult;
    5047                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5142                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    50485143
    50495144                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    50535148                        TestData.fMxcsrOut = ResU.MXCSR;
    50545149                        TestData.OutVal    = ResU.uResult;
    5055                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5150                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    50565151
    50575152                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    50645159                            TestData.fMxcsrOut = Res1.MXCSR;
    50655160                            TestData.OutVal    = Res1.uResult;
    5066                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5161                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    50675162
    50685163                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    50755170                                TestData.fMxcsrOut = Res2.MXCSR;
    50765171                                TestData.OutVal    = Res2.uResult;
    5077                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5172                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    50785173                            }
    50795174                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    50875182                                        TestData.fMxcsrOut = Res3.MXCSR;
    50885183                                        TestData.OutVal    = Res3.uResult;
    5089                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5184                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    50905185                                    }
    50915186                        }
    50925187                    }
    50935188        }
    5094         rc = RTStrmClose(pStrmOut);
    5095         if (RT_FAILURE(rc))
    5096         {
    5097             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR64[iFn].pszName, rc);
    5098             return RTEXITCODE_FAILURE;
    5099         }
     5189        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    51005190    }
    51015191
     
    51875277        PFNIEMAIMPLFPSSEF2U128R32 const pfn = g_aSseBinaryU128R32[iFn].pfnNative ? g_aSseBinaryU128R32[iFn].pfnNative : g_aSseBinaryU128R32[iFn].pfn;
    51885278
    5189         PRTSTREAM pStrmOut = NULL;
    5190         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryU128R32[iFn].pszName);
    5191         if (RT_FAILURE(rc))
    5192         {
    5193             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryU128R32[iFn].pszName, rc);
    5194             return RTEXITCODE_FAILURE;
    5195         }
     5279        IEMBINARYOUTPUT BinOut;
     5280        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryU128R32[iFn].pszName), RTEXITCODE_FAILURE);
    51965281
    51975282        uint32_t cNormalInputPairs  = 0;
     
    52345319                        TestData.fMxcsrOut = ResM.MXCSR;
    52355320                        TestData.OutVal    = ResM.uResult;
    5236                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5321                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    52375322
    52385323                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    52425327                        TestData.fMxcsrOut = ResU.MXCSR;
    52435328                        TestData.OutVal    = ResU.uResult;
    5244                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5329                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    52455330
    52465331                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    52535338                            TestData.fMxcsrOut = Res1.MXCSR;
    52545339                            TestData.OutVal    = Res1.uResult;
    5255                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5340                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    52565341
    52575342                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    52645349                                TestData.fMxcsrOut = Res2.MXCSR;
    52655350                                TestData.OutVal    = Res2.uResult;
    5266                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5351                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    52675352                            }
    52685353                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    52765361                                        TestData.fMxcsrOut = Res3.MXCSR;
    52775362                                        TestData.OutVal    = Res3.uResult;
    5278                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5363                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    52795364                                    }
    52805365                        }
    52815366                    }
    52825367        }
    5283         rc = RTStrmClose(pStrmOut);
    5284         if (RT_FAILURE(rc))
    5285         {
    5286             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryU128R32[iFn].pszName, rc);
    5287             return RTEXITCODE_FAILURE;
    5288         }
     5368        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    52895369    }
    52905370
     
    53785458        PFNIEMAIMPLFPSSEF2U128R64 const pfn = g_aSseBinaryU128R64[iFn].pfnNative ? g_aSseBinaryU128R64[iFn].pfnNative : g_aSseBinaryU128R64[iFn].pfn;
    53795459
    5380         PRTSTREAM pStrmOut = NULL;
    5381         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryU128R64[iFn].pszName);
    5382         if (RT_FAILURE(rc))
    5383         {
    5384             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryU128R64[iFn].pszName, rc);
    5385             return RTEXITCODE_FAILURE;
    5386         }
     5460        IEMBINARYOUTPUT BinOut;
     5461        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryU128R64[iFn].pszName), RTEXITCODE_FAILURE);
    53875462
    53885463        uint32_t cNormalInputPairs  = 0;
     
    54195494                        TestData.fMxcsrOut = ResM.MXCSR;
    54205495                        TestData.OutVal    = ResM.uResult;
    5421                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5496                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    54225497
    54235498                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    54275502                        TestData.fMxcsrOut = ResU.MXCSR;
    54285503                        TestData.OutVal    = ResU.uResult;
    5429                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5504                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    54305505
    54315506                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    54385513                            TestData.fMxcsrOut = Res1.MXCSR;
    54395514                            TestData.OutVal    = Res1.uResult;
    5440                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5515                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    54415516
    54425517                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    54495524                                TestData.fMxcsrOut = Res2.MXCSR;
    54505525                                TestData.OutVal    = Res2.uResult;
    5451                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5526                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    54525527                            }
    54535528                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    54615536                                        TestData.fMxcsrOut = Res3.MXCSR;
    54625537                                        TestData.OutVal    = Res3.uResult;
    5463                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5538                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    54645539                                    }
    54655540                        }
    54665541                    }
    54675542        }
    5468         rc = RTStrmClose(pStrmOut);
    5469         if (RT_FAILURE(rc))
    5470         {
    5471             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryU128R64[iFn].pszName, rc);
    5472             return RTEXITCODE_FAILURE;
    5473         }
     5543        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    54745544    }
    54755545
     
    55545624        PFNIEMAIMPLSSEF2I32U64 const pfn = g_aSseBinaryI32R64[iFn].pfnNative ? g_aSseBinaryI32R64[iFn].pfnNative : g_aSseBinaryI32R64[iFn].pfn;
    55555625
    5556         PRTSTREAM pStrmOut = NULL;
    5557         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryI32R64[iFn].pszName);
    5558         if (RT_FAILURE(rc))
    5559         {
    5560             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryI32R64[iFn].pszName, rc);
    5561             return RTEXITCODE_FAILURE;
    5562         }
     5626        IEMBINARYOUTPUT BinOut;
     5627        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryI32R64[iFn].pszName), RTEXITCODE_FAILURE);
    55635628
    55645629        uint32_t cNormalInputPairs  = 0;
     
    55925657                        TestData.fMxcsrOut = fMxcsrM;
    55935658                        TestData.i32ValOut = i32OutM;
    5594                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5659                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    55955660
    55965661                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    56005665                        TestData.fMxcsrOut = fMxcsrU;
    56015666                        TestData.i32ValOut = i32OutU;
    5602                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5667                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    56035668
    56045669                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    56115676                            TestData.fMxcsrOut = fMxcsr1;
    56125677                            TestData.i32ValOut = i32Out1;
    5613                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5678                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    56145679
    56155680                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    56225687                                TestData.fMxcsrOut = fMxcsr2;
    56235688                                TestData.i32ValOut = i32Out2;
    5624                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5689                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    56255690                            }
    56265691                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    56345699                                        TestData.fMxcsrOut = fMxcsr3;
    56355700                                        TestData.i32ValOut = i32Out3;
    5636                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5701                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    56375702                                    }
    56385703                        }
    56395704                    }
    56405705        }
    5641         rc = RTStrmClose(pStrmOut);
    5642         if (RT_FAILURE(rc))
    5643         {
    5644             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryI32R64[iFn].pszName, rc);
    5645             return RTEXITCODE_FAILURE;
    5646         }
     5706        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    56475707    }
    56485708
     
    57235783        PFNIEMAIMPLSSEF2I64U64 const pfn = g_aSseBinaryI64R64[iFn].pfnNative ? g_aSseBinaryI64R64[iFn].pfnNative : g_aSseBinaryI64R64[iFn].pfn;
    57245784
    5725         PRTSTREAM pStrmOut = NULL;
    5726         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryI64R64[iFn].pszName);
    5727         if (RT_FAILURE(rc))
    5728         {
    5729             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryI64R64[iFn].pszName, rc);
    5730             return RTEXITCODE_FAILURE;
    5731         }
     5785        IEMBINARYOUTPUT BinOut;
     5786        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryI64R64[iFn].pszName), RTEXITCODE_FAILURE);
    57325787
    57335788        uint32_t cNormalInputPairs  = 0;
     
    57615816                        TestData.fMxcsrOut = fMxcsrM;
    57625817                        TestData.i64ValOut = i64OutM;
    5763                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5818                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    57645819
    57655820                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    57695824                        TestData.fMxcsrOut = fMxcsrU;
    57705825                        TestData.i64ValOut = i64OutU;
    5771                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5826                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    57725827
    57735828                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    57805835                            TestData.fMxcsrOut = fMxcsr1;
    57815836                            TestData.i64ValOut = i64Out1;
    5782                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5837                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    57835838
    57845839                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    57915846                                TestData.fMxcsrOut = fMxcsr2;
    57925847                                TestData.i64ValOut = i64Out2;
    5793                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5848                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    57945849                            }
    57955850                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    58035858                                        TestData.fMxcsrOut = fMxcsr3;
    58045859                                        TestData.i64ValOut = i64Out3;
    5805                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5860                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    58065861                                    }
    58075862                        }
    58085863                    }
    58095864        }
    5810         rc = RTStrmClose(pStrmOut);
    5811         if (RT_FAILURE(rc))
    5812         {
    5813             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryI64R64[iFn].pszName, rc);
    5814             return RTEXITCODE_FAILURE;
    5815         }
     5865        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    58165866    }
    58175867
     
    58925942        PFNIEMAIMPLSSEF2I32U32 const pfn = g_aSseBinaryI32R32[iFn].pfnNative ? g_aSseBinaryI32R32[iFn].pfnNative : g_aSseBinaryI32R32[iFn].pfn;
    58935943
    5894         PRTSTREAM pStrmOut = NULL;
    5895         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryI32R32[iFn].pszName);
    5896         if (RT_FAILURE(rc))
    5897         {
    5898             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryI32R32[iFn].pszName, rc);
    5899             return RTEXITCODE_FAILURE;
    5900         }
     5944        IEMBINARYOUTPUT BinOut;
     5945        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryI32R32[iFn].pszName), RTEXITCODE_FAILURE);
    59015946
    59025947        uint32_t cNormalInputPairs  = 0;
     
    59305975                        TestData.fMxcsrOut = fMxcsrM;
    59315976                        TestData.i32ValOut = i32OutM;
    5932                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5977                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    59335978
    59345979                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    59385983                        TestData.fMxcsrOut = fMxcsrU;
    59395984                        TestData.i32ValOut = i32OutU;
    5940                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5985                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    59415986
    59425987                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    59495994                            TestData.fMxcsrOut = fMxcsr1;
    59505995                            TestData.i32ValOut = i32Out1;
    5951                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     5996                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    59525997
    59535998                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    59606005                                TestData.fMxcsrOut = fMxcsr2;
    59616006                                TestData.i32ValOut = i32Out2;
    5962                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6007                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    59636008                            }
    59646009                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    59726017                                        TestData.fMxcsrOut = fMxcsr3;
    59736018                                        TestData.i32ValOut = i32Out3;
    5974                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6019                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    59756020                                    }
    59766021                        }
    59776022                    }
    59786023        }
    5979         rc = RTStrmClose(pStrmOut);
    5980         if (RT_FAILURE(rc))
    5981         {
    5982             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryI32R32[iFn].pszName, rc);
    5983             return RTEXITCODE_FAILURE;
    5984         }
     6024        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    59856025    }
    59866026
     
    60616101        PFNIEMAIMPLSSEF2I64U32 const pfn = g_aSseBinaryI64R32[iFn].pfnNative ? g_aSseBinaryI64R32[iFn].pfnNative : g_aSseBinaryI64R32[iFn].pfn;
    60626102
    6063         PRTSTREAM pStrmOut = NULL;
    6064         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryI64R32[iFn].pszName);
    6065         if (RT_FAILURE(rc))
    6066         {
    6067             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryI64R32[iFn].pszName, rc);
    6068             return RTEXITCODE_FAILURE;
    6069         }
     6103        IEMBINARYOUTPUT BinOut;
     6104        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryI64R32[iFn].pszName), RTEXITCODE_FAILURE);
    60706105
    60716106        uint32_t cNormalInputPairs  = 0;
     
    60996134                        TestData.fMxcsrOut = fMxcsrM;
    61006135                        TestData.i64ValOut = i64OutM;
    6101                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6136                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    61026137
    61036138                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    61076142                        TestData.fMxcsrOut = fMxcsrU;
    61086143                        TestData.i64ValOut = i64OutU;
    6109                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6144                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    61106145
    61116146                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    61186153                            TestData.fMxcsrOut = fMxcsr1;
    61196154                            TestData.i64ValOut = i64Out1;
    6120                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6155                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    61216156
    61226157                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    61296164                                TestData.fMxcsrOut = fMxcsr2;
    61306165                                TestData.i64ValOut = i64Out2;
    6131                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6166                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    61326167                            }
    61336168                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    61416176                                        TestData.fMxcsrOut = fMxcsr3;
    61426177                                        TestData.i64ValOut = i64Out3;
    6143                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6178                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    61446179                                    }
    61456180                        }
    61466181                    }
    61476182        }
    6148         rc = RTStrmClose(pStrmOut);
    6149         if (RT_FAILURE(rc))
    6150         {
    6151             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryI64R32[iFn].pszName, rc);
    6152             return RTEXITCODE_FAILURE;
    6153         }
     6183        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    61546184    }
    61556185
     
    62296259        PFNIEMAIMPLSSEF2R64I32 const pfn = g_aSseBinaryR64I32[iFn].pfnNative ? g_aSseBinaryR64I32[iFn].pfnNative : g_aSseBinaryR64I32[iFn].pfn;
    62306260
    6231         PRTSTREAM pStrmOut = NULL;
    6232         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR64I32[iFn].pszName);
    6233         if (RT_FAILURE(rc))
    6234         {
    6235             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR64I32[iFn].pszName, rc);
    6236             return RTEXITCODE_FAILURE;
    6237         }
     6261        IEMBINARYOUTPUT BinOut;
     6262        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR64I32[iFn].pszName), RTEXITCODE_FAILURE);
    62386263
    62396264        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    62586283                        TestData.fMxcsrOut = fMxcsrM;
    62596284                        TestData.r64ValOut = r64OutM;
    6260                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6285                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    62616286
    62626287                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    62666291                        TestData.fMxcsrOut = fMxcsrU;
    62676292                        TestData.r64ValOut = r64OutU;
    6268                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6293                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    62696294
    62706295                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    62776302                            TestData.fMxcsrOut = fMxcsr1;
    62786303                            TestData.r64ValOut = r64Out1;
    6279                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6304                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    62806305
    62816306                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    62886313                                TestData.fMxcsrOut = fMxcsr2;
    62896314                                TestData.r64ValOut = r64Out2;
    6290                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6315                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    62916316                            }
    62926317                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    63006325                                        TestData.fMxcsrOut = fMxcsr3;
    63016326                                        TestData.r64ValOut = r64Out3;
    6302                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6327                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    63036328                                    }
    63046329                        }
    63056330                    }
    63066331        }
    6307         rc = RTStrmClose(pStrmOut);
    6308         if (RT_FAILURE(rc))
    6309         {
    6310             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR64I32[iFn].pszName, rc);
    6311             return RTEXITCODE_FAILURE;
    6312         }
     6332        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    63136333    }
    63146334
     
    63886408        PFNIEMAIMPLSSEF2R64I64 const pfn = g_aSseBinaryR64I64[iFn].pfnNative ? g_aSseBinaryR64I64[iFn].pfnNative : g_aSseBinaryR64I64[iFn].pfn;
    63896409
    6390         PRTSTREAM pStrmOut = NULL;
    6391         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR64I64[iFn].pszName);
    6392         if (RT_FAILURE(rc))
    6393         {
    6394             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR64I64[iFn].pszName, rc);
    6395             return RTEXITCODE_FAILURE;
    6396         }
     6410        IEMBINARYOUTPUT BinOut;
     6411        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR64I64[iFn].pszName), RTEXITCODE_FAILURE);
    63976412
    63986413        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    64176432                        TestData.fMxcsrOut = fMxcsrM;
    64186433                        TestData.r64ValOut = r64OutM;
    6419                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6434                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    64206435
    64216436                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    64256440                        TestData.fMxcsrOut = fMxcsrU;
    64266441                        TestData.r64ValOut = r64OutU;
    6427                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6442                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    64286443
    64296444                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    64366451                            TestData.fMxcsrOut = fMxcsr1;
    64376452                            TestData.r64ValOut = r64Out1;
    6438                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6453                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    64396454
    64406455                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    64476462                                TestData.fMxcsrOut = fMxcsr2;
    64486463                                TestData.r64ValOut = r64Out2;
    6449                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6464                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    64506465                            }
    64516466                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    64596474                                        TestData.fMxcsrOut = fMxcsr3;
    64606475                                        TestData.r64ValOut = r64Out3;
    6461                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6476                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    64626477                                    }
    64636478                        }
    64646479                    }
    64656480        }
    6466         rc = RTStrmClose(pStrmOut);
    6467         if (RT_FAILURE(rc))
    6468         {
    6469             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR64I64[iFn].pszName, rc);
    6470             return RTEXITCODE_FAILURE;
    6471         }
     6481        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    64726482    }
    64736483
     
    65476557        PFNIEMAIMPLSSEF2R32I32 const pfn = g_aSseBinaryR32I32[iFn].pfnNative ? g_aSseBinaryR32I32[iFn].pfnNative : g_aSseBinaryR32I32[iFn].pfn;
    65486558
    6549         PRTSTREAM pStrmOut = NULL;
    6550         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR32I32[iFn].pszName);
    6551         if (RT_FAILURE(rc))
    6552         {
    6553             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR32I32[iFn].pszName, rc);
    6554             return RTEXITCODE_FAILURE;
    6555         }
     6559        IEMBINARYOUTPUT BinOut;
     6560        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR32I32[iFn].pszName), RTEXITCODE_FAILURE);
    65566561
    65576562        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    65766581                        TestData.fMxcsrOut = fMxcsrM;
    65776582                        TestData.r32ValOut = r32OutM;
    6578                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6583                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    65796584
    65806585                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    65846589                        TestData.fMxcsrOut = fMxcsrU;
    65856590                        TestData.r32ValOut = r32OutU;
    6586                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6591                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    65876592
    65886593                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    65956600                            TestData.fMxcsrOut = fMxcsr1;
    65966601                            TestData.r32ValOut = r32Out1;
    6597                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6602                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    65986603
    65996604                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    66066611                                TestData.fMxcsrOut = fMxcsr2;
    66076612                                TestData.r32ValOut = r32Out2;
    6608                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6613                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    66096614                            }
    66106615                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    66186623                                        TestData.fMxcsrOut = fMxcsr3;
    66196624                                        TestData.r32ValOut = r32Out3;
    6620                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6625                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    66216626                                    }
    66226627                        }
    66236628                    }
    66246629        }
    6625         rc = RTStrmClose(pStrmOut);
    6626         if (RT_FAILURE(rc))
    6627         {
    6628             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR32I32[iFn].pszName, rc);
    6629             return RTEXITCODE_FAILURE;
    6630         }
     6630        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    66316631    }
    66326632
     
    67066706        PFNIEMAIMPLSSEF2R32I64 const pfn = g_aSseBinaryR32I64[iFn].pfnNative ? g_aSseBinaryR32I64[iFn].pfnNative : g_aSseBinaryR32I64[iFn].pfn;
    67076707
    6708         PRTSTREAM pStrmOut = NULL;
    6709         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseBinaryR32I64[iFn].pszName);
    6710         if (RT_FAILURE(rc))
    6711         {
    6712             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseBinaryR32I64[iFn].pszName, rc);
    6713             return RTEXITCODE_FAILURE;
    6714         }
     6708        IEMBINARYOUTPUT BinOut;
     6709        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseBinaryR32I64[iFn].pszName), RTEXITCODE_FAILURE);
    67156710
    67166711        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    67356730                        TestData.fMxcsrOut = fMxcsrM;
    67366731                        TestData.r32ValOut = r32OutM;
    6737                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6732                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    67386733
    67396734                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    67436738                        TestData.fMxcsrOut = fMxcsrU;
    67446739                        TestData.r32ValOut = r32OutU;
    6745                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6740                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    67466741
    67476742                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    67546749                            TestData.fMxcsrOut = fMxcsr1;
    67556750                            TestData.r32ValOut = r32Out1;
    6756                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6751                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    67576752
    67586753                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    67656760                                TestData.fMxcsrOut = fMxcsr2;
    67666761                                TestData.r32ValOut = r32Out2;
    6767                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6762                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    67686763                            }
    67696764                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    67776772                                        TestData.fMxcsrOut = fMxcsr3;
    67786773                                        TestData.r32ValOut = r32Out3;
    6779                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6774                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    67806775                                    }
    67816776                        }
    67826777                    }
    67836778        }
    6784         rc = RTStrmClose(pStrmOut);
    6785         if (RT_FAILURE(rc))
    6786         {
    6787             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseBinaryR32I64[iFn].pszName, rc);
    6788             return RTEXITCODE_FAILURE;
    6789         }
     6779        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    67906780    }
    67916781
     
    68736863        PFNIEMAIMPLF2EFLMXCSR128 const pfn = g_aSseCompareEflR32R32[iFn].pfnNative ? g_aSseCompareEflR32R32[iFn].pfnNative : g_aSseCompareEflR32R32[iFn].pfn;
    68746864
    6875         PRTSTREAM pStrmOut = NULL;
    6876         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseCompareEflR32R32[iFn].pszName);
    6877         if (RT_FAILURE(rc))
    6878         {
    6879             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseCompareEflR32R32[iFn].pszName, rc);
    6880             return RTEXITCODE_FAILURE;
    6881         }
     6865        IEMBINARYOUTPUT BinOut;
     6866        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseCompareEflR32R32[iFn].pszName), RTEXITCODE_FAILURE);
    68826867
    68836868        uint32_t cNormalInputPairs  = 0;
     
    69216906                        TestData.fEflIn     = fEFlags;
    69226907                        TestData.fEflOut    = fEFlagsM;
    6923                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6908                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    69246909
    69256910                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    69316916                        TestData.fEflIn     = fEFlags;
    69326917                        TestData.fEflOut    = fEFlagsU;
    6933                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6918                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    69346919
    69356920                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    69446929                            TestData.fEflIn     = fEFlags;
    69456930                            TestData.fEflOut    = fEFlags1;
    6946                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6931                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    69476932
    69486933                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    69576942                                TestData.fEflIn     = fEFlags;
    69586943                                TestData.fEflOut    = fEFlags2;
    6959                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6944                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    69606945                            }
    69616946                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    69716956                                        TestData.fEflIn     = fEFlags;
    69726957                                        TestData.fEflOut    = fEFlags3;
    6973                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     6958                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    69746959                                    }
    69756960                        }
    69766961                    }
    69776962        }
    6978         rc = RTStrmClose(pStrmOut);
    6979         if (RT_FAILURE(rc))
    6980         {
    6981             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseCompareEflR32R32[iFn].pszName, rc);
    6982             return RTEXITCODE_FAILURE;
    6983         }
     6963        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    69846964    }
    69856965
     
    70667046        PFNIEMAIMPLF2EFLMXCSR128 const pfn = g_aSseCompareEflR64R64[iFn].pfnNative ? g_aSseCompareEflR64R64[iFn].pfnNative : g_aSseCompareEflR64R64[iFn].pfn;
    70677047
    7068         PRTSTREAM pStrmOut = NULL;
    7069         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseCompareEflR64R64[iFn].pszName);
    7070         if (RT_FAILURE(rc))
    7071         {
    7072             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseCompareEflR64R64[iFn].pszName, rc);
    7073             return RTEXITCODE_FAILURE;
    7074         }
     7048        IEMBINARYOUTPUT BinOut;
     7049        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseCompareEflR64R64[iFn].pszName), RTEXITCODE_FAILURE);
    70757050
    70767051        uint32_t cNormalInputPairs  = 0;
     
    71147089                        TestData.fEflIn     = fEFlags;
    71157090                        TestData.fEflOut    = fEFlagsM;
    7116                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7091                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    71177092
    71187093                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    71247099                        TestData.fEflIn     = fEFlags;
    71257100                        TestData.fEflOut    = fEFlagsU;
    7126                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7101                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    71277102
    71287103                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    71377112                            TestData.fEflIn     = fEFlags;
    71387113                            TestData.fEflOut    = fEFlags1;
    7139                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7114                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    71407115
    71417116                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    71507125                                TestData.fEflIn     = fEFlags;
    71517126                                TestData.fEflOut    = fEFlags2;
    7152                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7127                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    71537128                            }
    71547129                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    71647139                                        TestData.fEflIn     = fEFlags;
    71657140                                        TestData.fEflOut    = fEFlags3;
    7166                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7141                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    71677142                                    }
    71687143                        }
    71697144                    }
    71707145        }
    7171         rc = RTStrmClose(pStrmOut);
    7172         if (RT_FAILURE(rc))
    7173         {
    7174             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseCompareEflR64R64[iFn].pszName, rc);
    7175             return RTEXITCODE_FAILURE;
    7176         }
     7146        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    71777147    }
    71787148
     
    72607230        PFNIEMAIMPLMXCSRF2XMMIMM8 const pfn = g_aSseCompareF2XmmR32Imm8[iFn].pfnNative ? g_aSseCompareF2XmmR32Imm8[iFn].pfnNative : g_aSseCompareF2XmmR32Imm8[iFn].pfn;
    72617231
    7262         PRTSTREAM pStrmOut = NULL;
    7263         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseCompareF2XmmR32Imm8[iFn].pszName);
    7264         if (RT_FAILURE(rc))
    7265         {
    7266             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseCompareF2XmmR32Imm8[iFn].pszName, rc);
    7267             return RTEXITCODE_FAILURE;
    7268         }
     7232        IEMBINARYOUTPUT BinOut;
     7233        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseCompareF2XmmR32Imm8[iFn].pszName), RTEXITCODE_FAILURE);
    72697234
    72707235        uint32_t cNormalInputPairs  = 0;
     
    73197284                            TestData.bImm       = bImm;
    73207285                            TestData.OutVal     = ResM;
    7321                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7286                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    73227287
    73237288                            fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    73297294                            TestData.bImm       = bImm;
    73307295                            TestData.OutVal     = ResU;
    7331                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7296                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    73327297
    73337298                            uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    73427307                                TestData.bImm       = bImm;
    73437308                                TestData.OutVal     = Res1;
    7344                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7309                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    73457310
    73467311                                if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    73557320                                    TestData.bImm       = bImm;
    73567321                                    TestData.OutVal     = Res2;
    7357                                     RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7322                                    GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    73587323                                }
    73597324                                if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    73697334                                            TestData.bImm       = bImm;
    73707335                                            TestData.OutVal     = Res3;
    7371                                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7336                                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    73727337                                        }
    73737338                            }
    73747339                        }
    73757340        }
    7376         rc = RTStrmClose(pStrmOut);
    7377         if (RT_FAILURE(rc))
    7378         {
    7379             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseCompareF2XmmR32Imm8[iFn].pszName, rc);
    7380             return RTEXITCODE_FAILURE;
    7381         }
     7341        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    73827342    }
    73837343
     
    74727432        PFNIEMAIMPLMXCSRF2XMMIMM8 const pfn = g_aSseCompareF2XmmR64Imm8[iFn].pfnNative ? g_aSseCompareF2XmmR64Imm8[iFn].pfnNative : g_aSseCompareF2XmmR64Imm8[iFn].pfn;
    74737433
    7474         PRTSTREAM pStrmOut = NULL;
    7475         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseCompareF2XmmR64Imm8[iFn].pszName);
    7476         if (RT_FAILURE(rc))
    7477         {
    7478             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseCompareF2XmmR64Imm8[iFn].pszName, rc);
    7479             return RTEXITCODE_FAILURE;
    7480         }
     7434        IEMBINARYOUTPUT BinOut;
     7435        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseCompareF2XmmR64Imm8[iFn].pszName), RTEXITCODE_FAILURE);
    74817436
    74827437        uint32_t cNormalInputPairs  = 0;
     
    75237478                            TestData.bImm       = bImm;
    75247479                            TestData.OutVal     = ResM;
    7525                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7480                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    75267481
    75277482                            fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    75337488                            TestData.bImm       = bImm;
    75347489                            TestData.OutVal     = ResU;
    7535                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7490                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    75367491
    75377492                            uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    75467501                                TestData.bImm       = bImm;
    75477502                                TestData.OutVal     = Res1;
    7548                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7503                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    75497504
    75507505                                if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    75597514                                    TestData.bImm       = bImm;
    75607515                                    TestData.OutVal     = Res2;
    7561                                     RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7516                                    GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    75627517                                }
    75637518                                if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    75737528                                            TestData.bImm       = bImm;
    75747529                                            TestData.OutVal     = Res3;
    7575                                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7530                                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    75767531                                        }
    75777532                            }
    75787533                        }
    75797534        }
    7580         rc = RTStrmClose(pStrmOut);
    7581         if (RT_FAILURE(rc))
    7582         {
    7583             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseCompareF2XmmR64Imm8[iFn].pszName, rc);
    7584             return RTEXITCODE_FAILURE;
    7585         }
     7535        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    75867536    }
    75877537
     
    76677617        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseConvertXmmI32R32[iFn].pfnNative ? g_aSseConvertXmmI32R32[iFn].pfnNative : g_aSseConvertXmmI32R32[iFn].pfn;
    76687618
    7669         PRTSTREAM pStrmOut = NULL;
    7670         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmI32R32[iFn].pszName);
    7671         if (RT_FAILURE(rc))
    7672         {
    7673             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmI32R32[iFn].pszName, rc);
    7674             return RTEXITCODE_FAILURE;
    7675         }
     7619        IEMBINARYOUTPUT BinOut;
     7620        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmI32R32[iFn].pszName), RTEXITCODE_FAILURE);
    76767621
    76777622        X86FXSTATE State;
     
    77017646                        TestData.fMxcsrOut = ResM.MXCSR;
    77027647                        TestData.OutVal    = ResM.uResult;
    7703                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7648                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    77047649
    77057650                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    77097654                        TestData.fMxcsrOut = ResU.MXCSR;
    77107655                        TestData.OutVal    = ResU.uResult;
    7711                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7656                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    77127657
    77137658                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    77207665                            TestData.fMxcsrOut = Res1.MXCSR;
    77217666                            TestData.OutVal    = Res1.uResult;
    7722                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7667                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    77237668
    77247669                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    77317676                                TestData.fMxcsrOut = Res2.MXCSR;
    77327677                                TestData.OutVal    = Res2.uResult;
    7733                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7678                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    77347679                            }
    77357680                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    77437688                                        TestData.fMxcsrOut = Res3.MXCSR;
    77447689                                        TestData.OutVal    = Res3.uResult;
    7745                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7690                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    77467691                                    }
    77477692                        }
    77487693                    }
    77497694        }
    7750         rc = RTStrmClose(pStrmOut);
    7751         if (RT_FAILURE(rc))
    7752         {
    7753             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmI32R32[iFn].pszName, rc);
    7754             return RTEXITCODE_FAILURE;
    7755         }
     7695        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    77567696    }
    77577697
     
    78437783        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseConvertXmmR32I32[iFn].pfnNative ? g_aSseConvertXmmR32I32[iFn].pfnNative : g_aSseConvertXmmR32I32[iFn].pfn;
    78447784
    7845         PRTSTREAM pStrmOut = NULL;
    7846         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmR32I32[iFn].pszName);
    7847         if (RT_FAILURE(rc))
    7848         {
    7849             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmR32I32[iFn].pszName, rc);
    7850             return RTEXITCODE_FAILURE;
    7851         }
     7785        IEMBINARYOUTPUT BinOut;
     7786        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmR32I32[iFn].pszName), RTEXITCODE_FAILURE);
    78527787
    78537788        uint32_t cNormalInputPairs  = 0;
     
    78877822                        TestData.fMxcsrOut = ResM.MXCSR;
    78887823                        TestData.OutVal    = ResM.uResult;
    7889                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7824                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    78907825
    78917826                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    78957830                        TestData.fMxcsrOut = ResU.MXCSR;
    78967831                        TestData.OutVal    = ResU.uResult;
    7897                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7832                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    78987833
    78997834                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    79067841                            TestData.fMxcsrOut = Res1.MXCSR;
    79077842                            TestData.OutVal    = Res1.uResult;
    7908                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7843                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    79097844
    79107845                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    79177852                                TestData.fMxcsrOut = Res2.MXCSR;
    79187853                                TestData.OutVal    = Res2.uResult;
    7919                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7854                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    79207855                            }
    79217856                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    79297864                                        TestData.fMxcsrOut = Res3.MXCSR;
    79307865                                        TestData.OutVal    = Res3.uResult;
    7931                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7866                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    79327867                                    }
    79337868                        }
    79347869                    }
    79357870        }
    7936         rc = RTStrmClose(pStrmOut);
    7937         if (RT_FAILURE(rc))
    7938         {
    7939             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmR32I32[iFn].pszName, rc);
    7940             return RTEXITCODE_FAILURE;
    7941         }
     7871        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    79427872    }
    79437873
     
    80277957        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseConvertXmmI32R64[iFn].pfnNative ? g_aSseConvertXmmI32R64[iFn].pfnNative : g_aSseConvertXmmI32R64[iFn].pfn;
    80287958
    8029         PRTSTREAM pStrmOut = NULL;
    8030         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmI32R64[iFn].pszName);
    8031         if (RT_FAILURE(rc))
    8032         {
    8033             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmI32R64[iFn].pszName, rc);
    8034             return RTEXITCODE_FAILURE;
    8035         }
     7959        IEMBINARYOUTPUT BinOut;
     7960        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmI32R64[iFn].pszName), RTEXITCODE_FAILURE);
    80367961
    80377962        X86FXSTATE State;
     
    80617986                        TestData.fMxcsrOut = ResM.MXCSR;
    80627987                        TestData.OutVal    = ResM.uResult;
    8063                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7988                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    80647989
    80657990                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    80697994                        TestData.fMxcsrOut = ResU.MXCSR;
    80707995                        TestData.OutVal    = ResU.uResult;
    8071                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     7996                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    80727997
    80737998                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    80808005                            TestData.fMxcsrOut = Res1.MXCSR;
    80818006                            TestData.OutVal    = Res1.uResult;
    8082                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8007                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    80838008
    80848009                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    80918016                                TestData.fMxcsrOut = Res2.MXCSR;
    80928017                                TestData.OutVal    = Res2.uResult;
    8093                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8018                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    80948019                            }
    80958020                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    81038028                                        TestData.fMxcsrOut = Res3.MXCSR;
    81048029                                        TestData.OutVal    = Res3.uResult;
    8105                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8030                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    81068031                                    }
    81078032                        }
    81088033                    }
    81098034        }
    8110         rc = RTStrmClose(pStrmOut);
    8111         if (RT_FAILURE(rc))
    8112         {
    8113             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmI32R64[iFn].pszName, rc);
    8114             return RTEXITCODE_FAILURE;
    8115         }
     8035        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    81168036    }
    81178037
     
    81978117        PFNIEMAIMPLFPSSEF2U128 const pfn = g_aSseConvertXmmR64I32[iFn].pfnNative ? g_aSseConvertXmmR64I32[iFn].pfnNative : g_aSseConvertXmmR64I32[iFn].pfn;
    81988118
    8199         PRTSTREAM pStrmOut = NULL;
    8200         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmR64I32[iFn].pszName);
    8201         if (RT_FAILURE(rc))
    8202         {
    8203             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmR64I32[iFn].pszName, rc);
    8204             return RTEXITCODE_FAILURE;
    8205         }
     8119        IEMBINARYOUTPUT BinOut;
     8120        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmR64I32[iFn].pszName), RTEXITCODE_FAILURE);
    82068121
    82078122        uint32_t cNormalInputPairs  = 0;
     
    82378152                        TestData.fMxcsrOut = ResM.MXCSR;
    82388153                        TestData.OutVal    = ResM.uResult;
    8239                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8154                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    82408155
    82418156                        State.MXCSR = State.MXCSR & ~X86_MXCSR_XCPT_MASK;
     
    82458160                        TestData.fMxcsrOut = ResU.MXCSR;
    82468161                        TestData.OutVal    = ResU.uResult;
    8247                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8162                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    82488163
    82498164                        uint16_t fXcpt = (ResM.MXCSR | ResU.MXCSR) & X86_MXCSR_XCPT_FLAGS;
     
    82568171                            TestData.fMxcsrOut = Res1.MXCSR;
    82578172                            TestData.OutVal    = Res1.uResult;
    8258                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8173                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    82598174
    82608175                            if (((Res1.MXCSR & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (Res1.MXCSR & X86_MXCSR_XCPT_FLAGS))
     
    82678182                                TestData.fMxcsrOut = Res2.MXCSR;
    82688183                                TestData.OutVal    = Res2.uResult;
    8269                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8184                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    82708185                            }
    82718186                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    82798194                                        TestData.fMxcsrOut = Res3.MXCSR;
    82808195                                        TestData.OutVal    = Res3.uResult;
    8281                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8196                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    82828197                                    }
    82838198                        }
    82848199                    }
    82858200        }
    8286         rc = RTStrmClose(pStrmOut);
    8287         if (RT_FAILURE(rc))
    8288         {
    8289             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmR64I32[iFn].pszName, rc);
    8290             return RTEXITCODE_FAILURE;
    8291         }
     8201        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    82928202    }
    82938203
     
    83788288        PFNIEMAIMPLMXCSRU64U128 const pfn = g_aSseConvertMmXmm[iFn].pfnNative ? g_aSseConvertMmXmm[iFn].pfnNative : g_aSseConvertMmXmm[iFn].pfn;
    83798289
    8380         PRTSTREAM pStrmOut = NULL;
    8381         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertMmXmm[iFn].pszName);
    8382         if (RT_FAILURE(rc))
    8383         {
    8384             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertMmXmm[iFn].pszName, rc);
    8385             return RTEXITCODE_FAILURE;
    8386         }
     8290        IEMBINARYOUTPUT BinOut;
     8291        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertMmXmm[iFn].pszName), RTEXITCODE_FAILURE);
    83878292
    83888293        uint32_t cNormalInputPairs  = 0;
     
    84198324                        TestData.fMxcsrOut  = fMxcsrM;
    84208325                        TestData.OutVal.u   = u64ResM;
    8421                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8326                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    84228327
    84238328                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    84288333                        TestData.fMxcsrOut  = fMxcsrU;
    84298334                        TestData.OutVal.u   = u64ResU;
    8430                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8335                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    84318336
    84328337                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    84408345                            TestData.fMxcsrOut  = fMxcsr1;
    84418346                            TestData.OutVal.u   = u64Res1;
    8442                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8347                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    84438348
    84448349                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    84528357                                TestData.fMxcsrOut  = fMxcsr2;
    84538358                                TestData.OutVal.u   = u64Res2;
    8454                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8359                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    84558360                            }
    84568361                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    84658370                                        TestData.fMxcsrOut  = fMxcsr3;
    84668371                                        TestData.OutVal.u   = u64Res3;
    8467                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8372                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    84688373                                    }
    84698374                        }
    84708375                    }
    84718376        }
    8472         rc = RTStrmClose(pStrmOut);
    8473         if (RT_FAILURE(rc))
    8474         {
    8475             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertMmXmm[iFn].pszName, rc);
    8476             return RTEXITCODE_FAILURE;
    8477         }
     8377        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    84788378    }
    84798379
     
    85528452        PFNIEMAIMPLMXCSRU128U64 const pfn = g_aSseConvertXmmR64Mm[iFn].pfnNative ? g_aSseConvertXmmR64Mm[iFn].pfnNative : g_aSseConvertXmmR64Mm[iFn].pfn;
    85538453
    8554         PRTSTREAM pStrmOut = NULL;
    8555         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmR64Mm[iFn].pszName);
    8556         if (RT_FAILURE(rc))
    8557         {
    8558             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmR64Mm[iFn].pszName, rc);
    8559             return RTEXITCODE_FAILURE;
    8560         }
     8454        IEMBINARYOUTPUT BinOut;
     8455        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmR64Mm[iFn].pszName), RTEXITCODE_FAILURE);
    85618456
    85628457        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    85818476                        TestData.fMxcsrIn   = fMxcsrIn;
    85828477                        TestData.fMxcsrOut  = fMxcsrM;
    8583                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8478                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    85848479
    85858480                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    85888483                        TestData.fMxcsrIn   = fMxcsrIn;
    85898484                        TestData.fMxcsrOut  = fMxcsrU;
    8590                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8485                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    85918486
    85928487                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    85988493                            TestData.fMxcsrIn   = fMxcsrIn;
    85998494                            TestData.fMxcsrOut  = fMxcsr1;
    8600                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8495                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    86018496
    86028497                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    86088503                                TestData.fMxcsrIn   = fMxcsrIn;
    86098504                                TestData.fMxcsrOut  = fMxcsr2;
    8610                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8505                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    86118506                            }
    86128507                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    86198514                                        TestData.fMxcsrIn   = fMxcsrIn;
    86208515                                        TestData.fMxcsrOut  = fMxcsr3;
    8621                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8516                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    86228517                                    }
    86238518                        }
    86248519                    }
    86258520        }
    8626         rc = RTStrmClose(pStrmOut);
    8627         if (RT_FAILURE(rc))
    8628         {
    8629             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmR64Mm[iFn].pszName, rc);
    8630             return RTEXITCODE_FAILURE;
    8631         }
     8521        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    86328522    }
    86338523
     
    87048594        PFNIEMAIMPLMXCSRU128U64 const pfn = g_aSseConvertXmmR32Mm[iFn].pfnNative ? g_aSseConvertXmmR32Mm[iFn].pfnNative : g_aSseConvertXmmR32Mm[iFn].pfn;
    87058595
    8706         PRTSTREAM pStrmOut = NULL;
    8707         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertXmmR32Mm[iFn].pszName);
    8708         if (RT_FAILURE(rc))
    8709         {
    8710             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertXmmR32Mm[iFn].pszName, rc);
    8711             return RTEXITCODE_FAILURE;
    8712         }
     8596        IEMBINARYOUTPUT BinOut;
     8597        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertXmmR32Mm[iFn].pszName), RTEXITCODE_FAILURE);
    87138598
    87148599        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    87338618                        TestData.fMxcsrIn   = fMxcsrIn;
    87348619                        TestData.fMxcsrOut  = fMxcsrM;
    8735                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8620                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    87368621
    87378622                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    87408625                        TestData.fMxcsrIn   = fMxcsrIn;
    87418626                        TestData.fMxcsrOut  = fMxcsrU;
    8742                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8627                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    87438628
    87448629                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    87508635                            TestData.fMxcsrIn   = fMxcsrIn;
    87518636                            TestData.fMxcsrOut  = fMxcsr1;
    8752                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8637                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    87538638
    87548639                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    87608645                                TestData.fMxcsrIn   = fMxcsrIn;
    87618646                                TestData.fMxcsrOut  = fMxcsr2;
    8762                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8647                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    87638648                            }
    87648649                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    87718656                                        TestData.fMxcsrIn   = fMxcsrIn;
    87728657                                        TestData.fMxcsrOut  = fMxcsr3;
    8773                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8658                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    87748659                                    }
    87758660                        }
    87768661                    }
    87778662        }
    8778         rc = RTStrmClose(pStrmOut);
    8779         if (RT_FAILURE(rc))
    8780         {
    8781             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertXmmR32Mm[iFn].pszName, rc);
    8782             return RTEXITCODE_FAILURE;
    8783         }
     8663        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    87848664    }
    87858665
     
    88608740        PFNIEMAIMPLMXCSRU64U64 const pfn = g_aSseConvertMmI32XmmR32[iFn].pfnNative ? g_aSseConvertMmI32XmmR32[iFn].pfnNative : g_aSseConvertMmI32XmmR32[iFn].pfn;
    88618741
    8862         PRTSTREAM pStrmOut = NULL;
    8863         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSseConvertMmI32XmmR32[iFn].pszName);
    8864         if (RT_FAILURE(rc))
    8865         {
    8866             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSseConvertMmI32XmmR32[iFn].pszName, rc);
    8867             return RTEXITCODE_FAILURE;
    8868         }
     8742        IEMBINARYOUTPUT BinOut;
     8743        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSseConvertMmI32XmmR32[iFn].pszName), RTEXITCODE_FAILURE);
    88698744
    88708745        uint32_t cNormalInputPairs  = 0;
     
    89058780                        TestData.fMxcsrOut = fMxcsrM;
    89068781                        TestData.OutVal.u  = u64ResM;
    8907                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8782                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    89088783
    89098784                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
     
    89148789                        TestData.fMxcsrOut = fMxcsrU;
    89158790                        TestData.OutVal.u  = u64ResU;
    8916                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8791                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    89178792
    89188793                        uint16_t fXcpt = (fMxcsrM | fMxcsrU) & X86_MXCSR_XCPT_FLAGS;
     
    89268801                            TestData.fMxcsrOut = fMxcsr1;
    89278802                            TestData.OutVal.u  = u64Res1;
    8928                             RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8803                            GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    89298804
    89308805                            if (((fMxcsr1 & X86_MXCSR_XCPT_FLAGS) & fXcpt) != (fMxcsr1 & X86_MXCSR_XCPT_FLAGS))
     
    89388813                                TestData.fMxcsrOut = fMxcsr2;
    89398814                                TestData.OutVal.u  = u64Res2;
    8940                                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8815                                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    89418816                            }
    89428817                            if (!RT_IS_POWER_OF_TWO(fXcpt))
     
    89518826                                        TestData.fMxcsrOut = fMxcsr3;
    89528827                                        TestData.OutVal.u  = u64Res3;
    8953                                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8828                                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    89548829                                    }
    89558830                        }
    89568831                    }
    89578832        }
    8958         rc = RTStrmClose(pStrmOut);
    8959         if (RT_FAILURE(rc))
    8960         {
    8961             RTMsgError("Failed to close data file for %s: %Rrc", g_aSseConvertMmI32XmmR32[iFn].pszName, rc);
    8962             return RTEXITCODE_FAILURE;
    8963         }
     8833        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    89648834    }
    89658835
     
    90438913        PFNIEMAIMPLPCMPISTRIU128IMM8 const pfn = g_aSsePcmpistri[iFn].pfnNative ? g_aSsePcmpistri[iFn].pfnNative : g_aSsePcmpistri[iFn].pfn;
    90448914
    9045         PRTSTREAM pStrmOut = NULL;
    9046         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSsePcmpistri[iFn].pszName);
    9047         if (RT_FAILURE(rc))
    9048         {
    9049             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSsePcmpistri[iFn].pszName, rc);
    9050             return RTEXITCODE_FAILURE;
    9051         }
     8915        IEMBINARYOUTPUT BinOut;
     8916        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSsePcmpistri[iFn].pszName), RTEXITCODE_FAILURE);
    90528917
    90538918        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    90708935                TestData.fEFlagsOut = fEFlagsOut;
    90718936                TestData.bImm       = (uint8_t)u16Imm;
    9072                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8937                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    90738938            }
    90748939
     
    90858950                TestData.fEFlagsOut = fEFlagsOut;
    90868951                TestData.bImm       = (uint8_t)u16Imm;
    9087                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     8952                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    90888953            }
    90898954        }
    9090         rc = RTStrmClose(pStrmOut);
    9091         if (RT_FAILURE(rc))
    9092         {
    9093             RTMsgError("Failed to close data file for %s: %Rrc", g_aSsePcmpistri[iFn].pszName, rc);
    9094             return RTEXITCODE_FAILURE;
    9095         }
     8955        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    90968956    }
    90978957
     
    91659025        PFNIEMAIMPLPCMPISTRMU128IMM8 const pfn = g_aSsePcmpistrm[iFn].pfnNative ? g_aSsePcmpistrm[iFn].pfnNative : g_aSsePcmpistrm[iFn].pfn;
    91669026
    9167         PRTSTREAM pStrmOut = NULL;
    9168         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSsePcmpistrm[iFn].pszName);
    9169         if (RT_FAILURE(rc))
    9170         {
    9171             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSsePcmpistrm[iFn].pszName, rc);
    9172             return RTEXITCODE_FAILURE;
    9173         }
     9027        IEMBINARYOUTPUT BinOut;
     9028        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSsePcmpistrm[iFn].pszName), RTEXITCODE_FAILURE);
    91749029
    91759030        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    91929047                TestData.fEFlagsOut = fEFlagsOut;
    91939048                TestData.bImm       = (uint8_t)u16Imm;
    9194                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9049                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    91959050            }
    91969051
     
    92079062                TestData.fEFlagsOut = fEFlagsOut;
    92089063                TestData.bImm       = (uint8_t)u16Imm;
    9209                 RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9064                GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    92109065            }
    92119066        }
    9212         rc = RTStrmClose(pStrmOut);
    9213         if (RT_FAILURE(rc))
    9214         {
    9215             RTMsgError("Failed to close data file for %s: %Rrc", g_aSsePcmpistrm[iFn].pszName, rc);
    9216             return RTEXITCODE_FAILURE;
    9217         }
     9067        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    92189068    }
    92199069
     
    92899139        PFNIEMAIMPLPCMPESTRIU128IMM8 const pfn = g_aSsePcmpestri[iFn].pfnNative ? g_aSsePcmpestri[iFn].pfnNative : g_aSsePcmpestri[iFn].pfn;
    92909140
    9291         PRTSTREAM pStrmOut = NULL;
    9292         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSsePcmpestri[iFn].pszName);
    9293         if (RT_FAILURE(rc))
    9294         {
    9295             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSsePcmpestri[iFn].pszName, rc);
    9296             return RTEXITCODE_FAILURE;
    9297         }
     9141        IEMBINARYOUTPUT BinOut;
     9142        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSsePcmpestri[iFn].pszName), RTEXITCODE_FAILURE);
    92989143
    92999144        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    93249169                        TestData.fEFlagsOut = fEFlagsOut;
    93259170                        TestData.bImm       = (uint8_t)u16Imm;
    9326                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9171                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    93279172                    }
    93289173
     
    93399184                        TestData.fEFlagsOut = fEFlagsOut;
    93409185                        TestData.bImm       = (uint8_t)u16Imm;
    9341                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9186                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    93429187                    }
    93439188                }
    93449189        }
    9345         rc = RTStrmClose(pStrmOut);
    9346         if (RT_FAILURE(rc))
    9347         {
    9348             RTMsgError("Failed to close data file for %s: %Rrc", g_aSsePcmpestri[iFn].pszName, rc);
    9349             return RTEXITCODE_FAILURE;
    9350         }
     9190        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    93519191    }
    93529192
     
    94249264        PFNIEMAIMPLPCMPESTRMU128IMM8 const pfn = g_aSsePcmpestrm[iFn].pfnNative ? g_aSsePcmpestrm[iFn].pfnNative : g_aSsePcmpestrm[iFn].pfn;
    94259265
    9426         PRTSTREAM pStrmOut = NULL;
    9427         int rc = RTStrmOpenF("wb", &pStrmOut, pszDataFileFmt, g_aSsePcmpestrm[iFn].pszName);
    9428         if (RT_FAILURE(rc))
    9429         {
    9430             RTMsgError("Failed to open data file for %s for writing: %Rrc", g_aSsePcmpestrm[iFn].pszName, rc);
    9431             return RTEXITCODE_FAILURE;
    9432         }
     9266        IEMBINARYOUTPUT BinOut;
     9267        AssertReturn(GenerateBinaryOpen(&BinOut, pszDataFileFmt, g_aSsePcmpestrm[iFn].pszName), RTEXITCODE_FAILURE);
    94339268
    94349269        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
     
    94599294                        TestData.fEFlagsOut = fEFlagsOut;
    94609295                        TestData.bImm       = (uint8_t)u16Imm;
    9461                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9296                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    94629297                    }
    94639298
     
    94749309                        TestData.fEFlagsOut = fEFlagsOut;
    94759310                        TestData.bImm       = (uint8_t)u16Imm;
    9476                         RTStrmWrite(pStrmOut, &TestData, sizeof(TestData));
     9311                        GenerateBinaryWrite(&BinOut, &TestData, sizeof(TestData));
    94779312                    }
    94789313                }
    94799314        }
    9480         rc = RTStrmClose(pStrmOut);
    9481         if (RT_FAILURE(rc))
    9482         {
    9483             RTMsgError("Failed to close data file for %s: %Rrc", g_aSsePcmpestrm[iFn].pszName, rc);
    9484             return RTEXITCODE_FAILURE;
    9485         }
     9315        AssertReturn(GenerateBinaryClose(&BinOut), RTEXITCODE_FAILURE);
    94869316    }
    94879317
     
    99009730        if (fSseFpBinary)
    99019731        {
    9902             const char *pszDataFileFmt = fCommonData ? "tstIEMAImplDataSseBinary-%s.bin" : pszBitBucket;
     9732            const char * const pszDataFileFmt = fCommonData ? "tstIEMAImplDataSseBinary-%s.bin.gz" : NULL;
    99039733
    99049734            RTEXITCODE rcExit = SseBinaryR32Generate(pszDataFileFmt, cTests);
     
    99339763        if (fSseFpOther)
    99349764        {
    9935             const char *pszDataFileFmtCmp = fCommonData ? "tstIEMAImplDataSseCompare-%s.bin" : pszBitBucket;
    9936             const char *pszDataFileFmtConv = fCommonData ? "tstIEMAImplDataSseConvert-%s.bin" : pszBitBucket;
     9765            const char * const pszDataFileFmtCmp  = fCommonData ? "tstIEMAImplDataSseCompare-%s.bin.gz" : NULL;
     9766            const char * const pszDataFileFmtConv = fCommonData ? "tstIEMAImplDataSseConvert-%s.bin.gz" : NULL;
    99379767
    99389768            RTEXITCODE rcExit = SseCompareEflR32R32Generate(pszDataFileFmtCmp, cTests);
     
    99659795        if (fSsePcmpxstrx)
    99669796        {
    9967             const char *pszDataFileFmtCmp = fCommonData ? "tstIEMAImplDataSsePcmpxstrx-%s.bin" : pszBitBucket;
     9797            const char * const pszDataFileFmtCmp = fCommonData ? "tstIEMAImplDataSsePcmpxstrx-%s.bin.gz" : NULL;
    99689798
    99699799            RTEXITCODE rcExit = SseComparePcmpistriGenerate(pszDataFileFmtCmp, cTests);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette