target-alpha: Fix FMOV.
authorRichard Henderson <rth@twiddle.net>
Fri, 11 Dec 2009 21:21:02 +0000 (13:21 -0800)
committerAurelien Jarno <aurelien@aurel32.net>
Sun, 13 Dec 2009 20:36:21 +0000 (21:36 +0100)
Properly handle move from the zero register.

Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-alpha/translate.c

index 1c809b76114153fc12039bf3c282a34ed966eb65..8a9aeb744f358ec662d3786fb62b3291277629e8 100644 (file)
@@ -1834,12 +1834,16 @@ static inline int translate_one(DisasContext *ctx, uint32_t insn)
             break;
         case 0x020:
             if (likely(rc != 31)) {
-                if (ra == rb)
+                if (ra == rb) {
                     /* FMOV */
-                    tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]);
-                else
+                    if (ra == 31)
+                        tcg_gen_movi_i64(cpu_fir[rc], 0);
+                    else
+                        tcg_gen_mov_i64(cpu_fir[rc], cpu_fir[ra]);
+                } else {
                     /* CPYS */
                     gen_fcpys(ra, rb, rc);
+                }
             }
             break;
         case 0x021: