47 inst(inst_), thread(thread_), let(let_)
52 unsigned int num_defns =
let->
defns.size();
95 uint64_t arg_value =
arg->
eval(context);
99 case enums::timingExprSizeInBits:
105 case enums::timingExprNot:
106 ret = arg_value != 0;
108 case enums::timingExprInvert:
111 case enums::timingExprSignExtend32To64:
112 ret =
static_cast<int64_t
>(
113 static_cast<int32_t
>(arg_value));
115 case enums::timingExprAbs:
116 if (
static_cast<int64_t
>(arg_value) < 0)
131 uint64_t left_value =
left->
eval(context);
132 uint64_t right_value =
right->
eval(context);
136 case enums::timingExprAdd:
137 ret = left_value + right_value;
139 case enums::timingExprSub:
140 ret = left_value - right_value;
142 case enums::timingExprUMul:
143 ret = left_value * right_value;
145 case enums::timingExprUDiv:
146 if (right_value != 0) {
147 ret = left_value / right_value;
150 case enums::timingExprUCeilDiv:
151 if (right_value != 0) {
152 ret = (left_value + (right_value - 1)) / right_value;
155 case enums::timingExprSMul:
156 ret =
static_cast<int64_t
>(left_value) *
157 static_cast<int64_t
>(right_value);
159 case enums::timingExprSDiv:
160 if (right_value != 0) {
161 ret =
static_cast<int64_t
>(left_value) /
162 static_cast<int64_t
>(right_value);
165 case enums::timingExprEqual:
166 ret = left_value == right_value;
168 case enums::timingExprNotEqual:
169 ret = left_value != right_value;
171 case enums::timingExprULessThan:
172 ret = left_value < right_value;
174 case enums::timingExprUGreaterThan:
175 ret = left_value > right_value;
177 case enums::timingExprSLessThan:
178 ret =
static_cast<int64_t
>(left_value) <
179 static_cast<int64_t
>(right_value);
181 case enums::timingExprSGreaterThan:
182 ret =
static_cast<int64_t
>(left_value) >
183 static_cast<int64_t
>(right_value);
185 case enums::timingExprAnd:
186 ret = (left_value != 0) && (right_value != 0);
188 case enums::timingExprOr:
189 ret = (left_value != 0) || (right_value != 0);
201 uint64_t cond_value =
cond->
eval(context);