fenv.hとシグナルの微妙な関係

#include <fenv.h>
#include <signal.h>
#include <stdio.h>

void
sgn() {
	int val;
	val = fegetround();

	printf("%d\n", val);
	fesetround(FE_UPWARD);
}

int
main(void)
{
	int val;

	fesetround(FE_DOWNWARD);

	signal(SIGUSR1, sgn);
	val = fegetround();
	printf("%d\n", val);

	raise(SIGUSR1);

	val = fegetround();
	printf("%d\n", val);

	return 0;
}
i386$ gcc fenv.c && ./a.out
1024
0
1024
ppc64$ gcc fenv.c && ./a.out
3
3
3