version 1.106, 2013/06/23 09:00:36 |
version 1.107, 2013/10/23 20:18:50 |
Line 1077 ENTRY(cpu_switchto) |
|
Line 1077 ENTRY(cpu_switchto) |
|
call _C_LABEL(i386_tls_switch) |
call _C_LABEL(i386_tls_switch) |
addl $4,%esp |
addl $4,%esp |
#else /* !XEN */ |
#else /* !XEN */ |
movl $IPL_HIGH,CPUVAR(ILEVEL) |
movl PCB_CR0(%ebx),%ecx |
movl PCB_CR0(%ebx),%ecx /* has CR0_TS clear */ |
|
movl %cr0,%edx |
movl %cr0,%edx |
|
|
/* |
|
* If our floating point registers are on a different CPU, |
|
* set CR0_TS so we'll trap rather than reuse bogus state. |
|
*/ |
|
cmpl CPUVAR(FPCURLWP),%edi |
|
je 3f |
|
orl $CR0_TS,%ecx |
|
|
|
/* Reloading CR0 is very expensive - avoid if possible. */ |
/* Reloading CR0 is very expensive - avoid if possible. */ |
3: cmpl %edx,%ecx |
cmpl %edx,%ecx |
je 4f |
je 4f |
movl %ecx,%cr0 |
movl %ecx,%cr0 |
#endif /* !XEN */ |
#endif /* !XEN */ |