Andreas Klebinger pushed to branch wip/andreask/arm-ffi at Glasgow Haskell Compiler / GHC

Commits:

2 changed files:

Changes:

  • compiler/GHC/Cmm/Expr.hs
    ... ... @@ -552,11 +552,11 @@ genMachOp platform mop args
    552 552
     infixMachOp :: MachOp -> Maybe SDoc
    
    553 553
     infixMachOp mop
    
    554 554
             = case mop of
    
    555
    -            MO_And    _ -> Just $ char '&'
    
    556
    -            MO_Or     _ -> Just $ char '|'
    
    557
    -            MO_Xor    _ -> Just $ char '^'
    
    558
    -            MO_Not    _ -> Just $ char '~'
    
    559
    -            MO_S_Neg  _ -> Just $ char '-' -- there is no unsigned neg :)
    
    555
    +            MO_And    w -> Just $ withDebugWidth w $ char '&'
    
    556
    +            MO_Or     w -> Just $ withDebugWidth w $ char '|'
    
    557
    +            MO_Xor    w -> Just $ withDebugWidth w $ char '^'
    
    558
    +            MO_Not    w -> Just $ withDebugWidth w $ char '~'
    
    559
    +            MO_S_Neg  w -> Just $ withDebugWidth w $ char '-' -- there is no unsigned neg :)
    
    560 560
                 _ -> Nothing
    
    561 561
     
    
    562 562
     -- --------------------------------------------------------------------------
    

  • compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
    ... ... @@ -1184,14 +1184,14 @@ getRegister' config plat expr
    1184 1184
           return $ Any (intFormat w) (\dst -> code_x `snocOL` annExpr expr (LSR (OpReg w dst) (OpReg w reg_x) (OpImm (ImmInteger n))))
    
    1185 1185
     
    
    1186 1186
         -- 3. Logic &&, ||
    
    1187
    -    CmmMachOp (MO_And w) [(CmmReg reg), CmmLit (CmmInt n _)] | isAArch64Bitmask (opRegWidth w') (fromIntegral n) ->
    
    1188
    -      return $ Any fmt (\d -> unitOL $ annExpr expr (AND fmt (OpReg w d) (OpReg w' r') (OpImm (ImmInteger n))))
    
    1187
    +    CmmMachOp (MO_And w) [(CmmReg reg), CmmLit (CmmInt n _)] | Just op_bitmask <- getBitmaskImm n (opRegWidth w) ->
    
    1188
    +      return $ Any fmt (\d -> unitOL $ annExpr expr (AND fmt (OpReg w d) (OpReg w' r') op_bitmask))
    
    1189 1189
           where fmt = intFormat w
    
    1190 1190
                 w' = formatToWidth (cmmTypeFormat (cmmRegType reg))
    
    1191 1191
                 r' = getRegisterReg plat reg
    
    1192 1192
     
    
    1193
    -    CmmMachOp (MO_Or w) [(CmmReg reg), CmmLit (CmmInt n _)] | isAArch64Bitmask (opRegWidth w') (fromIntegral n) ->
    
    1194
    -      return $ Any fmt (\d -> unitOL $ annExpr expr (ORR fmt (OpReg w d) (OpReg w' r') (OpImm (ImmInteger n))))
    
    1193
    +    CmmMachOp (MO_Or w) [(CmmReg reg), CmmLit (CmmInt n _)] | Just op_bitmask <- getBitmaskImm n (opRegWidth w) ->
    
    1194
    +      return $ Any fmt (\d -> unitOL $ annExpr expr (ORR fmt (OpReg w d) (OpReg w' r') op_bitmask))
    
    1195 1195
           where fmt = intFormat w
    
    1196 1196
                 w' = formatToWidth (cmmTypeFormat (cmmRegType reg))
    
    1197 1197
                 r' = getRegisterReg plat reg