home *** CD-ROM | disk | FTP | other *** search
- /*
- * 32 bit int micro RTX bindings when __NO_INLINE__
- *
- * ++jrb bammi@dsrgsun.ces.cwru.edu
- */
-
- #ifndef __MSHORT__
-
- long _trap5_w(short n)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movw %1,sp@-;
- trap #5;
- addqw #2,sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wl(short n, long l1)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- addqw #6,sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wlw(short n, long l1, short w1)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movw %3,sp@-;
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- addqw #8,sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1), "r"(w1) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wlwl(short n, long l1, short w1, long l2)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movw %3,sp@-;
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- lea sp@(12),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1), "r"(w1), "r"(l2) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wll(short n, long l1, long l2)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %3,sp@-;
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- lea sp@(10),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1), "r"(l2) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wlll(short n, long l1, long l2, long l3)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movl %3,sp@-;
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- lea sp@(14),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1), "r"(l2), "r"(l3) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wwl(short n, short w1, long l1)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %3,sp@-;
- movw %2,sp@-;
- movw %1,sp@-;
- trap #5;
- addqw #8,sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(w1), "r"(l1) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wllwl(short n, long l1, long l2, short w1, long l3)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movw %3,sp@-;
- movl %2,sp@-;
- movl %1,sp@-;
- movw %0,sp@-"
- : /* outputs */
- : "r"(n), "r"(l1), "r"(l2), "r"(w1), "r"(l3) /* inputs */
- );
- __asm__ volatile
- ("
- trap #5;
- lea sp@(16),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wlwwlwll(short n, long l1, short w1, short w2, long l2,
- short w3, long l3, long l4)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movl %3,sp@-;
- movw %2,sp@-;
- movl %1,sp@-;
- movw %0,sp@-"
- : /* outputs */
- : "r"(w2), "r"(l2), "r"(w3), "r"(l3), "r"(l4) /* inputs */
- );
- __asm__ volatile
- ("
- movw %3,sp@-;
- movl %2,sp@-;
- movw %1,sp@-;
- trap #5;
- lea sp@(24),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(l1), "r"(w1) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- long _trap5_wwllllll(short n, short w1, long l1, long l2, long l3,
- long l4, long l5, long l6)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movl %3,sp@-;
- movl %2,sp@-;
- movl %1,sp@-;
- movl %0,sp@-"
- : /* outputs */
- : "r"(l2), "r"(l3), "r"(l4), "r"(l5), "r"(l6) /* inputs */
- );
- __asm__ volatile
- ("
- movl %3,sp@-;
- movw %2,sp@-;
- movw %1,sp@-;
- trap #5;
- lea sp@(28),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : "r"(n), "r"(w1), "r"(l1) /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
-
- /*
- * additional gemdos bindings (not in osbind.h)
- */
- long trap_1_wwwll(short n, short w1, short w2, long l1, long l2)
- {
- long retvalue;
-
- __asm__ volatile
- ("
- movl %4,sp@-;
- movl %3,sp@-;
- movw %2,sp@-;
- movw %1,sp@-;
- movw %0,sp@- "
- : /* outputs */
- : "r"(n), "r"(w1), "r"(w2), "r"(l1), "r"(l2) /* inputs */
- );
- /* no more than 5 operand allowed in asm() -- therefore the split */
-
- __asm__ volatile
- ("
- trap #1;
- lea sp@(14),sp;
- movl d0,%0"
- : "=g"(retvalue) /* outputs */
- : /* inputs */
- : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */
- );
- return retvalue;
- }
- #endif /* !__MSHORT__ */
-