| 607 | } |
| 608 | |
| 609 | void SValue::mod(const Value* a, const Value* b) { |
| 610 | const SValue* aval = (const SValue*)a; |
| 611 | const SValue* bval = (const SValue*)b; |
| 612 | m_size = (aval->m_size > bval->m_size) ? aval->m_size : bval->m_size; |
| 613 | switch (aval->getType()) { |
| 614 | case Value::Type::Scalar: |
| 615 | m_negative = 0; |
| 616 | m_value.u_int = aval->m_value.u_int % bval->m_value.u_int; |
| 617 | m_type = Value::Type::Unsigned; |
| 618 | break; |
| 619 | case Value::Type::Double: |
| 620 | m_negative = |
| 621 | (((int64_t)aval->m_value.d_int % (int64_t)bval->m_value.d_int) < 0); |
| 622 | m_value.s_int = |
| 623 | (int64_t)aval->m_value.d_int % (int64_t)bval->m_value.d_int; |
| 624 | m_type = Value::Type::Integer; |
| 625 | break; |
| 626 | case Value::Type::Integer: |
| 627 | m_negative = ((aval->m_value.s_int % bval->m_value.s_int) < 0); |
| 628 | m_value.s_int = aval->m_value.s_int % bval->m_value.s_int; |
| 629 | m_type = Value::Type::Integer; |
| 630 | break; |
| 631 | default: |
| 632 | m_negative = 0; |
| 633 | m_value.u_int = aval->m_value.u_int % bval->m_value.u_int; |
| 634 | m_type = Value::Type::Unsigned; |
| 635 | break; |
| 636 | } |
| 637 | m_valid = a->isValid() && b->isValid(); |
| 638 | } |
| 639 | |
| 640 | void SValue::power(const Value* a, const Value* b) { |
| 641 | const SValue* aval = (const SValue*)a; |