CMSIS-DSP: Added support for Helium.
Only arm_dot_prod_f32 is currently providing an Helium implementation.
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index de00fe2..be96fef 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -7,7 +7,7 @@
 
 function(writeConfig path)
   set(output "")
-  list(APPEND output "OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION\n")
+  list(APPEND output "OPTIMIZED,HARDFP,FASTMATH,NEON,HELIUM,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION\n")
 
   if (OPTIMIZED)
     list(APPEND output "1")
@@ -33,6 +33,12 @@
     list(APPEND output ",0")
   endif()
 
+  if (HELIUM)
+    list(APPEND output ",1")
+  else()
+    list(APPEND output ",0")
+  endif()
+
   if (LOOPUNROLL)
     list(APPEND output ",1")
   else()
diff --git a/CMSIS/DSP/Testing/addToDB.py b/CMSIS/DSP/Testing/addToDB.py
index 514df54..bdf570a 100755
--- a/CMSIS/DSP/Testing/addToDB.py
+++ b/CMSIS/DSP/Testing/addToDB.py
@@ -19,7 +19,7 @@
 
 # For table creation
 MKSTRFIELD=['NAME']
-MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 MKINTFIELD=['ID', 'CYCLES']
 MKDATEFIELD=['DATE']
 MKKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
@@ -31,7 +31,7 @@
 
 # For table value extraction
 VALSTRFIELD=['NAME','VERSION']
-VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 VALINTFIELD=['ID', 'CYCLES']
 VALDATEFIELD=['DATE']
 VALKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
@@ -246,16 +246,17 @@
    conn.commit() 
 
 def addOneBenchmark(elem,fullPath,db,group):
-   full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
-   full['DATE'] = datetime.datetime.now()
-   if group:
-      tableName = group
-   else:
-      tableName = elem.data["class"]
-   conn = sqlite3.connect(db)
-   createTableIfMissing(conn,elem,tableName,full)
-   addRows(conn,elem,tableName,full)
-   conn.close()
+   if os.path.isfile(fullPath):
+      full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
+      full['DATE'] = datetime.datetime.now()
+      if group:
+         tableName = group
+      else:
+         tableName = elem.data["class"]
+      conn = sqlite3.connect(db)
+      createTableIfMissing(conn,elem,tableName,full)
+      addRows(conn,elem,tableName,full)
+      conn.close()
 
 
 def addToDB(benchmark,dbpath,elem,group):
diff --git a/CMSIS/DSP/Testing/addToRegDB.py b/CMSIS/DSP/Testing/addToRegDB.py
index 50c3e76..acbf3fd 100755
--- a/CMSIS/DSP/Testing/addToRegDB.py
+++ b/CMSIS/DSP/Testing/addToRegDB.py
@@ -19,7 +19,7 @@
 
 # For table creation
 MKSTRFIELD=['NAME','Regression']
-MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 MKINTFIELD=['ID','MAX']
 MKREALFIELD=['MAXREGCOEF']
 MKDATEFIELD=['DATE']
@@ -32,7 +32,7 @@
 
 # For table value extraction
 VALSTRFIELD=['NAME','VERSION','Regression']
-VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
 VALINTFIELD=['ID', 'MAX']
 VALREALFIELD=['MAXREGCOEF']
 VALDATEFIELD=['DATE']
@@ -257,16 +257,17 @@
    conn.commit() 
 
 def addOneBenchmark(elem,fullPath,db,group):
-   full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
-   full['DATE'] = datetime.datetime.now()
-   if group:
-      tableName = group
-   else:
-      tableName = elem.data["class"]
-   conn = sqlite3.connect(db)
-   createTableIfMissing(conn,elem,tableName,full)
-   addRows(conn,elem,tableName,full)
-   conn.close()
+   if os.path.isfile(fullPath):
+      full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
+      full['DATE'] = datetime.datetime.now()
+      if group:
+         tableName = group
+      else:
+         tableName = elem.data["class"]
+      conn = sqlite3.connect(db)
+      createTableIfMissing(conn,elem,tableName,full)
+      addRows(conn,elem,tableName,full)
+      conn.close()
 
 
 def addToDB(benchmark,dbpath,elem,group):
