UlamValue NodeBinaryOpArithRemainder::makeImmediateBinaryOp(UTI type, u32 ldata, u32 rdata, u32 len) { UlamValue rtnUV; if(rdata == 0) { MSG(getNodeLocationAsString().c_str(), "Possible Division By Zero Attempt in Modulus", ERR); rtnUV.setUlamValueTypeIdx(Nav); setNodeType(Nav); //compiler counts return rtnUV; } ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum(); switch(typEnum) { case Int: rtnUV = UlamValue::makeImmediate(type, _BinOpModInt32(ldata, rdata, len), len); break; case Unsigned: rtnUV = UlamValue::makeImmediate(type, _BinOpModUnsigned32(ldata, rdata, len), len); break; case Bool: rtnUV = UlamValue::makeImmediate(type, _BinOpModBool32(ldata, rdata, len), len); break; case Unary: rtnUV = UlamValue::makeImmediate(type, _BinOpModUnary32(ldata, rdata, len), len); break; case Bits: default: assert(0); break; }; return rtnUV; } //makeImmediateBinaryOp
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
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); 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, _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
UlamValue NodeBinaryOpEqualArithRemainder::makeImmediateBinaryOp(UTI type, u32 ldata, u32 rdata, u32 len) { UlamValue rtnUV; ULAMTYPE typEnum = m_state.getUlamTypeByIndex(type)->getUlamTypeEnum(); switch(typEnum) { case Int: rtnUV = UlamValue::makeImmediate(type, _BinOpModInt32(ldata, rdata, len), len); break; case Unsigned: rtnUV = UlamValue::makeImmediate(type, _BinOpModUnsigned32(ldata, rdata, len), len); break; case Bool: rtnUV = UlamValue::makeImmediate(type, _BinOpModBool32(ldata, rdata, len), len); break; case Unary: rtnUV = UlamValue::makeImmediate(type, _BinOpModUnary32(ldata, rdata, len), len); break; case Bits: default: m_state.abortUndefinedUlamPrimitiveType(); break; }; return rtnUV; } //makeImmediateBinaryOp