blob: f5ff2a2615df0a1f3b2da92cbb8dd3ff282c2170 [file] [log] [blame]
Olivier Deprez157378f2022-04-04 15:47:50 +02001// 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
7static 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
26static 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 */