The problem is caused by the use of the asm statement
fnstsw %eax
That used to work with old versions of binutils, current binutils versions (correctly) reject it as invalid because it uses a 16 bit operation on a 32 bit register.
The correct fix is to work on the 16 bit version of the register instead:
fnstsw %ax
I'm attaching a patch that fixes this.
Fix