kerneltest/e32test/mmu/t_btb.cia
author Slion
Tue, 08 Dec 2009 08:11:42 +0100
branchanywhere
changeset 19 f6d3d9676ee4
parent 0 a41df078684a
permissions -rw-r--r--
Trying to figure out how to implement my WINC like compatibility layer. Going the emulation way is probably not so smart. We should not use the kernel but rather hook native functions in the Exec calls.

// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// e32test\mmu\t_imb.cia
// 
//

#include <e32test.h>
#include <u32std.h>

#ifdef __CPU_ARM

__NAKED__ TInt BranchTest1()
	{
	asm("			movs  r0, #0 "); // return status KErrNone
	asm("			mov   r3, #1 "); // this is process 1
	asm("			mov   r1, lr "); // save return address
	asm("			mov   r2, #0xff00 "); // iterations
	asm("loop1:	");
	asm("			cmp   r1, r1 "); // reset cond flags
	asm("			moveq   lr, pc ");
	asm("			beq poison1 "); // start test!
	asm("			cmp   r3, #1 "); 
	asm("			moveq   lr, pc ");
	asm("			beq poison1 "); 
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 "); 
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			cmp   r3, #1 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison1 ");
	asm("			teq   r3, #1 ");		// did we fall through?
	asm("			movne r0, #-1 ");		// yes we did!
	__JUMP(ne,r1);							// return
	asm("			subs r2, r2, #1 ");	// no, decrement the counter and go again
	asm("			bne  loop1 ");			// if there are iters left and we didn't fall through

	__JUMP(,r1); // the end!
	asm("poison1: ");
	asm("			mov   r3, #1 ");  // we're ok
	__JUMP(,lr);
	asm("poison2: ");
	asm("			mov   r3, #2 ");  // woops!
	__JUMP(,lr);
	}

__NAKED__ void BranchTest1End()
{
	__JUMP(,lr);
}

__NAKED__ TInt BranchTest2()
	{
	asm("			movs  r0, #0 ");		// return status KErrNone
	asm("			mov   r3, #2 ");		// this is process 2
	asm("			mov   r1, lr");		// save return address
	asm("			mov   r2, #0xff00"); // iterations
	asm("loop2:	");
	asm("			cmp   r1, r1 ");	// reset flags
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");	// start test!
	asm("			cmp   r3, #2 "); 
	asm("			moveq   lr, pc ");
	asm("			beq poison3 "); 
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 "); 
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			cmp   r3, #2 ");
	asm("			moveq   lr, pc ");
	asm("			beq poison3 ");
	asm("			teq   r3, #2 ");		// did we fall through?
	asm("			movne r0, #-1 ");		// yes we did!
	__JUMP(ne,r1);							// return
	asm("			subs r2, r2, #1 ");	// no, decrement the counter and go again
	asm("			bne  loop2 ");			// if there are iters left and we didn't fall through
	__JUMP(,r1); // the end!
	asm("poison4: ");
	asm("			mov   r3, #1 ");  // woops!
	__JUMP(,lr);
	asm("poison3: ");
	asm("			mov   r3, #2 ");  // we're ok
	__JUMP(,lr);
	}
	
__NAKED__ void BranchTest2End()
{
	__JUMP(,lr);
}


__NAKED__ TInt BranchTest3()
	{
	asm("			b entrage ");		// skip the subroutine
	asm("nontoxic1: ");
	asm("			mov   r3, #3 ");  // we're ok
	__JUMP(,lr);
	asm("entrage: ");
	asm("			movs  r0, #0");		// return status KErrNone
	asm("			mov   r3, #3");		// this is test 3
	asm("			mov   r1, lr");		// save return address
	asm("			mov   r2, #0xff00"); // iterations
	asm("loop3:	");
	asm("			cmp   r1, r1 ");	// reset flags
	asm("			bleq nontoxic1 ");	// start test!
	asm("			cmp   r3, #3 "); 
	asm("			bleq nontoxic1 "); 
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 "); 
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			cmp   r3, #3 ");
	asm("			bleq nontoxic1 ");
	asm("			teq   r3, #3 ");		// did we fall through?
	asm("			movne r0, #-1 ");		// yes we did!
	__JUMP(ne,r1);							// return
	asm("			subs r2, r2, #1 ");		// no, decrement the counter and go again
	asm("			bne  loop3 ");			// if there are iters left and we didn't fall through
	__JUMP(,r1); // the end!
	asm("poison5: ");
	asm("			mov   r3, #1 ");  // woops!
	__JUMP(,lr);
	}

__NAKED__ void BranchTest3End()
{
	__JUMP(,lr);
}

__NAKED__ void BranchTest4(TInt)
{
	asm("		mov		r2, #0xff000 "); // big number
	asm("bloop: ");
	asm("		cmp		r0, #0 ");
	asm("		beq		skippy ");

	asm("		and		r4, r4, r4 ");
	asm("		and 	r5, r5, r5 ");
	asm("		and 	r6, r6, r6 ");
	asm("		and 	r7, r7, r7 ");
	asm("		and 	r8, r8, r8 ");

	asm("skippy: ");
	asm("		subs	r2, r2, #1 ");
	asm("		bne		bloop ");
	__JUMP(,lr);
}
__NAKED__ void BranchTest4End()
{
	__JUMP(,lr);
}
#endif