/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
/* Clear the relevant bits. */
temp.__status_word &= excepts ^ FE_ALL_EXCEPT;
/* Put the new data in effect. */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
/* If the CPU supports SSE, we clear the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
unsigned int xnew_exc;
/* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
+ __asm__ ("stmxcsr %0" : "=m" (xnew_exc));
/* Clear the relevant bits. */
xnew_exc &= ~excepts;
/* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
+ __asm__ ("ldmxcsr %0" : : "m" (xnew_exc));
}
/* Success. */
unsigned short int new_exc, old_exc;
/* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
+ __asm__ ("fstcw %0" : "=m" (new_exc));
old_exc = (~new_exc) & FE_ALL_EXCEPT;
excepts &= FE_ALL_EXCEPT;
new_exc |= excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
+ __asm__ ("fldcw %0" : : "m" (new_exc));
/* If the CPU supports SSE we set the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
unsigned int xnew_exc;
/* Get the current control word. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
+ __asm__ ("stmxcsr %0" : "=m" (xnew_exc));
xnew_exc |= excepts << 7;
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
+ __asm__ ("ldmxcsr %0" : : "m" (xnew_exc));
}
return old_exc;
unsigned short int old_exc;
/* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
+ __asm__ ("fstcw %0" : "=m" (new_exc));
excepts &= FE_ALL_EXCEPT;
old_exc = (~new_exc) & FE_ALL_EXCEPT;
new_exc &= ~excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
+ __asm__ ("fldcw %0" : : "m" (new_exc));
/* If the CPU supports SSE we set the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
unsigned int xnew_exc;
/* Get the current control word. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
+ __asm__ ("stmxcsr %0" : "=m" (xnew_exc));
xnew_exc &= ~(excepts << 7);
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
+ __asm__ ("ldmxcsr %0" : : "m" (xnew_exc));
}
return old_exc;
unsigned short int exc;
/* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&exc));
+ __asm__ ("fstcw %0" : "=m" (exc));
return (~exc) & FE_ALL_EXCEPT;
}
{
int cw;
- __asm__ ("fnstcw %0" : "=m" (*&cw));
+ __asm__ ("fnstcw %0" : "=m" (cw));
return cw & 0xc00;
}
/* Set all exceptions to non-stop and clear them. */
xwork = (envp->__eip | 0x1f80) & ~0x3f;
- __asm__ ("ldmxcsr %0" : : "m" (*&xwork));
+ __asm__ ("ldmxcsr %0" : : "m" (xwork));
}
return 0;
values which we do not want to come from the saved environment.
Therefore, we get the current environment and replace the values
we want to use from the environment specified by the parameter. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
if (envp == FE_DFL_ENV)
{
{
/* Get the control word of the SSE unit. */
unsigned int mxcsr;
- __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+ __asm__ ("stmxcsr %0" : "=m" (mxcsr));
/* Set relevant flags. */
mxcsr |= excepts;
/* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
}
else
{
/* Note: fnstenv masks all floating-point exceptions until the fldenv
or fldcw below. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
/* Set relevant flags. */
temp.__status_word |= excepts;
/* Setting the exception flags may trigger a trap (at the next
floating-point instruction, but that does not matter).
ISO C23 (7.6.4.4) does not allow it. */
- __asm__ volatile ("fldcw %0" : : "m" (*&temp.__control_word));
+ __asm__ volatile ("fldcw %0" : : "m" (temp.__control_word));
return -1;
}
/* Store the new status word (along with the rest of the environment). */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
}
return 0;
/* ROUND is no valid rounding mode. */
return 1;
- __asm__ ("fnstcw %0" : "=m" (*&cw));
+ __asm__ ("fnstcw %0" : "=m" (cw));
cw &= ~0xc00;
cw |= round;
- __asm__ ("fldcw %0" : : "m" (*&cw));
+ __asm__ ("fldcw %0" : : "m" (cw));
/* If the CPU supports SSE we set the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
{
unsigned int xcw;
- __asm__ ("stmxcsr %0" : "=m" (*&xcw));
+ __asm__ ("stmxcsr %0" : "=m" (xcw));
xcw &= ~0x6000;
xcw |= round << 3;
- __asm__ ("ldmxcsr %0" : : "m" (*&xcw));
+ __asm__ ("ldmxcsr %0" : : "m" (xcw));
}
return 0;
unsigned int xtemp = 0;
/* Save current exceptions. */
- __asm__ ("fnstsw %0" : "=m" (*&temp));
+ __asm__ ("fnstsw %0" : "=m" (temp));
/* If the CPU supports SSE we test the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (*&xtemp));
+ __asm__ ("stmxcsr %0" : "=m" (xtemp));
temp = (temp | xtemp) & FE_ALL_EXCEPT;
fexcept_t temp;
/* Get the current exceptions. */
- __asm__ ("fnstsw %0" : "=m" (*&temp));
+ __asm__ ("fnstsw %0" : "=m" (temp));
*flagp = temp & excepts & FE_ALL_EXCEPT;
unsigned int sse_exc;
/* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&sse_exc));
+ __asm__ ("stmxcsr %0" : "=m" (sse_exc));
*flagp |= sse_exc & excepts & FE_ALL_EXCEPT;
}
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_OVERFLOW;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_UNDERFLOW;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_INEXACT;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
cannot separately set the status word.
Note: fnstenv masks all floating-point exceptions until the fldenv
or fldcw below. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
if (CPU_FEATURE_USABLE (SSE))
{
temp.__status_word &= ~(excepts & ~ *flagp);
/* Store the new status word (along with the rest of the environment). */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
/* And now similarly for SSE. */
- __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+ __asm__ ("stmxcsr %0" : "=m" (mxcsr));
/* Clear or set relevant flags. */
mxcsr ^= (mxcsr ^ *flagp) & excepts;
/* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
}
else
{
/* Setting the exception flags may trigger a trap (at the next
floating-point instruction, but that does not matter).
ISO C 23 § 7.6.4.5 does not allow it. */
- __asm__ volatile ("fldcw %0" : : "m" (*&temp.__control_word));
+ __asm__ volatile ("fldcw %0" : : "m" (temp.__control_word));
return -1;
}
/* Store the new status word (along with the rest of the environment). */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
}
/* Success. */
/* If the CPU supports SSE we test the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (*&xtemp));
+ __asm__ ("stmxcsr %0" : "=m" (xtemp));
return (temp | xtemp) & excepts & FE_ALL_EXCEPT;
}
fpu_control_t cw;
/* Fetch the current control word. */
- __asm__ ("fnstcw %0" : "=m" (*&cw));
+ __asm__ ("fnstcw %0" : "=m" (cw));
/* Preserve the reserved bits, and set the rest as the user
specified (or the default, if the user gave zero). */
cw &= _FPU_RESERVED;
cw |= set & ~_FPU_RESERVED;
- __asm__ ("fldcw %0" : : "m" (*&cw));
+ __asm__ ("fldcw %0" : : "m" (cw));
/* If the CPU supports SSE, we set the MXCSR as well. */
if (CPU_FEATURE_USABLE (SSE))
unsigned int xnew_exc;
/* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
+ __asm__ ("stmxcsr %0" : "=m" (xnew_exc));
xnew_exc &= ~((0xc00 << 3) | (FE_ALL_EXCEPT << 7));
xnew_exc |= ((set & 0xc00) << 3) | ((set & FE_ALL_EXCEPT) << 7);
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
+ __asm__ ("ldmxcsr %0" : : "m" (xnew_exc));
}
}
libc_feholdexcept_sse (fenv_t *e)
{
unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
e->__mxcsr = mxcsr;
mxcsr = (mxcsr | 0x1f80) & ~0x3f;
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
}
static __always_inline void
libc_fesetround_sse (int r)
{
unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
mxcsr = (mxcsr & ~0x6000) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
}
static __always_inline void
libc_feholdexcept_setround_sse (fenv_t *e, int r)
{
unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
e->__mxcsr = mxcsr;
mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
}
/* Set both rounding mode and precision. A convenience function for use
libc_fetestexcept_sse (int e)
{
unsigned int mxcsr;
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm volatile (STMXCSR " %0" : "=m" (mxcsr));
return mxcsr & e & FE_ALL_EXCEPT;
}
libc_feupdateenv_test_sse (fenv_t *e, int ex)
{
unsigned int mxcsr, old_mxcsr, cur_ex;
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm volatile (STMXCSR " %0" : "=m" (mxcsr));
cur_ex = mxcsr & FE_ALL_EXCEPT;
/* Merge current exceptions with the old environment. */
old_mxcsr = e->__mxcsr;
mxcsr = old_mxcsr | cur_ex;
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
/* Raise SIGFPE for any new exceptions since the hold. Expect that
the normal environment has all exceptions masked. */
libc_feholdsetround_sse (fenv_t *e, int r)
{
unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
e->__mxcsr = mxcsr;
mxcsr = (mxcsr & ~0x6000) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
}
static __always_inline void
libc_feresetround_sse (fenv_t *e)
{
unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
mxcsr = (mxcsr & ~0x6000) | (e->__mxcsr & 0x6000);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (mxcsr));
}
static __always_inline void
libc_feholdexcept_setround_sse_ctx (struct rm_ctx *ctx, int r)
{
unsigned int mxcsr, new_mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
new_mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
ctx->env.__mxcsr = mxcsr;
if (__glibc_unlikely (mxcsr != new_mxcsr))
{
- asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (new_mxcsr));
ctx->updated_status = true;
}
else
{
unsigned int mxcsr, new_mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
+ asm (STMXCSR " %0" : "=m" (mxcsr));
new_mxcsr = (mxcsr & ~0x6000) | (r << 3);
ctx->env.__mxcsr = mxcsr;
if (__glibc_unlikely (new_mxcsr != mxcsr))
{
- asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
+ asm volatile (LDMXCSR " %0" : : "m" (new_mxcsr));
ctx->updated_status = true;
}
else
/* Type of the control word. */
typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
-/* Macros for accessing the hardware control word. "*&" is used to
+/* Macros for accessing the hardware control word. "" is used to
work around a bug in older versions of GCC. __volatile__ is used
to support combination of writing the control register and reading
it back. Without __volatile__, the old value may be used for reading
recent hardware nor on x86-64. Some floating point operations are
executed in the SSE/SSE2 engines which have their own control and
status register. */
-#define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw))
-#define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw))
+#define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (cw))
+#define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (cw))
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
/* Clear the relevant bits. */
temp.__status_word &= excepts ^ FE_ALL_EXCEPT;
/* Put the new data in effect. */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
/* And the same procedure for SSE. */
- __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+ __asm__ ("stmxcsr %0" : "=m" (mxcsr));
/* Clear the relevant bits. */
mxcsr &= ~excepts;
/* And put them into effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
/* Success. */
return 0;
excepts &= FE_ALL_EXCEPT;
/* Get the current control word of the x87 FPU. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
+ __asm__ ("fstcw %0" : "=m" (new_exc));
old_exc = (~new_exc) & FE_ALL_EXCEPT;
new_exc |= excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
+ __asm__ ("fldcw %0" : : "m" (new_exc));
/* And now the same for the SSE MXCSR register. */
- __asm__ ("stmxcsr %0" : "=m" (*&new));
+ __asm__ ("stmxcsr %0" : "=m" (new));
/* The SSE exception masks are shifted by 7 bits. */
new |= excepts << 7;
- __asm__ ("ldmxcsr %0" : : "m" (*&new));
+ __asm__ ("ldmxcsr %0" : : "m" (new));
return old_exc;
}
excepts &= FE_ALL_EXCEPT;
/* Get the current control word of the x87 FPU. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
+ __asm__ ("fstcw %0" : "=m" (new_exc));
old_exc = (~new_exc) & FE_ALL_EXCEPT;
new_exc &= ~excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
+ __asm__ ("fldcw %0" : : "m" (new_exc));
/* And now the same for the SSE MXCSR register. */
- __asm__ ("stmxcsr %0" : "=m" (*&new));
+ __asm__ ("stmxcsr %0" : "=m" (new));
/* The SSE exception masks are shifted by 7 bits. */
new &= ~(excepts << 7);
- __asm__ ("ldmxcsr %0" : : "m" (*&new));
+ __asm__ ("ldmxcsr %0" : : "m" (new));
return old_exc;
}
unsigned short int exc;
/* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&exc));
+ __asm__ ("fstcw %0" : "=m" (exc));
return (~exc) & FE_ALL_EXCEPT;
}
/* We only check the x87 FPU unit. The SSE unit should be the same
- and if it's not the same there's no way to signal it. */
- __asm__ ("fnstcw %0" : "=m" (*&cw));
+ __asm__ ("fnstcw %0" : "=m" (cw));
return cw & 0xc00;
}
/* Set the SSE MXCSR register. */
mxcsr = (envp->__mxcsr | 0x1f80) & ~0x3f;
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
return 0;
}
Therefore, we get the current environment and replace the values
we want to use from the environment specified by the parameter. */
__asm__ ("fnstenv %0\n"
- "stmxcsr %1" : "=m" (*&temp), "=m" (*&temp.__mxcsr));
+ "stmxcsr %1" : "=m" (temp), "=m" (temp.__mxcsr));
if (envp == FE_DFL_ENV)
{
{
unsigned int mxcsr;
- __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+ __asm__ ("stmxcsr %0" : "=m" (mxcsr));
mxcsr |= excepts & FE_ALL_EXCEPT;
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
return 0;
}
return 1;
/* First set the x87 FPU. */
- asm ("fnstcw %0" : "=m" (*&cw));
+ asm ("fnstcw %0" : "=m" (cw));
cw &= ~0xc00;
cw |= round;
- asm ("fldcw %0" : : "m" (*&cw));
+ asm ("fldcw %0" : : "m" (cw));
/* And now the MSCSR register for SSE, the precision is at different bit
positions in the different units, we need to shift it 3 bits. */
- asm ("stmxcsr %0" : "=m" (*&mxcsr));
+ asm ("stmxcsr %0" : "=m" (mxcsr));
mxcsr &= ~ 0x6000;
mxcsr |= round << 3;
- asm ("ldmxcsr %0" : : "m" (*&mxcsr));
+ asm ("ldmxcsr %0" : : "m" (mxcsr));
return 0;
}
unsigned int xtemp;
/* Save current exceptions. */
- __asm__ ("fnstsw %0\n\tstmxcsr %1" : "=m" (*&temp), "=m" (xtemp));
+ __asm__ ("fnstsw %0\n\tstmxcsr %1" : "=m" (temp), "=m" (xtemp));
temp = (temp | xtemp) & FE_ALL_EXCEPT;
/* Install new environment. */
/* Get the current exceptions for the x87 FPU and SSE unit. */
__asm__ ("fnstsw %0\n"
- "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr));
+ "stmxcsr %1" : "=m" (temp), "=m" (mxscr));
*flagp = (temp | mxscr) & FE_ALL_EXCEPT & excepts;
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_OVERFLOW;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_UNDERFLOW;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
/* Bah, we have to clear selected exceptions. Since there is no
`fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp));
/* Set the relevant bits. */
temp.__status_word |= FE_INEXACT;
/* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ __volatile__ ("fldenv %0" : : "m" (temp));
/* And raise the exception. */
__asm__ __volatile__ ("fwait");
/* Get the current x87 FPU environment. We have to do this since we
cannot separately set the status word. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
+ __asm__ ("fnstenv %0" : "=m" (temp));
/* Clear relevant flags. */
temp.__status_word &= ~(excepts & ~ *flagp);
/* Store the new status word (along with the rest of the environment). */
- __asm__ ("fldenv %0" : : "m" (*&temp));
+ __asm__ ("fldenv %0" : : "m" (temp));
/* And now similarly for SSE. */
- __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+ __asm__ ("stmxcsr %0" : "=m" (mxcsr));
/* Clear or set relevant flags. */
mxcsr ^= (mxcsr ^ *flagp) & excepts;
/* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+ __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
/* Success. */
return 0;
/* Get current exceptions. */
__asm__ ("fnstsw %0\n"
- "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr));
+ "stmxcsr %1" : "=m" (temp), "=m" (mxscr));
return (temp | mxscr) & excepts & FE_ALL_EXCEPT;
}