home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / osbind / osbind.h next >
C/C++ Source or Header  |  1989-03-29  |  23KB  |  907 lines

  1. /*
  2.  * $Log:    osbind.h,v $
  3.  * Revision 1.2  89/03/08  22:18:03  bammi
  4.  * Many hacks etc. Version as distributed with gcc V1.34
  5.  * 
  6.  *
  7.  */
  8.  
  9. /*
  10.  *    OSBIND.H    Mnemonic names for operating system calls
  11.  *
  12.  * Adapted from Dale Schumacher's version to Mark Johnson C by Eric Gisin.
  13.  */
  14.  
  15. /* hacked by jrd for GNU */
  16.  
  17. /*
  18.  * more hacks
  19.  *    inline the traps
  20.  *
  21.  *        ++jrb bammi@dsrgsun.ces.cwru.edu
  22.  */
  23. #ifdef __STDC__
  24. #ifndef __NO_PROTO__
  25. static long trap_1_w(short);
  26. static long trap_1_ww(short, short);
  27. static long trap_1_wl(short, long);
  28. static long trap_1_wlw(short, long, short);
  29. static long trap_1_wwll(short, short, long, long);
  30. static long trap_1_wlww(short, long, short, short);
  31. static long trap_1_www(short, short, short);
  32. static long trap_1_wll(short, long, long);
  33. static long trap_1_wwlll(short, short, long, long, long);
  34. static long trap_13_wl(short, long);
  35. static long trap_13_w(short);
  36. static long trap_13_ww(short, short);
  37. static long trap_13_www(short, short, short);
  38. static long trap_13_wwlwww(short, short, long, short, short, short);
  39. static long trap_13_wwl(short, short, long);
  40. static long trap_14_wwll(short, short, long, long);
  41. static long trap_14_ww(short, short);
  42. static long trap_14_w(short);
  43. static long trap_14_wllw(short, long, long, short);
  44. static long trap_14_wl(short, long);
  45. static long trap_14_www(short, short, short);
  46. static long trap_14_wllwwwww(short, long, long, short, short, short, short, short);
  47. static long trap_14_wllwwwwlw(short, long, long, short, short, short, short, long, short);
  48. static long trap_14_wwwwwww(short, short, short, short, short, short, short);
  49. static long trap_14_wlll(short, long, long, long);
  50. static long trap_14_wllww(short, long, long, short, short);
  51. static long trap_14_wwwwl(short, short, short, short, long);
  52. #endif
  53. #endif
  54.  
  55. /*    
  56.  *    GEMDOS    (trap1)
  57.  */
  58. #define    Pterm0()                         \
  59.     (void)trap_1_w((short)(0x00))
  60. #define    Cconin()                         \
  61.     (long)trap_1_w((short)(0x01))
  62. #define    Cconout(c)                         \
  63.     (void)trap_1_ww((short)(0x02),(short)(c))
  64. #define    Cauxin()                         \
  65.     (short)trap_1_w((short)(0x03))
  66. #define    Cauxout(c)                         \
  67.     (void)trap_1_ww((short)(0x04),(short)(c))
  68. #define    Cprnout(c)                         \
  69.     (void)trap_1_ww((short)(0x05),(short)(c))
  70. #define    Crawio(data)                         \
  71.     (long)trap_1_ww((short)(0x06),(short)(data))
  72. #define    Crawcin()                         \
  73.     (long)trap_1_w((short)(0x07))
  74. #define    Cnecin()                         \
  75.     (long)trap_1_w((short)(0x08))
  76. #define    Cconws(s)                         \
  77.     (void)trap_1_wl((short)(0x09),(char *)(s))
  78. #define    Cconrs(buf)                         \
  79.     (void)trap_1_wl((short)(0x0A),(char *)(buf))
  80. #define    Cconis()                         \
  81.     (short)trap_1_w((short)(0x0B))
  82. #define    Dsetdrv(d)                         \
  83.     (long)trap_1_ww((short)(0x0E),(short)(d))
  84. #define    Cconos()                         \
  85.     (short)trap_1_w((short)(0x10))
  86. #define    Cprnos()                         \
  87.     (short)trap_1_w((short)(0x11))
  88. #define    Cauxis()                         \
  89.     (short)trap_1_w((short)(0x12))
  90. #define    Cauxos()                         \
  91.     (short)trap_1_w((short)(0x13))
  92. #define    Dgetdrv()                         \
  93.     (short)trap_1_w((short)(0x19))
  94. #define    Fsetdta(dta)                         \
  95.     (void)trap_1_wl((short)(0x1A),(void *)(dta))
  96. #define    Super(ptr)                         \
  97.     (long)trap_1_wl((short)(0x20),(void *)(ptr))
  98. #define    Tgetdate()                         \
  99.     (short)trap_1_w((short)(0x2A))
  100. #define    Tsetdate(date)                         \
  101.     (short)trap_1_ww((short)(0x2B),(short)(date))
  102. #define    Tgettime()                         \
  103.     (short)trap_1_w((short)(0x2C))
  104. #define    Tsettime(time)                         \
  105.     (short)trap_1_ww((short)(0x2D),(short)(time))
  106. #define    Fgetdta()                         \
  107.     (long)trap_1_w((short)(0x2F))
  108. #define    Sversion()                         \
  109.     (short)trap_1_w((short)(0x30))
  110. #define    Ptermres(save,rv)                     \
  111.     (void)trap_1_wlw((short)(0x31),(long)(save),(short)(rv))
  112. #define    Dfree(buf,d)                         \
  113.     (void)trap_1_wlw((short)(0x36),(void *)(buf),(short)(d))
  114. #define    Dcreate(path)                         \
  115.     (short)trap_1_wl((short)(0x39),(char *)(path))
  116. #define    Ddelete(path)                         \
  117.     (short)trap_1_wl((short)(0x3A),(char *)(path))
  118. #define    Dsetpath(path)                         \
  119.     (short)trap_1_wl((short)(0x3B),(char *)(path))
  120. #define    Fcreate(fn,mode)                     \
  121.     (short)trap_1_wlw((short)(0x3C),(char *)(fn),(short)(mode))
  122. #define    Fopen(fn,mode)                         \
  123.     (short)trap_1_wlw((short)(0x3D),(char *)(fn),(short)(mode))
  124. #define    Fclose(handle)                         \
  125.     (short)trap_1_ww((short)(0x3E),(short)(handle))
  126. #define    Fread(handle,cnt,buf)                     \
  127.     (long)trap_1_wwll((short)(0x3F),(short)(handle),    \
  128.               (long)(cnt),(char *)(buf))
  129. #define    Fwrite(handle,cnt,buf)                     \
  130.     (long)trap_1_wwll((short)(0x40),(short)(handle),     \
  131.               (long)(cnt),(char *)(buf))
  132. #define    Fdelete(fn)                         \
  133.     (short)trap_1_wl((short)(0x41),(char *)(fn))
  134. #define    Fseek(where,handle,how)                 \
  135.     (long)trap_1_wlww((short)(0x42),(long)(where),         \
  136.               (short)(handle),(short)(how))
  137. #define    Fattrib(fn,rwflag,attr)                 \
  138.     (short)trap_1_wlww((short)(0x43),(char *)(fn),         \
  139.                (short)(rwflag),(short)(attr))
  140. #define    Fdup(handle)                         \
  141.     (short)trap_1_ww((short)(0x45),(short)(handle))
  142. #define    Fforce(Hstd,Hnew)                     \
  143.     (short)trap_1_www((short)(0x46),(short)(Hstd),(short)(Hnew))
  144. #define    Dgetpath(buf,d)                     \
  145.     (void)trap_1_wlw((short)(0x47),(char *)(buf),(short)(d))
  146. #define    Malloc(size)                         \
  147.     (long)trap_1_wl((short)(0x48),(long)(size))
  148. #define    Mfree(ptr)                         \
  149.     (short)trap_1_wl((short)(0x49),(void *)(ptr))
  150. #define    Mshrink(ptr,size)                     \
  151.     (short)trap_1_wll((short)(0x4A),(short)0,(void *)(ptr),(long)(size))
  152. #define    Pexec(mode,prog,tail,env)                \
  153.     (short)trap_1_wwlll((short)(0x4B),(short)(mode),(char *)(prog),    \
  154.                 (char *)(tail),(char *)(env))
  155. #define    Pterm(rv)                         \
  156.     (void)trap_1_ww((short)(0x4C),(short)(rv))
  157. #define    Fsfirst(filespec,attr)                     \
  158.     (short)trap_1_wlw((short)(0x4E),(char *)(filespec),(short)(attr))
  159. #define    Fsnext()                         \
  160.     (short)trap_1_w((short)(0x4F))
  161. #define    Frename(zero,old,new)                     \
  162.     (short)trap_1_wwll((short)(0x56),(short)(zero),     \
  163.                (char *)(old),(char *)(new))
  164. #define    Fdatime(timeptr,handle,rwflag)                \
  165.     (void)trap_1_wlww((short)(0x57),(long)(timeptr),     \
  166.               (short)(handle),(short)(rwflag))
  167.  
  168.  
  169. /* codes for Pexec */
  170.  
  171. #define    PE_LOADGO        0        /* load & go */
  172. #define    PE_LOAD            1        /* just load */
  173. #define    PE_CBASEPAGE        2        /* just create basepage */
  174. #define    PE_GO            3        /* just go */
  175.  
  176.  
  177. /*
  178.  *    BIOS    (trap13)
  179.  */
  180. #define Getmpb(ptr)                        \
  181.         (void)trap_13_wl((short)(0x00),(void *)(ptr))
  182. #define    Bconstat(dev)                         \
  183.     (short)trap_13_ww((short)(0x01),(short)(dev))
  184. #define    Bconin(dev)                         \
  185.     (long)trap_13_ww((short)(0x02),(short)(dev))
  186. #define    Bconout(dev,c)                         \
  187.     (void)trap_13_www((short)(0x03),(short)(dev),(short)((c) & 0xFF))
  188. #define    Rwabs(rwflag,buf,n,sector,d)                \
  189.     (short)trap_13_wwlwww((short)(0x04),(short)(rwflag),(void *)(buf), \
  190.                   (short)(n),(short)(sector),(short)(d))
  191. #define    Setexc(vnum,vptr)                     \
  192.     (void (*)())trap_13_wwl((short)(0x05),(short)(vnum),(void (*)())(vptr))
  193. #define    Tickcal()                         \
  194.     (long)trap_13_w((short)(0x06))
  195. #define    Getbpb(d)                         \
  196.     (void *)trap_13_w((short)(0x07),(short)(d))
  197. #define    Bcostat(dev)                         \
  198.     (short)trap_13_ww((short)(0x08),(short)(dev))
  199. #define    Mediach(dev)                         \
  200.     (short)trap_13_ww((short)(0x09),(short)(dev))
  201. #define    Drvmap()                         \
  202.     (long)trap_13_w((short)(0x0A))
  203. #define    Getshift()                         \
  204.     (short)trap_13_w((short)(0x0B))
  205.  
  206. #if 0 /* huh ? */
  207. #define    Kbshift(data)                         \
  208.     trap_13_ww((short)(0x0B),(short)(data))
  209. #endif
  210.  
  211.  
  212. /*
  213.  *    XBIOS    (trap14)
  214.  */
  215.  
  216. #define    Initmous(type,param,vptr)                \
  217.     (void)trap_14_wwll((short)(0x00),(short)(type),         \
  218.                (void *)(param),(void *)(vptr))
  219. #define Ssbrk(size)                        \
  220.         (void *)trap_14_ww((short)(0x01),(short)(size))
  221. #define    Physbase()                         \
  222.     (void *)trap_14_w((short)(0x02))
  223. #define    Logbase()                         \
  224.     (void *)trap_14_w((short)(0x03))
  225. #define    Getrez()                         \
  226.     (short)trap_14_w((short)(0x04))
  227. #define    Setscreen(lscrn,pscrn,rez)                \
  228.     (void)trap_14_wllw((short)(0x05),(void *)(lscrn),(void *)(pscrn), \
  229.                (short)(rez))
  230. #define    Setpallete(palptr)                     \
  231.     (void)trap_14_wl((short)(0x06),(void *)(palptr))
  232. #define    Setcolor(colornum,mixture)                \
  233.     (short)trap_14_www((short)(0x07),(short)(colornum),(short)(mixture))
  234. #define    Floprd(buf,x,d,sect,trk,side,n)                \
  235.     (short)trap_14_wllwwwww((short)(0x08),(void *)(buf),(long)(x), \
  236.       (short)(d),(short)(sect),(short)(trk),(short)(side),(short)(n))
  237. #define    Flopwr(buf,x,d,sect,trk,side,n)                \
  238.     (short)trap_14_wllwwwww((short)(0x09),(void *)(buf),(long)(x), \
  239.         (short)(d),(short)(sect),(short)(trk),(short)(side),(short)(n))
  240. #define    Flopfmt(buf,x,d,spt,sd,i,m,v)             \
  241.     (void *)trap_14_wllwwwwlw((short)(0x0A),(void *)(buf),(long)(x), \
  242.           (short)(d),(short)(spt),(short)(sd),(short)(i),(long)(m),(short)(v))
  243. #define    Midiws(cnt,ptr)                     \
  244.     (void)trap_14_wwl((short)(0x0C),(short)(cnt),(void *)(ptr))
  245. #define    Mfpint(vnum,vptr)                     \
  246.     (void)trap_14_wwl((short)(0x0D),(short)(vnum),(void (*)())(vptr))
  247. #define    Iorec(ioDEV)                         \
  248.     (void *)trap_14_ww((short)(0x0E),(short)(ioDEV))
  249. #define    Rsconf(baud,flow,uc,rs,ts,sc)                \
  250.     (void)trap_14_wwwwwww((short)(0x0F),(short)(baud),(short)(flow), \
  251.                        (short)(uc),(short)(rs),(short)(ts),(short)(sc))
  252. #define    Keytbl(nrml,shft,caps)                     \
  253.         (void *)trap_14_wlll((short)(0x10),(void *)(nrml), \
  254.                  (void *)(shft),(void *)(caps))
  255. #define    Random()                         \
  256.     (long)trap_14_w((short)(0x11))
  257. #define    Protobt(buf,serial,dsktyp,exec)                \
  258.     (void)trap_14_wllww((short)(0x12),(void *)(buf),(long)(serial), \
  259.                 (short)(dsktyp),(short)(exec))
  260. #define    Flopver(buf,x,d,sect,trk,sd,n)                \
  261.     (void)trap_wllwwwww((short)(0x13),(void *)(buf),(long)(x),(short)(d), \
  262.         (short)(sect),(short)(trk),(short)(sd),(short)(n))
  263. #define    Scrdmp()                         \
  264.     (void)trap_14_w((short)(0x14))
  265. #define    Cursconf(rate,attr)                     \
  266.     (short)trap_14_www((short)(0x15),(short)(rate),(short)(attr))
  267. #define    Settime(time)                         \
  268.     (void)trap_14_wl((short)(0x16),(long)(time))
  269. #define    Gettime()                         \
  270.     (long)trap_14_w((short)(0x17))
  271. #define    Bioskeys()                         \
  272.     (void)trap_14_w((short)(0x18))
  273. #define    Ikbdws(len_minus1,ptr)                     \
  274.     (void)trap_14_wwl((short)(0x19),(short)(len_minus1),(void *)(ptr))
  275. #define    Jdisint(vnum)                         \
  276.     (void)trap_14_ww((short)(0x1A),(short)(vnum))
  277. #define    Jenabint(vnum)                         \
  278.     (void)trap_14_ww((short)(0x1B),(short)(vnum))
  279. #define    Giaccess(data,reg)                     \
  280.     (short)trap_14_www((short)(0x1C),(short)(data),(short)(reg))
  281. #define    Offgibit(ormask)                     \
  282.     (void)trap_14_ww((short)(0x1D),(short)(ormask))
  283. #define    Ongibit(andmask)                     \
  284.     (void)trap_14_ww((short)(0x1E),(short)(andmask))
  285. #define    Xbtimer(timer,ctrl,data,vptr)                \
  286.     (void)trap_14_wwwwl((short)(0x1E),(short)(timer),(short)(ctrl), \
  287.                 (short)(data),(void (*)())(vptr))
  288. #define    Dosound(ptr)                         \
  289.     (void)trap_14_wl((short)(0x20),(void *)(ptr))
  290. #define    Setprt(config)                         \
  291.     (short)trap_14_ww((short)(0x21),(short)(config))
  292. #define    Kbdvbase()                         \
  293.     (void (**)())trap_14_w((short)(0x22))
  294. #define    Kbrate(delay,reprate)                     \
  295.     (short)trap_14_www((short)(0x23),(short)(delay),(short)(reprate))
  296. #define    Prtblk(pblkptr)                     \
  297.     (void)trap_14_wl((short)(0x24),(void *)(pblkptr)) /* obsolete ? */
  298. #define    Vsync()                         \
  299.     (void)trap_14_w((short)(0x25))
  300. #define    Supexec(funcptr)                     \
  301.     (void)trap_14_wl((short)(0x26),(void (*)())(funcptr))
  302.  
  303. /*
  304.  * functions
  305.  *
  306.  */
  307. static inline long trap_1_w(short n)
  308. {
  309.     register long retvalue;
  310.  
  311.     asm volatile
  312.     ("\
  313.         movw    %1,sp@-; \
  314.         trap    #1;      \
  315.         addqw     #2,sp;     \
  316.         movl d0,%0"
  317.      : "=r"(retvalue)            /* outputs */
  318.          : "g"(n)                /* inputs  */
  319.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  320.     );
  321.     return retvalue;
  322. }
  323.  
  324.  
  325. static inline long trap_1_ww(short n, short a)
  326. {
  327.     register long retvalue;
  328.  
  329.     asm volatile
  330.     ("\
  331.                 movw    %2,sp@-; \
  332.         movw    %1,sp@-; \
  333.         trap    #1;      \
  334.         addqw     #4,sp;     \
  335.         movl     d0,%0"
  336.      : "=r"(retvalue)            /* outputs */
  337.          : "g"(n), "g"(a)            /* inputs  */
  338.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  339.     );
  340.     return retvalue;
  341. }
  342.  
  343. static inline long trap_1_wl(short n, long a)
  344. {
  345.     register long retvalue;
  346.  
  347.     asm volatile
  348.     ("\
  349.                 movl    %2,sp@-; \
  350.         movw    %1,sp@-; \
  351.         trap    #1;      \
  352.         addqw     #6,sp;     \
  353.         movl     d0,%0"
  354.      : "=r"(retvalue)            /* outputs */
  355.          : "g"(n), "g"(a)            /* inputs  */
  356.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  357.     );
  358.     return retvalue;
  359. }
  360.  
  361.  
  362. static inline long trap_1_wlw(short n, long a, short b)
  363. {
  364.     register long retvalue;
  365.  
  366.     asm volatile
  367.     ("\
  368.          movw    %3,sp@-; \
  369.                 movl    %2,sp@-; \
  370.         movw    %1,sp@-; \
  371.         trap    #1;      \
  372.         addqw     #8,sp;     \
  373.         movl     d0,%0"
  374.      : "=r"(retvalue)            /* outputs */
  375.          : "g"(n), "g"(a), "g"(b)        /* inputs  */
  376.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  377.     );
  378.     return retvalue;
  379. }
  380.  
  381.  
  382. static inline long trap_1_wwll(short n, short a, long b, long c)
  383. {
  384.     register long retvalue;
  385.  
  386.     asm volatile
  387.     ("\
  388.          movl    %4,sp@-; \
  389.          movl    %3,sp@-; \
  390.                 movw    %2,sp@-; \
  391.         movw    %1,sp@-; \
  392.         trap    #1;      \
  393.         addw     #12,sp;     \
  394.         movl     d0,%0"
  395.      : "=r"(retvalue)            /* outputs */
  396.          : "g"(n), "g"(a), "g"(b), "g"(c)    /* inputs  */
  397.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  398.     );
  399.     return retvalue;
  400. }
  401.  
  402.  
  403. static inline long trap_1_wlww(short n, long a, short b, short c)
  404. {
  405.     register long retvalue;
  406.  
  407.     asm volatile
  408.     ("\
  409.          movw    %4,sp@-; \
  410.          movw    %3,sp@-; \
  411.                 movl    %2,sp@-; \
  412.         movw    %1,sp@-; \
  413.         trap    #1;      \
  414.         addw     #10,sp;     \
  415.         movl     d0,%0"
  416.      : "=r"(retvalue)            /* outputs */
  417.          : "g"(n), "g"(a), "g"(b), "g"(c)    /* inputs  */
  418.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  419.     );
  420.     return retvalue;
  421. }
  422.  
  423.  
  424. static inline long trap_1_www(short n, short a, short b)
  425. {
  426.     register long retvalue;
  427.  
  428.     asm volatile
  429.     ("\
  430.          movw    %3,sp@-; \
  431.                 movw    %2,sp@-; \
  432.         movw    %1,sp@-; \
  433.         trap    #1;      \
  434.         addqw     #6,sp;     \
  435.         movl     d0,%0"
  436.      : "=r"(retvalue)            /* outputs */
  437.          : "g"(n), "g"(a), "g"(b)        /* inputs  */
  438.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  439.     );
  440.     return retvalue;
  441. }
  442.  
  443.  
  444. static inline long trap_1_wll(short n, long a, long b)
  445. {
  446.     register long retvalue;
  447.  
  448.     asm volatile
  449.     ("\
  450.          movl    %3,sp@-; \
  451.                 movl    %2,sp@-; \
  452.         movw    %1,sp@-; \
  453.         trap    #1;      \
  454.         addw     #10,sp;     \
  455.         movl     d0,%0"
  456.      : "=r"(retvalue)            /* outputs */
  457.          : "g"(n), "g"(a), "g"(b)        /* inputs  */
  458.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  459.     );
  460.     return retvalue;
  461. }
  462.  
  463.  
  464. static inline long trap_1_wwlll(short n, short a, long b, long c, long d)
  465. {
  466.     register long retvalue;
  467.  
  468.     asm volatile
  469.     ("\
  470.          movl    %4,sp@-; \
  471.          movl    %3,sp@-; \
  472.          movl    %2,sp@-; \
  473.                 movw    %1,sp@-; \
  474.         movw    %0,sp@-; "
  475.      :            /* outputs */
  476.          : "g"(n), "g"(a), "g"(b), "g"(c), "g"(d) /* inputs  */
  477.     );
  478.     /* no more than 5 operand allowed in asm() -- therefore the split */
  479.  
  480.     asm volatile
  481.     ("\
  482.          trap    #1;      \
  483.         addw     #16,sp;     \
  484.         movl     d0,%0"
  485.      : "=r"(retvalue)            /* outputs */
  486.          :                     /* inputs  */
  487.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  488.     );
  489.     return retvalue;
  490. }
  491.  
  492.  
  493. static inline long trap_13_wl(short n, long a)
  494. {
  495.     register long retvalue;
  496.  
  497.     asm volatile
  498.     ("\
  499.                 movl    %2,sp@-; \
  500.         movw    %1,sp@-; \
  501.         trap    #13;      \
  502.         addqw     #6,sp;     \
  503.         movl     d0,%0"
  504.      : "=r"(retvalue)            /* outputs */
  505.          : "g"(n), "g"(a)            /* inputs  */
  506.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  507.     );
  508.     return retvalue;
  509. }
  510.  
  511. static inline long trap_13_w(short n)
  512. {
  513.     register long retvalue;
  514.  
  515.     asm volatile
  516.     ("\
  517.         movw    %1,sp@-; \
  518.         trap    #13;      \
  519.         addqw     #2,sp;     \
  520.         movl     d0,%0"
  521.      : "=r"(retvalue)            /* outputs */
  522.          : "g"(n)                /* inputs  */
  523.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  524.     );
  525.     return retvalue;
  526. }
  527.  
  528.  
  529. static inline long trap_13_ww(short n, short a)
  530. {
  531.     register long retvalue;
  532.  
  533.     asm volatile
  534.     ("\
  535.                 movw    %2,sp@-; \
  536.         movw    %1,sp@-; \
  537.         trap    #13;      \
  538.         addqw     #4,sp;     \
  539.         movl     d0,%0"
  540.      : "=r"(retvalue)            /* outputs */
  541.          : "g"(n), "g"(a)            /* inputs  */
  542.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  543.     );
  544.     return retvalue;
  545. }
  546.  
  547.  
  548. static inline long trap_13_www(short n, short a, short c)
  549. {
  550.     register long retvalue;
  551.  
  552.     asm volatile
  553.     ("\
  554.          movw    %3,sp@-; \
  555.                 movw    %2,sp@-; \
  556.         movw    %1,sp@-; \
  557.         trap    #13;      \
  558.         addqw     #6,sp;     \
  559.         movl     d0,%0"
  560.      : "=r"(retvalue)            /* outputs */
  561.          : "g"(n), "g"(a), "g"(c)        /* inputs  */
  562.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  563.     );
  564.     return retvalue;
  565. }
  566.  
  567. static inline long trap_13_wwlwww(short n, short a, long c, short d,
  568.                   short e, short f)
  569. {
  570.     register long retvalue;
  571.  
  572.     asm volatile
  573.     ("\
  574.          movw    %4,sp@-; \
  575.          movw    %3,sp@-; \
  576.          movw    %2,sp@-; \
  577.          movl    %1,sp@-; \
  578.                 movw    %0,sp@-  "
  579.      :                     /* outputs */
  580.          : "g"(a), "g"(c), "g"(d), "g"(e), "g"(f) /* inputs  */
  581.     );
  582.  
  583.         asm volatile
  584.         ("\
  585.         movw    %1,sp@-; \
  586.         trap    #13;      \
  587.         addw     #14,sp;     \
  588.         movl     d0,%0"
  589.      : "=r"(retvalue)            /* outputs */
  590.          : "g"(n)                    /* inputs  */
  591.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  592.     );
  593.  
  594.     return retvalue;
  595. }
  596.  
  597. static inline long trap_13_wwl(short n, short a, long c)
  598. {
  599.     register long retvalue;
  600.  
  601.     asm volatile
  602.     ("\
  603.          movl    %3,sp@-; \
  604.                 movw    %2,sp@-; \
  605.         movw    %1,sp@-; \
  606.         trap    #13;      \
  607.         addqw     #8,sp;     \
  608.         movl     d0,%0"
  609.      : "=r"(retvalue)            /* outputs */
  610.          : "g"(n), "g"(a), "g"(c)        /* inputs  */
  611.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  612.     );
  613.     return retvalue;
  614. }
  615.  
  616.  
  617. static inline long trap_14_wwll(short n, short a, long c, long d)
  618. {
  619.     register long retvalue;
  620.  
  621.     asm volatile
  622.     ("\
  623.          movl    %4,sp@-; \
  624.          movl    %3,sp@-; \
  625.                 movw    %2,sp@-; \
  626.         movw    %1,sp@-; \
  627.         trap    #14;      \
  628.         addw     #12,sp;     \
  629.         movl     d0,%0"
  630.      : "=r"(retvalue)            /* outputs */
  631.          : "g"(n), "g"(a), "g"(c), "g"(d)    /* inputs  */
  632.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  633.     );
  634.     return retvalue;
  635. }
  636.  
  637. static inline long trap_14_ww(short n, short a)
  638. {
  639.     register long retvalue;
  640.  
  641.     asm volatile
  642.     ("\
  643.                 movw    %2,sp@-; \
  644.         movw    %1,sp@-; \
  645.         trap    #14;      \
  646.         addqw     #4,sp;     \
  647.         movl     d0,%0"
  648.      : "=r"(retvalue)            /* outputs */
  649.          : "g"(n), "g"(a)            /* inputs  */
  650.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  651.     );
  652.     return retvalue;
  653. }
  654.  
  655. static inline long trap_14_w(short n)
  656. {
  657.     register long retvalue;
  658.  
  659.     asm volatile
  660.     ("\
  661.         movw    %1,sp@-; \
  662.         trap    #14;      \
  663.         addqw     #2,sp;     \
  664.         movl     d0,%0"
  665.      : "=r"(retvalue)            /* outputs */
  666.          : "g"(n)                /* inputs  */
  667.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  668.     );
  669.     return retvalue;
  670. }
  671.  
  672.  
  673. static inline long trap_14_wllw(short n, long a, long c, short d)
  674. {
  675.     register long retvalue;
  676.  
  677.     asm volatile
  678.     ("\
  679.          movw    %4,sp@-; \
  680.          movl    %3,sp@-; \
  681.                 movl    %2,sp@-; \
  682.         movw    %1,sp@-; \
  683.         trap    #14;      \
  684.         addw     #12,sp;     \
  685.         movl     d0,%0"
  686.      : "=r"(retvalue)            /* outputs */
  687.          : "g"(n), "g"(a), "g"(c), "g"(d)    /* inputs  */
  688.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  689.     );
  690.     return retvalue;
  691. }
  692.  
  693.  
  694. static inline long trap_14_wl(short n, long a)
  695. {
  696.     register long retvalue;
  697.  
  698.     asm volatile
  699.     ("\
  700.                 movl    %2,sp@-; \
  701.         movw    %1,sp@-; \
  702.         trap    #14;      \
  703.         addqw     #6,sp;     \
  704.         movl     d0,%0"
  705.      : "=r"(retvalue)            /* outputs */
  706.          : "g"(n), "g"(a)            /* inputs  */
  707.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  708.     );
  709.     return retvalue;
  710. }
  711.  
  712.  
  713. static inline long trap_14_www(short n, short a, short c)
  714. {
  715.     register long retvalue;
  716.  
  717.     asm volatile
  718.     ("\
  719.          movw    %3,sp@-; \
  720.                 movw    %2,sp@-; \
  721.         movw    %1,sp@-; \
  722.         trap    #14;      \
  723.         addqw     #6,sp;     \
  724.         movl     d0,%0"
  725.      : "=r"(retvalue)            /* outputs */
  726.          : "g"(n), "g"(a), "g"(c)        /* inputs  */
  727.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  728.     );
  729.     return retvalue;
  730. }
  731.  
  732.  
  733. static inline long trap_14_wllwwwww(short n, long a, long b, short c,
  734.                     short d, short e, short f, short g)
  735. {
  736.     register long retvalue;
  737.  
  738.     asm volatile
  739.     ("\
  740.          movw    %4,sp@-; \
  741.          movw    %3,sp@-; \
  742.          movw    %2,sp@-; \
  743.          movw    %1,sp@-; \
  744.          movw    %0,sp@-  "
  745.      :                       /* outputs */
  746.          : "g"(c), "g"(d), "g"(e), "g"(f), "g"(g) /* inputs  */
  747.     );
  748.  
  749.     asm volatile
  750.     ("\
  751.          movl    %3,sp@-; \
  752.                 movl    %2,sp@-; \
  753.         movw    %1,sp@-; \
  754.         trap    #14;      \
  755.         addw     #20,sp;     \
  756.         movl     d0,%0"
  757.      : "=r"(retvalue)            /* outputs */
  758.          : "g"(n), "g"(a), "g"(b)         /* inputs  */
  759.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  760.     );
  761.     return retvalue;
  762. }
  763.  
  764.  
  765. static inline long trap_14_wllwwwwlw(short n, long a, long b, short c,
  766.                      short d, short e, short f, long g,
  767.                      short h)
  768. {
  769.     register long retvalue;
  770.  
  771.     asm volatile
  772.     ("\
  773.          movw    %4,sp@-; \
  774.          movl    %3,sp@-; \
  775.          movw    %2,sp@-; \
  776.          movw    %1,sp@-; \
  777.          movw    %0,sp@-; "
  778.      :                     /* outputs */
  779.          : "g"(d), "g"(e), "g"(f), "g"(g), "g"(h) /* inputs  */
  780.     );
  781.  
  782.     asm volatile
  783.     ("\
  784.          movw    %4,sp@-; \
  785.          movl    %3,sp@-; \
  786.                 movl    %2,sp@-; \
  787.         movw    %1,sp@-; \
  788.         trap    #14;      \
  789.         addw     #24,sp;     \
  790.         movl     d0,%0"
  791.      : "=r"(retvalue)            /* outputs */
  792.          : "g"(n), "g"(a), "g"(b), "g"(c)    /* inputs  */
  793.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  794.     );
  795.     return retvalue;
  796. }
  797.  
  798.  
  799. static inline long trap_14_wwwwwww(short n, short a, short b, short c,
  800.                     short d, short e, short f)
  801. {
  802.     register long retvalue;
  803.  
  804.     asm volatile
  805.     ("\
  806.          movw    %4,sp@-; \
  807.          movw    %3,sp@-; \
  808.          movw    %2,sp@-; \
  809.          movw    %1,sp@-; \
  810.          movw    %0,sp@-; "
  811.      :                     /* outputs */
  812.          : "g"(b), "g"(c), 
  813.        "g"(d), "g"(e), "g"(f)        /* inputs  */
  814.     );
  815.  
  816.     asm volatile
  817.     ("\
  818.                 movw    %2,sp@-; \
  819.         movw    %1,sp@-; \
  820.         trap    #14;      \
  821.         addw     #14,sp;     \
  822.         movl     d0,%0"
  823.      : "=r"(retvalue)            /* outputs */
  824.          : "g"(n), "g"(a)            /* inputs  */
  825.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  826.     );
  827.     return retvalue;
  828. }
  829.  
  830. static inline long trap_14_wlll(short n, long a, long b, long c)
  831. {
  832.     register long retvalue;
  833.  
  834.     asm volatile
  835.     ("\
  836.          movl    %4,sp@-; \
  837.          movl    %3,sp@-; \
  838.                 movl    %2,sp@-; \
  839.         movw    %1,sp@-; \
  840.         trap    #14;      \
  841.         addw     #14,sp;     \
  842.         movl     d0,%0"
  843.      : "=r"(retvalue)            /* outputs */
  844.          : "g"(n), "g"(a), "g"(b), "g"(c)     /* inputs  */
  845.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  846.     );
  847.     return retvalue;
  848. }
  849.  
  850.  
  851. static inline long trap_14_wllww(short n, long a, long b, short c,
  852.                  short d)
  853. {
  854.     register long retvalue;
  855.  
  856.     asm volatile
  857.     ("\
  858.          movw    %3,sp@-; \
  859.          movw    %2,sp@-; \
  860.          movl    %1,sp@-; \
  861.                 movl    %0,sp@-; "
  862.      :                     /* outputs */
  863.          : "g"(a), "g"(b), "g"(c), "g"(d)     /* inputs  */
  864.     );
  865.  
  866.     asm volatile
  867.     ("\
  868.         movw    %1,sp@-; \
  869.         trap    #14;      \
  870.         addw     #14,sp;     \
  871.         movl     d0,%0"
  872.      : "=r"(retvalue)            /* outputs */
  873.          : "g"(n)                /* inputs  */
  874.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  875.     );
  876.     return retvalue;
  877. }
  878.  
  879.  
  880. static inline long trap_14_wwwwl(short n, short a, short b, short c,
  881.                  long d)
  882. {
  883.     register long retvalue;
  884.  
  885.     asm volatile
  886.     ("\
  887.          movl    %5,sp@-; \
  888.          movw    %4,sp@-; \
  889.          movw    %3,sp@-; \
  890.                 movw    %2,sp@-; "
  891.      :                     /* outputs */
  892.          : "g"(a), "g"(b), "g"(c), "g"(d)    /* inputs  */
  893.     );
  894.  
  895.     asm volatile
  896.     ("\
  897.         movw    %1,sp@-; \
  898.         trap    #14;      \
  899.         addw     #12,sp;     \
  900.         movl     d0,%0"
  901.      : "=r"(retvalue)            /* outputs */
  902.          : "g"(n)                /* inputs  */
  903.      : "d0", "d1", "d2", "a0", "a1", "a2"     /* clobbered regs */
  904.     );
  905.     return retvalue;
  906. }
  907.