[Beignet] [PATCH v4] utests/CMakeList.txt: Remove kernel files which generated by utest_generator.py.

Yi Sun yi.sun at intel.com
Sun Jan 5 09:21:44 PST 2014


v1. Remove all files which generated automatically.
v2. Refine the depends of generated test cases.
v3. Fix bug that error occurs while building project outside of source folder.
v4. Put the test generator to folder utests/generated separately.

Signed-off-by: Yi Sun <yi.sun at intel.com>

diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
index 6e5ef12..524353f 100644
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -1,18 +1,9 @@
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
                     ${CMAKE_CURRENT_SOURCE_DIR}/../include)
 
-EXEC_PROGRAM(mkdir ${CMAKE_CURRENT_SOURCE_DIR} ARGS generated -p)
-##### Math Function Part:
-EXEC_PROGRAM(python ${CMAKE_CURRENT_SOURCE_DIR} ARGS utest_math_gen.py OUTPUT_VARIABLE GEN_MATH_STRING)
-string(REGEX REPLACE " " ";" ADDMATHFUNC ${GEN_MATH_STRING})
-string(REGEX REPLACE " " "\n" NAMEMATHLIST ${GEN_MATH_STRING})
-MESSAGE(STATUS "Generated Builtin Math Functions:\n" ${NAMEMATHLIST})
-set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES generated/)
-
 link_directories (${LLVM_LIBRARY_DIR})
 set (utests_sources
   utest_error.c
-  ${ADDMATHFUNC}
   compiler_basic_arithmetic.cpp
   compiler_displacement_map_element.cpp
   compiler_shader_toy.cpp
@@ -181,12 +172,13 @@ SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS}")
 SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS}")
 endif (EGL_FOUND AND MESA_SOURCE_FOUND)
 
