Andreas Klebinger pushed to branch wip/andreask/arm-ffi at Glasgow Haskell Compiler / GHC
Commits:
-
e3e35453
by Andreas Klebinger at 2026-07-29T20:13:25+00:00
-
32f219c8
by Andreas Klebinger at 2026-07-29T22:20:46+00:00
2 changed files:
Changes:
| ... | ... | @@ -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 | -- --------------------------------------------------------------------------
|
| ... | ... | @@ -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
|