1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
// Copyright Naoki Shibata 2010 - 2017.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "funcproto.h"
int main(int argc, char **argv) {
if (argc < 5) {
fprintf(stderr, "Usage : %s <isa> <Mangled ISA> <DP width> <SP width>\n", argv[0]);
exit(-1);
}
char *isaname = argv[1];
char *mangledisa = argv[2];
char *wdp = argv[3];
char *wsp = argv[4];
// VLA SVE does not set the vector length in the mangled names.
if (strcmp(isaname, "sve") == 0)
wdp = wsp = "x";
static char *ulpSuffixStr[] = { "", "_u1", "_u05", "_u35", "_u15" };
static char *vparameterStrDP[] = { "v", "vv", "vl8l8", "vv", "v", "vvv", "vl8" };
static char *vparameterStrSP[] = { "v", "vv", "vl4l4", "vv", "v", "vvv", "vl4" };
for(int i=0;funcList[i].name != NULL;i++) {
if ((funcList[i].flags & 1) != 0) continue;
if (funcList[i].ulp < 0) {
printf("#define x%s _ZGV%sN%s%s_%s\n", funcList[i].name,
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
printf("#define str_x%s \"_ZGV%sN%s%s_%s\"\n", funcList[i].name,
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
printf("#define __%s_finite _ZGV%sN%s%s___%s_finite\n", funcList[i].name,
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
} else if (funcList[i].ulp < 20) {
printf("#define x%s%s _ZGV%sN%s%s_%s\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
printf("#define str_x%s%s \"_ZGV%sN%s%s_%s\"\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
printf("#define __%s%s_finite _ZGV%sN%s%s___%s_finite\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
} else {
printf("#define x%s%s _ZGV%sN%s%s_%s_u%d\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name, funcList[i].ulp);
printf("#define str_x%s%s \"_ZGV%sN%s%s_%s_u%d\"\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name, funcList[i].ulp);
printf("#define __%s%s_finite _ZGV%sN%s%s___%s_finite\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wdp, vparameterStrDP[funcList[i].funcType], funcList[i].name);
}
}
printf("\n");
for(int i=0;funcList[i].name != NULL;i++) {
if ((funcList[i].flags & 1) != 0) continue;
if (funcList[i].ulp < 0) {
printf("#define x%sf _ZGV%sN%s%s_%sf\n", funcList[i].name,
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
printf("#define str_x%sf \"_ZGV%sN%s%s_%sf\"\n", funcList[i].name,
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
printf("#define __%sf_finite _ZGV%sN%s%s___%sf_finite\n", funcList[i].name,
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
} else if (funcList[i].ulp < 20) {
printf("#define x%sf%s _ZGV%sN%s%s_%sf\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
printf("#define str_x%sf%s \"_ZGV%sN%s%s_%sf\"\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
printf("#define __%sf%s_finite _ZGV%sN%s%s___%sf_finite\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
} else {
printf("#define x%sf%s _ZGV%sN%s%s_%sf_u%d\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name, funcList[i].ulp);
printf("#define str_x%sf%s \"_ZGV%sN%s%s_%sf_u%d\"\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name, funcList[i].ulp);
printf("#define __%sf%s_finite _ZGV%sN%s%s___%sf_finite\n",
funcList[i].name, ulpSuffixStr[funcList[i].ulpSuffix],
mangledisa, wsp, vparameterStrSP[funcList[i].funcType], funcList[i].name);
}
}
exit(0);
}
|