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