coins.ir.hir
Interface AsmStmt

All Superinterfaces:
java.lang.Cloneable, HIR, HIR0, IR, IR0, Stmt
All Known Implementing Classes:
AsmStmtImpl

public interface AsmStmt
extends Stmt

 The C front of COINS accepts following asm statement:
   asm("#param paramDecsriptionList \n"
       "#clobber destroyed-register-list \n"
       asmInstructionSequence ,
       actual-parameter-list );
 where
   paramDescriptionList -> paramDescription
       | paramDescriptionList , paramDescription
   paramDescription ->
         %register    // input parameter variable (rvalue)
       | w%register   // output parameter variable (lvalue)
       | m%register   // input/output parameter variable (lvalue)
       | s            // constant representing static address
       | a            // constant repreZsenting automatic variable address
   destroyed-register-list -> %register // register contents is destroyed
       | destroyed-register-list , %register
   asmInstructionSequence ->
         "asmInstruction \n"
       | asmInstructionSequence "asmInstruction \n"
   actualParameterList ->
         expression   // expression representing actual parameter
       | actualParameterList , expression
 The %register represents a register or a class of registers
 defined in the TMD.
 The expression representing an actual parameter is
 evaluated and its value (in case of rvalue) or address
 (in case of lvalue) is set as the contents of
 corresponding input parameter register.
 1st parameter register is represented as %1,
 2nd parameter register is represented as %2, ...
 in asmInstructions.
 The asmInstruction is an assembly language instruction
 of the target machine.
 The asm statement of COINS is not compatible with
 that of gcc.
 The asm statement is represented as AsmStmt in HIR
 as follows:
  AsmStmt   ->
    ( asmCode attr  // Asm statement.
      StringConst @ // String constant representing
                    // parameter description pragma,
                    // clobber specification pragma, and
                    // assembly language instruction sequence
      HirList @ )   // List of l-value expressions (variable nodes,
                    // pointer expressions, etc.) and arithmetic
                    // expressions representing actual parameters.

 The above StringConst expression is the concatenation of
   paramDescriptionList, destroyed-register-list, and
   asmInstructionSequence.

