-static void out_toasm_x86(FILE *f, const char *sym_in,
- const char *sym_out, const struct parsed_proto *pp)
+// output decorated name
+static const char *pp_to_name(const struct parsed_proto *pp)
+{
+ static char buf[256];
+ char atval[16];
+
+ if (!pp->is_fastcall && pp->argc_reg != 0) {
+ // can only be handled by __cdecl C func
+ snprintf(buf, sizeof(buf), "_%s", pp->name);
+ return buf;
+ }
+
+ atval[0] = 0;
+ if (pp->is_stdcall) {
+ snprintf(atval, sizeof(atval), "@%d",
+ pp->argc * 4);
+ }
+ snprintf(buf, sizeof(buf), "%s%s%s",
+ pp->is_fastcall ? "@" : "_",
+ pp->name, atval);
+
+ return buf;
+}
+
+static void out_toasm_x86(FILE *f, const char *sym_out,
+ const struct parsed_proto *pp)