/* * $Log: osbind.h,v $ * Revision 1.2 89/03/08 22:18:03 bammi * Many hacks etc. Version as distributed with gcc V1.34 * * */ /* * OSBIND.H Mnemonic names for operating system calls * * Adapted from Dale Schumacher's version to Mark Johnson C by Eric Gisin. */ /* hacked by jrd for GNU */ /* * more hacks * inline the traps * * ++jrb bammi@dsrgsun.ces.cwru.edu */ #ifdef __STDC__ #ifndef __NO_PROTO__ static long trap_1_w(short); static long trap_1_ww(short, short); static long trap_1_wl(short, long); static long trap_1_wlw(short, long, short); static long trap_1_wwll(short, short, long, long); static long trap_1_wlww(short, long, short, short); static long trap_1_www(short, short, short); static long trap_1_wll(short, long, long); static long trap_1_wwlll(short, short, long, long, long); static long trap_13_wl(short, long); static long trap_13_w(short); static long trap_13_ww(short, short); static long trap_13_www(short, short, short); static long trap_13_wwlwww(short, short, long, short, short, short); static long trap_13_wwl(short, short, long); static long trap_14_wwll(short, short, long, long); static long trap_14_ww(short, short); static long trap_14_w(short); static long trap_14_wllw(short, long, long, short); static long trap_14_wl(short, long); static long trap_14_www(short, short, short); static long trap_14_wllwwwww(short, long, long, short, short, short, short, short); static long trap_14_wllwwwwlw(short, long, long, short, short, short, short, long, short); static long trap_14_wwwwwww(short, short, short, short, short, short, short); static long trap_14_wlll(short, long, long, long); static long trap_14_wllww(short, long, long, short, short); static long trap_14_wwwwl(short, short, short, short, long); #endif #endif /* * GEMDOS (trap1) */ #define Pterm0() \ (void)trap_1_w((short)(0x00)) #define Cconin() \ (long)trap_1_w((short)(0x01)) #define Cconout(c) \ (void)trap_1_ww((short)(0x02),(short)(c)) #define Cauxin() \ (short)trap_1_w((short)(0x03)) #define Cauxout(c) \ (void)trap_1_ww((short)(0x04),(short)(c)) #define Cprnout(c) \ (void)trap_1_ww((short)(0x05),(short)(c)) #define Crawio(data) \ (long)trap_1_ww((short)(0x06),(short)(data)) #define Crawcin() \ (long)trap_1_w((short)(0x07)) #define Cnecin() \ (long)trap_1_w((short)(0x08)) #define Cconws(s) \ (void)trap_1_wl((short)(0x09),(char *)(s)) #define Cconrs(buf) \ (void)trap_1_wl((short)(0x0A),(char *)(buf)) #define Cconis() \ (short)trap_1_w((short)(0x0B)) #define Dsetdrv(d) \ (long)trap_1_ww((short)(0x0E),(short)(d)) #define Cconos() \ (short)trap_1_w((short)(0x10)) #define Cprnos() \ (short)trap_1_w((short)(0x11)) #define Cauxis() \ (short)trap_1_w((short)(0x12)) #define Cauxos() \ (short)trap_1_w((short)(0x13)) #define Dgetdrv() \ (short)trap_1_w((short)(0x19)) #define Fsetdta(dta) \ (void)trap_1_wl((short)(0x1A),(void *)(dta)) #define Super(ptr) \ (long)trap_1_wl((short)(0x20),(void *)(ptr)) #define Tgetdate() \ (short)trap_1_w((short)(0x2A)) #define Tsetdate(date) \ (short)trap_1_ww((short)(0x2B),(short)(date)) #define Tgettime() \ (short)trap_1_w((short)(0x2C)) #define Tsettime(time) \ (short)trap_1_ww((short)(0x2D),(short)(time)) #define Fgetdta() \ (long)trap_1_w((short)(0x2F)) #define Sversion() \ (short)trap_1_w((short)(0x30)) #define Ptermres(save,rv) \ (void)trap_1_wlw((short)(0x31),(long)(save),(short)(rv)) #define Dfree(buf,d) \ (void)trap_1_wlw((short)(0x36),(void *)(buf),(short)(d)) #define Dcreate(path) \ (short)trap_1_wl((short)(0x39),(char *)(path)) #define Ddelete(path) \ (short)trap_1_wl((short)(0x3A),(char *)(path)) #define Dsetpath(path) \ (short)trap_1_wl((short)(0x3B),(char *)(path)) #define Fcreate(fn,mode) \ (short)trap_1_wlw((short)(0x3C),(char *)(fn),(short)(mode)) #define Fopen(fn,mode) \ (short)trap_1_wlw((short)(0x3D),(char *)(fn),(short)(mode)) #define Fclose(handle) \ (short)trap_1_ww((short)(0x3E),(short)(handle)) #define Fread(handle,cnt,buf) \ (long)trap_1_wwll((short)(0x3F),(short)(handle), \ (long)(cnt),(char *)(buf)) #define Fwrite(handle,cnt,buf) \ (long)trap_1_wwll((short)(0x40),(short)(handle), \ (long)(cnt),(char *)(buf)) #define Fdelete(fn) \ (short)trap_1_wl((short)(0x41),(char *)(fn)) #define Fseek(where,handle,how) \ (long)trap_1_wlww((short)(0x42),(long)(where), \ (short)(handle),(short)(how)) #define Fattrib(fn,rwflag,attr) \ (short)trap_1_wlww((short)(0x43),(char *)(fn), \ (short)(rwflag),(short)(attr)) #define Fdup(handle) \ (short)trap_1_ww((short)(0x45),(short)(handle)) #define Fforce(Hstd,Hnew) \ (short)trap_1_www((short)(0x46),(short)(Hstd),(short)(Hnew)) #define Dgetpath(buf,d) \ (void)trap_1_wlw((short)(0x47),(char *)(buf),(short)(d)) #define Malloc(size) \ (long)trap_1_wl((short)(0x48),(long)(size)) #define Mfree(ptr) \ (short)trap_1_wl((short)(0x49),(void *)(ptr)) #define Mshrink(ptr,size) \ (short)trap_1_wll((short)(0x4A),(short)0,(void *)(ptr),(long)(size)) #define Pexec(mode,prog,tail,env) \ (short)trap_1_wwlll((short)(0x4B),(short)(mode),(char *)(prog), \ (char *)(tail),(char *)(env)) #define Pterm(rv) \ (void)trap_1_ww((short)(0x4C),(short)(rv)) #define Fsfirst(filespec,attr) \ (short)trap_1_wlw((short)(0x4E),(char *)(filespec),(short)(attr)) #define Fsnext() \ (short)trap_1_w((short)(0x4F)) #define Frename(zero,old,new) \ (short)trap_1_wwll((short)(0x56),(short)(zero), \ (char *)(old),(char *)(new)) #define Fdatime(timeptr,handle,rwflag) \ (void)trap_1_wlww((short)(0x57),(long)(timeptr), \ (short)(handle),(short)(rwflag)) /* codes for Pexec */ #define PE_LOADGO 0 /* load & go */ #define PE_LOAD 1 /* just load */ #define PE_CBASEPAGE 2 /* just create basepage */ #define PE_GO 3 /* just go */ /* * BIOS (trap13) */ #define Getmpb(ptr) \ (void)trap_13_wl((short)(0x00),(void *)(ptr)) #define Bconstat(dev) \ (short)trap_13_ww((short)(0x01),(short)(dev)) #define Bconin(dev) \ (long)trap_13_ww((short)(0x02),(short)(dev)) #define Bconout(dev,c) \ (void)trap_13_www((short)(0x03),(short)(dev),(short)((c) & 0xFF)) #define Rwabs(rwflag,buf,n,sector,d) \ (short)trap_13_wwlwww((short)(0x04),(short)(rwflag),(void *)(buf), \ (short)(n),(short)(sector),(short)(d)) #define Setexc(vnum,vptr) \ (void (*)())trap_13_wwl((short)(0x05),(short)(vnum),(void (*)())(vptr)) #define Tickcal() \ (long)trap_13_w((short)(0x06)) #define Getbpb(d) \ (void *)trap_13_w((short)(0x07),(short)(d)) #define Bcostat(dev) \ (short)trap_13_ww((short)(0x08),(short)(dev)) #define Mediach(dev) \ (short)trap_13_ww((short)(0x09),(short)(dev)) #define Drvmap() \ (long)trap_13_w((short)(0x0A)) #define Getshift() \ (short)trap_13_w((short)(0x0B)) #if 0 /* huh ? */ #define Kbshift(data) \ trap_13_ww((short)(0x0B),(short)(data)) #endif /* * XBIOS (trap14) */ #define Initmous(type,param,vptr) \ (void)trap_14_wwll((short)(0x00),(short)(type), \ (void *)(param),(void *)(vptr)) #define Ssbrk(size) \ (void *)trap_14_ww((short)(0x01),(short)(size)) #define Physbase() \ (void *)trap_14_w((short)(0x02)) #define Logbase() \ (void *)trap_14_w((short)(0x03)) #define Getrez() \ (short)trap_14_w((short)(0x04)) #define Setscreen(lscrn,pscrn,rez) \ (void)trap_14_wllw((short)(0x05),(void *)(lscrn),(void *)(pscrn), \ (short)(rez)) #define Setpallete(palptr) \ (void)trap_14_wl((short)(0x06),(void *)(palptr)) #define Setcolor(colornum,mixture) \ (short)trap_14_www((short)(0x07),(short)(colornum),(short)(mixture)) #define Floprd(buf,x,d,sect,trk,side,n) \ (short)trap_14_wllwwwww((short)(0x08),(void *)(buf),(long)(x), \ (short)(d),(short)(sect),(short)(trk),(short)(side),(short)(n)) #define Flopwr(buf,x,d,sect,trk,side,n) \ (short)trap_14_wllwwwww((short)(0x09),(void *)(buf),(long)(x), \ (short)(d),(short)(sect),(short)(trk),(short)(side),(short)(n)) #define Flopfmt(buf,x,d,spt,sd,i,m,v) \ (void *)trap_14_wllwwwwlw((short)(0x0A),(void *)(buf),(long)(x), \ (short)(d),(short)(spt),(short)(sd),(short)(i),(long)(m),(short)(v)) #define Midiws(cnt,ptr) \ (void)trap_14_wwl((short)(0x0C),(short)(cnt),(void *)(ptr)) #define Mfpint(vnum,vptr) \ (void)trap_14_wwl((short)(0x0D),(short)(vnum),(void (*)())(vptr)) #define Iorec(ioDEV) \ (void *)trap_14_ww((short)(0x0E),(short)(ioDEV)) #define Rsconf(baud,flow,uc,rs,ts,sc) \ (void)trap_14_wwwwwww((short)(0x0F),(short)(baud),(short)(flow), \ (short)(uc),(short)(rs),(short)(ts),(short)(sc)) #define Keytbl(nrml,shft,caps) \ (void *)trap_14_wlll((short)(0x10),(void *)(nrml), \ (void *)(shft),(void *)(caps)) #define Random() \ (long)trap_14_w((short)(0x11)) #define Protobt(buf,serial,dsktyp,exec) \ (void)trap_14_wllww((short)(0x12),(void *)(buf),(long)(serial), \ (short)(dsktyp),(short)(exec)) #define Flopver(buf,x,d,sect,trk,sd,n) \ (void)trap_wllwwwww((short)(0x13),(void *)(buf),(long)(x),(short)(d), \ (short)(sect),(short)(trk),(short)(sd),(short)(n)) #define Scrdmp() \ (void)trap_14_w((short)(0x14)) #define Cursconf(rate,attr) \ (short)trap_14_www((short)(0x15),(short)(rate),(short)(attr)) #define Settime(time) \ (void)trap_14_wl((short)(0x16),(long)(time)) #define Gettime() \ (long)trap_14_w((short)(0x17)) #define Bioskeys() \ (void)trap_14_w((short)(0x18)) #define Ikbdws(len_minus1,ptr) \ (void)trap_14_wwl((short)(0x19),(short)(len_minus1),(void *)(ptr)) #define Jdisint(vnum) \ (void)trap_14_ww((short)(0x1A),(short)(vnum)) #define Jenabint(vnum) \ (void)trap_14_ww((short)(0x1B),(short)(vnum)) #define Giaccess(data,reg) \ (short)trap_14_www((short)(0x1C),(short)(data),(short)(reg)) #define Offgibit(ormask) \ (void)trap_14_ww((short)(0x1D),(short)(ormask)) #define Ongibit(andmask) \ (void)trap_14_ww((short)(0x1E),(short)(andmask)) #define Xbtimer(timer,ctrl,data,vptr) \ (void)trap_14_wwwwl((short)(0x1E),(short)(timer),(short)(ctrl), \ (short)(data),(void (*)())(vptr)) #define Dosound(ptr) \ (void)trap_14_wl((short)(0x20),(void *)(ptr)) #define Setprt(config) \ (short)trap_14_ww((short)(0x21),(short)(config)) #define Kbdvbase() \ (void (**)())trap_14_w((short)(0x22)) #define Kbrate(delay,reprate) \ (short)trap_14_www((short)(0x23),(short)(delay),(short)(reprate)) #define Prtblk(pblkptr) \ (void)trap_14_wl((short)(0x24),(void *)(pblkptr)) /* obsolete ? */ #define Vsync() \ (void)trap_14_w((short)(0x25)) #define Supexec(funcptr) \ (void)trap_14_wl((short)(0x26),(void (*)())(funcptr)) /* * functions * */ static inline long trap_1_w(short n) { register long retvalue; asm volatile ("\ movw %1,sp@-; \ trap #1; \ addqw #2,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_ww(short n, short a) { register long retvalue; asm volatile ("\ movw %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addqw #4,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wl(short n, long a) { register long retvalue; asm volatile ("\ movl %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wlw(short n, long a, short b) { register long retvalue; asm volatile ("\ movw %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addqw #8,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wwll(short n, short a, long b, long c) { register long retvalue; asm volatile ("\ movl %4,sp@-; \ movl %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addw #12,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wlww(short n, long a, short b, short c) { register long retvalue; asm volatile ("\ movw %4,sp@-; \ movw %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addw #10,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_www(short n, short a, short b) { register long retvalue; asm volatile ("\ movw %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wll(short n, long a, long b) { register long retvalue; asm volatile ("\ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #1; \ addw #10,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_1_wwlll(short n, short a, long b, long c, long d) { register long retvalue; asm volatile ("\ movl %4,sp@-; \ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ movw %0,sp@-; " : /* outputs */ : "g"(n), "g"(a), "g"(b), "g"(c), "g"(d) /* inputs */ ); /* no more than 5 operand allowed in asm() -- therefore the split */ asm volatile ("\ trap #1; \ addw #16,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_wl(short n, long a) { register long retvalue; asm volatile ("\ movl %2,sp@-; \ movw %1,sp@-; \ trap #13; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_w(short n) { register long retvalue; asm volatile ("\ movw %1,sp@-; \ trap #13; \ addqw #2,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_ww(short n, short a) { register long retvalue; asm volatile ("\ movw %2,sp@-; \ movw %1,sp@-; \ trap #13; \ addqw #4,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_www(short n, short a, short c) { register long retvalue; asm volatile ("\ movw %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #13; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_wwlwww(short n, short a, long c, short d, short e, short f) { register long retvalue; asm volatile ("\ movw %4,sp@-; \ movw %3,sp@-; \ movw %2,sp@-; \ movl %1,sp@-; \ movw %0,sp@- " : /* outputs */ : "g"(a), "g"(c), "g"(d), "g"(e), "g"(f) /* inputs */ ); asm volatile ("\ movw %1,sp@-; \ trap #13; \ addw #14,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_13_wwl(short n, short a, long c) { register long retvalue; asm volatile ("\ movl %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #13; \ addqw #8,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wwll(short n, short a, long c, long d) { register long retvalue; asm volatile ("\ movl %4,sp@-; \ movl %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #12,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(c), "g"(d) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_ww(short n, short a) { register long retvalue; asm volatile ("\ movw %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addqw #4,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_w(short n) { register long retvalue; asm volatile ("\ movw %1,sp@-; \ trap #14; \ addqw #2,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wllw(short n, long a, long c, short d) { register long retvalue; asm volatile ("\ movw %4,sp@-; \ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #12,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(c), "g"(d) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wl(short n, long a) { register long retvalue; asm volatile ("\ movl %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_www(short n, short a, short c) { register long retvalue; asm volatile ("\ movw %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addqw #6,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wllwwwww(short n, long a, long b, short c, short d, short e, short f, short g) { register long retvalue; asm volatile ("\ movw %4,sp@-; \ movw %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ movw %0,sp@- " : /* outputs */ : "g"(c), "g"(d), "g"(e), "g"(f), "g"(g) /* inputs */ ); asm volatile ("\ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #20,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline 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 volatile ("\ movw %4,sp@-; \ movl %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ movw %0,sp@-; " : /* outputs */ : "g"(d), "g"(e), "g"(f), "g"(g), "g"(h) /* inputs */ ); asm volatile ("\ movw %4,sp@-; \ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #24,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wwwwwww(short n, short a, short b, short c, short d, short e, short f) { register long retvalue; asm volatile ("\ movw %4,sp@-; \ movw %3,sp@-; \ movw %2,sp@-; \ movw %1,sp@-; \ movw %0,sp@-; " : /* outputs */ : "g"(b), "g"(c), "g"(d), "g"(e), "g"(f) /* inputs */ ); asm volatile ("\ movw %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #14,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wlll(short n, long a, long b, long c) { register long retvalue; asm volatile ("\ movl %4,sp@-; \ movl %3,sp@-; \ movl %2,sp@-; \ movw %1,sp@-; \ trap #14; \ addw #14,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n), "g"(a), "g"(b), "g"(c) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wllww(short n, long a, long b, short c, short d) { register long retvalue; asm volatile ("\ movw %3,sp@-; \ movw %2,sp@-; \ movl %1,sp@-; \ movl %0,sp@-; " : /* outputs */ : "g"(a), "g"(b), "g"(c), "g"(d) /* inputs */ ); asm volatile ("\ movw %1,sp@-; \ trap #14; \ addw #14,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; } static inline long trap_14_wwwwl(short n, short a, short b, short c, long d) { register long retvalue; asm volatile ("\ movl %5,sp@-; \ movw %4,sp@-; \ movw %3,sp@-; \ movw %2,sp@-; " : /* outputs */ : "g"(a), "g"(b), "g"(c), "g"(d) /* inputs */ ); asm volatile ("\ movw %1,sp@-; \ trap #14; \ addw #12,sp; \ movl d0,%0" : "=r"(retvalue) /* outputs */ : "g"(n) /* inputs */ : "d0", "d1", "d2", "a0", "a1", "a2" /* clobbered regs */ ); return retvalue; }