title: Bug in Libdisasm?
body: <p>I was doing some disassembly with the Libdisasm ( version .23 from <a href="http://sourceforge.net/projects/bastard/files/libdisasm/0.23/" rel="nofollow">http://sourceforge.net/projects/bastard/files/libdisasm/0.23/</a>) when I came across a small bug. When I print the <code>enum x86_insn_type</code> from the <code>x86_insn_t</code> struct  (following <a href="http://bastard.sourceforge.net/libdisasm.html" rel="nofollow">http://bastard.sourceforge.net/libdisasm.html</a>), I see that all floating point instructions seem to have the same type (all other instructions are fine) (as you can see below when I print the instruction)</p>
  
  <pre><code>Instruction type a000, fld  [ebp-0x10] 
  Instruction type a000, fld  [0x8048588] 
  Instruction type a000, fmulp st(1), st(0) 
  Instruction type a000, fstp [ebp-0x10] 
  </code></pre>
  
  <p>Here is a small part of the <code>enum x86_insn_type</code>, </p>
  
  <pre><code> /* insn_fpu */
          insn_fmov = 0xA001,
          insn_fmovcc = 0xA002,
          insn_fneg = 0xA003,
          insn_fabs = 0xA004,
          insn_fadd = 0xA005,
          insn_fsub = 0xA006,
          insn_fmul = 0xA007,
          insn_fdiv = 0xA008,
  </code></pre>
  
  <p>Is this a bug in the libdisasm library (since it is pretty old and has not been updated for a pretty long time), OR am I doing something wrong?</p>
  
  <p>Code used. </p>
  
  <pre><code>    x86_insn_t insn;
      char buf[MAX_INSN_SIZE];
      char line_to_print[LINE_SIZE];
      int size;
      int to_return;
  
      x86_init(opt_none, NULL, NULL);
  
      //Here I read one Instruction into buf and then call x86_disasm
  
      size = x86_disasm((unsigned char*)buf, MAX_INSN_SIZE, 0, 0, insn);
      if(size)
      {
          x86_format_insn(&amp;insn, line_to_print, LINE_SIZE, intel_syntax);
          printf("Instruction type %x, %s \n", insn.type, line_to_print);
      }
      x86_cleanup();
  </code></pre>