Esempio n. 1
0
cvt_int32_to_double   = Function('cvt_int32_to_double', BitVecSort(32), BitVecSort(64))

# Uninterpreted ternary function declaration
vfmadd132_double = Function('vfmadd132_double', BitVecSort(64), BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfmadd132_single = Function('vfmadd132_single', BitVecSort(32), BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfmsub132_double = Function('vfmsub132_double', BitVecSort(64), BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfmsub132_single = Function('vfmsub132_single', BitVecSort(32), BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmadd132_double = Function('vfnmadd132_double', BitVecSort(64), BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmadd132_single = Function('vfnmadd132_single', BitVecSort(32), BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmsub132_double = Function('vfnmsub132_double', BitVecSort(64), BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32), BitVecSort(32), BitVecSort(32), BitVecSort(32))



print('' + 'Opcode:setnp_r8' + '')

R1 = BitVec('R1', 64)
CONST_BV_S15_V0 = BitVecVal(0, 15)
CONST_BV_S16_V0 = BitVecVal(0, 16)
CONST_BV_S8_V1 = BitVecVal(1, 8)
CONST_BV_S8_V0 = BitVecVal(0, 8)
CONST_BV_S16_V1 = BitVecVal(0x1, 16)

PK_R1 = ((If ((( Concat((CONST_BV_S15_V0), PF) == (CONST_BV_S16_V0) )  ) , ( Concat(Extract( R1.size() - 0 - 1, R1.size() - 56, R1  ) , (CONST_BV_S8_V1)) ) , ( Concat(Extract( R1.size() - 0 - 1, R1.size() - 56, R1  ) , (CONST_BV_S8_V0)) ) ))  )
PS_R1 = (Concat((Extract (63, 8, ((R1)))), (If( ((If( (pf),(CONST_BV_S16_V1),(CONST_BV_S16_V0))) == (CONST_BV_S16_V0)),(CONST_BV_S8_V1),(CONST_BV_S8_V0)))))
proverUtils.prove( PK_R1 == PS_R1 )

                                                R2.size() - 256, R2))) +
                 (CONST_BV_S65_V1)).size() - 1 - 1,
                ((Concat((CONST_BV_S1_V0),
                         ((CONST_BV_S64_V18446744073709551615)
                          ^ Extract(R1.size() - 192 - 1,
                                    R1.size() - 256, R1))) + Concat(
                                        (CONST_BV_S1_V0),
                                        Extract(R2.size() - 192 - 1,
                                                R2.size() - 256, R2))) +
                 (CONST_BV_S65_V1)).size() - 65, ((Concat(
                     (CONST_BV_S1_V0),
                     ((CONST_BV_S64_V18446744073709551615)
                      ^ Extract(R1.size() - 192 - 1,
                                R1.size() - 256, R1))) + Concat(
                                    (CONST_BV_S1_V0),
                                    Extract(R2.size() - 192 - 1,
                                            R2.size() - 256, R2))) +
                                                  (CONST_BV_S65_V1))))))
PS_R3 = (Concat((CONST_BV_S128_V0), (Concat(
    (Extract(63, 0, ((((Concat(
        (CONST_BV_S1_V0),
        ((Extract(127, 64, ((R1)))) ^ (CONST_BV_S64_Vffffffffffffffff)))) +
                       (CONST_BV_S65_V1)) + (Concat(
                           (CONST_BV_S1_V0), (Extract(127, 64, ((R2)))))))))),
    (Extract(63, 0, ((((Concat(
        (CONST_BV_S1_V0),
        ((Extract(63, 0, ((R1)))) ^ (CONST_BV_S64_Vffffffffffffffff)))) +
                       (CONST_BV_S65_V1)) + (Concat(
                           (CONST_BV_S1_V0), (Extract(63, 0, ((R2))))))))))))))
