1 // SPDX-License-Identifier: GPL-2.0-only 1 // SPDX-License-Identifier: GPL-2.0-only 2 #ifndef __SELFTESTS_X86_HELPERS_H 2 #ifndef __SELFTESTS_X86_HELPERS_H 3 #define __SELFTESTS_X86_HELPERS_H 3 #define __SELFTESTS_X86_HELPERS_H 4 4 5 #include <asm/processor-flags.h> 5 #include <asm/processor-flags.h> 6 6 7 static inline unsigned long get_eflags(void) 7 static inline unsigned long get_eflags(void) 8 { 8 { 9 unsigned long eflags; << 10 << 11 asm volatile ( << 12 #ifdef __x86_64__ 9 #ifdef __x86_64__ 13 "subq $128, %%rsp\n\t" !! 10 return __builtin_ia32_readeflags_u64(); 14 "pushfq\n\t" << 15 "popq %0\n\t" << 16 "addq $128, %%rsp" << 17 #else 11 #else 18 "pushfl\n\t" !! 12 return __builtin_ia32_readeflags_u32(); 19 "popl %0" << 20 #endif 13 #endif 21 : "=r" (eflags) :: "memory"); << 22 << 23 return eflags; << 24 } 14 } 25 15 26 static inline void set_eflags(unsigned long ef 16 static inline void set_eflags(unsigned long eflags) 27 { 17 { 28 asm volatile ( << 29 #ifdef __x86_64__ 18 #ifdef __x86_64__ 30 "subq $128, %%rsp\n\t" !! 19 __builtin_ia32_writeeflags_u64(eflags); 31 "pushq %0\n\t" << 32 "popfq\n\t" << 33 "addq $128, %%rsp" << 34 #else 20 #else 35 "pushl %0\n\t" !! 21 __builtin_ia32_writeeflags_u32(eflags); 36 "popfl" << 37 #endif 22 #endif 38 :: "r" (eflags) : "flags", "me << 39 } 23 } 40 24 41 #endif /* __SELFTESTS_X86_HELPERS_H */ 25 #endif /* __SELFTESTS_X86_HELPERS_H */ 42 26
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.