| 2391 | } |
| 2392 | |
| 2393 | static void |
| 2394 | get_fpcontext(struct thread *td, mcontext_t *mcp, char *xfpusave, |
| 2395 | size_t xfpusave_len) |
| 2396 | { |
| 2397 | size_t max_len, len; |
| 2398 | |
| 2399 | mcp->mc_ownedfp = fpugetregs(td); |
| 2400 | bcopy(get_pcb_user_save_td(td), &mcp->mc_fpstate[0], |
| 2401 | sizeof(mcp->mc_fpstate)); |
| 2402 | mcp->mc_fpformat = fpuformat(); |
| 2403 | if (!use_xsave || xfpusave_len == 0) |
| 2404 | return; |
| 2405 | max_len = cpu_max_ext_state_size - sizeof(struct savefpu); |
| 2406 | len = xfpusave_len; |
| 2407 | if (len > max_len) { |
| 2408 | len = max_len; |
| 2409 | bzero(xfpusave + max_len, len - max_len); |
| 2410 | } |
| 2411 | mcp->mc_flags |= _MC_HASFPXSTATE; |
| 2412 | mcp->mc_xfpustate_len = len; |
| 2413 | bcopy(get_pcb_user_save_td(td) + 1, xfpusave, len); |
| 2414 | } |
| 2415 | |
| 2416 | static int |
| 2417 | set_fpcontext(struct thread *td, mcontext_t *mcp, char *xfpustate, |
no test coverage detected