diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2013-02-23 20:09:23 -0500 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2013-02-23 20:09:23 -0500 |
commit | aaa80dfd11d760a1ccdfc79210a89b4daefd23f1 (patch) | |
tree | 31797578390e371ab5869afbdacd3e2a20f4acd0 | |
parent | b8d26bf81c21c86b4c513152d35451afc4e52b7e (diff) |
F_FXSR
-rw-r--r-- | simplex86.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/simplex86.c b/simplex86.c index 3a5d49e..51a0d60 100644 --- a/simplex86.c +++ b/simplex86.c @@ -114,6 +114,7 @@ typedef enum F_XOP = (1 << 25), F_FMA = (1 << 26), F_FMA4 = (1 << 27), + F_FXSR = (1 << 28), F_LAST, F_MASK = (F_LAST - 1) | (F_LAST - 2) } feature_t; @@ -492,8 +493,8 @@ static const variant_t variants[] = { I_vpmovmskb, { A_R, A_SSE }, F_AVX, E_RM, 0xd7, VEX(128,0x66,0x0f,WIG) }, /* SSE */ - { I_fxsave, { A_MEM }, F_SSE, E_M, 0x0fae, 0 }, - { I_fxrstor, { A_MEM }, F_SSE, E_M, 0x0fae, 1 }, + { I_fxsave, { A_MEM }, F_FXSR, E_M, 0x0fae, 0 }, + { I_fxrstor, { A_MEM }, F_FXSR, E_M, 0x0fae, 1 }, { I_ldmxcsr, { A_MEM }, F_SSE, E_M, 0x0fae, 2 }, { I_vldmxcsr, { A_MEM }, F_AVX, E_M, 0xae, 2 | VEX(LZ,0x00,0x0f,WIG) }, { I_stmxcsr, { A_MEM }, F_SSE, E_M, 0x0fae, 3 }, @@ -1032,6 +1033,7 @@ detect_features (assembler_t *as) TEST_FEATURE (ecx, 20, F_SSE42), TEST_FEATURE (ecx, 22, F_MOVBE), TEST_FEATURE (ecx, 23, F_POPCNT), + TEST_FEATURE (ecx, 24, F_FXSR), TEST_FEATURE (ecx, 27, F_OSXSAVE), TEST_FEATURE (ecx, 28, F_AVX), TEST_FEATURE (ecx, 29, F_F16C), @@ -1060,17 +1062,17 @@ detect_features (assembler_t *as) TEST_FEATURE (ebx, 5, F_AVX2), TEST_FEATURE (ebx, 3, F_BMI1), TEST_FEATURE (ebx, 8, F_BMI2), - - /* Check OS support for saving YMM and XMM state, - * and that AVX is present. - */ + + /* AVX is required for AVX2 and F16C */ I_test, esi, IMM (F_AVX), I_jz, LABEL ("no_ymm"), + /* Check OS support for saving YMM and XMM state + */ I_test, esi, IMM (F_OSXSAVE), I_jz, LABEL ("no_ymm"), - I_mov, ecx, IMM (0), + I_xor, ecx, ecx, I_xgetbv, I_and, eax, IMM (0x06), I_cmp, eax, IMM (0x06), @@ -1080,8 +1082,8 @@ detect_features (assembler_t *as) I_and, esi, IMM (~(F_AVX | F_F16C | F_AVX2)), DEFINE_LABEL ("done"), - I_mov, eax, esi, - I_pop, ebx, + I_mov, eax, esi, + I_pop, ebx, I_ret, DEFINE_VALUE64("printf", (uint64_t)printf), |