/* *ThistaskwantstousetheFPUnow. *OnUP,disableFPforthetaskwhichhadtheFPUpreviously, *andsaveitsfloating-pointregistersinitsthread_struct. *Loadupthistask'sFPregistersfromitsthread_struct, *enabletheFPUforthecurrenttaskandreturntothetask. *Notethaton32-bitthiscanonlyuseregistersthatwillbe *restoredbyfast_exception_return,i.e.r3-r6,r10andr11.
*/
_GLOBAL(load_up_fpu)
mfmsr r5
#ifdef CONFIG_PPC_BOOK3S_64 /* interrupt doesn't set MSR[RI] and HPT can fault on current access */
ori r5,r5,MSR_FP|MSR_RI
#else
ori r5,r5,MSR_FP
#endif
#ifdef CONFIG_VSX
BEGIN_FTR_SECTION
oris r5,r5,MSR_VSX@h
END_FTR_SECTION_IFSET(CPU_FTR_VSX)
#endif
MTMSRD(r5) /* enable use of fpu now */
isync /* enable use of FP after return */
#ifdef CONFIG_PPC32
addi r5,r2,THREAD
lwz r4,THREAD_FPEXC_MODE(r5)
ori r9,r9,MSR_FP /* enable FP for current */
or r9,r9,r4
#else ld r4,PACACURRENT(r13)
addi r5,r4,THREAD /* Get THREAD */
lwz r4,THREAD_FPEXC_MODE(r5)
ori r12,r12,MSR_FP
or r12,r12,r4
std r12,_MSR(r1)
#ifdef CONFIG_PPC_BOOK3S_64
li r4,0
stb r4,PACASRR_VALID(r13)
#endif
#endif
li r4,1
stb r4,THREAD_LOAD_FP(r5)
addi r10,r5,THREAD_FPSTATE
lfd fr0,FPSTATE_FPSCR(r10)
MTFSF_L(fr0)
REST_32FPVSRS(0, R4, R10) /* restore registers and return */ /* we haven't used ctr or xer or lr */
blr
_ASM_NOKPROBE_SYMBOL(load_up_fpu)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.