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
)
))
| 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 |
| 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.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 |
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