--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/mmu/t_btb.cia Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,1135 @@
+// 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