The MMX registers are aliased onto the x87 floating-point registers, so they should be saved and restored correctly regardless.
Also, -lpthread is generally some POSIX threading library implemented by the target OS or libc, not the unfortunately-named GNU Portable Threads (GNU Pth), which confusingly does have a POSIX thread emulation layer. In any case, this problem seems unrelated to GCC; if the longjmp/setjmp implementation doesn't save and restore the proper registers, then maybe they shouldn't be used by this library. -- Daniel Verkamp