【问题标题】:z3: how to convert a boolean sort into a bit vector sortz3:如何将布尔排序转换为位向量排序
【发布时间】:2012-02-17 14:06:17
【问题描述】:

我正在对 x86 指令进行符号解释。例如,对于 cmp 指令,比较的符号以及操作数是否相等都存储在 eflags 寄存器的两位中。

这是我的代码:

/* s1,s2 are source operands of sort bit-vector
 *       of 32 bits (defined somewhere else)
 * ctx is the context (defined somewhere else)
 * eflags is of sort bit-vector of 32 bits (initialized somewhere else)
 */

#define ZF_INDEX 6

Z3_ast ZF,OF,CF;              /* eflags bits */
ZF = Z3_mk_eq(ctx,s1,s2);
Z3_ast zf_mask = Z3_mk_rotate_left(ctx, ZF_INDEX ,Z3_mk_zero_ext(ctx,31,ZF));
eflags = Z3_mk_bvand(ctx,eflags, zf_mask);

问题是我在 z3 API 中找不到任何函数来将(假定的)布尔排序(在我的示例中为 ZF)转换为位向量(任意长度)。

我曾考虑在 ZF 上创建一个带有 ite 语句的函数,该语句将返回一个位向量,但我想知道执行此操作的 传统 方式。

谢谢,

海吉。

【问题讨论】:

    标签: z3


    【解决方案1】:

    您描述的ite 方法是传统方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 2015-02-01
      • 1970-01-01
      • 2020-04-16
      • 2013-05-16
      • 2018-06-27
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多