本文整理汇总了C++中UlamValue::getUlamValueTypeIdx方法的典型用法代码示例。如果您正苦于以下问题:C++ UlamValue::getUlamValueTypeIdx方法的具体用法?C++ UlamValue::getUlamValueTypeIdx怎么用?C++ UlamValue::getUlamValueTypeIdx使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UlamValue
的用法示例。
在下文中一共展示了UlamValue::getUlamValueTypeIdx方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doBinaryOperationImmediate
//unlike NodeBinaryOp, NodeBinaryOpCompare has a node type that's different from
// its nodes, where left and right nodes are casted to be the same.
bool NodeBinaryOpCompare::doBinaryOperationImmediate(s32 lslot, s32 rslot, u32 slots)
{
assert(slots == 1);
UTI luti = m_nodeLeft->getNodeType();
u32 len = m_state.getTotalBitSize(luti);
UlamValue luv = m_state.m_nodeEvalStack.loadUlamValueFromSlot(lslot); //immediate value
UlamValue ruv = m_state.m_nodeEvalStack.loadUlamValueFromSlot(rslot); //immediate value
if((luv.getUlamValueTypeIdx() == Nav) || (ruv.getUlamValueTypeIdx() == Nav))
return false;
UlamValue rtnUV;
u32 wordsize = m_state.getTotalWordSize(luti);
if(wordsize == MAXBITSPERINT)
{
u32 ldata = luv.getImmediateData(len);
u32 rdata = ruv.getImmediateData(len);
rtnUV = makeImmediateBinaryOp(luti, ldata, rdata, len);
}
else if(wordsize == MAXBITSPERLONG)
{
u64 ldata = luv.getImmediateDataLong(len);
u64 rdata = ruv.getImmediateDataLong(len);
rtnUV = makeImmediateLongBinaryOp(luti, ldata, rdata, len);
}
//else
//assert(0);
if(rtnUV.getUlamValueTypeIdx() == Nav)
return false;
m_state.m_nodeEvalStack.storeUlamValueInSlot(rtnUV, -1);
return true;
} //dobinaryopImmediate
示例2: doBinaryOperation
//for eval, want the value of the rhs
bool NodeMemberSelect::doBinaryOperation(s32 lslot, s32 rslot, u32 slots)
{
assert(slots);
//the return value of a function call, or value of a data member
UlamValue ruv = m_state.m_nodeEvalStack.loadUlamValueFromSlot(rslot);
UlamValue rtnUV;
UTI ruti = getNodeType();
PACKFIT packFit = m_state.determinePackable(ruti);
if(m_state.isScalar(ruti) || WritePacked(packFit))
{
rtnUV = ruv;
}
else
{
//make a ptr to an unpacked array, base[0] ? [pls test]
rtnUV = UlamValue::makePtr(rslot, EVALRETURN, ruti, UNPACKED, m_state);
}
if((rtnUV.getUlamValueTypeIdx() == Nav) || (ruti == Nav))
return false;
if((rtnUV.getUlamValueTypeIdx() == Hzy) || (ruti == Hzy))
return false;
//copy result UV to stack, -1 relative to current frame pointer
Node::assignReturnValueToStack(rtnUV);
return true;
} //doBinaryOperation
示例3: doUnaryOperationImmediate
bool NodeUnaryOp::doUnaryOperationImmediate(s32 slot, u32 nslots)
{
assert(nslots == 1);
UTI nuti = getNodeType();
u32 len = m_state.getTotalBitSize(nuti);
UlamValue uv = m_state.m_nodeEvalStack.loadUlamValueFromSlot(slot); //immediate valueg
if((uv.getUlamValueTypeIdx() == Nav) || (nuti == Nav))
return false;
if((uv.getUlamValueTypeIdx() == Hzy) || (nuti == Hzy))
return false;
UlamValue rtnUV;
u32 wordsize = m_state.getUlamTypeByIndex(nuti)->getTotalWordSize();
if(wordsize <= MAXBITSPERINT)
{
u32 data = uv.getImmediateData(len, m_state);
rtnUV = makeImmediateUnaryOp(nuti, data, len);
}
else if(wordsize <= MAXBITSPERLONG)
{
u64 data = uv.getImmediateDataLong(len, m_state); //t3849
rtnUV = makeImmediateLongUnaryOp(nuti, data, len);
}
else
m_state.abortGreaterThanMaxBitsPerLong();
m_state.m_nodeEvalStack.storeUlamValueInSlot(rtnUV, -1);
return true;
} //dounaryopImmediate
示例4: appendBinaryOp
void NodeBinaryOpArithDivide::appendBinaryOp(UlamValue& refUV, u32 ldata, u32 rdata, u32 pos, u32 len)
{
if(rdata == 0)
{
MSG(getNodeLocationAsString().c_str(), "Possible Divide By Zero Attempt", ERR);
refUV.setUlamValueTypeIdx(Nav);
setNodeType(Nav); //compiler counts
return;
}
UTI type = refUV.getUlamValueTypeIdx();
ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum();
switch(typEnum)
{
case Int:
refUV.putData(pos, len, _BinOpDivideInt32(ldata, rdata, len));
break;
case Unsigned:
refUV.putData(pos, len, _BinOpDivideUnsigned32(ldata, rdata, len));
break;
case Bool:
refUV.putData(pos, len, _BinOpDivideBool32(ldata, rdata, len));
break;
case Unary:
refUV.putData(pos, len, _BinOpDivideUnary32(ldata, rdata, len));
break;
case Bits:
default:
m_state.abortUndefinedUlamPrimitiveType();
break;
};
return;
} //appendBinaryOp
示例5: eval
EvalStatus NodeVarRef::eval()
{
assert(m_varSymbol);
assert(m_varSymbol->getAutoLocalType() != ALT_AS); //NodeVarRefAuto
UTI nuti = getNodeType();
if(nuti == Nav) return evalErrorReturn();
assert(m_varSymbol->getUlamTypeIdx() == nuti);
assert(m_nodeInitExpr);
evalNodeProlog(0); //new current frame pointer
makeRoomForSlots(1); //always 1 slot for ptr
EvalStatus evs = m_nodeInitExpr->evalToStoreInto();
if(evs != NORMAL) return evalStatusReturn(evs);
UlamValue pluv = m_state.m_nodeEvalStack.popArg();
assert(m_state.isPtr(pluv.getUlamValueTypeIdx()));
((SymbolVariableStack *) m_varSymbol)->setAutoPtrForEval(pluv); //for future ident eval uses
((SymbolVariableStack *) m_varSymbol)->setAutoStorageTypeForEval(m_nodeInitExpr->getNodeType()); //for future virtual function call eval uses
m_state.m_funcCallStack.storeUlamValueInSlot(pluv, ((SymbolVariableStack *) m_varSymbol)->getStackFrameSlotIndex()); //doesn't seem to matter..
evalNodeEpilog();
return NORMAL;
} //eval
示例6: appendBinaryOp
void NodeBinaryOpEqualArithRemainder::appendBinaryOp(UlamValue& refUV, u32 ldata, u32 rdata, u32 pos, u32 len)
{
UTI type = refUV.getUlamValueTypeIdx();
ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum();
switch(typEnum)
{
case Int:
refUV.putData(pos, len, _BinOpModInt32(ldata, rdata, len));
break;
case Unsigned:
refUV.putData(pos, len, _BinOpModUnsigned32(ldata, rdata, len));
break;
case Bool:
refUV.putData(pos, len, _BinOpModBool32(ldata, rdata, len));
break;
case Unary:
refUV.putData(pos, len, _BinOpModUnary32(ldata, rdata, len));
break;
case Bits:
default:
m_state.abortUndefinedUlamPrimitiveType();
break;
};
return;
} //appendBinaryOp
示例7: appendBinaryOp
void NodeBinaryOpArithRemainder::appendBinaryOp(UlamValue& refUV, u32 ldata, u32 rdata, u32 pos, u32 len)
{
if(rdata == 0)
{
MSG(getNodeLocationAsString().c_str(), "Possible Remainder By Zero Attempt", ERR);
return;
}
UTI type = refUV.getUlamValueTypeIdx();
ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum();
switch(typEnum)
{
case Int:
refUV.putData(pos, len, _BinOpModInt32(ldata, rdata, len));
break;
case Unsigned:
refUV.putData(pos, len, _BinOpModUnsigned32(ldata, rdata, len));
break;
case Bool:
refUV.putData(pos, len, _BinOpModBool32(ldata, rdata, len));
break;
case Unary:
refUV.putData(pos, len, _BinOpModUnary32(ldata, rdata, len));
break;
case Bits:
default:
assert(0);
break;
};
return;
} //appendBinaryOp
示例8: appendBinaryOp
void NodeBinaryOpArithSubtract::appendBinaryOp(UlamValue& refUV, u32 ldata, u32 rdata, u32 pos, u32 len)
{
UTI type = refUV.getUlamValueTypeIdx();
ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum();
switch(typEnum)
{
case Int:
refUV.putData(pos, len, _BinOpSubtractInt32(ldata, rdata, len));
break;
case Unsigned:
refUV.putData(pos, len, _BinOpSubtractUnsigned32(ldata, rdata, len));
break;
case Bool:
refUV.putData(pos, len, _BinOpSubtractBool32(ldata, rdata, len));
break;
case Unary:
refUV.putData(pos, len, _BinOpSubtractUnary32(ldata, rdata, len));
break;
case Bits:
default:
assert(0);
break;
};
return;
} //appendBinaryOp
示例9: cast
bool UlamTypePrimitiveUnary::cast(UlamValue & val, UTI typidx)
{
bool brtn = true;
assert(m_state.getUlamTypeByIndex(typidx) == this);
UTI valtypidx = val.getUlamValueTypeIdx();
if(UlamType::safeCast(valtypidx) != CAST_CLEAR) //bad|hazy
return false;
u32 wordsize = getTotalWordSize();
u32 valwordsize = m_state.getTotalWordSize(valtypidx);
if(wordsize <= MAXBITSPERINT)
{
if(valwordsize <= MAXBITSPERINT)
brtn = castTo32(val, typidx);
else if(valwordsize <= MAXBITSPERLONG)
brtn = castTo64(val, typidx); //downcast
else
m_state.abortGreaterThanMaxBitsPerLong();
}
else if(wordsize <= MAXBITSPERLONG)
brtn = castTo64(val, typidx);
else
{
std::ostringstream msg;
msg << "Casting to an unsupported word size: " << wordsize;
msg << ", Value Type and bit size was: ";
msg << valtypidx << "," << m_state.getBitSize(valtypidx);
msg << " TO: ";
msg << typidx << "," << getBitSize();
MSG(m_state.getFullLocationAsString(m_state.m_locOfNextLineText).c_str(), msg.str().c_str(), DEBUG);
brtn = false;
}
return brtn;
} //cast
示例10: appendBinaryOp
void NodeBinaryOpShiftLeft::appendBinaryOp(UlamValue& refUV, u32 ldata, u32 rdata, u32 pos, u32 len)
{
assert(0); //not implemented yet!
#if 0
UTI type = refUV.getUlamValueTypeIdx();
ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum();
switch(typEnum)
{
case Int:
refUV.putData(pos, len, _ShiftOpLeftInt32(ldata, rdata, len));
break;
case Unsigned:
refUV.putData(pos, len, _ShiftOpLeftUnsigned32(ldata, rdata, len));
break;
case Bool:
refUV.putData(pos, len, _ShiftOpLeftBool32(ldata, rdata, len));
break;
case Unary:
refUV.putData(pos, len, _ShiftOpLeftUnary32(ldata, rdata, len));
break;
case Bits:
case Unary:
refUV.putData(pos, len, _ShiftOpLeftBits32(ldata, rdata, len));
break;
default:
assert(0);
break;
};
#endif
return;
} //appendBinaryOp
示例11: if
bool UlamTypeInt::castTo64(UlamValue & val, UTI typidx)
{
bool brtn = true;
UTI valtypidx = val.getUlamValueTypeIdx();
u32 valwordsize = m_state.getTotalWordSize(valtypidx);
u64 data;
if(valwordsize == MAXBITSPERINT)
data = (u64) val.getImmediateData(m_state);
else if(valwordsize == MAXBITSPERLONG)
data = val.getImmediateDataLong(m_state);
else
assert(0);
u64 sdata = 0;
s32 bitsize = getBitSize();
s32 valbitsize = m_state.getBitSize(valtypidx);
ULAMTYPE valtypEnum = m_state.getUlamTypeByIndex(valtypidx)->getUlamTypeEnum();
switch(valtypEnum)
{
case Int:
// casting Int to Int to change bits size
sdata = _Int64ToInt64(data, valbitsize, bitsize);
break;
case Unsigned:
// casting Unsigned to Int to change type
sdata = _Unsigned64ToInt64(data, valbitsize, bitsize);
break;
case Bits:
// casting Bits to Int to change type
sdata = _Bits64ToInt64(data, valbitsize, bitsize);
break;
case Unary:
sdata = _Unary64ToInt64(data, valbitsize, bitsize);
break;
case Bool:
sdata = _Bool64ToInt64(data, valbitsize, bitsize);
break;
case Void:
default:
//std::cerr << "UlamTypeInt (cast) error! Value Type was: " << valtypidx << std::endl;
brtn = false;
};
if(brtn)
{
u32 wordsize = getTotalWordSize(); //tobe
if(wordsize == MAXBITSPERINT) //downcast
val = UlamValue::makeImmediate(typidx, (u32) sdata, m_state); //overwrite val
else if(wordsize == MAXBITSPERLONG)
val = UlamValue::makeImmediateLong(typidx, sdata, m_state); //overwrite val
else
assert(0);
}
return brtn;
} //castTo64
示例12: assignUlamValue
void UnpackedStorage::assignUlamValue(UlamValue pluv, UlamValue ruv)
{
assert(pluv.getUlamValueTypeIdx() == Ptr);
assert(ruv.getUlamValueTypeIdx() != Ptr);
s32 leftbaseslot = pluv.getPtrSlotIndex(); //even for scalars
if(pluv.isTargetPacked() == UNPACKED)
{
m_values[leftbaseslot] = ruv; //must be immediate
}
else
{
//target is packed or packedloadable, use pos & len in ptr
UlamValue lvalAtIdx = loadDataMemberAt(leftbaseslot);
assert(lvalAtIdx.getUlamValueTypeIdx() == UAtom); //?
lvalAtIdx.putDataIntoAtom(pluv, ruv, m_state);
storeDataMemberAt(lvalAtIdx, leftbaseslot);
}
}
示例13: if
bool UlamTypePrimitiveUnary::castTo64(UlamValue & val, UTI typidx)
{
bool brtn = true;
UTI valtypidx = val.getUlamValueTypeIdx();
u32 valwordsize = m_state.getTotalWordSize(valtypidx);
u64 data;
if(valwordsize <= MAXBITSPERINT)
data = (u64) val.getImmediateData(m_state);
else if(valwordsize <= MAXBITSPERLONG)
data = val.getImmediateDataLong(m_state);
else
m_state.abortGreaterThanMaxBitsPerLong();
s32 bitsize = getBitSize();
s32 valbitsize = m_state.getBitSize(valtypidx);
//base types e.g. Int, Bool, Unary, Foo, Bar..
ULAMTYPE valtypEnum = m_state.getUlamTypeByIndex(valtypidx)->getUlamTypeEnum();
switch(valtypEnum)
{
case Int:
// cast from Int->Unary, OR Bool->Unary (same as Bool->Int)
data = _Int64ToUnary64(data, valbitsize, bitsize);
break;
case Unsigned:
data = _Unsigned64ToUnary64(data, valbitsize, bitsize);
break;
case Bool:
// Bool -> Unary is the same as Bool -> Int
data = _Bool64ToUnary64(data, valbitsize, bitsize);
break;
case Unary:
data = _Unary64ToUnary64(data, valbitsize, bitsize);
break;
case Bits:
break;
case Void:
default:
//std::cerr << "UlamTypePrimitiveUnary (cast) error! Value Type was: " << valtypidx << std::endl;
brtn = false;
};
if(brtn)
{
u32 wordsize = getTotalWordSize(); //tobe
if(wordsize <= MAXBITSPERINT) //downcast
val = UlamValue::makeImmediate(typidx, data, m_state); //overwrite val
else if(wordsize <= MAXBITSPERLONG)
val = UlamValue::makeImmediateLong(typidx, data, m_state); //overwrite val
else
m_state.abortGreaterThanMaxBitsPerLong();
}
return brtn;
} //castTo64
示例14: getBitSize
bool UlamTypeInt::castTo32(UlamValue & val, UTI typidx)
{
bool brtn = true;
UTI valtypidx = val.getUlamValueTypeIdx();
s32 bitsize = getBitSize();
s32 valbitsize = m_state.getBitSize(valtypidx);
u32 data = val.getImmediateData(m_state);
u32 sdata = 0;
ULAMTYPE valtypEnum = m_state.getUlamTypeByIndex(valtypidx)->getUlamTypeEnum();
switch(valtypEnum)
{
case Int:
// casting Int to Int to change bits size
sdata = _Int32ToInt32(data, valbitsize, bitsize);
break;
case Unsigned:
// casting Unsigned to Int to change type
sdata = _Unsigned32ToInt32(data, valbitsize, bitsize);
break;
case Bits:
// casting Bits to Int to change type
sdata = _Bits32ToInt32(data, valbitsize, bitsize);
break;
case Unary:
sdata = _Unary32ToInt32(data, valbitsize, bitsize);
break;
case Bool:
sdata = _Bool32ToInt32(data, valbitsize, bitsize);
break;
case Void:
default:
//std::cerr << "UlamTypeInt (cast) error! Value Type was: " << valtypidx << std::endl;
brtn = false;
};
if(brtn)
val = UlamValue::makeImmediate(typidx, sdata, m_state); //overwrite val
return brtn;
} //castTo32
示例15: genCodeCastAtomAndElement
void NodeCast::genCodeCastAtomAndElement(File * fp, UlamValue & uvpass)
{
UTI nuti = getNodeType();
UlamType * nut = m_state.getUlamTypeByIndex(nuti);
UTI vuti = uvpass.getUlamValueTypeIdx();
s32 tmpVarNum = 0;
if(vuti == Ptr)
{
tmpVarNum = uvpass.getPtrSlotIndex();
vuti = uvpass.getPtrTargetType(); //replace
}
// "downcast" might not be true; compare to be sure the atom is an element "Foo"
if(vuti == UAtom)
{
m_state.indent(fp);
fp->write("if(!");
fp->write(nut->getUlamTypeMangledName().c_str());
fp->write("<EC>::THE_INSTANCE.");
fp->write(m_state.getIsMangledFunctionName());
fp->write("(");
fp->write(m_state.getTmpVarAsString(vuti, tmpVarNum).c_str());
fp->write("))\n");
m_state.m_currentIndentLevel++;
m_state.indent(fp);
fp->write("FAIL(BAD_CAST);\n");
m_state.m_currentIndentLevel--;
}
//update the uvpass to have the casted type
uvpass = UlamValue::makePtr(tmpVarNum, uvpass.getPtrStorage(), nuti, m_state.determinePackable(nuti), m_state, 0, uvpass.getPtrNameId()); //POS 0 rightjustified; pass along name id
return;
} //genCodeCastAtomAndElement