/* @(#)mem_rop_impl_util.h 1.7 89/05/19 SMI */

/*
 * Copyright 1986, 1987 by Sun Microsystems,  Inc.
 */

#ifndef	mem_rop_impl_util_DEFINED
#define	mem_rop_impl_util_DEFINED

/*
 * Utility macros for memory pixrect code
 */

/* 
 * Code selection macros 
 */
#define	IFTRUET(t, a, b)	_STMT(if (t) {a;} else {b;})
#define	IFFALSET(t, a, b)	_STMT(b;)

/*
 * Option control macros
 */
#define ALWAYS(option,a,b)	IFTRUE(a,b)
#define NEVER(option,a,b)	IFFALSE(a,b)
#define OPTION(option,a,b)	option(a,b)

#define	ALWAYST(option,t,a,b)	IFTRUET(t,a,b)
#define	NEVERT(option,t,a,b)	IFFALSET(t,a,b)
#define	OPTIONT(option,t,a,b)	option(t,a,b)

/*
 * Speed choice macros
 *
 * The T form is used when the "never" half of the fast code
 * is the same as the slow code.
 *
 * Define NEVER_SLOW to get all fast code.
 * Define NEVER_FAST to get all slow code.
 */
 
#if defined(NEVER_FAST) && !defined(NEVER_SLOW)
#define	FAST	IFFALSE
#define	FASTT	IFFALSET
#else
#define	FAST	IFTRUE
#define	FASTT	IFTRUET
#endif

#ifdef NEVER_SLOW
#define	SLOW	IFTRUE
#define	SLOWT	IFTRUET
#else
#define	SLOW	IFFALSE
#define	SLOWT	IFFALSET
#endif

/* fast in user, slow in kernel */
#define UFAST IFKERNEL(SLOW,FAST)
#define UFASTT IFKERNEL(SLOWT,FASTT)

#endif /* 	mem_rop_impl_util_DEFINED */
