864 |
864 |
865 asm("2: "); |
865 asm("2: "); |
866 asm("stmfd sp!, {r0,lr} "); |
866 asm("stmfd sp!, {r0,lr} "); |
867 asm("mov r0, r3 "); |
867 asm("mov r0, r3 "); |
868 asm("mov r1, r12 "); |
868 asm("mov r1, r12 "); |
869 asm("bl ReschedInactiveCpus__10TSchedulerUl "); |
869 asm("bl ReschedInactiveCpus__10TSchedulerUl "); // CSM needed |
870 asm("mov r12, r0 "); |
870 asm("mov r12, r0 "); |
871 asm("ldmfd sp!, {r0,lr} "); |
871 asm("ldmfd sp!, {r0,lr} "); |
872 asm("ldr r2, [r0, #%a0]" : : "i" _FOFF(TSubScheduler, iSSX.iGicDistAddr)); |
872 asm("ldr r2, [r0, #%a0]" : : "i" _FOFF(TSubScheduler, iSSX.iGicDistAddr)); |
873 asm("b 1b "); |
873 asm("b 1b "); |
874 } |
874 } |
1038 asm("str r3, [r6, #%a0]" : : "i" _FOFF(ArmLocalTimer,iTimerCount)); // set new timeslice value in timer |
1038 asm("str r3, [r6, #%a0]" : : "i" _FOFF(ArmLocalTimer,iTimerCount)); // set new timeslice value in timer |
1039 |
1039 |
1040 asm("ldr r6, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[0])); |
1040 asm("ldr r6, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[0])); |
1041 asm("ldr r7, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[1])); |
1041 asm("ldr r7, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[1])); |
1042 asm("stmfd sp!, {r0-r2,lr} "); |
1042 asm("stmfd sp!, {r0-r2,lr} "); |
1043 asm("bl Timestamp__5NKern "); // R1:R0 = current time |
1043 asm("bl " CSM_ZN5NKern9TimestampEv); // R1:R0 = current time |
1044 asm("mov r4, r0 "); |
1044 asm("mov r4, r0 "); |
1045 asm("mov r5, r1 "); // R5:R4 = current time |
1045 asm("mov r5, r1 "); // R5:R4 = current time |
1046 asm("ldmfd sp!, {r0-r2,lr} "); |
1046 asm("ldmfd sp!, {r0-r2,lr} "); |
1047 asm("str r4, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[0])); |
1047 asm("str r4, [r0, #%a0]" : : "i" _FOFF(TSubScheduler,iLastTimestamp.i32[0])); |
1048 asm("ldr r3, [r1, #%a0]!" : : "i" _FOFF(NThreadBase,iTotalCpuTime.i64)); |
1048 asm("ldr r3, [r1, #%a0]!" : : "i" _FOFF(NThreadBase,iTotalCpuTime.i64)); |