/* * non inline function forms of trap bindings for gcc, both * 16 and 32 bit ints. * see discussions in osbind.h and Changelog. * * ++jrb bammi@dsrgsun.ces.cwru.edu */ #ifndef __NO_INLINE__ # define __NO_INLINE__ #endif #include long trap_1_w(short n) { register long retvalue __asm__("d0"); __asm__ volatile (" movw %1,sp@-; trap #1; addqw #2,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_ww(short n, short a) { register long retvalue __asm__("d0"); short _a = (a); __asm__ volatile (" movw %2,sp@-; movw %1,sp@-; trap #1; addqw #4,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wl(short n, long a) { register long retvalue __asm__("d0"); long _a = (a); __asm__ volatile (" movl %2,sp@-; movw %1,sp@-; trap #1; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wlw(short n, long a, short b) { register long retvalue __asm__("d0"); long _a = (a); short _b = (b); __asm__ volatile (" movw %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #1; addqw #8,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wwll(short n, short a, long b, long c) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); long _c = (c); __asm__ volatile (" movl %4,sp@-; movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #1; addw #12,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wlww(short n, long a, short b, short c) { register long retvalue __asm__("d0"); long _a = (a); short _b = (b); short _c = (c); __asm__ volatile (" movw %4,sp@-; movw %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #1; addw #10,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_www(short n, short a, short b) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); __asm__ volatile (" movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #1; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wll(short n, long a, long b) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); __asm__ volatile (" movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #1; addw #10,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_1_wwlll(short n, short a, long b, long c, long d) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); long _c = (c); long _d = (d); __asm__ volatile (" movl %4,sp@-; movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d) /* inputs */ ); /* no more than 5 operand allowed in asm() -- therefore the split */ __asm__ volatile (" trap #1; addw #16,sp " : "=r"(retvalue) /* outputs */ : /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_wl(short n, long a) { register long retvalue __asm__("d0"); long _a = (a); __asm__ volatile (" movl %2,sp@-; movw %1,sp@-; trap #13; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_w(short n) { register long retvalue __asm__("d0"); __asm__ volatile (" movw %1,sp@-; trap #13; addqw #2,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_ww(short n, short a) { register long retvalue __asm__("d0"); short _a = (a); __asm__ volatile (" movw %2,sp@-; movw %1,sp@-; trap #13; addqw #4,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_www(short n, short a, short b) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); __asm__ volatile (" movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #13; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_wwlwww(short n, short a, long b, short c, short d, short e) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); short _c = (c); short _d = (d); short _e = (e); __asm__ volatile (" movw %4,sp@-; movw %3,sp@-; movw %2,sp@-; movl %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e) /* inputs */ ); __asm__ volatile (" movw %1,sp@-; trap #13; addw #14,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_13_wwl(short n, short a, long b) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); __asm__ volatile (" movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #13; addqw #8,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wwl(short n, short a, long b) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); __asm__ volatile (" movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #14; addqw #8,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wwll(short n, short a, long b, long c) { register long retvalue __asm__("d0"); short _a = (a); long _b = (b); long _c = (c); __asm__ volatile (" movl %4,sp@-; movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #14; addw #12,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_ww(short n, short a) { register long retvalue __asm__("d0"); short _a = (a); __asm__ volatile (" movw %2,sp@-; movw %1,sp@-; trap #14; addqw #4,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_w(short n) { register long retvalue __asm__("d0"); __asm__ volatile (" movw %1,sp@-; trap #14; addqw #2,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wllw(short n, long a, long b, short c) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); short _c = (c); __asm__ volatile (" movw %4,sp@-; movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #14; addw #12,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wl(short n, long a) { register long retvalue __asm__("d0"); long _a = (a); __asm__ volatile (" movl %2,sp@-; movw %1,sp@-; trap #14; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_www(short n, short a, short b) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); __asm__ volatile (" movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #14; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wllwwwww(short n, long a, long b, short c, short d, short e, short f, short g) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); short _c = (c); short _d = (d); short _e = (e); short _f = (f); short _g = (g); __asm__ volatile (" movw %4,sp@-; movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_c), "r"(_d), "r"(_e), "r"(_f), "r"(_g) /* inputs */ ); __asm__ volatile (" movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #14; addw #20,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wllwwwwlw(short n, long a, long b, short c, short d, short e, short f, long g, short h) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); short _c = (c); short _d = (d); short _e = (e); short _f = (f); long _g = (g); short _h = (h); __asm__ volatile (" movw %4,sp@-; movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_d), "r"(_e), "r"(_f), "r"(_g), "r"(_h) /* inputs */ ); __asm__ volatile (" movw %4,sp@-; movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #14; addw #24,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wllwwwwwlw(short n, long a, long b, short c, short d, short e, short f, short g, long h, short i) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); short _c = (c); short _d = (d); short _e = (e); short _f = (f); short _g = (g); long _h = (h); short _i = (i); __asm__ volatile (" movw %4,sp@-; movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_e), "r"(_f), "r"(_g), "r"(_h), "r"(_i) /* inputs */ ); __asm__ volatile (" movw %4,sp@-; movw %3,sp@-; movl %2,sp@-; movl %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c), "r"(_d) /* inputs */ ); __asm__ volatile (" trap #14; addw #26,sp " : "=r"(retvalue) /* outputs */ : /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wwwwwww(short n, short a, short b, short c, short d, short e, short f) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); short _c = (c); short _d = (d); short _e = (e); short _f = (f); __asm__ volatile (" movw %4,sp@-; movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_b), "r"(_c), "r"(_d), "r"(_e), "r"(_f) /* inputs */ ); __asm__ volatile (" movw %2,sp@-; movw %1,sp@-; trap #14; addw #14,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wlll(short n, long a, long b, long c) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); long _c = (c); __asm__ volatile (" movl %4,sp@-; movl %3,sp@-; movl %2,sp@-; movw %1,sp@-; trap #14; addw #14,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wllww(short n, long a, long b, short c, short d) { register long retvalue __asm__("d0"); long _a = (a); long _b = (b); short _c = (c); short _d = (d); __asm__ volatile (" movw %3,sp@-; movw %2,sp@-; movl %1,sp@-; movl %0,sp@- " : /* outputs */ : "r"(_a), "r"(_b), "r"(_c), "r"(_d) /* inputs */ ); __asm__ volatile (" movw %1,sp@-; trap #14; addw #14,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wwwwl(short n, short a, short b, short c, long d) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); short _c = (c); long _d = (d); __asm__ volatile (" movl %3,sp@-; movw %2,sp@-; movw %1,sp@-; movw %0,sp@- " : /* outputs */ : "r"(_a), "r"(_b), "r"(_c), "r"(_d) /* inputs */ ); __asm__ volatile (" movw %1,sp@-; trap #14; addw #12,sp " : "=r"(retvalue) /* outputs */ : "r"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } long trap_14_wwwl(short n, short a, short b, long c) { register long retvalue __asm__("d0"); short _a = (a); short _b = (b); long _c = (c); __asm__ volatile (" movl %4,sp@-; movw %3,sp@-; movw %2,sp@-; movw %1,sp@-; trap #14; addqw #6,sp " : "=r"(retvalue) /* outputs */ : "r"(n), "r"(_a), "r"(_b), "r"(_c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; }