#include <stdlib.h>
#include <assert.h>

/* This should run without comment, but 3.2.1 (and presumably earlier)
   give a false uninit-value warning.  This was fixed by vex r1675
   which is a spec rule for COPY-CondP. */

int main ( void )
{
  int* x = malloc(4);
  assert(x);
  __asm__ __volatile__(
     "finit\n\t"
     "ffree %%st(0)\n\t"
     "ffree %%st(1)\n\t"
     "ffree %%st(2)\n\t"
     "ffree %%st(3)\n\t"
     "ffree %%st(4)\n\t"
     "ffree %%st(5)\n\t"
     "ffree %%st(6)\n\t"
     "ffree %%st(7)\n\t"
     "andb $128, (%0)\n\t"
     "fldz\n\t"
     "fldz\n\t"
     "fucompp\n\t"
     "fnstsw %%ax\n\t"
     "sahf\n\t"
     "jp .Lfoobar\n"
     ".Lfoobar:\n\t"
     "nop"
     : : "r"(x) : "eax", "cc"
  );
  free(x);
  return 0;
}