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 }