aboutsummaryrefslogtreecommitdiff
path: root/X64Optimiser.hs
blob: 9cae96dbbb9344259ef66dcc1a499b7f7b8232bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module X64Optimiser(x64Optimise) where

import Defs
import X64


x64Optimise :: Asm -> Error Asm
x64Optimise (Asm funcs) = return $ Asm [(name, concat $ map goI inss) | (name, inss) <- funcs]
  where
    goI :: Ins -> [Ins]
    goI (MOV (RegMem a) (RegMem b)) | a == b = []
    goI (MOVi (RegMem a) (Imm (XImm 0))) | isXReg a = [XOR (RegMem a) (RegMemImm a)]
    goI (MOVi64 (Reg a) (Imm (XImm 0))) = [XOR (RegMem a) (RegMemImm a)]
    goI (MOVSX (Reg a) (RegMem b)) | a == b = []
    goI ins = [ins]