code: purgatorio

ref: 51bf59e016b43f16ec91943829af30d99a886cc1
dir: /Linux/spim/include/emu.h/

View raw version
/*
 * system- and machine-specific declarations for emu:
 * floating-point save and restore, signal handling primitive, and
 * implementation of the current-process variable `up'.
 */

/*
 * This structure must agree with FPsave and FPrestore asm routines
 */
typedef struct FPU FPU;
struct FPU
{
	uchar	env[28];
};

/*
 * Later versions of Linux seemed to need large stack for gethostbyname()
 * so we had this at 128k, which is excessive.  More recently, we've
 * reduced it again after testing stack usage by gethostbyname.
 */
#define KSTACK (16 * 1024)

#ifndef USE_PTHREADS
static __inline Proc *getup(void) {
	Proc *p;
	__asm__(	"move	%0, $29\n\t"
			: "=r" (p)
	);
	return *(Proc **)((unsigned long)p & ~(KSTACK - 1));
}
#else
extern	Proc*	getup(void);
#endif

#define	up	(getup())

typedef sigjmp_buf osjmpbuf;
#define	ossetjmp(buf)	sigsetjmp(buf, 1)