-ADD_LIBRARY(utests SHARED ${utests_sources})
+ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources})
 
 TARGET_LINK_LIBRARIES(utests cl m ${OPENGL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
 
 ADD_EXECUTABLE(utest_run utest_run.cpp)
-TARGET_LINK_LIBRARIES(utest_run utests)
+ADD_SUBDIRECTORY(generated)
+TARGET_LINK_LIBRARIES(utest_run utests generated)
 ADD_DEPENDENCIES (utest_run kernel_bin.bin)
 
 ADD_EXECUTABLE(flat_address_space runtime_flat_address_space.cpp)
diff --git a/utests/generated/CMakeLists.txt b/utests/generated/CMakeLists.txt
new file mode 100644
index 0000000..4eee9fd
--- /dev/null
+++ b/utests/generated/CMakeLists.txt
@@ -0,0 +1,28 @@
+##### Math Function Part:
+EXEC_PROGRAM(python ${CMAKE_CURRENT_SOURCE_DIR} ARGS ./utest_math_gen.py OUTPUT_VARIABLE GEN_MATH_STRING)
+
+string(REGEX REPLACE " " "\n" GEN_MATH_ECHO ${GEN_MATH_STRING})
+string(REGEX REPLACE "([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../../kernels/\\1.cl" KERNEL_MATH_LIST ${GEN_MATH_STRING})
+string(REGEX REPLACE "([^\ ]*\\.cpp)" "${CMAKE_CURRENT_SOURCE_DIR}/\\1" GEN_MATH_CLEAN ${GEN_MATH_STRING})
+
+EXEC_PROGRAM(touch ${CMAKE_CURRENT_SOURCE_DIR} ARGS generated.bin)
+
+MESSAGE(STATUS "Generated Builtin Math Functions:\n" ${GEN_MATH_ECHO})
+
+string(REGEX REPLACE " " ";" KERNEL_MATH_LIST ${KERNEL_MATH_LIST})
+string(REGEX REPLACE " " ";" GEN_MATH_CLEAN ${GEN_MATH_CLEAN})
+
+set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GEN_MATH_CLEAN};${KERNEL_MATH_LIST};${CMAKE_CURRENT_SOURCE_DIR}/utest_generator.pyc")
+
+add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/generated.bin
+    COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/utest_math_gen.py >& /dev/null
+    )
+
+add_custom_target(utest_generator
+    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generated.bin
+    COMMAND touch  ${CMAKE_CURRENT_SOURCE_DIR}/generated.bin
+    )
+
+AUX_SOURCE_DIRECTORY(. SRC_LIST)
+ADD_LIBRARY(generated SHARED ${SRC_LIST})
+ADD_DEPENDENCIES (generated utest_generator)
diff --git a/utests/generated/utest_generator.py b/utests/generated/utest_generator.py
new file mode 100644
index 0000000..f950501
--- /dev/null
+++ b/utests/generated/utest_generator.py
@@ -0,0 +1,382 @@
+#!/usr/bin/python
+import os,sys,re
+
+FLT_MAX_POSI='0x1.fffffep127f'
+FLT_MIN_NEGA='-0x1.fffffep127f'
+FLT_MIN_POSI='0x1.0p-126f'
+FLT_MAX_NEGA='-0x1.0p-126f'
+
+paraTypeList={'float':'%.20f','int':'%d','double':'%lf','uint':'%d','string':'%s'}
+
+
+def ulpUnit(ulpSize):
+  return re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
+
+def ulpNum(ulpSize):
+  return re.findall(r"([0-9]+)",ulpSize)[0]
+
+def udebug(ulpSize,returnType):
+  #ulpUnit=re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
+  #ulpNum=re.findall(r"([0-9]+)",ulpSize)[0]
+  text='''
+    static const char* INFORNAN;
+    static %s ULPSIZE;
+
+    if (isinf(cpu_data[index])){
+      INFORNAN="INF";
+    }
+    else if (isnan(cpu_data[index])){
+      INFORNAN="NAN";
+    }
+    else{
+      ULPSIZE=cl_%s(cpu_data[index]) * %s;
+    }
+
+#if udebug
+    if (isinf(cpu_data[index])){
+      if (isinf(gpu_data[index]))
+        printf("%s expect:%s\\n", log, INFORNAN);
+      else
+        printf_c("%s expect:%s\\n", log, INFORNAN);
+      }
+    else if (isnan(cpu_data[index])){
+      if (isnan(gpu_data[index]))
+        printf("%s expect:%s\\n", log, INFORNAN);
+      else
+        printf_c("%s expect:%s\\n", log, INFORNAN);
+      }
+    else if (diff <= ULPSIZE){
+      printf("%s expect:%s\\n", log, ULPSIZE);
+      }
+    else
+      printf_c("%s expect:%s\\n", log, ULPSIZE);
+#else
+    if (isinf(cpu_data[index])){
+      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
+      OCL_ASSERTM(isinf(gpu_data[index]),log);
+      }
+    else if (isnan(cpu_data[index])){
+      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
+      OCL_ASSERTM(isnan(gpu_data[index]),log);
+      }
+    else{
+      sprintf(log, "%s expect:%s\\n", log, ULPSIZE);
+      OCL_ASSERTM(fabs(gpu_data[index]-cpu_data[index]) <= ULPSIZE, log);
+      }
+#endif
+  }
+}\n'''%(returnType,\
+        ulpUnit(ulpSize),ulpNum(ulpSize),\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)])
+
+  return text
+
+def gene2ValuesLoop(values1,values2,inputValues):
+  values2=values2+inputValues*len(inputValues)
+
+  for i in inputValues:
+    for j in range(0,len(inputValues)):
+      values1 += [i]
+
+  return values1,values2
+
+def gene3ValuesLoop(values1,values2,values3,inputValues):
+  for i in inputValues:
+    for j in range(0,len(inputValues)):
+      for k in range(0,len(inputValues)):
+        values1 += [i]
+
+  for i in inputValues:
+    for j in inputValues:
+      for k in range(0,len(inputValues)):
+        values2 += [j]
+
+  values3=inputValues*(len(inputValues)**2)
+  return values1,values2,values3
+
+class func:
+  """ This class will define all needed instance attribute in fundation a c programing file. """
+
+  def __init__(self,name,cpuFuncName,inputType,outputType,values,ulp, cpu_func=''):
+    self.funcName = name
+    self.cpuFuncName = cpuFuncName
+    self.fileName = 'builtin_'+name
+    self.inputtype = inputType
+    self.outputtype = outputType
+    self.values = values
+    self.ulp = ulp
+    self.cpufunc=cpu_func
+    self.cpplines = []
+
+#####cpp file required information:
+    self.Head='''/*
+This file is generated by utest_generator.py.
+Usually you need NOT modify this file manually.
+But when any bug occured, you can change the value of udebug from 0 to 1,
+which can print more values and information to assist debuging the issue.
+*/
+
+#include "utest_helper.hpp"
+#include <stdio.h>
+#include <math.h>
+#include <algorithm>
+
+#define udebug 0
+#define FLT_MAX 0x1.fffffep127f
+#define FLT_MIN 0x1.0p-126f
+#define INT_ULP 0
+
+#define printf_c(...) \\
+{\\
+  printf("\\033[1m\\033[40;31m");\\
+  printf( __VA_ARGS__ );\\
+  printf("\\033[0m");\\
+}
+'''
+    #########Execute class itself
+    self.geneProcess()
+
+#####Computer vector && argument type:
+  def argtype(self,paraN,index):
+    return re.findall(r"[a-zA-Z_]+",self.inputtype[paraN][index])[0]
+
+  def argvector(self,paraN,index):
+    vector=re.findall(r"[0-9]+",self.inputtype[paraN][index])
+    if vector:
+      vector=vector[0]
+    else:
+      vector=1
+    return vector
+
+  def returnVector(self,index):
+    returnVector=re.findall(r"[0-9]+",self.outputtype[index])
+    if returnVector:
+      returnVector=returnVector[0]
+    else:
+      returnVector=1
+    return returnVector
+
+  def retType(self,index):
+    return re.findall("[a-zA-Z_]+",self.outputtype[index])[0]
+
+  def inputNumFormat(self,paraN,index):
+    return paraTypeList['%s'%(self.argtype(paraN,index))]
+
+  def outputNumFormat(self,index):
+    return paraTypeList['%s'%(self.retType(index))]
+
+#####Cpu values analyse
+  def GenInputValues(self,index):
+    #namesuffix=self.inputtype[0][index]
+    for i in range(0,self.values.__len__()):
+      self.cpplines += [ "const %s input_data%d[] = {%s};" %(self.argtype(i,index),i+1,str(self.values[i]).strip('[]').replace('\'','')) ]
+    self.cpplines += [ "const int count_input = sizeof(input_data1) / sizeof(input_data1[0]);" ]
+    self.cpplines += [ "const int vector = %s;\n"%(self.argvector(self.inputtype.__len__()-1,index)) ]
+
+#####Cpu Function
+  def GenCpuCompilerMath(self,index):
+    #namesuffix=self.inputtype[0][index]
+    defline='static void cpu_compiler_math(%s *dst, '%(self.retType(index))
+    cpufunargs='('
+    funcline = ['{']
+    vectorargs=[]
+
+    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
+      for i in range(0,self.values.__len__()):
+        defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
+        defline += ( i == self.values.__len__()-1 ) and ')' or ','
+        vectorargs.append('(')
+      for i in range(0,self.values.__len__()):
+        for j in range(0,self.vector):
+          vectorargs += "x%d%d"%(i+1,j+1)
+          vectorargs += ( j == self.vector-1 ) and ');' or ','
+          funcline += ["  const %s x%d%d = *(src%d+%d);"%(self.argtype(i,index),i+1,j+1,i+1,j)]
+
+      return 0
+
+    for i in range(0,self.values.__len__()):
+      defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
+      defline += ( i == self.values.__len__()-1 ) and ')' or ','
+      cpufunargs += "x%d"%(i+1)
+      cpufunargs += ( i == self.values.__len__()-1 ) and ');' or ','
+      funcline += ["  const %s x%d = *src%d;"%(self.argtype(i,index),i+1,i+1)]
+
+    funcline += [ "  dst[0] = %s%s"%(self.cpuFuncName, cpufunargs) ]
+    funcline += [ '}']
+
+    funcline = [defline] + funcline
+
+    self.cpplines += funcline
+#    self.writeCPP( '\n'.join(funcline), 'a', namesuffix)
+
+  def writeCPP(self,content,authority,namesuffix):
+    path_abs = os.path.dirname(__file__)
+    if not os.path.isdir(path_abs):
+      os.makedir(path_abs)
+
+    file_object = open(path_abs + "/%s_%s.cpp"%(self.fileName,namesuffix),authority)
+    file_object.writelines(content)
+    file_object.close()
+
+  def writeCL(self,content,authority,namesuffix):
+    path_abs = os.path.dirname(__file__)
+    if not os.path.isdir(path_abs + "/../../kernels"):
+      os.makedir(path_abs + "/../../kernels")
+
+    file_object = open(path_abs + "/../../kernels/%s_%s.cl"%(self.fileName,namesuffix),authority)
+    file_object.writelines(content)
+    file_object.close()
+
+  def nameForCmake(self,content,namesuffix):
+    print("%s_%s.cpp"%(self.fileName,namesuffix)),
+
+  def utestFunc(self,index):
+    funcLines=[]
+    namesuffix=self.inputtype[0][index]
+    funcline=[]
+    funchead='''
+static void %s_%s(void)
+{
+  int index;
+  %s gpu_data[count_input] = {0}, cpu_data[count_input] = {0}, diff=0.0;
+  char log[1024] = {0};
+
+  OCL_CREATE_KERNEL(\"%s_%s\");
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL);
+
+  globals[0] = count_input;
+  locals[0] = 1;
+ '''%(self.fileName,namesuffix,\
+     self.retType(index),\
+     self.fileName, namesuffix,\
+     self.retType(index))
+
+    funcline += [funchead]
+    for i in range(1,self.values.__len__()+1):
+      funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL);"%(i,self.argtype(i-1,index))]
+      funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, count_input * sizeof(%s), input_data%d, 0, NULL, NULL);"%(i,self.argtype(i-1,index),i)]
+
+    funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, sizeof(int), NULL);"%(self.inputtype.__len__()+1)]
+    funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, sizeof(int), &vector, 0, NULL, NULL);"%(self.inputtype.__len__()+1)]
+
+	#0=output 1=input1 2=input2 ... len+2=output
+    for i in range(0,self.values.__len__()+2):
+      funcline += ["  OCL_SET_ARG(%d, sizeof(cl_mem), &buf[%d]);"%(i,i)]
+
+    funcrun='''
+  // Run the kernel:
+  OCL_NDRANGE( 1 );
+  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(%s) * count_input, gpu_data, 0, NULL, NULL);
+'''%(self.inputtype.__len__()+1)
+    funcline += [ funcrun ]
+
+    funcsprintfa='    sprintf(log, \"'
+    funcsprintfb=''
+    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
+      funccompare='''
+  for (index = 0; index < count_input/vector; index++)
+  {
+    cpu_compiler_math( cpu_data + index, '''
+    else:
+      funccompare='''
+  for (index = 0; index < count_input; index++)
+  {
+    cpu_compiler_math( cpu_data + index,'''
+
+    for i in range(0,self.values.__len__()):
+      funccompare += " input_data%d + index"%(i+1)
+      funccompare += (self.values.__len__() - 1 == i) and ');' or ','
+
+      funcsprintfa += "input_data%d:"%(i+1)
+      funcsprintfa += "%s "%(self.inputNumFormat(i,index))
+      funcsprintfb += " input_data%d[index],"%(i+1)
+
+    funcline += [ funccompare ]
+
+    funcsprintfa += " -> gpu:%s  cpu:%s diff:%s\","%(self.outputNumFormat(index),self.outputNumFormat(index),self.outputNumFormat(index))#,self.outputNumFormat(index))
+    funcsprintfb += " gpu_data[index], cpu_data[index], diff);"#%(ulpUnit(self.ulp),ulpNum(self.ulp))
+
+    #funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index])"
+    #funcdiff += (self.retType(index) == "int") and ');' or '/(cpu_data[index]>1?cpu_data[index]:1));'
+    funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index]));"
+    funcline += [ funcdiff ]
+    funcline += [ funcsprintfa + funcsprintfb ]
+
+    self.cpplines += funcline
+
+    self.cpplines += [ udebug(self.ulp,self.retType(index)) ]
+    self.cpplines += [ "MAKE_UTEST_FROM_FUNCTION(%s_%s)"%(self.fileName,namesuffix) ]
+
+  def genCL(self,index):
+    namesuffix=self.inputtype[0][index]
+    clLine = []
+    clhead = '__kernel void %s_%s(__global %s *dst, '%(self.fileName,namesuffix,self.retType(index))
+    clvalueDef=''
+    clcomputer=''
+    tmp=''
+
+    for i in range(0,self.values.__len__()):
+      clhead += ' __global %s *src%d,'%(self.argtype(i,index),i+1)
+      clvalueDef +=   '  %s x%d = (%s) ('%(self.inputtype[i][index],i+1,self.inputtype[i][index])
+      tmp = 'src%d[i * (*vector) + '%(i+1)
+      for j in range(0,int(self.argvector(i,index))):
+        clvalueDef += tmp + ((int(self.argvector(i-1,index)) == j+1 ) and '%d]);\n'%(j) or '%d],'%(j))
+      clcomputer += (self.values.__len__() == i+1) and 'x%d);'%(i+1) or 'x%d,'%(i+1)
+
+    clhead += ' __global int *vector) {\n'
+    clhead += '  int i = get_global_id(0);'
+    clLine += [ clhead ]
+    clLine += [ clvalueDef ]
+    clLine += [ '  %s ret;'%(self.outputtype[index]) ]
+    clLine += [ '  ret = %s('%(self.funcName) + clcomputer ]
+
+    if (int(self.returnVector(index)) == 1):
+      clLine += [ '  dst[i] = ret;' ]
+    else:
+      for i in range(0,int(self.returnVector(index))):
+        clLine += [ '  dst[i * (*vector) + %d] = ret[%d];'%(i,i) ]
+    clLine += [ '};' ]
+
+    self.writeCL('\n'.join(clLine),'w',namesuffix)
+
+  def geneProcess(self):
+    for i in range(0,self.inputtype[0].__len__()):
+##########Write Cpp file
+      namesuffix=self.inputtype[0][i]
+      self.cpplines = []
+      #The head:
+      self.cpplines += [self.Head]
+
+      #Parameters:
+      self.GenInputValues(i)
+
+      #cpu function generator:
+      self.cpplines += [self.cpufunc]
+
+      #Cpu function:
+      self.GenCpuCompilerMath(i)
+
+      #utest function
+      self.utestFunc(i)
+
+      #kernel cl
+      self.genCL(i)
+
+      #CMakelists.txt
+      self.nameForCmake(self.fileName,namesuffix)
+
+      self.writeCPP( '\n'.join(self.cpplines) ,'w',namesuffix)
+#########End
+
+#def main():
+#
+#if __name__ == "__main__":
+#  main()
diff --git a/utests/generated/utest_math_gen.py b/utests/generated/utest_math_gen.py
new file mode 100755
index 0000000..aa4eb2b
--- /dev/null
+++ b/utests/generated/utest_math_gen.py
@@ -0,0 +1,531 @@
+#!/usr/bin/python
+from utest_generator import *
+import os,sys
+
+#base_input_values = [80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+#extend_input_values = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+
+#func:
+#    gpufuncName
+#    cpuFuncName
+#    fileName: 'builtin_'+name
+#    inputtype: a 2-D list because there're more than one input data
+#    outputtype: a list
+#    values
+#    ulp
+
+base_input_values = [ 0, 1, 3.14]
+def main():
+  ##### gentype acos(gentype)
+  acos_input_values = base_input_values
+  acos_input_type = ['float','float2','float4','float8','float16']
+  acos_output_type = ['float','float2','float4','float8','float16']
+  acosUtests = func('acos','acos',[acos_input_type],acos_output_type,[acos_input_values],'4 * FLT_ULP')
+
+  ##### gentype acosh(gentype)
+  acosh_input_values = base_input_values
+  acosh_input_type = ['float','float2','float4','float8','float16']
+  acosh_output_type = ['float','float2','float4','float8','float16']
+  acoshUtests = func('acosh','acosh',[acosh_input_type],acosh_output_type,[acosh_input_values],'4 * FLT_ULP')
+
+  ##### gentype acospi(gentype x)
+  acospi_input_values = base_input_values
+  acospi_input_type = ['float','float2','float4','float8','float16']
+  acospi_output_type = ['float','float2','float4','float8','float16']
+  acospi_cpu_func='''
+static float acospi(float x){
+  return acos(x)/M_PI;
+} '''
+  acospiUtests = func('acospi','acospi',[acospi_input_type],acospi_output_type,[acospi_input_values],'4 * FLT_ULP',acospi_cpu_func)
+
+  ##### gentype asin(gentype)
+  asin_input_values = base_input_values
+  asin_input_type = ['float','float2','float4','float8','float16']
+  asin_output_type = ['float','float2','float4','float8','float16']
+  asinUtests = func('asin','asin',[asin_input_type],asin_output_type,[asin_input_values],'4 * FLT_ULP')
+
+  ##### gentype asinh(gentype)
+  asinh_input_values = base_input_values
+  asinh_input_type = ['float','float2','float4','float8','float16']
+  asinh_output_type = ['float','float2','float4','float8','float16']
+  asinhUtests = func('asinh','asinh',[asinh_input_type],asinh_output_type,[asinh_input_values],'4 * FLT_ULP')
+
+  ##### gentype asinpi(gentype x)
+  asinpi_input_values = base_input_values
+  asinpi_input_type = ['float','float2','float4','float8','float16']
+  asinpi_output_type = ['float','float2','float4','float8','float16']
+  asinpi_cpu_func='''
+static float asinpi(float x){
+  return asin(x)/M_PI;
+} '''
+  asinpiUtests = func('asinpi','asinpi',[asinpi_input_type],asinpi_output_type,[asinpi_input_values],'4 * FLT_ULP',asinpi_cpu_func)
+
+  ##### gentype atan(gentype y_over_x)
+  atan_input_values = base_input_values
+  atan_input_type = ['float','float2','float4','float8','float16']
+  atan_output_type = ['float','float2','float4','float8','float16']
+  atanUtests = func('atan','atan',[atan_input_type],atan_output_type,[atan_input_values],'5 * FLT_ULP')
+
+  ##### gentype atan2(gentype y, gentype x)
+  atan2_base_values = base_input_values
+  atan2_input_values1 = []
+  atan2_input_values2 = []
+  atan2_input_values1,atan2_input_values2=gene2ValuesLoop(atan2_input_values1,atan2_input_values2,atan2_base_values)
+  atan2_input_type1 = ['float','float2','float4','float8','float16']
+  atan2_input_type2 = ['float','float2','float4','float8','float16']
+  atan2_output_type = ['float','float2','float4','float8','float16']
+  atan2Utests = func('atan2','atan2',[atan2_input_type1,atan2_input_type2],atan2_output_type,[atan2_input_values1,atan2_input_values2],'6 * FLT_ULP')
+
+  ##### gentype atanh(gentype)
+  atanh_input_values = base_input_values
+  atanh_input_type = ['float','float2','float4','float8','float16']
+  atanh_output_type = ['float','float2','float4','float8','float16']
+  atanhUtests = func('atanh','atanh',[atanh_input_type],atanh_output_type,[atanh_input_values],'5 * FLT_ULP')
+
+  ##### gentype atanpi(gentype x)
+  atanpi_input_values = base_input_values
+  atanpi_input_type = ['float','float2','float4','float8','float16']
+  atanpi_output_type = ['float','float2','float4','float8','float16']
+  atanpi_cpu_func='''
+static float atanpi(float x){
+  return atan(x)/M_PI;
+} '''
+  atanpiUtests = func('atanpi','atanpi',[atanpi_input_type],atanpi_output_type,[atanpi_input_values],'4 * FLT_ULP',atanpi_cpu_func)
+
+#  ##### gentype atan2pi(gentype y, gentype x)
+#  atan2pi_base_values = base_input_values
+#  atan2pi_input_values1 = []
+#  atan2pi_input_values2 = []
+#  atan2pi_input_values1,atan2pi_input_values2=gene2ValuesLoop(atan2pi_input_values1,atan2pi_input_values2,atan2pi_base_values)
+#  atan2pi_input_type1 = ['float','float2','float4','float8','float16']
+#  atan2pi_input_type2 = ['float','float2','float4','float8','float16']
+#  atan2pi_output_type = ['float','float2','float4','float8','float16']
+#  atan2pi_cpu_func='''
+#static float atan2pi(float y, float x){
+#  return atan2(y,x)/M_PI;
+#} '''
+#  atan2piUtests = func('atan2pi','atan2pi',[atan2pi_input_type1,atan2pi_input_type2],atan2pi_output_type,[atan2pi_input_values1,atan2pi_input_values2],'6 * FLT_ULP',atan2pi_cpu_func)
+
+  ##### gentype cbrt(gentype)
+  cbrt_input_values = base_input_values
+  cbrt_input_type = ['float','float2','float4','float8','float16']
+  cbrt_output_type = ['float','float2','float4','float8','float16']
+  cbrtUtests = func('cbrt','cbrt',[cbrt_input_type],cbrt_output_type,[cbrt_input_values],'4 * FLT_ULP')
+
+  ##### gentype ceil(gentype)
+  ceil_input_values = base_input_values
+  ceil_input_type = ['float','float2','float4','float8','float16']
+  ceil_output_type = ['float','float2','float4','float8','float16']
+  ceilUtests = func('ceil','ceil',[ceil_input_type],ceil_output_type,[ceil_input_values],'0 * FLT_ULP')
+
+  ##### gentype copysign(gentype x, gentype y)
+  copysign_base_values = base_input_values
+  copysign_input_values1 = []
+  copysign_input_values2 = []
+  copysign_input_values1,copysign_input_values2=gene2ValuesLoop(copysign_input_values1,copysign_input_values2,copysign_base_values)
+  copysign_input_type1 = ['float','float2','float4','float8','float16']
+  copysign_input_type2 = ['float','float2','float4','float8','float16']
+  copysign_output_type = ['float','float2','float4','float8','float16']
+  copysignUtests = func('copysign','copysign',[copysign_input_type1,copysign_input_type2],copysign_output_type,[copysign_input_values1,copysign_input_values2],'0 * FLT_ULP')
+
+  ##### gentype cos(gentype)
+  cos_input_values = base_input_values
+  cos_input_type = ['float','float2','float4','float8','float16']
+  cos_output_type = ['float','float2','float4','float8','float16']
+  cosUtests = func('cos','cos',[cos_input_type],cos_output_type,[cos_input_values],'4 * FLT_ULP')
+
+  ##### gentype cosh(gentype)
+  cosh_input_values = base_input_values
+  cosh_input_type = ['float','float2','float4','float8','float16']
+  cosh_output_type = ['float','float2','float4','float8','float16']
+  coshUtests = func('cosh','cosh',[cosh_input_type],cosh_output_type,[cosh_input_values],'4 * FLT_ULP')
+
+  ##### gentype cospi(gentype x)
+  cospi_input_values = base_input_values
+  cospi_input_type = ['float','float2','float4','float8','float16']
+  cospi_output_type = ['float','float2','float4','float8','float16']
+  cospi_cpu_func='''
+static float cospi(float x){
+  return cos(M_PI * x);
+} '''
+  cospiUtests = func('cospi','cospi',[cospi_input_type],cospi_output_type,[cospi_input_values],'2 * FLT_ULP',cospi_cpu_func)
+
+  ##### gentype erf(gentype)
+  erf_input_values = base_input_values
+  erf_input_type = ['float','float2','float4','float8','float16']
+  erf_output_type = ['float','float2','float4','float8','float16']
+  erfUtests = func('erf','erf',[erf_input_type],erf_output_type,[erf_input_values],'16 * FLT_ULP')
+
+  ##### gentype erfc(gentype)
+  erfc_input_values = base_input_values
+  erfc_input_type = ['float','float2','float4','float8','float16']
+  erfc_output_type = ['float','float2','float4','float8','float16']
+  erfcUtests = func('erfc','erfc',[erfc_input_type],erfc_output_type,[erfc_input_values],'16 * FLT_ULP')
+
+  ##### gentype exp(gentype x)
+  exp_input_values = base_input_values
+  exp_input_type = ['float','float2','float4','float8','float16']
+  exp_output_type = ['float','float2','float4','float8','float16']
+  expUtests = func('exp','exp',[exp_input_type],exp_output_type,[exp_input_values],'4 * FLT_ULP')
+
+  ##### gentype exp2(gentype)
+  exp2_input_values = base_input_values
+  exp2_input_type = ['float','float2','float4','float8','float16']
+  exp2_output_type = ['float','float2','float4','float8','float16']
+  exp2Utests = func('exp2','exp2',[exp2_input_type],exp2_output_type,[exp2_input_values],'4 * FLT_ULP')
+
+  ##### gentype exp10(gentype)
+  exp10_input_values = base_input_values
+  exp10_input_type = ['float','float2','float4','float8','float16']
+  exp10_output_type = ['float','float2','float4','float8','float16']
+  exp10Utests = func('exp10','exp10',[exp10_input_type],exp10_output_type,[exp10_input_values],'4 * FLT_ULP')
+
+  ##### gentype expm1(gentype x)
+  expm1_input_values = base_input_values
+  expm1_input_type = ['float','float2','float4','float8','float16']
+  expm1_output_type = ['float','float2','float4','float8','float16']
+  expm1Utests = func('expm1','expm1',[expm1_input_type],expm1_output_type,[expm1_input_values],'4 * FLT_ULP')
+
+  ##### gentype fabs(gentype)
+  fabs_input_values = base_input_values
+  fabs_input_type = ['float','float2','float4','float8','float16']
+  fabs_output_type = ['float','float2','float4','float8','float16']
+  fabsUtests = func('fabs','fabs',[fabs_input_type],fabs_output_type,[fabs_input_values],'0 * FLT_ULP')
+
+  ##### gentype fdim(gentype x, gentype y)
+  fdim_base_values = base_input_values
+  fdim_input_values1 = []
+  fdim_input_values2 = []
+  fdim_input_values1,fdim_input_values2=gene2ValuesLoop(fdim_input_values1,fdim_input_values2,fdim_base_values)
+  fdim_input_type1 = ['float','float2','float4','float8','float16']
+  fdim_input_type2 = ['float','float2','float4','float8','float16']
+  fdim_output_type = ['float','float2','float4','float8','float16']
+  fdimUtests = func('fdim','fdim',[fdim_input_type1,fdim_input_type2],fdim_output_type,[fdim_input_values1,fdim_input_values2],'0 * FLT_ULP')
+
+  ##### gentype floor(gentype)
+  floor_input_values = base_input_values
+  floor_input_type = ['float','float2','float4','float8','float16']
+  floor_output_type = ['float','float2','float4','float8','float16']
+  floorUtests = func('floor','floor',[floor_input_type],floor_output_type,[floor_input_values],'0 * FLT_ULP')
+
+  ##### gentype fma(gentype a, gentype b, gentype c)
+  fma_base_values = base_input_values
+  fma_input_values1 = []
+  fma_input_values2 = []
+  fma_input_values3 = []
+  fma_input_values1,fma_input_values2,fma_input_values3=gene3ValuesLoop(fma_input_values1,fma_input_values2,fma_input_values3,fma_base_values)
+  fma_input_type1 = ['float','float2','float4','float8','float16']
+  fma_input_type2 = ['float','float2','float4','float8','float16']
+  fma_input_type3 = ['float','float2','float4','float8','float16']
+  fma_output_type = ['float','float2','float4','float8','float16']
+  fmaUtests = func('fma','fma',[fma_input_type1,fma_input_type2,fma_input_type3],fma_output_type,[fma_input_values1,fma_input_values2,fma_input_values3],'0 * FLT_ULP')
+
+  ##### gentype fmax(gentype x, gentype y)
+  fmax_base_values = base_input_values
+  fmax_input_values1 = []
+  fmax_input_values2 = []
+  fmax_input_values1,fmax_input_values2=gene2ValuesLoop(fmax_input_values1,fmax_input_values2,fmax_base_values)
+  fmax_input_type1 = ['float','float2','float4','float8','float16']
+  fmax_input_type2 = ['float','float2','float4','float8','float16']
+  fmax_output_type = ['float','float2','float4','float8','float16']
+  fmaxUtests = func('fmax','fmax',[fmax_input_type1,fmax_input_type2],fmax_output_type,[fmax_input_values1,fmax_input_values2],'0 * FLT_ULP')
+
+  ##### gentypef fmax(gentypef x, float y)
+#  fmax_gentypef_base_values = base_input_values
+#  fmax_gentypef_input_values1 = []
+#  fmax_gentypef_input_values2 = []
+#  fmax_gentypef_input_values2,fmax_gentypef_input_values1=gene2ValuesLoop(fmax_gentypef_input_values1,fmax_gentypef_input_values2,fmax_gentypef_base_values)
+#  fmax_gentypef_input_type1 = ['float','float2','float4','float8','float16']
+#  fmax_gentypef_input_type2 = ['float','float','float','float','float']
+#  fmax_gentypef_output_type = ['float','float2','float4','float8','float16']
+#  ##### gentypef fmax(gentypef x, float y)
+#  fmax_gentypefUtests = func('gentypef_fmax','gentypef_fmax',[fmax_gentypef_input_type1,fmax_gentypef_input_type2],fmax_gentypef_output_type,[fmax_gentypef_input_values1,fmax_gentypef_input_values2],'0 * FLT_ULP')
+
+  ##### gentype fmin(gentype x, gentype y)
+  fmin_base_values = base_input_values
+  fmin_input_values1 = []
+  fmin_input_values2 = []
+  fmin_input_values1,fmin_input_values2=gene2ValuesLoop(fmin_input_values1,fmin_input_values2,fmin_base_values)
+  fmin_input_type1 = ['float','float2','float4','float8','float16']
+  fmin_input_type2 = ['float','float2','float4','float8','float16']
+  fmin_output_type = ['float','float2','float4','float8','float16']
+  fminUtests = func('fmin','fmin',[fmin_input_type1,fmin_input_type2],fmin_output_type,[fmin_input_values1,fmin_input_values2],'0 * FLT_ULP')
+
+#  ##### gentypef fmin(gentypef x, float y)
+#  fmin_gentypef_base_values = base_input_values
+#  fmin_gentypef_input_values1 = []
+#  fmin_gentypef_input_values2 = []
+#  fmin_gentypef_input_values2,fmin_gentypef_input_values1=gene2ValuesLoop(fmin_gentypef_input_values1,fmin_gentypef_input_values2,fmin_gentypef_base_values)
+#  fmin_gentypef_input_type1 = ['float','float2','float4','float8','float16']
+#  fmin_gentypef_input_type2 = ['float','float','float','float','float']
+#  fmin_gentypef_output_type = ['float','float2','float4','float8','float16']
+#  ##### gentypef fmin(gentypef x, float y)
+#  fmin_gentypefUtests = func('gentypef_fmin','gentypef_fmin',[fmin_gentypef_input_type1,fmin_gentypef_input_type2],fmin_gentypef_output_type,[fmin_gentypef_input_values1,fmin_gentypef_input_values2],'0 * FLT_ULP')
+#
+  ##### gentype fmod(gentype x, gentype y)
+  fmod_base_values = base_input_values
+  fmod_input_values1 = []
+  fmod_input_values2 = []
+  fmod_input_values1,fmod_input_values2=gene2ValuesLoop(fmod_input_values1,fmod_input_values2,fmod_base_values)
+  fmod_input_type1 = ['float','float2','float4','float8','float16']
+  fmod_input_type2 = ['float','float2','float4','float8','float16']
+  fmod_output_type = ['float','float2','float4','float8','float16']
+  fmodUtests = func('fmod','fmod',[fmod_input_type1,fmod_input_type2],fmod_output_type,[fmod_input_values1,fmod_input_values2],'0 * FLT_ULP')
+
+  ##### gentype hypot(gentype x, gentype y)
+  hypot_base_values = base_input_values
+  hypot_input_values1 = []
+  hypot_input_values2 = []
+  hypot_input_values1,hypot_input_values2=gene2ValuesLoop(hypot_input_values1,hypot_input_values2,hypot_base_values)
+  hypot_input_type1 = ['float','float2','float4','float8','float16']
+  hypot_input_type2 = ['float','float2','float4','float8','float16']
+  hypot_output_type = ['float','float2','float4','float8','float16']
+  hypotUtests = func('hypot','hypot',[hypot_input_type1,hypot_input_type2],hypot_output_type,[hypot_input_values1,hypot_input_values2],'4 * FLT_ULP')
+
+  ##### intn ilogb(floartn x)
+  ilogb_input_values = base_input_values
+  ilogb_input_type = ['float','float2','float4','float8','float16']
+  ilogb_output_type = ['int','int2','int4','int8','int16']
+  ilogbUtests = func('ilogb','ilogb',[ilogb_input_type],ilogb_output_type,[ilogb_input_values],'0 * INT_ULP')
+
+  ##### gentype lgamma(gentype x)
+  lgamma_input_values = base_input_values
+  lgamma_input_type = ['float','float2','float4','float8','float16']
+  lgamma_output_type = ['float','float2','float4','float8','float16']
+  lgammaUtests = func('lgamma','lgamma',[lgamma_input_type],lgamma_output_type,[lgamma_input_values],'4 * FLT_ULP')
+
+  ##### gentype log(gentype)
+  log_input_values = base_input_values
+  log_input_type = ['float','float2','float4','float8','float16']
+  log_output_type = ['float','float2','float4','float8','float16']
+  logUtests = func('log','log',[log_input_type],log_output_type,[log_input_values],'4 * FLT_ULP')
+
+  ##### gentype log2(gentype)
+  log2_input_values = base_input_values
+  log2_input_type = ['float','float2','float4','float8','float16']
+  log2_output_type = ['float','float2','float4','float8','float16']
+  log2Utests = func('log2','log2',[log2_input_type],log2_output_type,[log2_input_values],'4 * FLT_ULP')
+
+  ##### gentype log10(gentype)
+  log10_input_values = base_input_values
+  log10_input_type = ['float','float2','float4','float8','float16']
+  log10_output_type = ['float','float2','float4','float8','float16']
+  log10Utests = func('log10','log10',[log10_input_type],log10_output_type,[log10_input_values],'4 * FLT_ULP')
+
+  ##### gentype log1p(gentype x)
+  log1p_input_values = base_input_values
+  log1p_input_type = ['float','float2','float4','float8','float16']
+  log1p_output_type = ['float','float2','float4','float8','float16']
+  log1pUtests = func('log1p','log1p',[log1p_input_type],log1p_output_type,[log1p_input_values],'4 * FLT_ULP')
+
+  ##### gentype logb(gentype x)
+  logb_input_values = base_input_values
+  logb_input_type = ['float','float2','float4','float8','float16']
+  logb_output_type = ['float','float2','float4','float8','float16']
+  logbUtests = func('logb','logb',[logb_input_type],logb_output_type,[logb_input_values],'0 * FLT_ULP')
+
+  ##### gentype maxmag(gentype x, gentype y)
+  maxmag_base_values = base_input_values
+  maxmag_input_values1 = []
+  maxmag_input_values2 = []
+  maxmag_input_values1,maxmag_input_values2=gene2ValuesLoop(maxmag_input_values1,maxmag_input_values2,maxmag_base_values)
+  maxmag_input_type1 = ['float','float2','float4','float8','float16']
+  maxmag_input_type2 = ['float','float2','float4','float8','float16']
+  maxmag_output_type = ['float','float2','float4','float8','float16']
+  maxmag_cpu_func='''
+static float maxmag(float x, float y){
+  if(fabs(x) > fabs(y))
+    return x;
+  else if (fabs(x) < fabs(y))
+    return y;
+  else
+    return fmax(x,y);
+} '''
+  maxmagUtests = func('maxmag','maxmag',[maxmag_input_type1,maxmag_input_type2],maxmag_output_type,[maxmag_input_values1,maxmag_input_values2],'0 * FLT_ULP',maxmag_cpu_func)
+
+  ##### gentype minmag(gentype x, gentype y)
+  minmag_base_values = base_input_values
+  minmag_input_values1 = []
+  minmag_input_values2 = []
+  minmag_input_values1,minmag_input_values2=gene2ValuesLoop(minmag_input_values1,minmag_input_values2,minmag_base_values)
+  minmag_input_type1 = ['float','float2','float4','float8','float16']
+  minmag_input_type2 = ['float','float2','float4','float8','float16']
+  minmag_output_type = ['float','float2','float4','float8','float16']
+  minmag_cpu_func='''
+static float minmag(float x, float y){
+  if(fabs(x) < fabs(y))
+    return x;
+  else if (fabs(x) > fabs(y))
+    return y;
+  else
+    return fmin(x,y);
+} '''
+  minmagUtests = func('minmag','minmag',[minmag_input_type1,minmag_input_type2],minmag_output_type,[minmag_input_values1,minmag_input_values2],'0 * FLT_ULP',minmag_cpu_func)
+
+#  ##### floatn nan(uintn nancode)
+#  nan_input_values = base_input_values
+#  nan_input_type = ['uint','uint2','uint4','uint8','uint16']
+#  nan_output_type = ['float','float2','float4','float8','float16']
+#  nanUtests = func('nan','nan',[nan_input_type],nan_output_type,[nan_input_values],'0 * FLT_ULP')
+
+  ##### gentype nextafter(gentype x, gentype y)
+  nextafter_base_values = base_input_values
+  nextafter_input_values1 = []
+  nextafter_input_values2 = []
+  nextafter_input_values1,nextafter_input_values2=gene2ValuesLoop(nextafter_input_values1,nextafter_input_values2,nextafter_base_values)
+  nextafter_input_type1 = ['float','float2','float4','float8','float16']
+  nextafter_input_type2 = ['float','float2','float4','float8','float16']
+  nextafter_output_type = ['float','float2','float4','float8','float16']
+  nextafterUtests = func('nextafter','nextafter',[nextafter_input_type1,nextafter_input_type2],nextafter_output_type,[nextafter_input_values1,nextafter_input_values2],'0 * FLT_ULP')
+
+  ##### gentype pow(gentype x, gentype y)
+  pow_base_values = base_input_values
+  pow_input_values1 = []
+  pow_input_values2 = []
+  pow_input_values1,pow_input_values2=gene2ValuesLoop(pow_input_values1,pow_input_values2,pow_base_values)
+  pow_input_type1 = ['float','float2','float4','float8','float16']
+  pow_input_type2 = ['float','float2','float4','float8','float16']
+  pow_output_type = ['float','float2','float4','float8','float16']
+  powUtests = func('pow','pow',[pow_input_type1,pow_input_type2],pow_output_type,[pow_input_values1,pow_input_values2],'16 * FLT_ULP')
+
+  ##### floatn pown(floatn x, intn y)
+  pown_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+  pown_input_values2 = [-1,-2,-3,4,5,6,7,8,9,10,11,12,13,14,15,16,12]
+  pown_input_type1 = ['float','float2','float4','float8','float16']
+  pown_input_type2 = ['int','int2','int4','int8','int16']
+  pown_output_type = ['float','float2','float4','float8','float16']
+  pown_cpu_func='''
+static float pown(float x, int y){
+    return pow(x,y);
+} '''
+  pownUtests = func('pown','pown',[pown_input_type1,pown_input_type2],pown_output_type,[pown_input_values1,pown_input_values2],'16 * FLT_ULP', pown_cpu_func)
+
+  ##### gentype powr(gentype x, gentype y)
+  powr_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+  powr_input_values2 = [1,2,3.14,4,5,6,7,8,9.889,10,11,12,13,14.33,15,0,12]
+  powr_input_type1 = ['float','float2','float4','float8','float16']
+  powr_input_type2 = ['float','float2','float4','float8','float16']
+  powr_output_type = ['float','float2','float4','float8','float16']
+  powr_cpu_func='''
+static float powr(float x, int y){
+    return pow(x,y);
+} '''
+  powrUtests = func('powr','powr',[powr_input_type1,powr_input_type2],powr_output_type,[powr_input_values1,powr_input_values2],'16 * FLT_ULP', powr_cpu_func)
+
+  ##### gentype remainder(gentype x, gentype y)
+  remainder_base_values = base_input_values
+  remainder_input_values1 = []
+  remainder_input_values2 = []
+  remainder_input_values1,remainder_input_values2=gene2ValuesLoop(remainder_input_values1,remainder_input_values2,remainder_base_values)
+  remainder_input_type1 = ['float','float2','float4','float8','float16']
+  remainder_input_type2 = ['float','float2','float4','float8','float16']
+  remainder_output_type = ['float','float2','float4','float8','float16']
+  remainderUtests = func('remainder','remainder',[remainder_input_type1,remainder_input_type2],remainder_output_type,[remainder_input_values1,remainder_input_values2],'0 * FLT_ULP')
+
+  ##### gentype rint(gentype x)
+  rint_input_values = base_input_values
+  rint_input_type = ['float','float2','float4','float8','float16']
+  rint_output_type = ['float','float2','float4','float8','float16']
+  rintUtests = func('rint','rint',[rint_input_type],rint_output_type,[rint_input_values],'0 * FLT_ULP')
+
+  ##### floatn rootn(floatn x, intn y)
+  rootn_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24,2,3,4]
+  rootn_input_values2 = [-1,-2,-3,2,3,6,7,8,9,2,11,12,13,14,15,16,2,2,2,2]
+  rootn_input_type1 = ['float','float2','float4','float8','float16']
+  rootn_input_type2 = ['int','int2','int4','int8','int16']
+  rootn_output_type = ['float','float2','float4','float8','float16']
+  rootn_cpu_func='''
+static float rootn(float x, int y){
+    return pow(x,1.0/y);
+} '''
+  rootnUtests = func('rootn','rootn',[rootn_input_type1,rootn_input_type2],rootn_output_type,[rootn_input_values1,rootn_input_values2],'4 * FLT_ULP',rootn_cpu_func)
+
+  ##### gentype round(gentype x)
+  round_input_values = base_input_values
+  round_input_type = ['float','float2','float4','float8','float16']
+  round_output_type = ['float','float2','float4','float8','float16']
+  roundUtests = func('round','round',[round_input_type],round_output_type,[round_input_values],'0 * FLT_ULP')
+
+  ##### gentype rsqrt(gentype)
+  rsqrt_input_values = base_input_values
+  rsqrt_input_type = ['float','float2','float4','float8','float16']
+  rsqrt_output_type = ['float','float2','float4','float8','float16']
+  rsqrt_cpu_func='''
+static float rsqrt(float x)
+{ return 1/sqrt(x);} '''
+  rsqrtUtests = func('rsqrt','rsqrt',[rsqrt_input_type],rsqrt_output_type,[rsqrt_input_values],'4 * FLT_ULP', rsqrt_cpu_func)
+
+
+  ##### gentype sin(gentype)
+  sin_input_values = base_input_values
+  sin_input_type = ['float','float2','float4','float8','float16']
+  sin_output_type = ['float','float2','float4','float8','float16']
+  sinUtests = func('sin','sin',[sin_input_type],sin_output_type,[sin_input_values],'4 * FLT_ULP')
+
+#  ##### gentype sincos(gentype)
+#  sincos_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+#  sincos_input_values2 = []
+#  sincos_input_type1 = ['float','float2','float4','float8','float16']
+#  sincos_input_type2 = ['float','float2','float4','float8','float16']
+#  sincos_output_type = ['float','float2','float4','float8','float16']
+#  ###### gentype sincos(gentype)
+#  #  sincosUtests = func('sincos','sincos',[sincos_input_type1,sincos_input_type2],sincos_output_type,[sincos_input_values1,sincos_input_values2],'4 * FLT_ULP')
+
+  ##### gentype sinh(gentype)
+  sinh_input_values = base_input_values
+  sinh_input_type = ['float','float2','float4','float8','float16']
+  sinh_output_type = ['float','float2','float4','float8','float16']
+  sinhUtests = func('sinh','sinh',[sinh_input_type],sinh_output_type,[sinh_input_values],'4 * FLT_ULP')
+
+  ##### gentype sinpi(gentype x)
+  sinpi_input_values = base_input_values
+  sinpi_input_type = ['float','float2','float4','float8','float16']
+  sinpi_output_type = ['float','float2','float4','float8','float16']
+  sinpi_cpu_func='''
+static float sinpi(float x){
+  return sin(M_PI*x);
+} '''
+  sinpiUtests = func('sinpi','sinpi',[sinpi_input_type],sinpi_output_type,[sinpi_input_values],'4 * FLT_ULP',sinpi_cpu_func)
+
+  ##### gentype sqrt(gentype)
+  sqrt_input_values = base_input_values
+  sqrt_input_type = ['float','float2','float4','float8','float16']
+  sqrt_output_type = ['float','float2','float4','float8','float16']
+  sqrtUtests = func('sqrt','sqrt',[sqrt_input_type],sqrt_output_type,[sqrt_input_values],'4 * FLT_ULP')
+
+  ##### gentype tan(gentype)
+  tan_input_values = base_input_values
+  tan_input_type = ['float','float2','float4','float8','float16']
+  tan_output_type = ['float','float2','float4','float8','float16']
+  tanUtests = func('tan','tan',[tan_input_type],tan_output_type,[tan_input_values],'5 * FLT_ULP')
+
+  ##### gentype tanh(gentype)
+  tanh_input_values = base_input_values
+  tanh_input_type = ['float','float2','float4','float8','float16']
+  tanh_output_type = ['float','float2','float4','float8','float16']
+  tanhUtests = func('tanh','tanh',[tanh_input_type],tanh_output_type,[tanh_input_values],'5 * FLT_ULP')
+
+  ##### gentype tanpi(gentype x)
+  tanpi_input_values = base_input_values
+  tanpi_input_type = ['float','float2','float4','float8','float16']
+  tanpi_output_type = ['float','float2','float4','float8','float16']
+  tanpi_cpu_func='''
+static float tanpi(float x){
+  return tan(M_PI*x);
+} '''
+  tanpiUtests = func('tanpi','tanpi',[tanpi_input_type],tanpi_output_type,[tanpi_input_values],'4 * FLT_ULP',tanpi_cpu_func)
+
+  ##### gentype tgamma(gentype)
+  tgamma_input_values = base_input_values
+  tgamma_input_type = ['float','float2','float4','float8','float16']
+  tgamma_output_type = ['float','float2','float4','float8','float16']
+  tgammaUtests = func('tgamma','tgamma',[tgamma_input_type],tgamma_output_type,[tgamma_input_values],'16 * FLT_ULP')
+
+  ##### gentype trunc(gentype)
+  trunc_input_values = base_input_values
+  trunc_input_type = ['float','float2','float4','float8','float16']
+  trunc_output_type = ['float','float2','float4','float8','float16']
+  truncUtests = func('trunc','trunc',[trunc_input_type],trunc_output_type,[trunc_input_values],'0 * FLT_ULP')
+
+if __name__ == "__main__":
+  main()
diff --git a/utests/utest_generator.py b/utests/utest_generator.py
deleted file mode 100644
index 626ac96..0000000
--- a/utests/utest_generator.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/python
-import os,sys,re
-
-FLT_MAX_POSI='0x1.fffffep127f'
-FLT_MIN_NEGA='-0x1.fffffep127f'
-FLT_MIN_POSI='0x1.0p-126f'
-FLT_MAX_NEGA='-0x1.0p-126f'
-
-paraTypeList={'float':'%.20f','int':'%d','double':'%lf','uint':'%d','string':'%s'}
-
-
-def ulpUnit(ulpSize):
-  return re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
-
-def ulpNum(ulpSize):
-  return re.findall(r"([0-9]+)",ulpSize)[0]
-
-def udebug(ulpSize,returnType):
-  #ulpUnit=re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
-  #ulpNum=re.findall(r"([0-9]+)",ulpSize)[0]
-  text='''
-    static const char* INFORNAN;
-    static %s ULPSIZE;
-    
-    if (isinf(cpu_data[index])){
-      INFORNAN="INF";
-    }
-    else if (isnan(cpu_data[index])){
-      INFORNAN="NAN";
-    }
-    else{
-      ULPSIZE=cl_%s(cpu_data[index]) * %s;
-    }
-
-#if udebug 
-    if (isinf(cpu_data[index])){ 
-      if (isinf(gpu_data[index]))
-        printf("%s expect:%s\\n", log, INFORNAN);
-      else
-        printf_c("%s expect:%s\\n", log, INFORNAN);
-      }
-    else if (isnan(cpu_data[index])){
-      if (isnan(gpu_data[index]))
-        printf("%s expect:%s\\n", log, INFORNAN);
-      else
-        printf_c("%s expect:%s\\n", log, INFORNAN);
-      }
-    else if (diff <= ULPSIZE){
-      printf("%s expect:%s\\n", log, ULPSIZE);
-      }
-    else
-      printf_c("%s expect:%s\\n", log, ULPSIZE);
-#else
-    if (isinf(cpu_data[index])){
-      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
-      OCL_ASSERTM(isinf(gpu_data[index]),log);
-      }
-    else if (isnan(cpu_data[index])){
-      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
-      OCL_ASSERTM(isnan(gpu_data[index]),log);
-      }
-    else{
-      sprintf(log, "%s expect:%s\\n", log, ULPSIZE);
-      OCL_ASSERTM(fabs(gpu_data[index]-cpu_data[index]) <= ULPSIZE, log);
-      }
-#endif
-  }
-}\n'''%(returnType,\
-        ulpUnit(ulpSize),ulpNum(ulpSize),\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)])
-
-  return text
-
-def gene2ValuesLoop(values1,values2,inputValues):
-  values2=values2+inputValues*len(inputValues)
-
-  for i in inputValues:
-    for j in range(0,len(inputValues)):
-      values1 += [i]
-
-  return values1,values2
-
-def gene3ValuesLoop(values1,values2,values3,inputValues):
-  for i in inputValues:
-    for j in range(0,len(inputValues)):
-      for k in range(0,len(inputValues)):
-        values1 += [i]
-
-  for i in inputValues:
-    for j in inputValues:
-      for k in range(0,len(inputValues)):
-        values2 += [j]
-
-  values3=inputValues*(len(inputValues)**2)
-  return values1,values2,values3
-
-class func:
-  """ This class will define all needed instance attribute in fundation a c programing file. """
-
-  def __init__(self,name,cpuFuncName,inputType,outputType,values,ulp, cpu_func=''):
-    self.funcName = name
-    self.cpuFuncName = cpuFuncName
-    self.fileName = 'builtin_'+name
-    self.inputtype = inputType
-    self.outputtype = outputType
-    self.values = values
-    self.ulp = ulp
-    self.cpufunc=cpu_func
-    self.cpplines = []
-    
-#####cpp file required information:
-    self.Head='''/*
-This file is generated by utest_generator.py.
-Usually you need NOT modify this file manually.
-But when any bug occured, you can change the value of udebug from 0 to 1,
-which can print more values and information to assist debuging the issue.
-*/
-
-#include "utest_helper.hpp"
-#include <stdio.h>
-#include <math.h>
-#include <algorithm>
-
-#define udebug 0
-#define FLT_MAX 0x1.fffffep127f
-#define FLT_MIN 0x1.0p-126f
-#define INT_ULP 0
-
-#define printf_c(...) \\
-{\\
-  printf("\\033[1m\\033[40;31m");\\
-  printf( __VA_ARGS__ );\\
-  printf("\\033[0m");\\
-}
-'''
-    #########Execute class itself
-    self.geneProcess()
-
-#####Computer vector && argument type:
-  def argtype(self,paraN,index):
-    return re.findall(r"[a-zA-Z_]+",self.inputtype[paraN][index])[0]
-
-  def argvector(self,paraN,index):
-    vector=re.findall(r"[0-9]+",self.inputtype[paraN][index])
-    if vector:
-      vector=vector[0]
-    else:
-      vector=1
-    return vector
-
-  def returnVector(self,index):
-    returnVector=re.findall(r"[0-9]+",self.outputtype[index])
-    if returnVector:
-      returnVector=returnVector[0]
-    else:
-      returnVector=1
-    return returnVector
-
-  def retType(self,index):
-    return re.findall("[a-zA-Z_]+",self.outputtype[index])[0]
-
-  def inputNumFormat(self,paraN,index):
-    return paraTypeList['%s'%(self.argtype(paraN,index))]
-
-  def outputNumFormat(self,index):
-    return paraTypeList['%s'%(self.retType(index))]
-
-#####Cpu values analyse
-  def GenInputValues(self,index):
-    #namesuffix=self.inputtype[0][index]
-    for i in range(0,self.values.__len__()):
-      self.cpplines += [ "const %s input_data%d[] = {%s};" %(self.argtype(i,index),i+1,str(self.values[i]).strip('[]').replace('\'','')) ]
-    self.cpplines += [ "const int count_input = sizeof(input_data1) / sizeof(input_data1[0]);" ]
-    self.cpplines += [ "const int vector = %s;\n"%(self.argvector(self.inputtype.__len__()-1,index)) ]
-
-#####Cpu Function
-  def GenCpuCompilerMath(self,index):
-    #namesuffix=self.inputtype[0][index]
-    defline='static void cpu_compiler_math(%s *dst, '%(self.retType(index))
-    cpufunargs='('
-    funcline = ['{']
-    vectorargs=[]
-
-    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
-      for i in range(0,self.values.__len__()):
-        defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
-        defline += ( i == self.values.__len__()-1 ) and ')' or ','
-        vectorargs.append('(')
-      for i in range(0,self.values.__len__()):
-        for j in range(0,self.vector):
-          vectorargs += "x%d%d"%(i+1,j+1)
-          vectorargs += ( j == self.vector-1 ) and ');' or ','
-          funcline += ["  const %s x%d%d = *(src%d+%d);"%(self.argtype(i,index),i+1,j+1,i+1,j)]
-
-      return 0
-
-    for i in range(0,self.values.__len__()):
-      defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
-      defline += ( i == self.values.__len__()-1 ) and ')' or ','
-      cpufunargs += "x%d"%(i+1)
-      cpufunargs += ( i == self.values.__len__()-1 ) and ');' or ','
-      funcline += ["  const %s x%d = *src%d;"%(self.argtype(i,index),i+1,i+1)]
-
-    funcline += [ "  dst[0] = %s%s"%(self.cpuFuncName, cpufunargs) ]
-    funcline += [ '}'] 
-
-    funcline = [defline] + funcline
-
-    self.cpplines += funcline
-#    self.writeCPP( '\n'.join(funcline), 'a', namesuffix)
-
-  def writeCPP(self,content,authority,namesuffix):
-    file_object = open("generated/%s_%s.cpp"%(self.fileName,namesuffix),authority)
-    file_object.writelines(content)
-    file_object.close()
-
-  def writeCL(self,content,authority,namesuffix):
-    file_object = open(os.getcwd()+"/../kernels/%s_%s.cl"%(self.fileName,namesuffix),authority)
-    file_object.writelines(content)
-    file_object.close()
-
-  def nameForCmake(self,content,namesuffix):
-    print("generated/%s_%s.cpp"%(self.fileName,namesuffix)),
-
-  def utestFunc(self,index):
-    funcLines=[]
-    namesuffix=self.inputtype[0][index]
-    funcline=[]
-    funchead='''
-static void %s_%s(void)
-{
-  int index;
-  %s gpu_data[count_input] = {0}, cpu_data[count_input] = {0}, diff=0.0;
-  char log[1024] = {0};
-
-  OCL_CREATE_KERNEL(\"%s_%s\");
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL); 
-
-  globals[0] = count_input;
-  locals[0] = 1;
- '''%(self.fileName,namesuffix,\
-     self.retType(index),\
-     self.fileName, namesuffix,\
-     self.retType(index))
-
-    funcline += [funchead]
-    for i in range(1,self.values.__len__()+1): 
-      funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL);"%(i,self.argtype(i-1,index))]
-      funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, count_input * sizeof(%s), input_data%d, 0, NULL, NULL);"%(i,self.argtype(i-1,index),i)]
-
-    funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, sizeof(int), NULL);"%(self.inputtype.__len__()+1)]
-    funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, sizeof(int), &vector, 0, NULL, NULL);"%(self.inputtype.__len__()+1)]
-
-	#0=output 1=input1 2=input2 ... len+2=output
-    for i in range(0,self.values.__len__()+2): 
-      funcline += ["  OCL_SET_ARG(%d, sizeof(cl_mem), &buf[%d]);"%(i,i)]
-
-    funcrun='''
-  // Run the kernel:
-  OCL_NDRANGE( 1 );
-  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(%s) * count_input, gpu_data, 0, NULL, NULL);
-'''%(self.inputtype.__len__()+1)
-    funcline += [ funcrun ]
-
-    funcsprintfa='    sprintf(log, \"'
-    funcsprintfb=''
-    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
-      funccompare='''
-  for (index = 0; index < count_input/vector; index++)
-  {
-    cpu_compiler_math( cpu_data + index, '''
-    else:
-      funccompare='''
-  for (index = 0; index < count_input; index++)
-  {
-    cpu_compiler_math( cpu_data + index,'''
-
-    for i in range(0,self.values.__len__()):
-      funccompare += " input_data%d + index"%(i+1)
-      funccompare += (self.values.__len__() - 1 == i) and ');' or ','
-
-      funcsprintfa += "input_data%d:"%(i+1)
-      funcsprintfa += "%s "%(self.inputNumFormat(i,index))
-      funcsprintfb += " input_data%d[index],"%(i+1)
-
-    funcline += [ funccompare ]
-
-    funcsprintfa += " -> gpu:%s  cpu:%s diff:%s\","%(self.outputNumFormat(index),self.outputNumFormat(index),self.outputNumFormat(index))#,self.outputNumFormat(index))
-    funcsprintfb += " gpu_data[index], cpu_data[index], diff);"#%(ulpUnit(self.ulp),ulpNum(self.ulp))
-
-    #funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index])"
-    #funcdiff += (self.retType(index) == "int") and ');' or '/(cpu_data[index]>1?cpu_data[index]:1));'
-    funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index]));"
-    funcline += [ funcdiff ]
-    funcline += [ funcsprintfa + funcsprintfb ]
-
-    self.cpplines += funcline
-
-    self.cpplines += [ udebug(self.ulp,self.retType(index)) ]
-    self.cpplines += [ "MAKE_UTEST_FROM_FUNCTION(%s_%s)"%(self.fileName,namesuffix) ]
-
-  def genCL(self,index):
-    namesuffix=self.inputtype[0][index]
-    clLine = []
-    clhead = '__kernel void %s_%s(__global %s *dst, '%(self.fileName,namesuffix,self.retType(index))
-    clvalueDef=''
-    clcomputer=''
-    tmp=''
-
-    for i in range(0,self.values.__len__()):
-      clhead += ' __global %s *src%d,'%(self.argtype(i,index),i+1)
-      clvalueDef +=   '  %s x%d = (%s) ('%(self.inputtype[i][index],i+1,self.inputtype[i][index])
-      tmp = 'src%d[i * (*vector) + '%(i+1)
-      for j in range(0,int(self.argvector(i,index))):
-        clvalueDef += tmp + ((int(self.argvector(i-1,index)) == j+1 ) and '%d]);\n'%(j) or '%d],'%(j))
-      clcomputer += (self.values.__len__() == i+1) and 'x%d);'%(i+1) or 'x%d,'%(i+1)
-      
-    clhead += ' __global int *vector) {\n'
-    clhead += '  int i = get_global_id(0);'
-    clLine += [ clhead ]
-    clLine += [ clvalueDef ]
-    clLine += [ '  %s ret;'%(self.outputtype[index]) ]
-    clLine += [ '  ret = %s('%(self.funcName) + clcomputer ] 
-
-    if (int(self.returnVector(index)) == 1):
-      clLine += [ '  dst[i] = ret;' ]
-    else:
-      for i in range(0,int(self.returnVector(index))):
-        clLine += [ '  dst[i * (*vector) + %d] = ret[%d];'%(i,i) ]
-    clLine += [ '};' ]
-
-    self.writeCL('\n'.join(clLine),'w',namesuffix)
-  
-  def geneProcess(self):
-    for i in range(0,self.inputtype[0].__len__()):
-##########Write Cpp file          
-      namesuffix=self.inputtype[0][i]
-      self.cpplines = []
-      #The head:
-      self.cpplines += [self.Head]
-
-      #Parameters:
-      self.GenInputValues(i)
-
-      #cpu function generator:
-      self.cpplines += [self.cpufunc]
-
-      #Cpu function:
-      self.GenCpuCompilerMath(i)
-
-      #utest function
-      self.utestFunc(i)
-
-      #kernel cl
-      self.genCL(i)
-
-      #CMakelists.txt
-      self.nameForCmake(self.fileName,namesuffix)
-
-      self.writeCPP( '\n'.join(self.cpplines) ,'w',namesuffix)
-#########End
-
-#def main():
-#
-#if __name__ == "__main__":
-#  main()
diff --git a/utests/utest_math_gen.py b/utests/utest_math_gen.py
deleted file mode 100755
index 7a4b678..0000000
--- a/utests/utest_math_gen.py
+++ /dev/null
@@ -1,531 +0,0 @@
-#!/usr/bin/python
-from utest_generator import *
-import os,sys
-
-#base_input_values = [80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-#extend_input_values = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-
-#func:
-#    gpufuncName 
-#    cpuFuncName
-#    fileName: 'builtin_'+name
-#    inputtype: a 2-D list because there're more than one input data
-#    outputtype: a list
-#    values
-#    ulp
-
-base_input_values = [ 0, 1, 3.14]
-def main():
-  ##### gentype acos(gentype)
-  acos_input_values = base_input_values
-  acos_input_type = ['float','float2','float4','float8','float16']
-  acos_output_type = ['float','float2','float4','float8','float16']
-  acosUtests = func('acos','acos',[acos_input_type],acos_output_type,[acos_input_values],'4 * FLT_ULP')
-  
-  ##### gentype acosh(gentype)
-  acosh_input_values = base_input_values
-  acosh_input_type = ['float','float2','float4','float8','float16']
-  acosh_output_type = ['float','float2','float4','float8','float16']
-  acoshUtests = func('acosh','acosh',[acosh_input_type],acosh_output_type,[acosh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype acospi(gentype x)
-  acospi_input_values = base_input_values
-  acospi_input_type = ['float','float2','float4','float8','float16']
-  acospi_output_type = ['float','float2','float4','float8','float16']
-  acospi_cpu_func='''
-static float acospi(float x){
-  return acos(x)/M_PI;
-} '''
-  acospiUtests = func('acospi','acospi',[acospi_input_type],acospi_output_type,[acospi_input_values],'4 * FLT_ULP',acospi_cpu_func)
-  
-  ##### gentype asin(gentype)
-  asin_input_values = base_input_values
-  asin_input_type = ['float','float2','float4','float8','float16']
-  asin_output_type = ['float','float2','float4','float8','float16']
-  asinUtests = func('asin','asin',[asin_input_type],asin_output_type,[asin_input_values],'4 * FLT_ULP')
-  
-  ##### gentype asinh(gentype)
-  asinh_input_values = base_input_values
-  asinh_input_type = ['float','float2','float4','float8','float16']
-  asinh_output_type = ['float','float2','float4','float8','float16']
-  asinhUtests = func('asinh','asinh',[asinh_input_type],asinh_output_type,[asinh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype asinpi(gentype x)
-  asinpi_input_values = base_input_values
-  asinpi_input_type = ['float','float2','float4','float8','float16']
-  asinpi_output_type = ['float','float2','float4','float8','float16']
-  asinpi_cpu_func='''
-static float asinpi(float x){
-  return asin(x)/M_PI;
-} '''
-  asinpiUtests = func('asinpi','asinpi',[asinpi_input_type],asinpi_output_type,[asinpi_input_values],'4 * FLT_ULP',asinpi_cpu_func)
-  
-  ##### gentype atan(gentype y_over_x)
-  atan_input_values = base_input_values
-  atan_input_type = ['float','float2','float4','float8','float16']
-  atan_output_type = ['float','float2','float4','float8','float16']
-  atanUtests = func('atan','atan',[atan_input_type],atan_output_type,[atan_input_values],'5 * FLT_ULP')
-  
-  ##### gentype atan2(gentype y, gentype x)
-  atan2_base_values = base_input_values
-  atan2_input_values1 = []
-  atan2_input_values2 = []
-  atan2_input_values1,atan2_input_values2=gene2ValuesLoop(atan2_input_values1,atan2_input_values2,atan2_base_values)
-  atan2_input_type1 = ['float','float2','float4','float8','float16']
-  atan2_input_type2 = ['float','float2','float4','float8','float16']
-  atan2_output_type = ['float','float2','float4','float8','float16']
-  atan2Utests = func('atan2','atan2',[atan2_input_type1,atan2_input_type2],atan2_output_type,[atan2_input_values1,atan2_input_values2],'6 * FLT_ULP')
-  
-  ##### gentype atanh(gentype)
-  atanh_input_values = base_input_values
-  atanh_input_type = ['float','float2','float4','float8','float16']
-  atanh_output_type = ['float','float2','float4','float8','float16']
-  atanhUtests = func('atanh','atanh',[atanh_input_type],atanh_output_type,[atanh_input_values],'5 * FLT_ULP')
-  
-  ##### gentype atanpi(gentype x)
-  atanpi_input_values = base_input_values
-  atanpi_input_type = ['float','float2','float4','float8','float16']
-  atanpi_output_type = ['float','float2','float4','float8','float16']
-  atanpi_cpu_func='''
-static float atanpi(float x){
-  return atan(x)/M_PI;
-} '''
-  atanpiUtests = func('atanpi','atanpi',[atanpi_input_type],atanpi_output_type,[atanpi_input_values],'4 * FLT_ULP',atanpi_cpu_func)
-  
-#  ##### gentype atan2pi(gentype y, gentype x)
-#  atan2pi_base_values = base_input_values
-#  atan2pi_input_values1 = []
-#  atan2pi_input_values2 = []
-#  atan2pi_input_values1,atan2pi_input_values2=gene2ValuesLoop(atan2pi_input_values1,atan2pi_input_values2,atan2pi_base_values)
-#  atan2pi_input_type1 = ['float','float2','float4','float8','float16']
-#  atan2pi_input_type2 = ['float','float2','float4','float8','float16']
-#  atan2pi_output_type = ['float','float2','float4','float8','float16']
-#  atan2pi_cpu_func='''
-#static float atan2pi(float y, float x){
-#  return atan2(y,x)/M_PI;
-#} '''
-#  atan2piUtests = func('atan2pi','atan2pi',[atan2pi_input_type1,atan2pi_input_type2],atan2pi_output_type,[atan2pi_input_values1,atan2pi_input_values2],'6 * FLT_ULP',atan2pi_cpu_func)
-  
-  ##### gentype cbrt(gentype)
-  cbrt_input_values = base_input_values
-  cbrt_input_type = ['float','float2','float4','float8','float16']
-  cbrt_output_type = ['float','float2','float4','float8','float16']
-  cbrtUtests = func('cbrt','cbrt',[cbrt_input_type],cbrt_output_type,[cbrt_input_values],'4 * FLT_ULP')
-  
-  ##### gentype ceil(gentype)
-  ceil_input_values = base_input_values
-  ceil_input_type = ['float','float2','float4','float8','float16']
-  ceil_output_type = ['float','float2','float4','float8','float16']
-  ceilUtests = func('ceil','ceil',[ceil_input_type],ceil_output_type,[ceil_input_values],'0 * FLT_ULP')
-  
-  ##### gentype copysign(gentype x, gentype y)
-  copysign_base_values = base_input_values
-  copysign_input_values1 = []
-  copysign_input_values2 = []
-  copysign_input_values1,copysign_input_values2=gene2ValuesLoop(copysign_input_values1,copysign_input_values2,copysign_base_values)
-  copysign_input_type1 = ['float','float2','float4','float8','float16']
-  copysign_input_type2 = ['float','float2','float4','float8','float16']
-  copysign_output_type = ['float','float2','float4','float8','float16']
-  copysignUtests = func('copysign','copysign',[copysign_input_type1,copysign_input_type2],copysign_output_type,[copysign_input_values1,copysign_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype cos(gentype)
-  cos_input_values = base_input_values
-  cos_input_type = ['float','float2','float4','float8','float16']
-  cos_output_type = ['float','float2','float4','float8','float16']
-  cosUtests = func('cos','cos',[cos_input_type],cos_output_type,[cos_input_values],'4 * FLT_ULP')
-  
-  ##### gentype cosh(gentype)
-  cosh_input_values = base_input_values
-  cosh_input_type = ['float','float2','float4','float8','float16']
-  cosh_output_type = ['float','float2','float4','float8','float16']
-  coshUtests = func('cosh','cosh',[cosh_input_type],cosh_output_type,[cosh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype cospi(gentype x)
-  cospi_input_values = base_input_values
-  cospi_input_type = ['float','float2','float4','float8','float16']
-  cospi_output_type = ['float','float2','float4','float8','float16']
-  cospi_cpu_func='''
-static float cospi(float x){
-  return cos(M_PI * x);
-} '''
-  cospiUtests = func('cospi','cospi',[cospi_input_type],cospi_output_type,[cospi_input_values],'2 * FLT_ULP',cospi_cpu_func)
-  
-  ##### gentype erf(gentype)
-  erf_input_values = base_input_values
-  erf_input_type = ['float','float2','float4','float8','float16']
-  erf_output_type = ['float','float2','float4','float8','float16']
-  erfUtests = func('erf','erf',[erf_input_type],erf_output_type,[erf_input_values],'16 * FLT_ULP')
-  
-  ##### gentype erfc(gentype)
-  erfc_input_values = base_input_values
-  erfc_input_type = ['float','float2','float4','float8','float16']
-  erfc_output_type = ['float','float2','float4','float8','float16']
-  erfcUtests = func('erfc','erfc',[erfc_input_type],erfc_output_type,[erfc_input_values],'16 * FLT_ULP')
-  
-  ##### gentype exp(gentype x)
-  exp_input_values = base_input_values
-  exp_input_type = ['float','float2','float4','float8','float16']
-  exp_output_type = ['float','float2','float4','float8','float16']
-  expUtests = func('exp','exp',[exp_input_type],exp_output_type,[exp_input_values],'4 * FLT_ULP')
-  
-  ##### gentype exp2(gentype)
-  exp2_input_values = base_input_values
-  exp2_input_type = ['float','float2','float4','float8','float16']
-  exp2_output_type = ['float','float2','float4','float8','float16']
-  exp2Utests = func('exp2','exp2',[exp2_input_type],exp2_output_type,[exp2_input_values],'4 * FLT_ULP')
-  
-  ##### gentype exp10(gentype)
-  exp10_input_values = base_input_values
-  exp10_input_type = ['float','float2','float4','float8','float16']
-  exp10_output_type = ['float','float2','float4','float8','float16']
-  exp10Utests = func('exp10','exp10',[exp10_input_type],exp10_output_type,[exp10_input_values],'4 * FLT_ULP')
-  
-  ##### gentype expm1(gentype x)
-  expm1_input_values = base_input_values
-  expm1_input_type = ['float','float2','float4','float8','float16']
-  expm1_output_type = ['float','float2','float4','float8','float16']
-  expm1Utests = func('expm1','expm1',[expm1_input_type],expm1_output_type,[expm1_input_values],'4 * FLT_ULP')
-  
-  ##### gentype fabs(gentype)
-  fabs_input_values = base_input_values
-  fabs_input_type = ['float','float2','float4','float8','float16']
-  fabs_output_type = ['float','float2','float4','float8','float16']
-  fabsUtests = func('fabs','fabs',[fabs_input_type],fabs_output_type,[fabs_input_values],'0 * FLT_ULP')
-  
-  ##### gentype fdim(gentype x, gentype y)
-  fdim_base_values = base_input_values
-  fdim_input_values1 = []
-  fdim_input_values2 = []
-  fdim_input_values1,fdim_input_values2=gene2ValuesLoop(fdim_input_values1,fdim_input_values2,fdim_base_values)
-  fdim_input_type1 = ['float','float2','float4','float8','float16']
-  fdim_input_type2 = ['float','float2','float4','float8','float16']
-  fdim_output_type = ['float','float2','float4','float8','float16']
-  fdimUtests = func('fdim','fdim',[fdim_input_type1,fdim_input_type2],fdim_output_type,[fdim_input_values1,fdim_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype floor(gentype)
-  floor_input_values = base_input_values
-  floor_input_type = ['float','float2','float4','float8','float16']
-  floor_output_type = ['float','float2','float4','float8','float16']
-  floorUtests = func('floor','floor',[floor_input_type],floor_output_type,[floor_input_values],'0 * FLT_ULP')
-  
-  ##### gentype fma(gentype a, gentype b, gentype c)
-  fma_base_values = base_input_values
-  fma_input_values1 = []
-  fma_input_values2 = []
-  fma_input_values3 = []
-  fma_input_values1,fma_input_values2,fma_input_values3=gene3ValuesLoop(fma_input_values1,fma_input_values2,fma_input_values3,fma_base_values)
-  fma_input_type1 = ['float','float2','float4','float8','float16']
-  fma_input_type2 = ['float','float2','float4','float8','float16']
-  fma_input_type3 = ['float','float2','float4','float8','float16']
-  fma_output_type = ['float','float2','float4','float8','float16']
-  fmaUtests = func('fma','fma',[fma_input_type1,fma_input_type2,fma_input_type3],fma_output_type,[fma_input_values1,fma_input_values2,fma_input_values3],'0 * FLT_ULP')
-  
-  ##### gentype fmax(gentype x, gentype y)
-  fmax_base_values = base_input_values
-  fmax_input_values1 = []
-  fmax_input_values2 = []
-  fmax_input_values1,fmax_input_values2=gene2ValuesLoop(fmax_input_values1,fmax_input_values2,fmax_base_values)
-  fmax_input_type1 = ['float','float2','float4','float8','float16']
-  fmax_input_type2 = ['float','float2','float4','float8','float16']
-  fmax_output_type = ['float','float2','float4','float8','float16']
-  fmaxUtests = func('fmax','fmax',[fmax_input_type1,fmax_input_type2],fmax_output_type,[fmax_input_values1,fmax_input_values2],'0 * FLT_ULP')
-  
-  ##### gentypef fmax(gentypef x, float y)
-#  fmax_gentypef_base_values = base_input_values
-#  fmax_gentypef_input_values1 = []
-#  fmax_gentypef_input_values2 = []
-#  fmax_gentypef_input_values2,fmax_gentypef_input_values1=gene2ValuesLoop(fmax_gentypef_input_values1,fmax_gentypef_input_values2,fmax_gentypef_base_values)
-#  fmax_gentypef_input_type1 = ['float','float2','float4','float8','float16']
-#  fmax_gentypef_input_type2 = ['float','float','float','float','float']
-#  fmax_gentypef_output_type = ['float','float2','float4','float8','float16']
-#  ##### gentypef fmax(gentypef x, float y)
-#  fmax_gentypefUtests = func('gentypef_fmax','gentypef_fmax',[fmax_gentypef_input_type1,fmax_gentypef_input_type2],fmax_gentypef_output_type,[fmax_gentypef_input_values1,fmax_gentypef_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype fmin(gentype x, gentype y)
-  fmin_base_values = base_input_values
-  fmin_input_values1 = []
-  fmin_input_values2 = []
-  fmin_input_values1,fmin_input_values2=gene2ValuesLoop(fmin_input_values1,fmin_input_values2,fmin_base_values)
-  fmin_input_type1 = ['float','float2','float4','float8','float16']
-  fmin_input_type2 = ['float','float2','float4','float8','float16']
-  fmin_output_type = ['float','float2','float4','float8','float16']
-  fminUtests = func('fmin','fmin',[fmin_input_type1,fmin_input_type2],fmin_output_type,[fmin_input_values1,fmin_input_values2],'0 * FLT_ULP')
-  
-#  ##### gentypef fmin(gentypef x, float y)
-#  fmin_gentypef_base_values = base_input_values
-#  fmin_gentypef_input_values1 = []
-#  fmin_gentypef_input_values2 = []
-#  fmin_gentypef_input_values2,fmin_gentypef_input_values1=gene2ValuesLoop(fmin_gentypef_input_values1,fmin_gentypef_input_values2,fmin_gentypef_base_values)
-#  fmin_gentypef_input_type1 = ['float','float2','float4','float8','float16']
-#  fmin_gentypef_input_type2 = ['float','float','float','float','float']
-#  fmin_gentypef_output_type = ['float','float2','float4','float8','float16']
-#  ##### gentypef fmin(gentypef x, float y)
-#  fmin_gentypefUtests = func('gentypef_fmin','gentypef_fmin',[fmin_gentypef_input_type1,fmin_gentypef_input_type2],fmin_gentypef_output_type,[fmin_gentypef_input_values1,fmin_gentypef_input_values2],'0 * FLT_ULP')
-#  
-  ##### gentype fmod(gentype x, gentype y)
-  fmod_base_values = base_input_values
-  fmod_input_values1 = []
-  fmod_input_values2 = []
-  fmod_input_values1,fmod_input_values2=gene2ValuesLoop(fmod_input_values1,fmod_input_values2,fmod_base_values)
-  fmod_input_type1 = ['float','float2','float4','float8','float16']
-  fmod_input_type2 = ['float','float2','float4','float8','float16']
-  fmod_output_type = ['float','float2','float4','float8','float16']
-  fmodUtests = func('fmod','fmod',[fmod_input_type1,fmod_input_type2],fmod_output_type,[fmod_input_values1,fmod_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype hypot(gentype x, gentype y)
-  hypot_base_values = base_input_values
-  hypot_input_values1 = []
-  hypot_input_values2 = []
-  hypot_input_values1,hypot_input_values2=gene2ValuesLoop(hypot_input_values1,hypot_input_values2,hypot_base_values)
-  hypot_input_type1 = ['float','float2','float4','float8','float16']
-  hypot_input_type2 = ['float','float2','float4','float8','float16']
-  hypot_output_type = ['float','float2','float4','float8','float16']
-  hypotUtests = func('hypot','hypot',[hypot_input_type1,hypot_input_type2],hypot_output_type,[hypot_input_values1,hypot_input_values2],'4 * FLT_ULP')
-  
-  ##### intn ilogb(floartn x)
-  ilogb_input_values = base_input_values
-  ilogb_input_type = ['float','float2','float4','float8','float16']
-  ilogb_output_type = ['int','int2','int4','int8','int16']
-  ilogbUtests = func('ilogb','ilogb',[ilogb_input_type],ilogb_output_type,[ilogb_input_values],'0 * INT_ULP')
-
-  ##### gentype lgamma(gentype x)
-  lgamma_input_values = base_input_values
-  lgamma_input_type = ['float','float2','float4','float8','float16']
-  lgamma_output_type = ['float','float2','float4','float8','float16']
-  lgammaUtests = func('lgamma','lgamma',[lgamma_input_type],lgamma_output_type,[lgamma_input_values],'4 * FLT_ULP')
-
-  ##### gentype log(gentype)
-  log_input_values = base_input_values
-  log_input_type = ['float','float2','float4','float8','float16']
-  log_output_type = ['float','float2','float4','float8','float16']
-  logUtests = func('log','log',[log_input_type],log_output_type,[log_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log2(gentype)
-  log2_input_values = base_input_values
-  log2_input_type = ['float','float2','float4','float8','float16']
-  log2_output_type = ['float','float2','float4','float8','float16']
-  log2Utests = func('log2','log2',[log2_input_type],log2_output_type,[log2_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log10(gentype)
-  log10_input_values = base_input_values
-  log10_input_type = ['float','float2','float4','float8','float16']
-  log10_output_type = ['float','float2','float4','float8','float16']
-  log10Utests = func('log10','log10',[log10_input_type],log10_output_type,[log10_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log1p(gentype x)
-  log1p_input_values = base_input_values
-  log1p_input_type = ['float','float2','float4','float8','float16']
-  log1p_output_type = ['float','float2','float4','float8','float16']
-  log1pUtests = func('log1p','log1p',[log1p_input_type],log1p_output_type,[log1p_input_values],'4 * FLT_ULP')
-  
-  ##### gentype logb(gentype x)
-  logb_input_values = base_input_values
-  logb_input_type = ['float','float2','float4','float8','float16']
-  logb_output_type = ['float','float2','float4','float8','float16']
-  logbUtests = func('logb','logb',[logb_input_type],logb_output_type,[logb_input_values],'0 * FLT_ULP')
-  
-  ##### gentype maxmag(gentype x, gentype y)
-  maxmag_base_values = base_input_values
-  maxmag_input_values1 = []
-  maxmag_input_values2 = []
-  maxmag_input_values1,maxmag_input_values2=gene2ValuesLoop(maxmag_input_values1,maxmag_input_values2,maxmag_base_values)
-  maxmag_input_type1 = ['float','float2','float4','float8','float16']
-  maxmag_input_type2 = ['float','float2','float4','float8','float16']
-  maxmag_output_type = ['float','float2','float4','float8','float16']
-  maxmag_cpu_func='''
-static float maxmag(float x, float y){
-  if(fabs(x) > fabs(y))
-    return x;
-  else if (fabs(x) < fabs(y))
-    return y;
-  else
-    return fmax(x,y);
-} '''
-  maxmagUtests = func('maxmag','maxmag',[maxmag_input_type1,maxmag_input_type2],maxmag_output_type,[maxmag_input_values1,maxmag_input_values2],'0 * FLT_ULP',maxmag_cpu_func)
-  
-  ##### gentype minmag(gentype x, gentype y)
-  minmag_base_values = base_input_values
-  minmag_input_values1 = []
-  minmag_input_values2 = []
-  minmag_input_values1,minmag_input_values2=gene2ValuesLoop(minmag_input_values1,minmag_input_values2,minmag_base_values)
-  minmag_input_type1 = ['float','float2','float4','float8','float16']
-  minmag_input_type2 = ['float','float2','float4','float8','float16']
-  minmag_output_type = ['float','float2','float4','float8','float16']
-  minmag_cpu_func='''
-static float minmag(float x, float y){
-  if(fabs(x) < fabs(y))
-    return x;
-  else if (fabs(x) > fabs(y))
-    return y;
-  else
-    return fmin(x,y);
-} '''
-  minmagUtests = func('minmag','minmag',[minmag_input_type1,minmag_input_type2],minmag_output_type,[minmag_input_values1,minmag_input_values2],'0 * FLT_ULP',minmag_cpu_func)
-  
-#  ##### floatn nan(uintn nancode)
-#  nan_input_values = base_input_values
-#  nan_input_type = ['uint','uint2','uint4','uint8','uint16']
-#  nan_output_type = ['float','float2','float4','float8','float16']
-#  nanUtests = func('nan','nan',[nan_input_type],nan_output_type,[nan_input_values],'0 * FLT_ULP')
-  
-  ##### gentype nextafter(gentype x, gentype y)
-  nextafter_base_values = base_input_values
-  nextafter_input_values1 = []
-  nextafter_input_values2 = []
-  nextafter_input_values1,nextafter_input_values2=gene2ValuesLoop(nextafter_input_values1,nextafter_input_values2,nextafter_base_values)
-  nextafter_input_type1 = ['float','float2','float4','float8','float16']
-  nextafter_input_type2 = ['float','float2','float4','float8','float16']
-  nextafter_output_type = ['float','float2','float4','float8','float16']
-  nextafterUtests = func('nextafter','nextafter',[nextafter_input_type1,nextafter_input_type2],nextafter_output_type,[nextafter_input_values1,nextafter_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype pow(gentype x, gentype y)
-  pow_base_values = base_input_values
-  pow_input_values1 = []
-  pow_input_values2 = []
-  pow_input_values1,pow_input_values2=gene2ValuesLoop(pow_input_values1,pow_input_values2,pow_base_values)
-  pow_input_type1 = ['float','float2','float4','float8','float16']
-  pow_input_type2 = ['float','float2','float4','float8','float16']
-  pow_output_type = ['float','float2','float4','float8','float16']
-  powUtests = func('pow','pow',[pow_input_type1,pow_input_type2],pow_output_type,[pow_input_values1,pow_input_values2],'16 * FLT_ULP')
-  
-  ##### floatn pown(floatn x, intn y)
-  pown_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-  pown_input_values2 = [-1,-2,-3,4,5,6,7,8,9,10,11,12,13,14,15,16,12]
-  pown_input_type1 = ['float','float2','float4','float8','float16']
-  pown_input_type2 = ['int','int2','int4','int8','int16']
-  pown_output_type = ['float','float2','float4','float8','float16']
-  pown_cpu_func='''
-static float pown(float x, int y){
-    return pow(x,y);
-} '''
-  pownUtests = func('pown','pown',[pown_input_type1,pown_input_type2],pown_output_type,[pown_input_values1,pown_input_values2],'16 * FLT_ULP', pown_cpu_func)
-  
-  ##### gentype powr(gentype x, gentype y)
-  powr_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-  powr_input_values2 = [1,2,3.14,4,5,6,7,8,9.889,10,11,12,13,14.33,15,0,12]
-  powr_input_type1 = ['float','float2','float4','float8','float16']
-  powr_input_type2 = ['float','float2','float4','float8','float16']
-  powr_output_type = ['float','float2','float4','float8','float16']
-  powr_cpu_func='''
-static float powr(float x, int y){
-    return pow(x,y);
-} '''
-  powrUtests = func('powr','powr',[powr_input_type1,powr_input_type2],powr_output_type,[powr_input_values1,powr_input_values2],'16 * FLT_ULP', powr_cpu_func)
-  
-  ##### gentype remainder(gentype x, gentype y)
-  remainder_base_values = base_input_values
-  remainder_input_values1 = []
-  remainder_input_values2 = []
-  remainder_input_values1,remainder_input_values2=gene2ValuesLoop(remainder_input_values1,remainder_input_values2,remainder_base_values)
-  remainder_input_type1 = ['float','float2','float4','float8','float16']
-  remainder_input_type2 = ['float','float2','float4','float8','float16']
-  remainder_output_type = ['float','float2','float4','float8','float16']
-  remainderUtests = func('remainder','remainder',[remainder_input_type1,remainder_input_type2],remainder_output_type,[remainder_input_values1,remainder_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype rint(gentype x)
-  rint_input_values = base_input_values
-  rint_input_type = ['float','float2','float4','float8','float16']
-  rint_output_type = ['float','float2','float4','float8','float16']
-  rintUtests = func('rint','rint',[rint_input_type],rint_output_type,[rint_input_values],'0 * FLT_ULP')
-  
-  ##### floatn rootn(floatn x, intn y)
-  rootn_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24,2,3,4]
-  rootn_input_values2 = [-1,-2,-3,2,3,6,7,8,9,2,11,12,13,14,15,16,2,2,2,2]
-  rootn_input_type1 = ['float','float2','float4','float8','float16']
-  rootn_input_type2 = ['int','int2','int4','int8','int16']
-  rootn_output_type = ['float','float2','float4','float8','float16']
-  rootn_cpu_func='''
-static float rootn(float x, int y){
-    return pow(x,1.0/y);
-} '''
-  rootnUtests = func('rootn','rootn',[rootn_input_type1,rootn_input_type2],rootn_output_type,[rootn_input_values1,rootn_input_values2],'4 * FLT_ULP',rootn_cpu_func)
-  
-  ##### gentype round(gentype x)
-  round_input_values = base_input_values
-  round_input_type = ['float','float2','float4','float8','float16']
-  round_output_type = ['float','float2','float4','float8','float16']
-  roundUtests = func('round','round',[round_input_type],round_output_type,[round_input_values],'0 * FLT_ULP')
-  
-  ##### gentype rsqrt(gentype)
-  rsqrt_input_values = base_input_values
-  rsqrt_input_type = ['float','float2','float4','float8','float16']
-  rsqrt_output_type = ['float','float2','float4','float8','float16']
-  rsqrt_cpu_func='''
-static float rsqrt(float x)
-{ return 1/sqrt(x);} '''
-  rsqrtUtests = func('rsqrt','rsqrt',[rsqrt_input_type],rsqrt_output_type,[rsqrt_input_values],'4 * FLT_ULP', rsqrt_cpu_func)
-
- 
-  ##### gentype sin(gentype)
-  sin_input_values = base_input_values
-  sin_input_type = ['float','float2','float4','float8','float16']
-  sin_output_type = ['float','float2','float4','float8','float16']
-  sinUtests = func('sin','sin',[sin_input_type],sin_output_type,[sin_input_values],'4 * FLT_ULP')
-  
-#  ##### gentype sincos(gentype)
-#  sincos_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-#  sincos_input_values2 = []
-#  sincos_input_type1 = ['float','float2','float4','float8','float16']
-#  sincos_input_type2 = ['float','float2','float4','float8','float16']
-#  sincos_output_type = ['float','float2','float4','float8','float16']
-#  ###### gentype sincos(gentype)
-#  #  sincosUtests = func('sincos','sincos',[sincos_input_type1,sincos_input_type2],sincos_output_type,[sincos_input_values1,sincos_input_values2],'4 * FLT_ULP')
-  
-  ##### gentype sinh(gentype)
-  sinh_input_values = base_input_values
-  sinh_input_type = ['float','float2','float4','float8','float16']
-  sinh_output_type = ['float','float2','float4','float8','float16']
-  sinhUtests = func('sinh','sinh',[sinh_input_type],sinh_output_type,[sinh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype sinpi(gentype x)
-  sinpi_input_values = base_input_values
-  sinpi_input_type = ['float','float2','float4','float8','float16']
-  sinpi_output_type = ['float','float2','float4','float8','float16']
-  sinpi_cpu_func='''
-static float sinpi(float x){
-  return sin(M_PI*x);
-} '''
-  sinpiUtests = func('sinpi','sinpi',[sinpi_input_type],sinpi_output_type,[sinpi_input_values],'4 * FLT_ULP',sinpi_cpu_func)
-  
-  ##### gentype sqrt(gentype)
-  sqrt_input_values = base_input_values
-  sqrt_input_type = ['float','float2','float4','float8','float16']
-  sqrt_output_type = ['float','float2','float4','float8','float16']
-  sqrtUtests = func('sqrt','sqrt',[sqrt_input_type],sqrt_output_type,[sqrt_input_values],'4 * FLT_ULP')
-  
-  ##### gentype tan(gentype)
-  tan_input_values = base_input_values
-  tan_input_type = ['float','float2','float4','float8','float16']
-  tan_output_type = ['float','float2','float4','float8','float16']
-  tanUtests = func('tan','tan',[tan_input_type],tan_output_type,[tan_input_values],'5 * FLT_ULP')
-  
-  ##### gentype tanh(gentype)
-  tanh_input_values = base_input_values
-  tanh_input_type = ['float','float2','float4','float8','float16']
-  tanh_output_type = ['float','float2','float4','float8','float16']
-  tanhUtests = func('tanh','tanh',[tanh_input_type],tanh_output_type,[tanh_input_values],'5 * FLT_ULP')
-  
-  ##### gentype tanpi(gentype x)
-  tanpi_input_values = base_input_values
-  tanpi_input_type = ['float','float2','float4','float8','float16']
-  tanpi_output_type = ['float','float2','float4','float8','float16']
-  tanpi_cpu_func='''
-static float tanpi(float x){
-  return tan(M_PI*x);
-} '''
-  tanpiUtests = func('tanpi','tanpi',[tanpi_input_type],tanpi_output_type,[tanpi_input_values],'4 * FLT_ULP',tanpi_cpu_func)
-  
-  ##### gentype tgamma(gentype)
-  tgamma_input_values = base_input_values
-  tgamma_input_type = ['float','float2','float4','float8','float16']
-  tgamma_output_type = ['float','float2','float4','float8','float16']
-  tgammaUtests = func('tgamma','tgamma',[tgamma_input_type],tgamma_output_type,[tgamma_input_values],'16 * FLT_ULP')
-  
-  ##### gentype trunc(gentype)
-  trunc_input_values = base_input_values
-  trunc_input_type = ['float','float2','float4','float8','float16']
-  trunc_output_type = ['float','float2','float4','float8','float16']
-  truncUtests = func('trunc','trunc',[trunc_input_type],trunc_output_type,[trunc_input_values],'0 * FLT_ULP')
-
-if __name__ == "__main__":
-  main()
-- 
1.7.6.4



More information about the Beignet mailing list