diff --git a/CMSIS/DSP/Testing/createDb.sql b/CMSIS/DSP/Testing/createDb.sql
index 64737b3..2c9b161 100755
--- a/CMSIS/DSP/Testing/createDb.sql
+++ b/CMSIS/DSP/Testing/createDb.sql
@@ -70,3 +70,4 @@
 INSERT INTO CORE VALUES(10,"a7","ARMCA7");
 INSERT INTO CORE VALUES(11,"a9","ARMCA9");
 INSERT INTO CORE VALUES(12,"a15","ARMCA15");
+INSERT INTO CORE VALUES(13,"helium","ARMv81MML_DSP_DP_MVE_FP");
diff --git a/CMSIS/DSP/Testing/summaryBench.py b/CMSIS/DSP/Testing/summaryBench.py
index 14cb2be..ff758bc 100644
--- a/CMSIS/DSP/Testing/summaryBench.py
+++ b/CMSIS/DSP/Testing/summaryBench.py
@@ -57,38 +57,40 @@
 
 def summaryBenchmark(resultPath,elem,path):
    regressionPath=os.path.join(os.path.dirname(path),"regression.csv")
-   print("  Generating %s" % regressionPath)
-   full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
-   #print(full)
-   
-   csvheaders = []
-   with open(os.path.join(resultPath,'currentConfig.csv'), 'r') as f:
-        reader = csv.reader(f)
-        csvheaders = next(reader, None)
 
-   groupList = list(set(elem.params.full) - set(elem.params.summary))
-   #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
-   #grouped.reset_index(level=grouped.index.names, inplace=True)
-   #print(grouped)
-   #print(grouped.columns)
+   if os.path.isfile(path):
+      print("  Generating %s" % regressionPath)
+      full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
+      #print(full)
+      
+      csvheaders = []
+      with open(os.path.join(resultPath,'currentConfig.csv'), 'r') as f:
+           reader = csv.reader(f)
+           csvheaders = next(reader, None)
+   
+      groupList = list(set(elem.params.full) - set(elem.params.summary))
+      #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
+      #grouped.reset_index(level=grouped.index.names, inplace=True)
+      #print(grouped)
+      #print(grouped.columns)
 
   
-   def reg(d):
-    m=d["CYCLES"].max()
-    results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
-    f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
-    f="".join(f)
-    f = re.sub(r':','*',f)
-    #print(results.summary())
-    return(pd.Series({'Regression':"%s" % f,'MAX' : m,'MAXREGCOEF' : results.params.values[-1]}))
-
-   regList = ['ID','OLDID','CATEGORY','NAME'] + csvheaders + groupList 
+      def reg(d):
+       m=d["CYCLES"].max()
+       results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
+       f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
+       f="".join(f)
+       f = re.sub(r':','*',f)
+       #print(results.summary())
+       return(pd.Series({'Regression':"%s" % f,'MAX' : m,'MAXREGCOEF' : results.params.values[-1]}))
    
-   regression=full.groupby(regList).apply(reg)
-   regression.reset_index(level=regression.index.names, inplace=True)
-   renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
-   regression = regression.rename(columns=renamingDict)
-   regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
+      regList = ['ID','OLDID','CATEGORY','NAME'] + csvheaders + groupList 
+      
+      regression=full.groupby(regList).apply(reg)
+      regression.reset_index(level=regression.index.names, inplace=True)
+      renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
+      regression = regression.rename(columns=renamingDict)
+      regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
 
 
 def extractBenchmarks(resultPath,benchmark,elem):
diff --git a/CMSIS/DSP/Testing/testmain.cpp b/CMSIS/DSP/Testing/testmain.cpp
index eb5014a..51d7dd1 100644
--- a/CMSIS/DSP/Testing/testmain.cpp
+++ b/CMSIS/DSP/Testing/testmain.cpp
@@ -18,9 +18,13 @@
 #include "Patterns.h"
 
 
+
 int testmain()
 {
     char *memoryBuf=NULL;
+
+
+
   
     memoryBuf = (char*)malloc(MEMSIZE);
     if (memoryBuf !=NULL)