|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Object
|
+--coins.sym.SymImpl
|
+--coins.sym.VarImpl
|
+--coins.sym.ElemImpl
class Elem
| フィールドの概要 |
| クラス coins.sym.VarImpl から継承したフィールド |
fDefList, fDefUseList, fIndex, fOperandSet, fUseList |
| クラス coins.sym.SymImpl から継承したフィールド |
fDbgLevel, fDefinedIn, fFlagBox, fKind, fName, fNextSym, fRecordedIn, fSourceInf, fSymInf, fType, fUniqueNameSym, fWork, machineParam, sourceLanguage, symRoot |
| インタフェース coins.sym.Var から継承したフィールド |
STORAGECLASS, VAR_AUTO, VAR_REGISTER, VAR_STATIC |
| インタフェース coins.sym.Sym から継承したフィールド |
KIND_NAME, VISIBILITY |
| コンストラクタの概要 | |
ElemImpl(SymRoot pSymRoot)
|
|
ElemImpl(SymRoot pSymRoot,
java.lang.String pElemName,
Sym pDefinedIn)
|
|
ElemImpl(SymRoot pSymRoot,
java.lang.String pElemName,
Sym pDefinedIn,
Exp pDispExp)
|
|
| メソッドの概要 | |
long |
evaluateDisp()
evaluateDisp "this" should be an element of struct/union type symbol. |
int |
getBitOffset()
getBitOffset See also setBitFieldOffset method. |
int |
getBitSize()
getBitSize See also setBitFieldOffset method. |
Type |
getUpperType()
getUpperType |
boolean |
isBitField()
isBitField |
boolean |
isDispEvaluable()
isDispEvaluable Get the displacement of elements. |
Elem |
searchElem(Type pRecordedIn)
searchElem Get the proper element having the same name as this symbol in pRecordedIn construct (structure or union). |
Elem |
searchElem(Var pVar)
searchElem Get the proper element having the same name as this symbol in the struct/union variable pVar. |
void |
setBitField(int pBitSize,
int pBitOffset)
|
void |
setBitFieldOffset(int pBitOffset)
setBitFieldOffset Set bit field offset of this element if it is a bit field. |
void |
setBitFieldSize(int pBitSize)
Set the size of bit field and set an indication showing that this element is a bit field. |
void |
setDispExp(Exp pDispExp)
setDispExp Set the displacement of this element. |
void |
setDisplacement(long pDisplacement)
|
java.lang.String |
toString()
Get the string image of object. |
| クラス coins.sym.VarImpl から継承したメソッド |
addOperand, evaluateAsObject, getDimension, getIndex, getInitialValue, getNext, getOperandSet, getSize, getStorageClass, getVisibility, isSizeEvaluable, resetFlowAnalInf, setIndex, setInitialValue, setNext, setStorageClass, setVisibility, toStringDetail |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| インタフェース coins.sym.Var から継承したメソッド |
evaluateAsObject, getDimension, getInitialValue, getNext, getSize, getStorageClass, getVisibility, isSizeEvaluable, setInitialValue, setNext, setStorageClass, setVisibility |
| インタフェース coins.sym.Sym0 から継承したメソッド |
charConst, definedType, defineElem, defineLabel, defineParam, defineSubp, defineVar, enumType, floatConst, getDefinedFile, getDefinedIn, getFlag, getName, getNextSym, getRecordedIn, getSymKind, getSymType, getUniqueName, intConst, isGlobal, namedConst, pointerType, setFlag, stringConst, structType, subpType, unionType, vectorType, vectorTypeUnfixed |
| コンストラクタの詳細 |
public ElemImpl(SymRoot pSymRoot)
public ElemImpl(SymRoot pSymRoot,
java.lang.String pElemName,
Sym pDefinedIn)
public ElemImpl(SymRoot pSymRoot,
java.lang.String pElemName,
Sym pDefinedIn,
Exp pDispExp)
| メソッドの詳細 |
public boolean isDispEvaluable()
Elem 内の isDispEvaluablepublic long evaluateDisp()
Elem 内の evaluateDisppublic void setDispExp(Exp pDispExp)
Elem の記述:
Elem 内の setDispExppDispExp - Expression representing the displacement
of this element in byte.public void setDisplacement(long pDisplacement)
Elem 内の setDisplacementpublic void setBitFieldSize(int pBitSize)
Elem の記述: Set the size of bit field and set an indication showing that this element is a bit field. The size of bit field should not exceed the bit width of long (typeLong.getSizeValue()*8). See also setBitFieldOffset method.
Elem 内の setBitFieldSizepBitSize - number of bits in this bit field.public void setBitFieldOffset(int pBitOffset)
Elem の記述:
Set bit field offset of this element if it is a bit field.
Consider bit offset and bit field length of a bit field are
represented by bitOffset and bitFieldSize each respectively.
In the case of machineParam.isPackedFromLeft() is true,
the most significant bit of the 1st field is placed at
the most significant bit of "containing object" (which is
explained later), and the bit field is placed at bit positions
bitOffset through (bitOffset + bitFieldSize - 1)
in the containing object, where the most significant bit position
of the containing object is zero and the least significant bit
position is (bit width of containing object -1).
In the case of machineParam.isPackedFromLeft() is false, that is,
machineParam.isPackedFromRight() is true,
the least significant bit of the 1st field is placed at
the least significant bit of containing object, and
the bit field is placed at bit positions
bitOffset through (bitOffset + bitFieldSize - 1)
in the containing object, where the least significant bit position
of the containing object is zero and the most significant bit
position is (bit width of containing object -1).
In both cases, displacement of the containing object within the
surrounding structure is shown by evaluateDisp().
Source language analyzer is not requested to set bit field offset
but requested to set only the size of bit fields by
setBitFieldSize method because the bit offset computation is
usually done by finishStructType() of StructType.
"containing object" mentioned in the previous paragraph is a
hypothetical object that contains bit fields. The alignment/size
of the containing object is considered to be the alignment/size
of the largest bit field type among the consecutive
bit fields (all of which have type int or unsigned int in C).
When a bit field is encountered in structure declaration and
the total size of preceding elements is lSize, then
the displacement of the containing object is computed as
(lSize / lElemTypeSize) * lElemTypeSize
where lElemTypeSize is the size of the largest bit field type
among the consecutive bit fields.
If the containing object has space to hold the bit field,
then the bit field is placed in the containing object.
When there remains no space to hold new bit field after
successive allocation of preceding bit fields, a new
containing object is placed adjacent to the old one
and remaining bit fields are placed in the new containing
object.
A bit field is contained in one containing object and does not
span to multiple containing objects. Multiple bit fields may be
contained in one containing object if the containing object can
contain them and bit fields continues successively.
The structure is supposed to have the alignment greater or equal
to the alignment of the containing object and its size is the
multiple of the size of the containing object.
Consider a C language structure
struct st1 {
short s1;
char c1;
unsigned int b1:5;
unsigned int b2:1;
unsigned int b3:3;
char c2;
};
on machine having 2 as short size, 4 as int size. Displacements
and bit offsets in this case will be as follows:
element displacement bit offset
s1 0 -
c1 2 -
b1 0 24
b2 0 29
b3 4 0
c2 5 -
and the structure will have alignment 4 and size 8.
As for C program
struct bitField1 {
unsigned a1:1;
unsigned b1:1;
};
struct bitField2 {
struct bitField1 st1;
unsigned char cc1;
struct bitField1 st2;
unsigned char cc2;
};
Displacements and bit offsets in this case will be as follows:
element displacement bit offset
st1.a1 0 0
st1.b1 0 1
cc1 4 -
st2.a1 8 0
st2.b1 8 1
cc2 12 -
and the structure will have alignment 4 and size 16.
A bit field can be loaded to register by loading the corresponding
containing object whose displacement can be get be evaluateDisp().
Access methods of a bit field shows
evaluateDisp(): displacement of the containing object containing
the bit field.
getBitSize(): the number of bits in the bit field.
getBitOffset(): bit offset position in the containing object
(its meaning differs according to the value of
isPackedFromLeft() as mentioned before).
Elem 内の setBitFieldOffsetpBitOffset - bit offset of the bit field as explained above.
public void setBitField(int pBitSize,
int pBitOffset)
public int getBitSize()
Elem の記述:
Elem 内の getBitSizepublic int getBitOffset()
Elem の記述:
Elem 内の getBitOffsetpublic boolean isBitField()
Elem の記述:
Elem 内の isBitFieldpublic Elem searchElem(Var pVar)
Elem の記述:
Elem 内の searchElempVar - sturcture or union variable.
public Elem searchElem(Type pRecordedIn)
Elem の記述:
Elem 内の searchElempRecordedIn - enclosing construct defining the element to be
searched (sturcture type or union type in C).
public Type getUpperType()
Elem の記述:
Elem 内の getUpperTypepublic java.lang.String toString()
HasStringObject の記述:
HasStringObject 内の toStringSymImpl 内の toString
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||