364 #else |
364 #else |
365 asm("ldr r1, [r1, #%a0]" : : "i" _FOFF(TScheduler,iCurrentThread)); |
365 asm("ldr r1, [r1, #%a0]" : : "i" _FOFF(TScheduler,iCurrentThread)); |
366 #endif |
366 #endif |
367 asm("ldr r1, [r1, #%a0]" : : "i" (_FOFF(DThread,iOwningProcess)-_FOFF(DThread,iNThread))); // r1->process to check |
367 asm("ldr r1, [r1, #%a0]" : : "i" (_FOFF(DThread,iOwningProcess)-_FOFF(DThread,iNThread))); // r1->process to check |
368 asm("bl do_messagek "); |
368 asm("bl do_messagek "); |
|
369 asm("bcc 0f "); // if bad handle, panic |
369 asm("ldr ip, [r0, #%a0]" : : "i" _FOFF(RMessageK,iFunction)); // ip = function |
370 asm("ldr ip, [r0, #%a0]" : : "i" _FOFF(RMessageK,iFunction)); // ip = function |
370 asm("bcc 0f "); // if bad handle, panic |
|
371 asm("cmp ip, #%a0" : : "i" ((TInt)RMessage2::EDisConnect)); // check iFunction != RMessage2::EDisConnect |
371 asm("cmp ip, #%a0" : : "i" ((TInt)RMessage2::EDisConnect)); // check iFunction != RMessage2::EDisConnect |
372 asm("ldmnefd sp!, {r4,pc} "); // if not, return OK |
372 asm("ldmnefd sp!, {r4,pc} "); // if not, return OK |
373 asm("0: "); |
373 asm("0: "); |
374 asm("mov r0, #%a0" : : "i" (EBadMessageHandle)); // panic, disconnect not allowed |
374 asm("mov r0, #%a0" : : "i" (EBadMessageHandle)); // panic, disconnect not allowed |
375 asm("b " CSM_ZN1K18PanicCurrentThreadEi); |
375 asm("b " CSM_ZN1K18PanicCurrentThreadEi); |