[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>
Mon, 19 Feb 2024 16:12:25 +0000 (17:12 +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 7329b8c4b195a5d745bd149f92f4e700901b16bd..68aad5bf2fc06942d7c55874a5840309280a4326 100644 (file)
@@ -547,7 +547,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
@@ -627,8 +627,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