47 inst(inst_), thread(thread_), let(let_)
52 unsigned int num_defns =
let->
defns.size();
89 uint64_t arg_value =
arg->
eval(context);
93 case enums::timingExprSizeInBits:
99 case enums::timingExprNot:
100 ret = arg_value != 0;
102 case enums::timingExprInvert:
105 case enums::timingExprSignExtend32To64:
106 ret =
static_cast<int64_t
>(
107 static_cast<int32_t
>(arg_value));
109 case enums::timingExprAbs:
110 if (
static_cast<int64_t
>(arg_value) < 0)
125 uint64_t left_value =
left->
eval(context);
126 uint64_t right_value =
right->
eval(context);
130 case enums::timingExprAdd:
131 ret = left_value + right_value;
133 case enums::timingExprSub:
134 ret = left_value - right_value;
136 case enums::timingExprUMul:
137 ret = left_value * right_value;
139 case enums::timingExprUDiv:
140 if (right_value != 0) {
141 ret = left_value / right_value;
144 case enums::timingExprUCeilDiv:
145 if (right_value != 0) {
146 ret = (left_value + (right_value - 1)) / right_value;
149 case enums::timingExprSMul:
150 ret =
static_cast<int64_t
>(left_value) *
151 static_cast<int64_t
>(right_value);
153 case enums::timingExprSDiv:
154 if (right_value != 0) {
155 ret =
static_cast<int64_t
>(left_value) /
156 static_cast<int64_t
>(right_value);
159 case enums::timingExprEqual:
160 ret = left_value == right_value;
162 case enums::timingExprNotEqual:
163 ret = left_value != right_value;
165 case enums::timingExprULessThan:
166 ret = left_value < right_value;
168 case enums::timingExprUGreaterThan:
169 ret = left_value > right_value;
171 case enums::timingExprSLessThan:
172 ret =
static_cast<int64_t
>(left_value) <
173 static_cast<int64_t
>(right_value);
175 case enums::timingExprSGreaterThan:
176 ret =
static_cast<int64_t
>(left_value) >
177 static_cast<int64_t
>(right_value);
179 case enums::timingExprAnd:
180 ret = (left_value != 0) && (right_value != 0);
182 case enums::timingExprOr:
183 ret = (left_value != 0) || (right_value != 0);
195 uint64_t cond_value =
cond->
eval(context);