MCPcopy Create free account
hub / github.com/chipsalliance/Surelog / div

Method div

src/Expression/Value.cpp:574–607  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

572}
573
574void SValue::div(const Value* a, const Value* b) {
575 const SValue* aval = (const SValue*)a;
576 const SValue* bval = (const SValue*)b;
577 m_size = (aval->m_size > bval->m_size) ? aval->m_size : bval->m_size;
578 if (bval->m_value.s_int == 0) {
579 m_valid = 0;
580 m_value.s_int = 0;
581 m_negative = 0;
582 } else {
583 switch (aval->getType()) {
584 case Value::Type::Scalar:
585 m_negative = 0;
586 m_value.u_int = aval->m_value.u_int / bval->m_value.u_int;
587 m_type = Value::Type::Unsigned;
588 break;
589 case Value::Type::Double:
590 m_negative = ((aval->m_value.d_int / bval->m_value.d_int) < 0);
591 m_value.d_int = aval->m_value.d_int / bval->m_value.d_int;
592 m_type = Value::Type::Double;
593 break;
594 case Value::Type::Integer:
595 m_negative = ((aval->m_value.s_int / bval->m_value.s_int) < 0);
596 m_value.s_int = aval->m_value.s_int / bval->m_value.s_int;
597 m_type = Value::Type::Integer;
598 break;
599 default:
600 m_negative = 0;
601 m_value.u_int = aval->m_value.u_int / bval->m_value.u_int;
602 m_type = Value::Type::Unsigned;
603 break;
604 }
605 m_valid = a->isValid() && b->isValid();
606 }
607}
608
609void SValue::mod(const Value* a, const Value* b) {
610 const SValue* aval = (const SValue*)a;

Callers 1

evalExprMethod · 0.45

Calls 6

getTypeMethod · 0.45
isValidMethod · 0.45
getSizeMethod · 0.45
getValueLMethod · 0.45
getValueULMethod · 0.45
getValueDMethod · 0.45

Tested by

no test coverage detected