TInt NThread::Create(SNThreadCreateInfo& aInfo, TBool aInitial) { TInt r=NThreadBase::Create(aInfo,aInitial); if (r!=KErrNone) return r; if (!aInitial) { TUint32* sp=(TUint32*)(iStackBase+iStackSizeaInfo. iParameterBlockSize); TUint32 r6=(TUint32)aInfo.iParameterBlock; if (aInfo.iParameterBlockSize) { wordmove (sp,aInfo.iParameterBlock, aInfo.iParameterBlockSize); r6=(TUint32)sp; } *--sp=(TUint32)__StartThread; // PC *--sp=0; // R11 *--sp=0; // R10 *--sp=0; // R9 *--sp=0; // R8 *--sp=0; // R7 *--sp=r6; // R6 *--sp=(TUint32)aInfo.iFunction; // R5 *--sp=(TUint32)this; // R4 *--sp=0x13; // SPSR_SVC *--sp=0; // R14_USR *--sp=0; // R13_USR iSavedSP=(TLinAddr)sp; } TInt NThread::Create(SNThreadCreateInfo& aInfo, TBool aInitial) { TInt r=NThreadBase::Create(aInfo,aInitial); if (r!=KErrNone) return r; if (!aInitial) { TUint32* sp=(TUint32*)(iStackBase+iStackSizeaInfo. iParameterBlockSize); TUint32 r6=(TUint32)aInfo.iParameterBlock; if (aInfo.iParameterBlockSize) { wordmove (sp,aInfo.iParameterBlock, aInfo.iParameterBlockSize); r6=(TUint32)sp; } *--sp=(TUint32)__StartThread; // PC *--sp=0; // R11 *--sp=0; // R10 *--sp=0; // R9 *--sp=0; // R8 *--sp=0; // R7 *--sp=r6; // R6 *--sp=(TUint32)aInfo.iFunction; // R5 *--sp=(TUint32)this; // R4 *--sp=0x13; // SPSR_SVC *--sp=0; // R14_USR *--sp=0; // R13_USR iSavedSP=(TLinAddr)sp; }