[PATCH] PPC NCG: Generate clear right insn at arch width
authorPeter Trommler <ptrommler@acm.org>
Tue, 7 Nov 2023 20:47:24 +0000 (21:47 +0100)
committerGianfranco Costamagna <locutusofborg@debian.org>
Tue, 5 Nov 2024 23:21:23 +0000 (00:21 +0100)
The clear right immediate (clrrxi) is only available in word and
doubleword width. Generate clrrxi instructions at architecture
width for all MachOp widths.

Fixes #24145

Gbp-Pq: Name ppc64el-fix-clrri

compiler/GHC/CmmToAsm/PPC/CodeGen.hs

index 0584afefa2a231654d13d9e6c149ccb211c06559..6f0fe0ddb65bd12c6394e46a83d68133954f22d3 100644 (file)
@@ -546,7 +546,7 @@ getRegister' config platform (CmmMachOp mop [x]) -- unary MachOps
                                  CLRLI arch_fmt dst src1 (arch_bits - size)
                  return (Any (intFormat to) code)
 
-getRegister' _ _ (CmmMachOp mop [x, y]) -- dyadic PrimOps
+getRegister' _ platform (CmmMachOp mop [x, y]) -- dyadic PrimOps
   = case mop of
       MO_F_Eq _ -> condFltReg EQQ x y
       MO_F_Ne _ -> condFltReg NE  x y
@@ -626,8 +626,9 @@ getRegister' _ _ (CmmMachOp mop [x, y]) -- dyadic PrimOps
                 (src, srcCode) <- getSomeReg x
                 let clear_mask = if imm == -4 then 2 else 3
                     fmt = intFormat rep
+                    arch_fmt = intFormat (wordWidth platform)
                     code dst = srcCode
-                               `appOL` unitOL (CLRRI fmt dst src clear_mask)
+                      `appOL` unitOL (CLRRI arch_fmt dst src clear_mask)
                 return (Any fmt code)
         _ -> trivialCode rep False AND x y
       MO_Or rep    -> trivialCode rep False OR x y