| 132 | } |
| 133 | |
| 134 | static void |
| 135 | vfp_restore(struct vfpstate *state) |
| 136 | { |
| 137 | __int128_t *vfp_state; |
| 138 | uint64_t fpcr, fpsr; |
| 139 | |
| 140 | vfp_state = state->vfp_regs; |
| 141 | fpcr = state->vfp_fpcr; |
| 142 | fpsr = state->vfp_fpsr; |
| 143 | |
| 144 | __asm __volatile( |
| 145 | "ldp q0, q1, [%2, #16 * 0]\n" |
| 146 | "ldp q2, q3, [%2, #16 * 2]\n" |
| 147 | "ldp q4, q5, [%2, #16 * 4]\n" |
| 148 | "ldp q6, q7, [%2, #16 * 6]\n" |
| 149 | "ldp q8, q9, [%2, #16 * 8]\n" |
| 150 | "ldp q10, q11, [%2, #16 * 10]\n" |
| 151 | "ldp q12, q13, [%2, #16 * 12]\n" |
| 152 | "ldp q14, q15, [%2, #16 * 14]\n" |
| 153 | "ldp q16, q17, [%2, #16 * 16]\n" |
| 154 | "ldp q18, q19, [%2, #16 * 18]\n" |
| 155 | "ldp q20, q21, [%2, #16 * 20]\n" |
| 156 | "ldp q22, q23, [%2, #16 * 22]\n" |
| 157 | "ldp q24, q25, [%2, #16 * 24]\n" |
| 158 | "ldp q26, q27, [%2, #16 * 26]\n" |
| 159 | "ldp q28, q29, [%2, #16 * 28]\n" |
| 160 | "ldp q30, q31, [%2, #16 * 30]\n" |
| 161 | "msr fpcr, %0 \n" |
| 162 | "msr fpsr, %1 \n" |
| 163 | : : "r"(fpcr), "r"(fpsr), "r"(vfp_state)); |
| 164 | } |
| 165 | |
| 166 | void |
| 167 | vfp_save_state(struct thread *td, struct pcb *pcb) |