@@ -94,18 +94,17 @@ static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 ma
94
94
/* XSAVE/XRSTOR wrapper functions */
95
95
96
96
#ifdef CONFIG_X86_64
97
- #define REX_PREFIX "0x48, "
97
+ #define REX_SUFFIX "64 "
98
98
#else
99
- #define REX_PREFIX
99
+ #define REX_SUFFIX
100
100
#endif
101
101
102
- /* These macros all use (%edi)/(%rdi) as the single memory argument. */
103
- #define XSAVE ".byte " REX_PREFIX "0x0f,0xae,0x27"
104
- #define XSAVEOPT ".byte " REX_PREFIX "0x0f,0xae,0x37"
105
- #define XSAVEC ".byte " REX_PREFIX "0x0f,0xc7,0x27"
106
- #define XSAVES ".byte " REX_PREFIX "0x0f,0xc7,0x2f"
107
- #define XRSTOR ".byte " REX_PREFIX "0x0f,0xae,0x2f"
108
- #define XRSTORS ".byte " REX_PREFIX "0x0f,0xc7,0x1f"
102
+ #define XSAVE "xsave" REX_SUFFIX " %[xa]"
103
+ #define XSAVEOPT "xsaveopt" REX_SUFFIX " %[xa]"
104
+ #define XSAVEC "xsavec" REX_SUFFIX " %[xa]"
105
+ #define XSAVES "xsaves" REX_SUFFIX " %[xa]"
106
+ #define XRSTOR "xrstor" REX_SUFFIX " %[xa]"
107
+ #define XRSTORS "xrstors" REX_SUFFIX " %[xa]"
109
108
110
109
/*
111
110
* After this @err contains 0 on success or the trap number when the
@@ -114,10 +113,10 @@ static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 ma
114
113
#define XSTATE_OP (op , st , lmask , hmask , err ) \
115
114
asm volatile("1:" op "\n\t" \
116
115
"xor %[err], %[err]\n" \
117
- "2:\n\t " \
116
+ "2:\n" \
118
117
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_FAULT_MCE_SAFE) \
119
118
: [err] "=a" (err) \
120
- : "D" (st), "m" (*st ), "a" (lmask), "d" (hmask) \
119
+ : [xa] "m" (*(st) ), "a" (lmask), "d" (hmask) \
121
120
: "memory")
122
121
123
122
/*
@@ -137,12 +136,12 @@ static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 ma
137
136
XSAVEOPT, X86_FEATURE_XSAVEOPT, \
138
137
XSAVEC, X86_FEATURE_XSAVEC, \
139
138
XSAVES, X86_FEATURE_XSAVES) \
140
- "\n" \
139
+ "\n\t " \
141
140
"xor %[err], %[err]\n" \
142
141
"3:\n" \
143
142
_ASM_EXTABLE_TYPE_REG(1b, 3b, EX_TYPE_EFAULT_REG, %[err]) \
144
143
: [err] "=r" (err) \
145
- : "D" (st), "m" (*st ), "a" (lmask), "d" (hmask) \
144
+ : [xa] "m" (*(st) ), "a" (lmask), "d" (hmask) \
146
145
: "memory")
147
146
148
147
/*
@@ -156,7 +155,7 @@ static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 ma
156
155
"3:\n" \
157
156
_ASM_EXTABLE_TYPE(1b, 3b, EX_TYPE_FPU_RESTORE) \
158
157
: \
159
- : "D" (st), "m" (*st ), "a" (lmask), "d" (hmask) \
158
+ : [xa] "m" (*(st) ), "a" (lmask), "d" (hmask) \
160
159
: "memory")
161
160
162
161
#if defined(CONFIG_X86_64 ) && defined(CONFIG_X86_DEBUG_FPU )
0 commit comments