/* * 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__ */