Add earlyclobber to sqrtt/sqrtf insns.
authorUros Bizjak <ubizjak@gmail.com>
Fri, 14 Apr 2017 12:30:57 +0000 (14:30 +0200)
committerRichard Henderson <rth@twiddle.net>
Wed, 26 Apr 2017 11:21:59 +0000 (04:21 -0700)
When using software completions, we have to prevent assembler to match
input and output operands of sqrtt/sqrtf insn. Add earlyclobber to
output operand to avoid unwanted operand matching.

2017-04-14  Uros Bizjak  <ubizjak@gmail.com>

    * sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Add
    earlyclobber to output operand of sqrt insn.
    (__ieee754_sqrtf): Ditto.

ChangeLog
sysdeps/alpha/fpu/math_private.h

index 8867578f250eb5ecb7b2ad6344354a10f0305130..042262eaa162f485fa57e12b9bc944c391e8e1de 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2017-04-25  Uros Bizjak  <ubizjak@gmail.com>
+
+       * sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Add
+       earlyclobber to output operand of sqrt insn.
+       (__ieee754_sqrtf): Ditto.
+
 2017-04-25  Joseph Myers  <joseph@codesourcery.com>
 
        [BZ #21426]
index 9e06e25dc63cf4a9921529b30e70078ea074fba4..1e97c867c38767a2237df21f84e9c55a53ad13bb 100644 (file)
@@ -27,9 +27,9 @@ __ieee754_sqrt (double d)
 {
   double ret;
 # ifdef _IEEE_FP_INEXACT
-  asm ("sqrtt/suid %1,%0" : "=f"(ret) : "f"(d));
+  asm ("sqrtt/suid %1,%0" : "=&f"(ret) : "f"(d));
 # else
-  asm ("sqrtt/sud %1,%0" : "=f"(ret) : "f"(d));
+  asm ("sqrtt/sud %1,%0" : "=&f"(ret) : "f"(d));
 # endif
   return ret;
 }
@@ -39,9 +39,9 @@ __ieee754_sqrtf (float d)
 {
   float ret;
 # ifdef _IEEE_FP_INEXACT
-  asm ("sqrts/suid %1,%0" : "=f"(ret) : "f"(d));
+  asm ("sqrts/suid %1,%0" : "=&f"(ret) : "f"(d));
 # else
-  asm ("sqrts/sud %1,%0" : "=f"(ret) : "f"(d));
+  asm ("sqrts/sud %1,%0" : "=&f"(ret) : "f"(d));
 # endif
   return ret;
 }