| 100 | } |
| 101 | |
| 102 | static void |
| 103 | vfp_store(struct vfpstate *state) |
| 104 | { |
| 105 | __int128_t *vfp_state; |
| 106 | uint64_t fpcr, fpsr; |
| 107 | |
| 108 | vfp_state = state->vfp_regs; |
| 109 | __asm __volatile( |
| 110 | "mrs %0, fpcr \n" |
| 111 | "mrs %1, fpsr \n" |
| 112 | "stp q0, q1, [%2, #16 * 0]\n" |
| 113 | "stp q2, q3, [%2, #16 * 2]\n" |
| 114 | "stp q4, q5, [%2, #16 * 4]\n" |
| 115 | "stp q6, q7, [%2, #16 * 6]\n" |
| 116 | "stp q8, q9, [%2, #16 * 8]\n" |
| 117 | "stp q10, q11, [%2, #16 * 10]\n" |
| 118 | "stp q12, q13, [%2, #16 * 12]\n" |
| 119 | "stp q14, q15, [%2, #16 * 14]\n" |
| 120 | "stp q16, q17, [%2, #16 * 16]\n" |
| 121 | "stp q18, q19, [%2, #16 * 18]\n" |
| 122 | "stp q20, q21, [%2, #16 * 20]\n" |
| 123 | "stp q22, q23, [%2, #16 * 22]\n" |
| 124 | "stp q24, q25, [%2, #16 * 24]\n" |
| 125 | "stp q26, q27, [%2, #16 * 26]\n" |
| 126 | "stp q28, q29, [%2, #16 * 28]\n" |
| 127 | "stp q30, q31, [%2, #16 * 30]\n" |
| 128 | : "=&r"(fpcr), "=&r"(fpsr) : "r"(vfp_state)); |
| 129 | |
| 130 | state->vfp_fpcr = fpcr; |
| 131 | state->vfp_fpsr = fpsr; |
| 132 | } |
| 133 | |
| 134 | static void |
| 135 | vfp_restore(struct vfpstate *state) |