X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FnativeGen%2FMachCodeGen.hs;h=9dbe316d16631c4c623aca28dc522c677a7e690b;hb=08560cf0e3a2a1928650ca5d5d0bb44fbac2ea44;hp=aaf7cec792af9c1fefdab89ca49f66c7fa9e6d4e;hpb=046ee54f048ddd721dcee41916d6a6f68db3b15b;p=ghc-hetmet.git diff --git a/compiler/nativeGen/MachCodeGen.hs b/compiler/nativeGen/MachCodeGen.hs index aaf7cec..9dbe316 100644 --- a/compiler/nativeGen/MachCodeGen.hs +++ b/compiler/nativeGen/MachCodeGen.hs @@ -497,6 +497,31 @@ getRegister (CmmReg reg) getRegister tree@(CmmRegOff _ _) = getRegister (mangleIndexTree tree) + +#if WORD_SIZE_IN_BITS==32 + -- for 32-bit architectuers, support some 64 -> 32 bit conversions: + -- TO_W_(x), TO_W_(x >> 32) + +getRegister (CmmMachOp (MO_U_Conv I64 I32) + [CmmMachOp (MO_U_Shr I64) [x,CmmLit (CmmInt 32 _)]]) = do + ChildCode64 code rlo <- iselExpr64 x + return $ Fixed I32 (getHiVRegFromLo rlo) code + +getRegister (CmmMachOp (MO_S_Conv I64 I32) + [CmmMachOp (MO_U_Shr I64) [x,CmmLit (CmmInt 32 _)]]) = do + ChildCode64 code rlo <- iselExpr64 x + return $ Fixed I32 (getHiVRegFromLo rlo) code + +getRegister (CmmMachOp (MO_U_Conv I64 I32) [x]) = do + ChildCode64 code rlo <- iselExpr64 x + return $ Fixed I32 rlo code + +getRegister (CmmMachOp (MO_S_Conv I64 I32) [x]) = do + ChildCode64 code rlo <- iselExpr64 x + return $ Fixed I32 rlo code + +#endif + -- end of machine-"independent" bit; here we go on the rest... #if alpha_TARGET_ARCH