<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Oct 31, 2020, 10:51 AM Richi Dubey <<a href="mailto:richidubey@gmail.com">richidubey@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I want to learn more about how context switching works in RTEMS. I saw the following lines in theaddispatch.c:</div><div><br></div><div>    _Thread_Save_fp( executing );<br>    _Context_Switch( &executing->Registers, &heir->Registers );<br>    _Thread_Restore_fp( executing );<br></div><div><br></div><div>I do not understand how it works. Here, the executing process saves its context by calling _Thread_Save_fp( executing ), then if a different process resumes execution after the context switch, why does it get the context of previous process (executing)?</div><div><br></div><div>Can someone help me learn more about this?</div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">In general, floating point registers are not touched unless there are floating point operations. There are exceptions to this where GCC uses the floating point unit for surprising reasons but that rule generally holds.</div><div dir="auto"><br></div><div dir="auto">the code that switches the integer registers takes care of the stack, status register, and the general programming registers which must be preserved across subroutine calls.</div><div dir="auto"><br></div><div dir="auto">This approach allows for lazy context switches where the floating point unit holds the state of a previous thread until it runs again. On some single processor architectures, this can result in great speed ups.</div><div dir="auto"><br></div><div dir="auto">But that code is okay because the floating point unit is not used during that sequence. it is untouched and up to a point it doesn't matter when the floating point unit is restored as long as it's before the thread needs it. And RTEMS should not be using floating point operations except in very special places in the code base.</div><div dir="auto"><br></div><div dir="auto">not sure that helps but the floating point unit and the integer unit are separate and most of the time can be contact switched separately completely safely.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>Thanks,</div><div>Richi.   </div></div>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a></blockquote></div></div></div>