#include <sys/types.h>
#include <sys/syscall.h>

#include <stdio.h>

struct syscall {
  char *name;
  int   vec;
} syscalls[] = {
#define SYSTEM_CALL(func,vec) #func, vec,
#include <sys/syscall.def>
#undef SYSTEM_CALL
};

int nsyscall = sizeof(syscalls) / sizeof (syscalls[0]);

main()
{
  FILE *fp;
  struct syscall *sc;
  int i, v;

  for (i = 0, sc = syscalls; i < nsyscall; i++, sc++)
    {
      char name[strlen (sc->name) + 3];
    
      v = -(sc->vec + 4)*6;
      
      sprintf (name, "%s.s", sc->name);

      fp = fopen (name, "w");
      
      if (!fp)
        {
          perror (sc->name);
          exit (20);
        }

      if (v > -128)
	{
#ifdef __no_baserel
	  fprintf (fp, ".globl _%s; _%s: movel _ixemulbase, a0; lea a0@(%d),a0; jmp a0@\n", sc->name, sc->name, v);
#endif
#ifdef __baserel
	  fprintf (fp, ".globl _%s; _%s: movel a4@(_ixemulbase:W), a0; lea a0@(%d),a0; jmp a0@\n", sc->name, sc->name, v);
#endif
	}
      else
	{
#ifdef __no_baserel
	  fprintf (fp, ".globl _%s; _%s: movel _ixemulbase, a0; addw #%d,a0;  jmp a0@\n", sc->name, sc->name, v);
#endif
#ifdef __baserel
	  if (sc->vec == SYS_ix_geta4)
	    {
	      fprintf (fp, ".globl _%s; _%s: movel _ixemulbase, a0; addw #%d,a0;  jmp a0@\n", sc->name, sc->name, v);
	    }
	  else
	    {
	      fprintf (fp, ".globl _%s; _%s: movel a4@(_ixemulbase:W), a0; addw #%d,a0;  jmp a0@\n", sc->name, sc->name, v);
	    }
#endif
	}
      fclose (fp);
    }
}

