From 8ccbbeefe3566873610e950b7fef4838bcf4cce8 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 11 Jan 2025 16:31:51 +0200 Subject: [PATCH] Fix undefined shifts --- gencpu.cpp | 4 ++-- readcpu.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/gencpu.cpp b/gencpu.cpp index ecbf2c64..75708268 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -9107,7 +9107,7 @@ bccl_not68020: if (curi->dmode == Dreg) { out("uae_u32 tmp = m68k_dreg(regs, dstreg);\n"); out("offset &= 0x1f;\n"); - out("tmp = (tmp << offset) | (tmp >> (32 - offset));\n"); + out("if (offset) tmp = (tmp << offset) | (tmp >> (32 - offset));\n"); out("bdata[0] = tmp & ((1 << (32 - width)) - 1);\n"); } else { out("uae_u32 tmp;\n"); @@ -9156,7 +9156,7 @@ bccl_not68020: || curi->mnemo == i_BFINS) { if (curi->dmode == Dreg) { out("tmp = bdata[0] | (tmp << (32 - width));\n"); - out("m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset));\n"); + out("m68k_dreg(regs, dstreg) = offset ? ((tmp >> offset) | (tmp << (32 - offset))) : tmp;\n"); } else { out("%s(dsta, bdata, tmp, offset, width);\n", putb); } diff --git a/readcpu.cpp b/readcpu.cpp index d2689cf7..61a87f01 100644 --- a/readcpu.cpp +++ b/readcpu.cpp @@ -867,9 +867,11 @@ static void handle_merges (long int opcode) for (srcreg=0; srcreg < sbitdst; srcreg++) { for (dstreg=0; dstreg < dstend; dstreg++) { uae_u16 code = (uae_u16)opcode; + uae_u8 spos = (table68k[opcode].spos < 0) ? 0 : table68k[opcode].spos; + uae_u8 dpos = (table68k[opcode].dpos < 0) ? 0 : table68k[opcode].dpos; - code = (code & ~smsk) | (srcreg << table68k[opcode].spos); - code = (code & ~dmsk) | (dstreg << table68k[opcode].dpos); + code = (code & ~smsk) | (srcreg << spos); + code = (code & ~dmsk) | (dstreg << dpos); /* Check whether this is in fact the same instruction. * The instructions should never differ, except for the -- 2.47.3