|
949 | 949 | "x2", "x3", "x4", "x5", "x6", "x7", "x8", |
950 | 950 | // Corouptable register, may change ,should save |
951 | 951 | "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", |
952 | | - "x17", "x18"); |
| 952 | + "x17", "x18", |
| 953 | + // Callee-saved SIMD/FP registers (low 64 bits of v8-v15) |
| 954 | + // must be preserved across the switch per AAPCS, just as |
| 955 | + // Win64 preserves xmm6-xmm15 above. |
| 956 | + "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15"); |
953 | 957 | } |
954 | 958 |
|
955 | 959 | inline void switch_context_defer(thread* from, thread* to, |
|
967 | 971 | : "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", |
968 | 972 | "x27", "x28", "x29", "x30", "x4", "x5", "x6", "x7", "x8", |
969 | 973 | "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", |
970 | | - "x17", "x18"); |
| 974 | + "x17", "x18", |
| 975 | + "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15"); |
971 | 976 | } |
972 | 977 | #ifdef __clang__ |
973 | 978 | #pragma GCC diagnostic pop |
|
0 commit comments