]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Truncate to 8-bits, bget in some situations can return upper bit(s) set.
authorToni Wilen <twilen@winuae.net>
Tue, 30 Jun 2015 17:56:19 +0000 (20:56 +0300)
committerToni Wilen <twilen@winuae.net>
Tue, 30 Jun 2015 17:56:19 +0000 (20:56 +0300)
gencpu.cpp

index 65ead6490fee7af5dae0595ad57d92a8b6f02fb4..21500c429edb27a0be9c2973182aba80dc1984f7 100644 (file)
@@ -3410,11 +3410,11 @@ static void gen_opcode (unsigned int opcode)
                printf ("\tuaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0));
                genamode (curi, curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0);
                if (curi->size == sz_word) {
-                       printf ("\tuae_u16 val = (%s (memp) << 8) + %s (memp + 2);\n", srcb, srcb);
+                       printf ("\tuae_u16 val = ((%s (memp) & 0xff) << 8) + (%s (memp + 2) & 0xff);\n", srcb, srcb);
                        count_read += 2;
                } else {
-                       printf ("\tuae_u32 val = (%s (memp) << 24) + (%s (memp + 2) << 16)\n", srcb, srcb);
-                       printf ("              + (%s (memp + 4) << 8) + %s (memp + 6);\n", srcb, srcb);
+                       printf ("\tuae_u32 val = ((%s (memp) & 0xff) << 24) + ((%s (memp + 2) & 0xff) << 16)\n", srcb, srcb);
+                       printf ("              + ((%s (memp + 4) & 0xff) << 8) + (%s (memp + 6) & 0xff);\n", srcb, srcb);
                        count_read += 4;
                }
                fill_prefetch_next ();
@@ -5061,9 +5061,9 @@ bccl_not68020:
                        printf ("\tuae_u16 val;\n");
                        addmmufixup ("srcreg");
                        printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n");
-                       printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb);
+                       printf ("\tval = (uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff);\n", srcb);
                        printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n");
-                       printf ("\tval = (val | ((uae_u16)%s (m68k_areg (regs, srcreg)) << 8)) + %s;\n", srcb, gen_nextiword (0));
+                       printf ("\tval = (val | ((uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff) << 8)) + %s;\n", srcb, gen_nextiword (0));
                        addmmufixup ("dstreg");
                        printf ("\tm68k_areg (regs, dstreg) -= areg_byteinc[dstreg];\n");
                        gen_set_fault_pc ();
@@ -5079,7 +5079,7 @@ bccl_not68020:
                        printf ("\tuae_u16 val;\n");
                        addmmufixup ("srcreg");
                        printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n");
-                       printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb);
+                       printf ("\tval = (uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff);\n", srcb);
                        printf ("\tval = (((val << 4) & 0xf00) | (val & 0xf)) + %s;\n", gen_nextiword (0));
                        addmmufixup ("dstreg");
                        if (cpu_level >= 2) {