proverUtils.prove(PK_R3 == PS_R3)
Esempio n. 3
0
vfmsub132_single = Function('vfmsub132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfnmadd132_double = Function('vfnmadd132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmadd132_single = Function('vfnmadd132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmsub132_double = Function('vfnmsub132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

print('' + 'Opcode:cmovpw_r16_r16' + '')

R1 = BitVec('R1', 64)
R2 = BitVec('R2', 64)
CONST_BV_S63_V0 = BitVecVal(0, 63)
CONST_BV_S64_V0 = BitVecVal(0, 64)
CONST_BV_S64_V1 = BitVecVal(0x1, 64)

PK_R2 = ((If(((Concat((CONST_BV_S63_V0), PF) == (CONST_BV_S64_V0))), (R2),
             (Concat(Extract(R2.size() - 0 - 1,
                             R2.size() - 48, R2),
                     Extract(R1.size() - 48 - 1,
                             R1.size() - 64, R1))))))
PS_R2 = (Concat((Extract(63, 16, ((R2)))), (If(
    ((If((pf), (CONST_BV_S64_V1), (CONST_BV_S64_V0))) == (CONST_BV_S64_V0)),
    (Extract(15, 0, ((R2)))), (Extract(15, 0, ((R1))))))))
proverUtils.prove(PK_R2 == PS_R2)
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32), BitVecSort(32), BitVecSort(32), BitVecSort(32))



print('' + 'Opcode:incb_r8' + '')

R1 = BitVec('R1', 64)
CONST_BV_S8_V1 = BitVecVal(1, 8)
CONST_BV_S9_V1 = BitVecVal(1, 9)
CONST_BV_S1_V0 = BitVecVal(0, 1)
CONST_BV_S1_V1 = BitVecVal(1, 1)
CONST_BV_S8_V0 = BitVecVal(0, 8)
CONST_BV_S5_V1 = BitVecVal(0x1, 5)

PK_OF = ((If (( (And( ( (CONST_BV_S1_V0) == Extract( R1.size() - 56 - 1, R1.size() - 57, R1  )  ) ,  (Not  ( ( (CONST_BV_S1_V0) == Extract( ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 1 - 1, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 2, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) )  )  )  ))  ))  ) , ( (CONST_BV_S1_V1) ) , ( (CONST_BV_S1_V0) ) ))  ) == ONE1
PS_OF = (And(((False) == ((Extract (7, 7, ((R1)))) == (CONST_BV_S1_V1))), (Not(((False) == ((Extract (7, 7, (((CONST_BV_S9_V1) + (Concat((CONST_BV_S1_V0), (Extract (7, 0, ((R1)))))))))) == (CONST_BV_S1_V1)))))))
proverUtils.prove( PK_OF == PS_OF )

PK_R1 = (Concat(Extract( R1.size() - 0 - 1, R1.size() - 56, R1  ) , Extract( ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 1 - 1, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 9, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) )  ) ) )
PS_R1 = (Concat((Extract (63, 8, ((R1)))), (Extract (7, 0, (((CONST_BV_S9_V1) + (Concat((CONST_BV_S1_V0), (Extract (7, 0, ((R1))))))))))))
proverUtils.prove( PK_R1 == PS_R1 )

PK_SF = (Extract( ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 1 - 1, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 2, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) )  )  ) == ONE1
PS_SF = ((Extract (7, 7, (((CONST_BV_S9_V1) + (Concat((CONST_BV_S1_V0), (Extract (7, 0, ((R1)))))))))) == (CONST_BV_S1_V1))
proverUtils.prove( PK_SF == PS_SF )

PK_ZF = ((If ((( Extract( ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 1 - 1, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) ).size() - 9, ( (CONST_BV_S9_V1) + Concat((CONST_BV_S1_V0), Extract( R1.size() - 56 - 1, R1.size() - 64, R1  ) ) )  )  == (CONST_BV_S8_V0) )  ) , ( (CONST_BV_S1_V1) ) , ( (CONST_BV_S1_V0) ) ))    ) == ONE1
PS_ZF = ((Extract (7, 0, (((CONST_BV_S9_V1) + (Concat((CONST_BV_S1_V0), (Extract (7, 0, ((R1)))))))))) == (CONST_BV_S8_V0))
proverUtils.prove( PK_ZF == PS_ZF )

CONST_BV_S32_VNEG1 = BitVecVal(-1, 32)
CONST_BV_S1_V0 = BitVecVal(0, 1)
CONST_BV_S33_V1 = BitVecVal(1, 33)
CONST_BV_S32_V1 = BitVecVal(1, 32)
CONST_BV_S1_V1 = BitVecVal(1, 1)
CONST_BV_S16_V0 = BitVecVal(0, 16)
CONST_BV_S17_V65535 = BitVecVal(65535, 17)
CONST_BV_S32_V0 = BitVecVal(0, 32)
CONST_BV_S4_Vf = BitVecVal(0xf, 4)
CONST_BV_S32_Vffffffff = BitVecVal(0xffffffff, 32)
CONST_BV_S9_V0 = BitVecVal(0x0, 9)
CONST_BV_S9_Vff = BitVecVal(0xff, 9)

PK_CF = (Extract( ( Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) + Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) ).size() - 0 - 1, ( Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) + Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) ).size() - 1, ( Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) + Concat((CONST_BV_S1_V0), Extract( ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 9 - 1, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) ).size() - 17, ( Concat((CONST_BV_S16_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 0 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) + (CONST_BV_S17_V65535) )  ) ) )  )  ) == ONE1
PS_CF = ((Extract (8, 8, (((If( ((Extract (32, 32, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2)))))))))) == (CONST_BV_S1_V1)),(CONST_BV_S9_V0),(CONST_BV_S9_Vff))) + (If( ((Extract (32, 32, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2)))))))))) == (CONST_BV_S1_V1)),(CONST_BV_S9_V0),(CONST_BV_S9_Vff))))))) == (CONST_BV_S1_V1))
proverUtils.prove( PK_CF == PS_CF )

PK_OF = ((If (( (And( ( ( (CONST_BV_S1_V1) ^ Extract( R1.size() - 32 - 1, R1.size() - 33, R1  )  ) == Extract( R2.size() - 32 - 1, R2.size() - 33, R2  )  ) ,  (Not  ( ( ( (CONST_BV_S1_V1) ^ Extract( R1.size() - 32 - 1, R1.size() - 33, R1  )  ) == Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 2, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  )  )  ))  ))  ) , ( (CONST_BV_S1_V1) ) , ( (CONST_BV_S1_V0) ) ))  ) == ONE1
PS_OF = (And(((((Extract (31, 31, ((R1)))) ^ (CONST_BV_S1_V1)) == (CONST_BV_S1_V1)) == ((Extract (31, 31, ((R2)))) == (CONST_BV_S1_V1))), (Not(((((Extract (31, 31, ((R1)))) ^ (CONST_BV_S1_V1)) == (CONST_BV_S1_V1)) == ((Extract (31, 31, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2)))))))))) == (CONST_BV_S1_V1)))))))
proverUtils.prove( PK_OF == PS_OF )

PK_R2 = (Concat((CONST_BV_S32_V0), Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 33, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  ) ) )
PS_R2 = (Concat((CONST_BV_S32_V0), (Extract (31, 0, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2))))))))))))
proverUtils.prove( PK_R2 == PS_R2 )

PK_SF = (Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 2, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  )  ) == ONE1
PS_SF = ((Extract (31, 31, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2)))))))))) == (CONST_BV_S1_V1))
proverUtils.prove( PK_SF == PS_SF )

PK_ZF = ((If ((( Extract( ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 1 - 1, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) ).size() - 33, ( ( Concat((CONST_BV_S1_V0), ( (CONST_BV_S32_VNEG1) ^ Extract( R1.size() - 32 - 1, R1.size() - 64, R1  )  ) ) + Concat((CONST_BV_S1_V0), Extract( R2.size() - 32 - 1, R2.size() - 64, R2  ) ) ) + (CONST_BV_S33_V1) )  )  == (CONST_BV_S32_V0) )  ) , ( (CONST_BV_S1_V1) ) , ( (CONST_BV_S1_V0) ) ))    ) == ONE1
PS_ZF = ((Extract (31, 0, ((((Concat((CONST_BV_S1_V0), ((Extract (31, 0, ((R1)))) ^ (CONST_BV_S32_Vffffffff)))) + (CONST_BV_S33_V1)) + (Concat((CONST_BV_S1_V0), (Extract (31, 0, ((R2)))))))))) == (CONST_BV_S32_V0))
Esempio n. 6
0
vfmadd132_double = Function('vfmadd132_double', BitVecSort(64), BitVecSort(64),
                            BitVecSort(64), BitVecSort(64))
vfmadd132_single = Function('vfmadd132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfmsub132_double = Function('vfmsub132_double', BitVecSort(64), BitVecSort(64),
                            BitVecSort(64), BitVecSort(64))
vfmsub132_single = Function('vfmsub132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfnmadd132_double = Function('vfnmadd132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmadd132_single = Function('vfnmadd132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmsub132_double = Function('vfnmsub132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

print('' + 'Opcode:cltq' + '')

PK_RAX = (SignExt(
    64 - (Extract(RAX.size() - 32 - 1,
                  RAX.size() - 64, RAX)).size(),
    (Extract(RAX.size() - 32 - 1,
             RAX.size() - 64, RAX))))
PS_RAX = (SignExt(64 - (Extract(31, 0, ((RAX)))).size(),
                  (Extract(31, 0, ((RAX))))))
proverUtils.prove(PK_RAX == PS_RAX)
Esempio n. 7
0
                               BitVecSort(64))

# Uninterpreted ternary function declaration
vfmadd132_double = Function('vfmadd132_double', BitVecSort(64), BitVecSort(64),
                            BitVecSort(64), BitVecSort(64))
vfmadd132_single = Function('vfmadd132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfmsub132_double = Function('vfmsub132_double', BitVecSort(64), BitVecSort(64),
                            BitVecSort(64), BitVecSort(64))
vfmsub132_single = Function('vfmsub132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfnmadd132_double = Function('vfnmadd132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmadd132_single = Function('vfnmadd132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmsub132_double = Function('vfnmsub132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

print('' + 'Opcode:clc' + '')

CONST_BV_S1_V0 = BitVecVal(0, 1)

PK_CF = ((CONST_BV_S1_V0)) == ONE1
PS_CF = (False)
proverUtils.prove(PK_CF == PS_CF)
Esempio n. 8
0
                            BitVecSort(32), BitVecSort(32))

vfmsub132_double = Function('vfmsub132_double', BitVecSort(64), BitVecSort(64),
                            BitVecSort(64), BitVecSort(64))
vfmsub132_single = Function('vfmsub132_single', BitVecSort(32), BitVecSort(32),
                            BitVecSort(32), BitVecSort(32))

vfnmadd132_double = Function('vfnmadd132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmadd132_single = Function('vfnmadd132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

vfnmsub132_double = Function('vfnmsub132_double', BitVecSort(64),
                             BitVecSort(64), BitVecSort(64), BitVecSort(64))
vfnmsub132_single = Function('vfnmsub132_single', BitVecSort(32),
                             BitVecSort(32), BitVecSort(32), BitVecSort(32))

print('' + 'Opcode:cqto' + '')

CONST_BV_S1_V0 = BitVecVal(0x0, 1)
CONST_BV_S57_V0 = BitVecVal(0x0, 57)
CONST_BV_S8_V3f = BitVecVal(0x3f, 8)

PK_RDX = ((
    SignExt(64 - (RAX).size(),
            (RAX)) >> BitVecVal(63,
                                SignExt(64 - (RAX).size(), (RAX)).size())))
PS_RDX = (Extract(64, 1, (((Concat((RAX), (CONST_BV_S1_V0))) >> (Concat(
    (CONST_BV_S57_V0), (CONST_BV_S8_V3f)))))))
proverUtils.prove(PK_RDX == PS_RDX)