48 inst(inst_), thread(thread_), let(let_)
53 unsigned int num_defns =
let->
defns.size();
92 uint64_t arg_value =
arg->
eval(context);
96 case enums::timingExprSizeInBits:
102 case enums::timingExprNot:
103 ret = arg_value != 0;
105 case enums::timingExprInvert:
108 case enums::timingExprSignExtend32To64:
109 ret =
static_cast<int64_t
>(
110 static_cast<int32_t
>(arg_value));
112 case enums::timingExprAbs:
113 if (
static_cast<int64_t
>(arg_value) < 0)
127 uint64_t left_value =
left->
eval(context);
128 uint64_t right_value =
right->
eval(context);
132 case enums::timingExprAdd:
133 ret = left_value + right_value;
135 case enums::timingExprSub:
136 ret = left_value - right_value;
138 case enums::timingExprUMul:
139 ret = left_value * right_value;
141 case enums::timingExprUDiv:
142 if (right_value != 0) {
143 ret = left_value / right_value;
146 case enums::timingExprUCeilDiv:
147 if (right_value != 0) {
148 ret = (left_value + (right_value - 1)) / right_value;
151 case enums::timingExprSMul:
152 ret =
static_cast<int64_t
>(left_value) *
153 static_cast<int64_t
>(right_value);
155 case enums::timingExprSDiv:
156 if (right_value != 0) {
157 ret =
static_cast<int64_t
>(left_value) /
158 static_cast<int64_t
>(right_value);
161 case enums::timingExprEqual:
162 ret = left_value == right_value;
164 case enums::timingExprNotEqual:
165 ret = left_value != right_value;
167 case enums::timingExprULessThan:
168 ret = left_value < right_value;
170 case enums::timingExprUGreaterThan:
171 ret = left_value > right_value;
173 case enums::timingExprSLessThan:
174 ret =
static_cast<int64_t
>(left_value) <
175 static_cast<int64_t
>(right_value);
177 case enums::timingExprSGreaterThan:
178 ret =
static_cast<int64_t
>(left_value) >
179 static_cast<int64_t
>(right_value);
181 case enums::timingExprAnd:
182 ret = (left_value != 0) && (right_value != 0);
184 case enums::timingExprOr:
185 ret = (left_value != 0) || (right_value != 0);
196 uint64_t cond_value =
cond->
eval(context);