----------------------------------------------------------------------
-- FILE:              Operand.hs
-- DATE:              02/17/2001
-- PROJECT:           HARM (was VARM (Virtual ARM)), for CSE240 Spring 2001
-- LANGUAGE PLATFORM: HUGS
-- OS PLATFORM:       RedHat Linux 6.2
-- AUTHOR:            Jeffrey A. Meunier
-- EMAIL:             jeffm@cse.uconn.edu
-- MAINTAINER:        Alex Mason
-- EMAIL:             axman6@gmail.com
----------------------------------------------------------------------



module Arm.Operand
where



----------------------------------------------------------------------
-- Standard libraries.
----------------------------------------------------------------------
import Data.Word



----------------------------------------------------------------------
-- Local libraries.
----------------------------------------------------------------------
import Arm.RegisterName



----------------------------------------------------------------------
-- Operand data type.
----------------------------------------------------------------------
data Operand
  = Aut Operand                 -- auto-increment
  | Bas RegisterName Word32     -- base + offset
  | Con Word32                  -- constant
  | Ind RegisterName            -- indirect
  | Mrg [RegisterName]          -- multiple register
  | Pos Operand Word32          -- post-indexed
  | Reg RegisterName            -- register
  | Rel Int                     -- relative address
  | Lab String                  -- for parsing branches
--  deriving Show


instance Show Operand where
  show (Aut op)      = show op ++ "!"
  show (Bas reg off) = "[" ++ show reg ++ ", #" ++ show off ++ "]"
  show (Con wrd)     = "#" ++ show wrd
  show (Ind reg)     = "[" ++ show reg ++ "]"
  show (Lab lab)     = lab
  show (Mrg regs)    = "{" ++ showMrg regs ++ "}"
  show (Pos op off)  = show op ++ ", #" ++ show off
  show (Reg reg)     = show reg
  show (Rel rel)     = show rel


showMrg []       = ""
showMrg [r]      = show r
showMrg (r : rs) = show r ++ "," ++ showMrg rs



----------------------------------------------------------------------
-- eof
----------------------------------------------------------------------