C program example:

 int  y = 1, vec[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int printf(char*, ...);
 int main() {
   int autov = 2, i = 3, x;
   // x = vec[i-1] + autov; y = y + y;
   asm("#param a,s,%I32,w%I32,m%I32\n"
       " mov %2(,%3,4),%4\n"
       " add %1(%%ebp),%4\n"
       " add %5,%5\n",
       &autov, vec, i-1, x, y);
   printf("x=%d y=%d\n", x, y);
   return 0;
 }

HIR corresponding to the example:

 (asm      31 void line 8
   "#param a,s,%I32,w%I32,m%I32\n mov %2(,%3,4),%4\n add %1(%%ebp),%4\n add %5,%5\n">
  (list 33
   (addr     34 
    )
   (decay    36 
     vec>)
   (sub      38 int
    
    )
   
   ))


Field Summary
 
Fields inherited from interface coins.ir.hir.HIR
OP_CODE_NAME, OP_CODE_NAME_DENSE
 
Fields inherited from interface coins.ir.IR
OP_INF, OP_LIST, OP_PROG, OP_SUBP_DEF
 
Fields inherited from interface coins.ir.hir.HIR0
FLAG_C_PTR, FLAG_CONST_EXP, FLAG_INIT_BLOCK, FLAG_LOOP_WITH_CONDITIONAL_INIT, FLAG_NOCHANGE, FLAG_NONTERMINAL, OP_ADD, OP_ADD_ASSIGN, OP_ADDR, OP_AND, OP_AND_ASSIGN, OP_ARROW, OP_ASM, OP_ASSIGN, OP_BLOCK, OP_CALL, OP_CMP_EQ, OP_CMP_GE, OP_CMP_GT, OP_CMP_LE, OP_CMP_LT, OP_CMP_NE, OP_COMMA, OP_CONST, OP_CONTENTS, OP_CONV, OP_DECAY, OP_DIV, OP_DIV_ASSIGN, OP_ELEM, OP_ENCLOSE, OP_EQ_ZERO, OP_EXP_STMT, OP_EXPLIST, OP_EXPREPEAT, OP_FOR, OP_IF, OP_INDEX, OP_INDEXED_LOOP, OP_JUMP, OP_LABEL, OP_LABEL_DEF, OP_LABELED_STMT, OP_LG_AND, OP_LG_OR, OP_MOD, OP_MOD_ASSIGN, OP_MULT, OP_MULT_ASSIGN, OP_NEG, OP_NOT, OP_NULL, OP_OFFSET, OP_OR, OP_OR_ASSIGN, OP_PARAM, OP_PHI, OP_POST_DECR, OP_POST_INCR, OP_PRE_DECR, OP_PRE_INCR, OP_QUAL, OP_REPEAT, OP_RETURN, OP_SELECT, OP_SEQ, OP_SETDATA, OP_SHIFT_L_ASSIGN, OP_SHIFT_LL, OP_SHIFT_R, OP_SHIFT_R_ASSIGN, OP_SHIFT_RL, OP_SIZEOF, OP_STMT, OP_STMT_UPPER, OP_SUB, OP_SUB_ASSIGN, OP_SUBP, OP_SUBS, OP_SWITCH, OP_SYM, OP_TYPE, OP_UNDECAY, OP_UNTIL, OP_VAR, OP_WHILE, OP_XOR, OP_XOR_ASSIGN
 
Method Summary
 HirList getActualParamList()
           
 java.lang.String getInstructions()
           
 void setActualParamList(HirList pActualParamList)
          Set the list including actual parameter expressions.
 void setInstructions(java.lang.String pInstructions)
          Set the 1st operand representing #param, #clobber and instruction sequence.
 
Methods inherited from interface coins.ir.hir.Stmt
addNextStmt, ancestorControlStmtOfConditionalExp, attachLabel, attachLabelAsFirstOne, combineStmt, combineWithConditionalExp, copyPosition, cutLabelLinkOfStmt, deleteThisStmt, getBlockStmt, getFileName, getLabel, getLabelDefList, getLabeledStmt, getLineNumber, getPreviousStmt, getUpperStmt, insertPreviousStmt, insertPreviousStmt, isBranchStmt, isMultiBlock, isolateThisStmt, replaceThisStmtWith, setFileName, setLineNumber
 
Methods inherited from interface coins.ir.hir.HIR
addrExp, asmStmt, checkLinkage, conditionalExp, contains, copyInfListFrom, cutParentLink, exp, expList, expRepeat, forStmt, getExpId, getFlowAnalSym, getIndentSpace, getInfString, getIrName, getSourceNode, getSourceNode1, getSourceNode2, getSymOrExpId, getWork, hirNodeClone, hirSeq, hirSeq, indexedLoopStmt, indexedLoopStmt, infStmt, infStmt, intConstNode, irList, isEmpty, isStmt, isTree, nullNode, nullStmt, offsetConstNode, phiExp, repeatStmt, replaceSource, replaceSource1, replaceSource2, returnStmt, setChild1, setChild2, setChildren, setChildren, setDataStmt, setIndex, setIndexNumberToAllNodes, setParent, setType, setWork, subpDefinition, subpIterator, subscriptedExp, toString, toStringDetail, toStringShort, toStringWithChildren, undecayExp, undecayExp, undecayExp, whileStmt
 
Methods inherited from interface coins.ir.IR
addInf, getChild1, getChild2, getInf, getInfList, getParent, getSym, print, print, removeInf
 
Methods inherited from interface coins.ir.IR0
getChild, getChildCount, getIndex, getOperator, setChild
 
Methods inherited from interface coins.ir.hir.HIR0
accept, assignStmt, blockStmt, callStmt, constNode, contentsExp, convExp, copyWithOperands, copyWithOperandsChangingLabels, decayExp, elemNode, exp, exp, expStmt, falseNode, finishHir, forStmt, functionExp, getChildNumber, getFlag, getFlagBox, getNextStmt, getStmtContainingThisNode, getType, hirClone, hirIterator, hirList, hirSeq, ifStmt, intConstNode, irList, isSameAs, jumpStmt, labelDef, labeledStmt, labelNode, pointedExp, print, program, qualifiedExp, repeatStmt, replaceThisNode, returnStmt, setFlag, setIndexNumberToAllNodes, sizeofExp, sizeofExp, subpDefinition, subpNode, subscriptedExp, switchStmt, symNode, trueNode, undecayExp, varNode, whileStmt
 

Method Detail

getInstructions

public java.lang.String getInstructions()
Returns:
the 1st operand representing #param, #clobber and instruction sequence.

getActualParamList

public HirList getActualParamList()
Returns:
the list including actual parameter expressions. operand representing #param, #clobber

setInstructions

public void setInstructions(java.lang.String pInstructions)
Set the 1st operand representing #param, #clobber and instruction sequence.


setActualParamList

public void setActualParamList(HirList pActualParamList)
Set the list including actual parameter expressions. operand representing #param, #clobber