sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32test\misc\cpumeter.cia sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: extern TUint32 NopCount; sl@0: extern TUint MaxCycles; sl@0: sl@0: #if defined(__CPU_ARM) sl@0: __NAKED__ TInt CountNops(TAny*) sl@0: { sl@0: __SWITCH_TO_ARM; sl@0: asm("ldr r0, __NopCount "); sl@0: asm("mov r1, #0 "); sl@0: sl@0: asm("loop: "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("mov r0, r0 "); sl@0: asm("add r1, r1, #71 "); sl@0: asm("str r1, [r0] "); sl@0: asm("b loop "); sl@0: sl@0: asm("mov r0, #0 "); sl@0: __JUMP(,lr); sl@0: sl@0: asm("__NopCount: "); sl@0: asm(".word NopCount "); sl@0: __END_ARM; sl@0: } sl@0: #elif defined(__CPU_X86) sl@0: __NAKED__ TInt CountNops(TAny*) sl@0: { sl@0: #ifdef __WINS__ sl@0: __asm lea edx, NopCount sl@0: __asm mov eax, 0 sl@0: noploop: sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm inc eax sl@0: __asm add eax, 3 sl@0: __asm mov [edx], eax sl@0: __asm jmp noploop sl@0: #else sl@0: asm("mov edx, %a0": : "i"(&NopCount)); sl@0: asm("mov eax, 0"); sl@0: asm("noploop:"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("inc eax"); sl@0: asm("add eax, 3"); sl@0: asm("mov [edx], eax"); sl@0: asm("jmp noploop"); sl@0: #endif sl@0: } sl@0: #endif sl@0: