z3:如何将布尔类型转换为位向量排序

时间:2012-02-17 14:06:18

标签: z3

我正在对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语句的函数,它会返回一个位向量,但我想知道传统的这样做的方法。

谢谢,

Heyji。

1 个答案:

答案 0 :(得分:2)

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