* Sample usage:
* <pre>
* asm volatile ("1: $INSN; 2:"
- * _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault)
+ * _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault_eax)
* : "=a" (fault) : "0" (0));
* </pre>
*/
-bool ex_record_fault(struct cpu_regs *regs, const struct extable_entry *ex)
+bool ex_record_fault_eax(struct cpu_regs *regs, const struct extable_entry *ex)
{
regs->ax = (uint32_t)(regs->entry_vector << 16) | regs->error_code;
regs->ip = ex->fixup;
unsigned int probe_x87(bool force)
{
- unsigned int fault;
+ unsigned int fault = 0;
asm volatile ("test %[fep], %[fep];"
"jz 1f;"
_ASM_XEN_FEP
"1: fild %[ptr]; 2:"
- _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault)
- : "=a" (fault)
- : "0" (0),
- [ptr] "m" (zero),
+ _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault_eax)
+ : "+a" (fault)
+ : [ptr] "m" (zero),
[fep] "q" (force));
return fault;
unsigned int probe_x87_wait(bool force)
{
- unsigned int fault;
+ unsigned int fault = 0;
asm volatile ("test %[fep], %[fep];"
"jz 1f;"
_ASM_XEN_FEP
"1: wait; 2:"
- _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault)
- : "=a" (fault)
- : "0" (0),
- [fep] "q" (force));
+ _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault_eax)
+ : "+a" (fault)
+ : [fep] "q" (force));
return fault;
}
unsigned int probe_mmx(bool force)
{
- unsigned int fault;
+ unsigned int fault = 0;
asm volatile ("test %[fep], %[fep];"
"jz 1f;"
_ASM_XEN_FEP
"1: movq %[ptr], %%mm0; 2:"
- _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault)
- : "=a" (fault)
- : "0" (0),
- [ptr] "m" (zero),
+ _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault_eax)
+ : "+a" (fault)
+ : [ptr] "m" (zero),
[fep] "q" (force));
return fault;
unsigned int probe_sse(bool force)
{
- unsigned int fault;
+ unsigned int fault = 0;
asm volatile ("test %[fep], %[fep];"
"jz 1f;"
_ASM_XEN_FEP
"1: movups %[ptr], %%xmm0; 2:"
- _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault)
- : "=a" (fault)
- : "0" (0),
- [ptr] "m" (zero),
+ _ASM_EXTABLE_HANDLER(1b, 2b, ex_record_fault_eax)
+ : "+a" (fault)
+ : [ptr] "m" (zero),
[fep] "q" (force));
return fault;