BEGIN {
getline;
while (!match($0, "^/[/*] static char cvs_id")) {
print;
getline;
}
getline;
while (!match($0, "^// WARRANTY DISCLAIMER")) {
print;
if (!getline) {
break;
}
}
if (getline)
{
printf \
"// Redistribution and use in source and binary forms, with or without\n" \
"// modification, are permitted provided that the following conditions are\n" \
"// met:\n" \
"//\n" \
"// * Redistributions of source code must retain the above copyright\n" \
"// notice, this list of conditions and the following disclaimer.\n" \
"//\n" \
"// * Redistributions in binary form must reproduce the above copyright\n" \
"// notice, this list of conditions and the following disclaimer in the\n" \
"// documentation and/or other materials provided with the distribution.\n" \
"//\n" \
"// * The name of Intel Corporation may not be used to endorse or promote\n" \
"// products derived from this software without specific prior written\n" \
"// permission.\n\n";
if (LICENSE_ONLY == "y") {
do {
print;
} while (getline);
}
}
}
/^[.]data/ {
print "RODATA";
next;
}
/^([a-zA-Z_0-9]*_(tb[l0-9]|Tt|[tT]able|data|low|coeffs|constants|CONSTANTS|reduction|Stirling)(_?([1-9cdimpqstPQT]+|tail))?|(Constants|Poly|coeff)_.+|(double_sin_?cos|double_cis)[fl]?_.+):/ {
table_name=substr($1,1,length($1)-1);
printf "LOCAL_OBJECT_START(%s)\n", table_name;
getline;
while (!match($0, "^[ \t]*data")) {
print;
getline;
}
while (match($0, "(//|^[ \t]*data)")) {
print;
getline;
}
printf "LOCAL_OBJECT_END(%s)\n\n", table_name;
next;
}
/^[.]proc[ \t]+__libm_(error_region|callout)/ {
printf "LOCAL_LIBM_ENTRY(%s)\n", $2;
getline;
next;
}
/^[.]endp[ \t]+__libm_(error_region|callout)/ {
printf "LOCAL_LIBM_END(%s)\n", $2;
next;
}
/^[.]global/ {
split($2, part, "#");
name=part[1];
if (match(name, "^"FUNC"$")) {
next;
}
}
/^[.]proc/ {
split($2, part, "#");
name=part[1];
if (match(name, "^"FUNC"$")) {
local_funcs=("^(" \
"cis|cisf|cisl" \
"|cabs|cabsf|cabsl" \
"|cot|cotf|cotl" \
")$");
ieee754_funcs=("^(" \
"atan2|atan2f|atan2l|atanl" \
"|cos|cosf|cosl" \
"|cosh|coshf|coshl" \
"|exp|expf|expl" \
"|exp10|exp10f|exp10l" \
"|expm1|expm1f|expm1l" \
"|fmod|fmodf|fmodl" \
"|hypot|hypotf|hypotl" \
"|fabs|fabsf|fabsl" \
"|floor|floorf|floorl" \
"|log1p|log1pf|log1pl" \
"|log|log10|log10f|log10l|log2l|logf|logl" \
"|remainder|remainderf|remainderl|" \
"|rint|rintf|rintl|" \
"|scalb|scalbf|scalbl" \
"|sin|sinf|sinl" \
"|sincos|sincosf|sincosl" \
"|sinh|sinhf|sinhl" \
"|sqrt|sqrtf|sqrtl" \
"|tan|tanf|tanl" \
")$");
if (match(name, ieee754_funcs)) {
type="GLOBAL_IEEE754";
} else if (match (name, local_funcs)) {
type="LOCAL_LIBM";
} else {
type="GLOBAL_LIBM";
}
printf "%s_ENTRY(%s)\n", type, name;
getline;
while (!match($0, "^"name"#?:")) {
getline;
}
getline;
while (!match($0, "^.endp")) {
print
getline;
}
printf "%s_END(%s)\n", type, name;
if (match(name, "^exp10[fl]?$")) {
t=substr(name,6)
printf "weak_alias (exp10%s, pow10%s)\n", t, t
}
next;
}
}
/^[a-zA-Z_]+:/ {
split($1, part, ":");
name=part[1];
if (match(name, "^"FUNC"$")) {
printf "GLOBAL_LIBM_ENTRY(%s)\n", name;
getline;
while (!match($0, "^"name"#?:")) {
getline;
}
getline;
while (!match($0, "^.endp")) {
print
getline;
}
getline;
printf "GLOBAL_LIBM_END(%s)\n", name;
next;
}
}
{ print }