| 959 | } |
| 960 | |
| 961 | expr expr::fshr(const expr &a, const expr &b, const expr &c) { |
| 962 | C2(a); |
| 963 | auto width = mkUInt(a.bits(), a.sort()); |
| 964 | expr c_mod_width = c.urem(width); |
| 965 | return a << (width - c_mod_width) | b.lshr(c_mod_width); |
| 966 | } |
| 967 | |
| 968 | /* |
| 969 | * FIXME: the fixed point functions are allowed to round towards zero |