/*
 * Enable MaverickCrunch forwarding in any existing program by DLL injection.
 *
 * Usage (to enable Crunch forwarding in "program"):
 *	gcc -mcpu=ep9312 -fPIC -shared -o fwden.so fwden.c
 *	LD_PRELOAD=`pwd`/fwden.so program
 *
 * Ref: http://neworder.box.sk/newsread.php?newsid=13857
 */

/* __gmon_start__ is a weak symbol defined in all C programs */
__gmon_start__()
{
	asm("cfmv32sc   mvdx0, dspsc");    /* Read status register */
	asm("cfmvrdl    r0, mvd0");        /* Move LSW to ARM */
	asm("orr        r0, r0, #0x4000"); /* Set forwarding bit */
	asm("cfmvdlr    mvd0, r0");        /* Move ARM to LSW */
	asm("cfmvsc32   dspsc, mvdx0");    /* Write to status register */
	return(0);
}
