diff --git a/plat/linuxppc/emu/emu.c b/plat/linuxppc/emu/emu.c
index 91ae87a8b..1cc17d1be 100644
--- a/plat/linuxppc/emu/emu.c
+++ b/plat/linuxppc/emu/emu.c
@@ -325,6 +325,12 @@ void dump_state(FILE* stream)
 			fprintf(stream, "\n");
 		fprintf(stream, "gpr%02d=0x%08x ", i, cpu.gpr[i]);
 	}
+	for (i=0; i<32; i++)
+	{
+		if ((i % 3) == 0)
+			fprintf(stream, "\n");
+		fprintf(stream, "fpr%02d=0x%016lx ", i, cpu.fpr[i]);
+	}
 	fprintf(stderr, "\n");
 
 	/* This might fail and cause a reentrant trap if cia is invalid, so
diff --git a/plat/linuxppc/emu/instructions.dat b/plat/linuxppc/emu/instructions.dat
index 9bd39af8e..5bf4411c6 100644
--- a/plat/linuxppc/emu/instructions.dat
+++ b/plat/linuxppc/emu/instructions.dat
@@ -207,5 +207,5 @@
 
 # Floating point conversions
 
-<63--><FRT>.....<FRB><14------>R setcr1(R, fpr(FRB)); cpu.fpr[FRT] = (uint32_t)fpr(FRB);
-<63--><FRT>.....<FRB><15------>R setcr1(R, fpr(FRB)); cpu.fpr[FRT] = (uint32_t)fpr(FRB);
+<63--><FRT>.....<FRB><14------>R setcr1(R, fpr(FRB)); cpu.fpr[FRT] = (uint32_t)(int32_t)fpr(FRB);
+<63--><FRT>.....<FRB><15------>R setcr1(R, fpr(FRB)); cpu.fpr[FRT] = (uint32_t)(int32_t)fpr(FRB);