home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / gnu / grtxbind / grtxbind.c next >
Encoding:
C/C++ Source or Header  |  1990-02-09  |  5.0 KB  |  258 lines

  1. /*
  2.  * 32 bit int micro RTX bindings when __NO_INLINE__
  3.  *
  4.  *    ++jrb    bammi@dsrgsun.ces.cwru.edu
  5.  */
  6.  
  7. #ifndef __MSHORT__
  8.  
  9. long _trap5_w(short n)
  10. {
  11.     long retvalue;
  12.  
  13.     __asm__ volatile
  14.     ("
  15.         movw    %1,sp@-;
  16.         trap    #5;
  17.         addqw   #2,sp;
  18.         movl    d0,%0"
  19.      : "=g"(retvalue)            /* outputs */
  20.      : "r"(n)                /* inputs  */
  21.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  22.      );
  23.     return retvalue;
  24. }
  25.  
  26. long _trap5_wl(short n, long l1)
  27. {
  28.     long retvalue;
  29.  
  30.     __asm__ volatile
  31.     ("
  32.          movl    %2,sp@-;
  33.         movw    %1,sp@-;
  34.         trap    #5;
  35.         addqw   #6,sp;
  36.         movl    d0,%0"
  37.      : "=g"(retvalue)            /* outputs */
  38.      : "r"(n), "r"(l1)            /* inputs  */
  39.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  40.      );
  41.     return retvalue;
  42. }
  43.  
  44. long _trap5_wlw(short n, long l1, short w1)
  45. {
  46.     long retvalue;
  47.  
  48.     __asm__ volatile
  49.     ("
  50.          movw    %3,sp@-;
  51.          movl    %2,sp@-;
  52.         movw    %1,sp@-;
  53.         trap    #5;
  54.         addqw   #8,sp;
  55.         movl    d0,%0"
  56.      : "=g"(retvalue)            /* outputs */
  57.      : "r"(n), "r"(l1), "r"(w1)        /* inputs  */
  58.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  59.      );
  60.     return retvalue;
  61. }
  62.  
  63. long _trap5_wlwl(short n, long l1, short w1, long l2)
  64. {
  65.     long retvalue;
  66.  
  67.     __asm__ volatile
  68.     ("
  69.          movl    %4,sp@-;
  70.          movw    %3,sp@-;
  71.          movl    %2,sp@-;
  72.         movw    %1,sp@-;
  73.         trap    #5;
  74.         lea     sp@(12),sp;
  75.         movl    d0,%0"
  76.      : "=g"(retvalue)            /* outputs */
  77.      : "r"(n), "r"(l1), "r"(w1), "r"(l2)    /* inputs  */
  78.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  79.      );
  80.     return retvalue;
  81. }
  82.  
  83. long _trap5_wll(short n, long l1, long l2)
  84. {
  85.     long retvalue;
  86.  
  87.     __asm__ volatile
  88.     ("
  89.          movl    %3,sp@-;
  90.          movl    %2,sp@-;
  91.         movw    %1,sp@-;
  92.         trap    #5;
  93.         lea     sp@(10),sp;
  94.         movl    d0,%0"
  95.      : "=g"(retvalue)            /* outputs */
  96.      : "r"(n), "r"(l1), "r"(l2)        /* inputs  */
  97.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  98.      );
  99.     return retvalue;
  100. }
  101.  
  102. long _trap5_wlll(short n, long l1, long l2, long l3)
  103. {
  104.     long retvalue;
  105.  
  106.     __asm__ volatile
  107.     ("
  108.          movl    %4,sp@-;
  109.          movl    %3,sp@-;
  110.          movl    %2,sp@-;
  111.         movw    %1,sp@-;
  112.         trap    #5;
  113.         lea     sp@(14),sp;
  114.         movl    d0,%0"
  115.      : "=g"(retvalue)            /* outputs */
  116.      : "r"(n), "r"(l1), "r"(l2), "r"(l3)    /* inputs  */
  117.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  118.      );
  119.     return retvalue;
  120. }
  121.  
  122. long _trap5_wwl(short n, short w1, long l1)
  123. {
  124.     long retvalue;
  125.  
  126.     __asm__ volatile
  127.     ("
  128.          movl    %3,sp@-;
  129.          movw    %2,sp@-;
  130.         movw    %1,sp@-;
  131.         trap    #5;
  132.         addqw   #8,sp;
  133.         movl    d0,%0"
  134.      : "=g"(retvalue)            /* outputs */
  135.      : "r"(n), "r"(w1), "r"(l1)        /* inputs  */
  136.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  137.      );
  138.     return retvalue;
  139. }
  140.  
  141. long _trap5_wllwl(short n, long l1, long l2, short w1, long l3)
  142. {
  143.     long retvalue;
  144.  
  145.     __asm__ volatile
  146.     ("
  147.          movl    %4,sp@-;
  148.          movw    %3,sp@-;
  149.         movl    %2,sp@-;
  150.          movl    %1,sp@-;
  151.         movw    %0,sp@-"
  152.      :                         /* outputs */
  153.      : "r"(n), "r"(l1), "r"(l2), "r"(w1), "r"(l3)    /* inputs  */
  154.      );
  155.     __asm__ volatile
  156.     ("
  157.         trap    #5;
  158.         lea     sp@(16),sp;
  159.         movl    d0,%0"
  160.      : "=g"(retvalue)            /* outputs */
  161.      :                     /* inputs  */
  162.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  163.      );
  164.     return retvalue;
  165. }
  166.  
  167. long _trap5_wlwwlwll(short n, long l1, short w1, short w2, long l2,
  168.              short w3, long l3, long l4)
  169. {
  170.     long retvalue;
  171.  
  172.     __asm__ volatile
  173.     ("
  174.          movl    %4,sp@-;
  175.          movl    %3,sp@-;
  176.         movw    %2,sp@-;
  177.          movl    %1,sp@-;
  178.         movw    %0,sp@-"
  179.      :                         /* outputs */
  180.      : "r"(w2), "r"(l2), "r"(w3), "r"(l3), "r"(l4)    /* inputs  */
  181.      );
  182.     __asm__ volatile
  183.     ("
  184.          movw    %3,sp@-;
  185.          movl    %2,sp@-;
  186.         movw    %1,sp@-;
  187.         trap    #5;
  188.         lea     sp@(24),sp;
  189.         movl    d0,%0"
  190.      : "=g"(retvalue)            /* outputs */
  191.      : "r"(n), "r"(l1), "r"(w1)        /* inputs  */
  192.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  193.      );
  194.     return retvalue;
  195. }
  196.  
  197. long _trap5_wwllllll(short n, short w1, long l1, long l2, long l3,
  198.              long l4, long l5, long l6)
  199. {
  200.     long retvalue;
  201.  
  202.     __asm__ volatile
  203.     ("
  204.          movl    %4,sp@-;
  205.          movl    %3,sp@-;
  206.         movl    %2,sp@-;
  207.          movl    %1,sp@-;
  208.         movl    %0,sp@-"
  209.      :                         /* outputs */
  210.      : "r"(l2), "r"(l3), "r"(l4), "r"(l5), "r"(l6)    /* inputs  */
  211.      );
  212.     __asm__ volatile
  213.     ("
  214.          movl    %3,sp@-;
  215.          movw    %2,sp@-;
  216.         movw    %1,sp@-;
  217.         trap    #5;
  218.         lea     sp@(28),sp;
  219.         movl    d0,%0"
  220.      : "=g"(retvalue)            /* outputs */
  221.      : "r"(n), "r"(w1), "r"(l1)        /* inputs  */
  222.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  223.      );
  224.     return retvalue;
  225. }
  226.  
  227. /*
  228.  * additional gemdos bindings (not in osbind.h)
  229.  */
  230. long trap_1_wwwll(short n, short w1, short w2, long l1, long l2)
  231. {
  232.     long retvalue;
  233.  
  234.     __asm__ volatile
  235.     ("
  236.         movl    %4,sp@-;
  237.         movl    %3,sp@-;
  238.         movw    %2,sp@-;
  239.         movw    %1,sp@-;
  240.         movw    %0,sp@- "
  241.      :                     /* outputs */
  242.      : "r"(n), "r"(w1), "r"(w2), "r"(l1), "r"(l2) /* inputs  */
  243.      );
  244.     /* no more than 5 operand allowed in asm() -- therefore the split */
  245.  
  246.     __asm__ volatile
  247.     ("
  248.         trap    #1;
  249.         lea    sp@(14),sp;
  250.         movl    d0,%0"
  251.      : "=g"(retvalue)            /* outputs */
  252.      :                    /* inputs  */
  253.      : "d0", "d1", "d2", "a0", "a1", "a2"    /* clobbered regs */
  254.      );
  255.     return retvalue;
  256. }
  257. #endif /* !__MSHORT__ */
  258.