1 // SPDX-License-Identifier: GPL-2.0-only
2 #ifndef __SELFTESTS_X86_HELPERS_H
3 #define __SELFTESTS_X86_HELPERS_H
4 
5 #include <asm/processor-flags.h>
6 
7 static inline unsigned long get_eflags(void)
8 {
9 	unsigned long eflags;
10 
11 	asm volatile (
12 #ifdef __x86_64__
13 		"subq $128, %%rsp\n\t"
14 		"pushfq\n\t"
15 		"popq %0\n\t"
16 		"addq $128, %%rsp"
17 #else
18 		"pushfl\n\t"
19 		"popl %0"
20 #endif
21 		: "=r" (eflags) :: "memory");
22 
23 	return eflags;
24 }
25 
26 static inline void set_eflags(unsigned long eflags)
27 {
28 	asm volatile (
29 #ifdef __x86_64__
30 		"subq $128, %%rsp\n\t"
31 		"pushq %0\n\t"
32 		"popfq\n\t"
33 		"addq $128, %%rsp"
34 #else
35 		"pushl %0\n\t"
36 		"popfl"
37 #endif
38 		:: "r" (eflags) : "flags", "memory");
39 }
40 
41 #endif /* __SELFTESTS_X86_HELPERS_H */
42