From e0a8d201965b742f25a382938b06200a1c2a280d Mon Sep 17 00:00:00 2001 From: sof Date: Sun, 19 Oct 1997 22:01:23 +0000 Subject: [PATCH] [project @ 1997-10-19 22:01:23 by sof] Updated to reflect MachRegs.Addr to MachRegs.Address renaming; fixed incorrect handling of x86 shift instructions (second operand can be *both* immediate and register(ecx)) --- ghc/compiler/nativeGen/RegAllocInfo.lhs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/ghc/compiler/nativeGen/RegAllocInfo.lhs b/ghc/compiler/nativeGen/RegAllocInfo.lhs index 4db8a0b..f6f7e6f 100644 --- a/ghc/compiler/nativeGen/RegAllocInfo.lhs +++ b/ghc/compiler/nativeGen/RegAllocInfo.lhs @@ -52,8 +52,7 @@ module RegAllocInfo ( ) where #if __GLASGOW_HASKELL__ >= 202 -import qualified GlaExts (Addr(..)) -import GlaExts hiding (Addr(..)) +import GlaExts import FastString #else IMP_Ubiq(){-uitous-} @@ -375,9 +374,9 @@ regUsage instr = case instr of XOR sz src dst -> usage2 src dst NOT sz op -> usage1 op NEGI sz op -> usage1 op - SHL sz imm dst -> usage1 dst -- imm has to be an Imm - SAR sz imm dst -> usage1 dst -- imm has to be an Imm - SHR sz imm dst -> usage1 dst -- imm has to be an Imm + SHL sz dst len -> usage2 dst len -- len is either an Imm or ecx. + SAR sz dst len -> usage2 dst len -- len is either an Imm or ecx. + SHR sz len dst -> usage2 dst len -- len is either an Imm or ecx. PUSH sz op -> usage (opToReg op) [] POP sz op -> usage [] (opToReg op) TEST sz src dst -> usage (opToReg src ++ opToReg dst) [] @@ -449,7 +448,7 @@ regUsage instr = case instr of opToReg (OpImm imm) = [] opToReg (OpAddr ea) = addrToRegs ea - addrToRegs (Addr base index _) = baseToReg base ++ indexToReg index + addrToRegs (Address base index _) = baseToReg base ++ indexToReg index where baseToReg Nothing = [] baseToReg (Just r) = [r] indexToReg Nothing = [] @@ -672,9 +671,9 @@ patchRegs instr env = case instr of XOR sz src dst -> patch2 (XOR sz) src dst NOT sz op -> patch1 (NOT sz) op NEGI sz op -> patch1 (NEGI sz) op - SHL sz imm dst -> patch1 (SHL sz imm) dst - SAR sz imm dst -> patch1 (SAR sz imm) dst - SHR sz imm dst -> patch1 (SHR sz imm) dst + SHL sz imm dst -> patch2 (SHL sz) imm dst + SAR sz imm dst -> patch2 (SAR sz) imm dst + SHR sz imm dst -> patch2 (SHR sz) imm dst TEST sz src dst -> patch2 (TEST sz) src dst CMP sz src dst -> patch2 (CMP sz) src dst PUSH sz op -> patch1 (PUSH sz) op @@ -716,8 +715,8 @@ patchRegs instr env = case instr of patchOp (OpAddr ea) = OpAddr (lookupAddr ea) lookupAddr (ImmAddr imm off) = ImmAddr imm off - lookupAddr (Addr base index disp) - = Addr (lookupBase base) (lookupIndex index) disp + lookupAddr (Address base index disp) + = Address (lookupBase base) (lookupIndex index) disp where lookupBase Nothing = Nothing lookupBase (Just r) = Just (env r) -- 1.7.10.4