C.2. Example XML for Custom Hardware

<ProcUnitModel version = "0.0.1">
    <ProcUnit type="DCT32">
        <ExecModel sched="LIST_SCHED">
            <Operation name="ret">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="reg" mode="RdReg"/>
                </StgRef>
            </Operation>
            <Operation name="malloc"> <!-- allocate memory from system heap -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="reg" mode="WrReg"/>
                </StgRef>
            </Operation>
            <Operation name="free"> <!-- returns memory back to system heap -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="reg" mode="WrReg"/>
                </StgRef>
            </Operation>
            <Operation name="alloca"> <!-- allocate memory from current stack frame -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="reg" mode="WrReg"/>
                </StgRef>
            </Operation>
            <Operation name="load"> <!-- read from memory -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="mem-Port" mode="RdPort"/>
                </StgRef>
            </Operation>
            <Operation name="store"> <!-- write to memory -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="mem-Port" mode="WrPort"/>
                </StgRef>
            </Operation>
            <Operation name="call"> <!-- function call -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="reg" mode="RdReg"/>
                </StgRef>
            </Operation>

            <Operation name="br">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="add" var_type="int">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="add" var_type="float">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPAdd"/>
                </StgRef>
            </Operation>
            <Operation name="sub" var_type="int">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="sub" var_type="float">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPAdd"/>
                </StgRef>
            </Operation>
            <Operation name="mul" var_type="int">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-Mult/Div" mode="IntMult"/>
                </StgRef>
            </Operation>
            <Operation name="mul" var_type="float">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-Mult/Div" mode="FPMult"/>
                </StgRef>
            </Operation>
            <Operation name="udiv">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-Mult/Div" mode="IntDiv"/>
                </StgRef>
            </Operation>
            <Operation name="sdiv">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-Mult/Div" mode="IntDiv"/>
                </StgRef>
            </Operation>
            <Operation name="fdiv">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-Mult/Div" mode="FPDiv"/>
                </StgRef>
            </Operation>
            <Operation name="urem"> <!-- returns remainder of a division -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-Mult/Div" mode="IntDiv"/>
                </StgRef>
            </Operation>
            <Operation name="srem">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-Mult/Div" mode="IntDiv"/>
                </StgRef>
            </Operation>
            <Operation name="frem">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-Mult/Div" mode="FPDiv"/>
                </StgRef>
            </Operation>
            <Operation name="shl"> <!-- shift -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="shr"> <!-- shift -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="lshr"> <!-- logical shift -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="logic-SHIFT" mode="shift"/>
                </StgRef>
            </Operation>
            <Operation name="ashr"> <!-- arithmetic shift -->
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="and">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="or">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="xor">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="fptoui">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCvt"/>
                </StgRef>
            </Operation>
            <Operation name="fptosi">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCvt"/>
                </StgRef>
            </Operation>
            <Operation name="uitofp">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCvt"/>
                </StgRef>
            </Operation>
            <Operation name="sitofp">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCvt"/>
                </StgRef>
            </Operation>
            <Operation name="icmp">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="fcmp">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCmp"/>
                </StgRef>
            </Operation>
            <Operation name="seteq">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="setne">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="setle">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="setge">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="setlt">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="setgt">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="cast" var_type="int">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="cast" var_type="float">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="FP-ALU" mode="FPCvt"/>
                </StgRef>
            </Operation>

            <Operation name="getelementptr">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="phi">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="unreachable">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="invoke">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="unwind">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="switch">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
            <Operation name="select">
                <StgRef name = "SINGLE" flags = "COMMIT DEMAND">
                    <FURef type="int-ALU" mode="IntALU"/>
                </StgRef>
            </Operation>
        </ExecModel>
        <DPModel>
            <Pipeline name = "default" br_pred_policy = "TAKEN" br_pred_hit_ratio = "100.00" br_penalty = "0">
                <Stage name = "SINGLE">
                    <FURef type = "reg" quantity = "32"/>
                    <FURef type = "mem-Port" quantity = "1"/>
                    <FURef type = "int-ALU" quantity = "1"/>
                    <FURef type = "int-Mult/Div" quantity = "1"/>
                    <FURef type = "logic-SHIFT" quantity = "3"/>
                    <FURef type = "FP-ALU" quantity = "1"/>
                    <FURef type = "FP-Mult/Div" quantity = "1"/>
                </Stage>
            </Pipeline>
            <FuncUnit type="reg" quantity="32">
                <OperMode mode="RdReg" oplat="1"/>
                <OperMode mode="WrReg" oplat="1"/>
            </FuncUnit>
            <FuncUnit type="mem-Port" quantity="1">
                <OperMode mode="RdPort" oplat="1"/>
                <OperMode mode="WrPort" oplat="1"/>
            </FuncUnit>
            <FuncUnit type="int-ALU" quantity="1">
                <OperMode mode="IntALU" oplat="1"/>
            </FuncUnit>
            <FuncUnit type="int-Mult/Div" quantity="1">
                <OperMode mode="IntMult" oplat="3"/>
                <OperMode mode="IntDiv" oplat="20"/>
            </FuncUnit>
            <FuncUnit type="logic-SHIFT" quantity="3">
                <OperMode mode="shift" oplat="1"/>
            </FuncUnit>
            <FuncUnit type="FP-ALU" quantity="1">
                <OperMode mode="FPAdd" oplat="2"/>
                <OperMode mode="FPCmp" oplat="2"/>
                <OperMode mode="FPCvt" oplat="2"/>
            </FuncUnit>
            <FuncUnit type="FP-Mult/Div" quantity="1">
                <OperMode mode="FPMult" oplat="4"/>
                <OperMode mode="FPDiv" oplat="12"/>
                <OperMode mode="FPSqrt" oplat="24"/>
            </FuncUnit>
        </DPModel>

    </ProcUnit>
</ProcUnitModel>