HARM-0.1.2: Arm/Operand.hs
----------------------------------------------------------------------
-- 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
----------------------------------------------------------------------