Пример #1
0
 public HeaderFile(string cpuid)
 {
     cpuid      = cpuid.ToLowerInvariant();
     this.cpuid = cpuid;
     if (cpuid.Contains("avx") || cpuid.Contains("fma"))
     {
         ns                   = "Avx";
         fnSmaller            = Filters.isSmallerFunc(256);
         smallRegInstructions = new HeaderFile("sse-??");
     }
     else if (cpuid.StartsWith("bmi"))
     {
         ns       = "Misc";
         callConv = "";
     }
     else
     {
         ns = "Sse";
     }
 }
Пример #2
0
        public static void produce(string destFolder, DataSet dataSet)
        {
            if (!Directory.Exists(destFolder))
            {
                Directory.CreateDirectory(destFolder);
            }

            /* var noIds = dataSet.intrinsic.Where( i => i.CPUID.isEmpty() ).ToArray();
             * var manyIDs = dataSet.intrinsic.Where( i => null != i.CPUID && i.CPUID.Length > 1 ).ToArray();
             * manyIDs = manyIDs.Where( i => !i.CPUID.Any( c => c.Contains( "AVX512" ) ) ).ToArray(); */

            var all = dataSet.intrinsic.Where(i => null != i.CPUID && 1 == i.CPUID.Length).ToArray();

            Dictionary <string, HeaderFile> dict = new Dictionary <string, HeaderFile>(StringComparer.OrdinalIgnoreCase);

            foreach (var i in all)
            {
                HeaderFile header;
                string     key = i.CPUID.First().ToLowerInvariant();
                if (!shouldInclude(key))
                {
                    continue;
                }

                if (!dict.TryGetValue(key, out header))
                {
                    header    = new HeaderFile(key);
                    dict[key] = header;
                }
                header.add(i);
            }

            foreach (var kvp in dict)
            {
                string fileName = kvp.Key.ToLowerInvariant();
                kvp.Value.write(destFolder.hpp(fileName));
            }

            /* if( makeIntrinsicsHpp )
             * {
             *      using( var fs = File.CreateText( destFolder.hpp( "intrinsics" ) ) )
             *      {
             *              fs.WriteLine(
             * @"#pragma once
             * // Includes all of them, up to AVX2
             *
             # include <intrin.h>
             # include <emmintrin.h>
             # include <immintrin.h>
             # " );
             #              List<string> keys = dict.Keys.ToList();
             #              keys.Add( "fp16c" );
             #              keys.Sort();
             #              foreach( string fn in keys )
             #              {
             #                      fs.WriteLine( @"#include ""{0}.hpp""", fn );
             #              }
             #      }
             # } */

            // ExtraCode.copyExtraFiles( destFolder );
            ExtraCodeGen.generateExtras(destFolder);
        }