@@ -173,8 +173,9 @@ static void MIX_AREAS_16_MMX(unsigned int size,
"\tmovl %%ebx, %[old_ebx]\n" /* ebx is GOT pointer (-fPIC) */
/*
- * initialization, load ESI, EDI, EBX registers
+ * initialization, load ESI, EDI, EBX registers and clear MM1
*/
+ "\tpxor %%mm1, %%mm1\n"
"\tmovl %[dst], %%edi\n"
"\tmovl %[src], %%esi\n"
"\tmovl %[sum], %%ebx\n"
@@ -237,6 +238,12 @@ static void MIX_AREAS_16_MMX(unsigned int size,
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
[sum_step] "m" (sum_step)
: "esi", "edi", "edx", "ecx", "eax", "memory", "cc"
+# ifdef HAVE_MMX
+ , "mm0", "mm1"
+# else
+ , "st", "st(1)", "st(2)", "st(3)",
+ "st(4)", "st(5)", "st(6)", "st(7)"
+# endif
);
}
@@ -50,8 +50,9 @@ static void MIX_AREAS_16(unsigned int size,
"\tmovq %%rbx, %[old_rbx]\n"
/*
- * initialization, load RSI, RDI, RBX registers
+ * initialization, load RSI, RDI, RBX registers and clear MM1
*/
+ "\tpxor %%mm1, %%mm1\n"
"\tmovq %[dst], %%rdi\n"
"\tmovq %[src], %%rsi\n"
"\tmovq %[sum], %%rbx\n"
@@ -119,6 +120,12 @@ static void MIX_AREAS_16(unsigned int size,
[dst_step] "m" (dst_step), [src_step] "m" (src_step),
[sum_step] "m" (sum_step)
: "rsi", "rdi", "edx", "ecx", "eax", "memory", "cc"
+# ifdef HAVE_MMX
+ , "mm0", "mm1"
+# else
+ , "st", "st(1)", "st(2)", "st(3)",
+ "st(4)", "st(5)", "st(6)", "st(7)"
+# endif
);
}