Skip to content

Instantly share code, notes, and snippets.

@mmcloughlin
Last active January 8, 2024 21:59
Show Gist options
  • Save mmcloughlin/943d338e0126cdbb62f3d205f2b1c289 to your computer and use it in GitHub Desktop.
Save mmcloughlin/943d338e0126cdbb62f3d205f2b1c289 to your computer and use it in GitHub Desktop.
(trace
(declare-const v0 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v1 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v2 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v3 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v4 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v5 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(declare-const v6 (_ BitVec 64)) ; register_accessors.sail 28:25 - 28:34
(read-reg |msrs| nil (_ vec v0 v1 v2 v3 v4 v5 v6))
(define-const v9 (bvor (bvand v0 #xfffffffffffff000) ((_ zero_extend 52) (bvor (bvand ((_ extract 11 0) v0) #xbff) #x400)))) ; 0:0 - 0:0
(write-reg |msrs| nil (_ vec v9 v1 v2 v3 v4 v5 v6))
(declare-const v10 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(declare-const v11 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(declare-const v12 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(declare-const v13 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(declare-const v14 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(declare-const v15 (_ BitVec 16)) ; main.sail 12:66 - 12:85
(read-reg |seg_hidden_attrs| nil (_ vec v10 v11 v12 v13 v14 v15))
(define-const v16 (bvor (bvand v11 #xfdff) #x0200)) ; 0:0 - 0:0
(write-reg |seg_hidden_attrs| nil (_ vec v10 v16 v12 v13 v14 v15))
(declare-const v24 (_ BitVec 64)) ; 0:0 - 0:0
(declare-const v33 (_ BitVec 64)) ; 0:0 - 0:0
(declare-const v34 (_ BitVec 64)) ; 0:0 - 0:0
(declare-const v35 (Array (_ BitVec 64) (_ BitVec 8))) ; 0:0 - 0:0
(assert (= v34 #x0000000000401000)) ; 0:0 - 0:0
(declare-const v36 (_ BitVec 24)) ; 0:0 - 0:0
(assert (and (and (bvule #x0000000000401000 v34) (bvult (bvadd ((_ zero_extend 65) v34) ((_ zero_extend 65) #x0000000000000003)) ((_ zero_extend 65) #x0000000000411000))) (= v36 (concat (select v35 (bvadd v34 #x0000000000000002)) (concat (select v35 (bvadd v34 #x0000000000000001)) (select v35 v34)))))) ; 0:0 - 0:0
(read-mem v36 (_ unit) v34 3)
(declare-const v37 (_ BitVec 24)) ; 0:0 - 0:0
(assert (= v37 #xea014c)) ; 0:0 - 0:0
(assert (= v37 v36)) ; 0:0 - 0:0
(read-reg |ms_reg| nil false)
(read-reg |fault_reg| nil false)
(read-reg |msrs| nil (_ vec v9 v1 v2 v3 v4 v5 v6))
(read-reg |seg_hidden_attrs| nil (_ vec v10 v16 v12 v13 v14 v15))
(assert (= ((_ extract 10 10) ((_ extract 11 0) v9)) #b1)) ; 0:0 - 0:0
(assert (= ((_ extract 9 9) v16) #b1)) ; 0:0 - 0:0
(define-enum |proc_mode| 5 (|Mode_64bit| |Mode_Compatibility| |Mode_Protected| |Mode_Real| |Mode_SMM|)) ; 0:0 - 0:0
(read-reg |rip| nil v34)
(define-const v49 ((_ extract 47 0) v34)) ; 0:0 - 0:0
(define-const v50 ((_ sign_extend 16) v49)) ; step.sail 92:94 - 92:125
(define-const v53 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) v50)))) ; ./segmentation.sail 262:20 - 262:57
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v53)) false (bvslt v53 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(define-const v59 ((_ sign_extend 64) v50)) ; prelude.sail 682:36 - 682:48
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v59)) false (bvslt v59 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(read-reg |app_view| nil true)
(define-const v68 ((_ zero_extend 12) ((_ sign_extend 4) (bvadd ((_ extract 47 0) v50) #x000000000000)))) ; /home/mbmcloug/.opam/4.10.0/share/sail/lib/vector.sail 141:76 - 141:100
(define-enum |read_kind| 13 (|Read_plain| |Read_reserve| |Read_acquire| |Read_exclusive| |Read_exclusive_acquire| |Read_stream| |Read_ifetch| |Read_RISCV_acquire| |Read_RISCV_strong_acquire| |Read_RISCV_reserved| |Read_RISCV_reserved_acquire| |Read_RISCV_reserved_strong_acquire| |Read_X86_locked|)) ; 0:0 - 0:0
(declare-const v83 (_ BitVec 8)) ; 0:0 - 0:0
(assert (and (and (bvule #x0000000000401000 v68) (bvult (bvadd ((_ zero_extend 65) v68) ((_ zero_extend 65) #x0000000000000001)) ((_ zero_extend 65) #x0000000000411000))) (= v83 (select v35 v68)))) ; 0:0 - 0:0
(read-mem v83 |Read_plain| v68 1)
(define-const v85 (bvor #x00 v83)) ; 0:0 - 0:0
(define-const v89 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 120) v85)))) ; ././././prefix_modrm_sib_decoding.sail 8:4 - 8:838
(assert (not (not (= ((_ sign_extend 64) (ite (= v89 #x00000000000000000000000000000000) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000001) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000002) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000003) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000004) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000005) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000006) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000007) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000008) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000009) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000000f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000010) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000011) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000012) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000013) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000014) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000015) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000016) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000017) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000018) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000019) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000001f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000020) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000021) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000022) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000023) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000024) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000025) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000026) #x0000000000000002 (ite (= v89 #x00000000000000000000000000000027) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000028) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000029) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000002a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000002b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000002c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000002d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000002e) #x0000000000000002 (ite (= v89 #x0000000000000000000000000000002f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000030) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000031) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000032) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000033) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000034) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000035) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000036) #x0000000000000002 (ite (= v89 #x00000000000000000000000000000037) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000038) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000039) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000003a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000003b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000003c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000003d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000003e) #x0000000000000002 (ite (= v89 #x0000000000000000000000000000003f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000040) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000041) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000042) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000043) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000044) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000045) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000046) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000047) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000048) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000049) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000004f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000050) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000051) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000052) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000053) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000054) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000055) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000056) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000057) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000058) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000059) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000005f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000060) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000061) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000062) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000063) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000064) #x0000000000000002 (ite (= v89 #x00000000000000000000000000000065) #x0000000000000002 (ite (= v89 #x00000000000000000000000000000066) #x0000000000000003 (ite (= v89 #x00000000000000000000000000000067) #x0000000000000004 (ite (= v89 #x00000000000000000000000000000068) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000069) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000006f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000070) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000071) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000072) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000073) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000074) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000075) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000076) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000077) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000078) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000079) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000007f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000080) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000081) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000082) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000083) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000084) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000085) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000086) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000087) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000088) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000089) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000008f) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000090) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000091) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000092) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000093) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000094) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000095) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000096) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000097) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000098) #x0000000000000000 (ite (= v89 #x00000000000000000000000000000099) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009a) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009b) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009c) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009d) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009e) #x0000000000000000 (ite (= v89 #x0000000000000000000000000000009f) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a0) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a2) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a3) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000a9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000aa) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ab) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ac) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ad) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ae) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000af) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b0) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b2) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b3) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000b9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ba) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000bb) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000bc) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000bd) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000be) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000bf) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c0) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c2) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c3) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000c9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ca) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000cb) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000cc) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000cd) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ce) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000cf) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d0) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d2) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d3) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000d9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000da) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000db) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000dc) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000dd) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000de) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000df) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e0) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e2) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e3) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000e9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ea) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000eb) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ec) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ed) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ee) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000ef) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f0) #x0000000000000001 (ite (= v89 #x000000000000000000000000000000f1) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f2) #x0000000000000001 (ite (= v89 #x000000000000000000000000000000f3) #x0000000000000001 (ite (= v89 #x000000000000000000000000000000f4) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f5) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f6) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f7) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f8) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000f9) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000fa) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000fb) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000fc) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000fd) #x0000000000000000 (ite (= v89 #x000000000000000000000000000000fe) #x0000000000000000 #x0000000000000000)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) #x00000000000000000000000000000000)))) ; 0:0 - 0:0
(assert (= ((_ extract 3 0) (bvashr ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 120) v85))) #x00000000000000000000000000000004)) #x4)) ; 0:0 - 0:0
(define-const v106 ((_ extract 48 0) ((_ sign_extend 64) (bvadd ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) v49)))) #x0000000000000001)))) ; 0:0 - 0:0
(define-const v109 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 79) v106)))) ; ././././decoding_and_spec_utils.sail 80:11 - 80:55
(assert (ite (not (bvsle #xffffffffffffffffffff800000000000 v109)) false (bvslt v109 #x00000000000000000000800000000000))) ; 0:0 - 0:0
(define-const v115 ((_ sign_extend 16) ((_ extract 47 0) v106))) ; step.sail 92:94 - 92:125
(define-const v118 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) v115)))) ; ./segmentation.sail 262:20 - 262:57
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v118)) false (bvslt v118 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(define-const v124 ((_ sign_extend 64) v115)) ; prelude.sail 682:36 - 682:48
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v124)) false (bvslt v124 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(define-const v133 ((_ zero_extend 12) ((_ sign_extend 4) (bvadd ((_ extract 47 0) v115) #x000000000000)))) ; /home/mbmcloug/.opam/4.10.0/share/sail/lib/vector.sail 141:76 - 141:100
(declare-const v134 (_ BitVec 8)) ; 0:0 - 0:0
(assert (and (and (bvule #x0000000000401000 v133) (bvult (bvadd ((_ zero_extend 65) v133) ((_ zero_extend 65) #x0000000000000001)) ((_ zero_extend 65) #x0000000000411000))) (= v134 (select v35 v133)))) ; 0:0 - 0:0
(read-mem v134 |Read_plain| v133 1)
(define-const v136 (bvor #x00 v134)) ; 0:0 - 0:0
(define-const v140 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 120) v136)))) ; ././././prefix_modrm_sib_decoding.sail 8:4 - 8:838
(assert (not (not (= ((_ sign_extend 64) (ite (= v140 #x00000000000000000000000000000000) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000001) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000002) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000003) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000004) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000005) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000006) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000007) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000008) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000009) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000000f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000010) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000011) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000012) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000013) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000014) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000015) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000016) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000017) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000018) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000019) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000001f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000020) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000021) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000022) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000023) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000024) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000025) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000026) #x0000000000000002 (ite (= v140 #x00000000000000000000000000000027) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000028) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000029) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000002a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000002b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000002c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000002d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000002e) #x0000000000000002 (ite (= v140 #x0000000000000000000000000000002f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000030) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000031) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000032) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000033) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000034) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000035) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000036) #x0000000000000002 (ite (= v140 #x00000000000000000000000000000037) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000038) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000039) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000003a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000003b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000003c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000003d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000003e) #x0000000000000002 (ite (= v140 #x0000000000000000000000000000003f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000040) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000041) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000042) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000043) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000044) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000045) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000046) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000047) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000048) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000049) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000004f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000050) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000051) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000052) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000053) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000054) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000055) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000056) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000057) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000058) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000059) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000005f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000060) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000061) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000062) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000063) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000064) #x0000000000000002 (ite (= v140 #x00000000000000000000000000000065) #x0000000000000002 (ite (= v140 #x00000000000000000000000000000066) #x0000000000000003 (ite (= v140 #x00000000000000000000000000000067) #x0000000000000004 (ite (= v140 #x00000000000000000000000000000068) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000069) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000006f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000070) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000071) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000072) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000073) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000074) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000075) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000076) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000077) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000078) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000079) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000007f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000080) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000081) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000082) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000083) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000084) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000085) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000086) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000087) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000088) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000089) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000008f) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000090) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000091) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000092) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000093) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000094) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000095) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000096) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000097) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000098) #x0000000000000000 (ite (= v140 #x00000000000000000000000000000099) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009a) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009b) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009c) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009d) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009e) #x0000000000000000 (ite (= v140 #x0000000000000000000000000000009f) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a0) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a2) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a3) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000a9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000aa) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ab) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ac) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ad) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ae) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000af) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b0) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b2) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b3) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000b9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ba) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000bb) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000bc) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000bd) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000be) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000bf) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c0) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c2) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c3) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000c9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ca) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000cb) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000cc) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000cd) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ce) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000cf) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d0) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d2) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d3) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000d9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000da) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000db) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000dc) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000dd) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000de) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000df) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e0) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e2) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e3) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000e9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ea) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000eb) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ec) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ed) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ee) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000ef) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f0) #x0000000000000001 (ite (= v140 #x000000000000000000000000000000f1) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f2) #x0000000000000001 (ite (= v140 #x000000000000000000000000000000f3) #x0000000000000001 (ite (= v140 #x000000000000000000000000000000f4) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f5) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f6) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f7) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f8) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000f9) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000fa) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000fb) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000fc) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000fd) #x0000000000000000 (ite (= v140 #x000000000000000000000000000000fe) #x0000000000000000 #x0000000000000000)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) #x00000000000000000000000000000000)))) ; 0:0 - 0:0
(assert (not (= ((_ extract 3 0) (bvashr ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 120) v136))) #x00000000000000000000000000000004)) #x4))) ; 0:0 - 0:0
(define-const v152 (bvor (bvand (bvor #x0000000000000 (bvshl ((_ zero_extend 44) v136) #x000000000002c)) #xffffffffffff0) #x0000000000001)) ; 0:0 - 0:0
(define-const v153 ((_ extract 51 44) v152)) ; 1248:0 - 0:0
(define-const v171 ((_ extract 48 0) ((_ sign_extend 64) (bvadd ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) v49)))) ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) ((_ extract 47 0) ((_ sign_extend 64) (bvadd #x0000000000000001 ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) ((_ extract 3 0) v152)))))))))))))))) ; 0:0 - 0:0
(define-const v174 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 79) v171)))) ; ././././decoding_and_spec_utils.sail 80:11 - 80:55
(assert (ite (not (bvsle #xffffffffffffffffffff800000000000 v174)) false (bvslt v174 #x00000000000000000000800000000000))) ; 0:0 - 0:0
(define-const v179 ((_ extract 47 0) v171)) ; 0:0 - 0:0
(assert (not (= v153 #xc5))) ; 0:0 - 0:0
(define-const v181 (= v153 #xc4)) ; step.sail 2427:63 - 2427:91
(assert (not v181)) ; 0:0 - 0:0
(assert (not v181)) ; 0:0 - 0:0
(define-const v182 (= v153 #x62)) ; step.sail 2440:37 - 2440:61
(assert (not v182)) ; 0:0 - 0:0
(assert (not v182)) ; 0:0 - 0:0
(define-const v185 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 120) v153)))) ; ././././prefix_modrm_sib_decoding.sail 75:4 - 75:1777
(define-const v186 (ite (= v185 #x00000000000000000000000000000000) true (ite (= v185 #x00000000000000000000000000000001) true (ite (= v185 #x00000000000000000000000000000002) true (ite (= v185 #x00000000000000000000000000000003) true (ite (= v185 #x00000000000000000000000000000004) false (ite (= v185 #x00000000000000000000000000000005) false (ite (= v185 #x00000000000000000000000000000006) false (ite (= v185 #x00000000000000000000000000000007) false (ite (= v185 #x00000000000000000000000000000008) true (ite (= v185 #x00000000000000000000000000000009) true (ite (= v185 #x0000000000000000000000000000000a) true (ite (= v185 #x0000000000000000000000000000000b) true (ite (= v185 #x0000000000000000000000000000000c) false (ite (= v185 #x0000000000000000000000000000000d) false (ite (= v185 #x0000000000000000000000000000000e) false (ite (= v185 #x0000000000000000000000000000000f) false (ite (= v185 #x00000000000000000000000000000010) true (ite (= v185 #x00000000000000000000000000000011) true (ite (= v185 #x00000000000000000000000000000012) true (ite (= v185 #x00000000000000000000000000000013) true (ite (= v185 #x00000000000000000000000000000014) false (ite (= v185 #x00000000000000000000000000000015) false (ite (= v185 #x00000000000000000000000000000016) false (ite (= v185 #x00000000000000000000000000000017) false (ite (= v185 #x00000000000000000000000000000018) true (ite (= v185 #x00000000000000000000000000000019) true (ite (= v185 #x0000000000000000000000000000001a) true (ite (= v185 #x0000000000000000000000000000001b) true (ite (= v185 #x0000000000000000000000000000001c) false (ite (= v185 #x0000000000000000000000000000001d) false (ite (= v185 #x0000000000000000000000000000001e) false (ite (= v185 #x0000000000000000000000000000001f) false (ite (= v185 #x00000000000000000000000000000020) true (ite (= v185 #x00000000000000000000000000000021) true (ite (= v185 #x00000000000000000000000000000022) true (ite (= v185 #x00000000000000000000000000000023) true (ite (= v185 #x00000000000000000000000000000024) false (ite (= v185 #x00000000000000000000000000000025) false (ite (= v185 #x00000000000000000000000000000026) false (ite (= v185 #x00000000000000000000000000000027) false (ite (= v185 #x00000000000000000000000000000028) true (ite (= v185 #x00000000000000000000000000000029) true (ite (= v185 #x0000000000000000000000000000002a) true (ite (= v185 #x0000000000000000000000000000002b) true (ite (= v185 #x0000000000000000000000000000002c) false (ite (= v185 #x0000000000000000000000000000002d) false (ite (= v185 #x0000000000000000000000000000002e) false (ite (= v185 #x0000000000000000000000000000002f) false (ite (= v185 #x00000000000000000000000000000030) true (ite (= v185 #x00000000000000000000000000000031) true (ite (= v185 #x00000000000000000000000000000032) true (ite (= v185 #x00000000000000000000000000000033) true (ite (= v185 #x00000000000000000000000000000034) false (ite (= v185 #x00000000000000000000000000000035) false (ite (= v185 #x00000000000000000000000000000036) false (ite (= v185 #x00000000000000000000000000000037) false (ite (= v185 #x00000000000000000000000000000038) true (ite (= v185 #x00000000000000000000000000000039) true (ite (= v185 #x0000000000000000000000000000003a) true (ite (= v185 #x0000000000000000000000000000003b) true (ite (= v185 #x0000000000000000000000000000003c) false (ite (= v185 #x0000000000000000000000000000003d) false (ite (= v185 #x0000000000000000000000000000003e) false (ite (= v185 #x0000000000000000000000000000003f) false (ite (= v185 #x00000000000000000000000000000040) false (ite (= v185 #x00000000000000000000000000000041) false (ite (= v185 #x00000000000000000000000000000042) false (ite (= v185 #x00000000000000000000000000000043) false (ite (= v185 #x00000000000000000000000000000044) false (ite (= v185 #x00000000000000000000000000000045) false (ite (= v185 #x00000000000000000000000000000046) false (ite (= v185 #x00000000000000000000000000000047) false (ite (= v185 #x00000000000000000000000000000048) false (ite (= v185 #x00000000000000000000000000000049) false (ite (= v185 #x0000000000000000000000000000004a) false (ite (= v185 #x0000000000000000000000000000004b) false (ite (= v185 #x0000000000000000000000000000004c) false (ite (= v185 #x0000000000000000000000000000004d) false (ite (= v185 #x0000000000000000000000000000004e) false (ite (= v185 #x0000000000000000000000000000004f) false (ite (= v185 #x00000000000000000000000000000050) false (ite (= v185 #x00000000000000000000000000000051) false (ite (= v185 #x00000000000000000000000000000052) false (ite (= v185 #x00000000000000000000000000000053) false (ite (= v185 #x00000000000000000000000000000054) false (ite (= v185 #x00000000000000000000000000000055) false (ite (= v185 #x00000000000000000000000000000056) false (ite (= v185 #x00000000000000000000000000000057) false (ite (= v185 #x00000000000000000000000000000058) false (ite (= v185 #x00000000000000000000000000000059) false (ite (= v185 #x0000000000000000000000000000005a) false (ite (= v185 #x0000000000000000000000000000005b) false (ite (= v185 #x0000000000000000000000000000005c) false (ite (= v185 #x0000000000000000000000000000005d) false (ite (= v185 #x0000000000000000000000000000005e) false (ite (= v185 #x0000000000000000000000000000005f) false (ite (= v185 #x00000000000000000000000000000060) false (ite (= v185 #x00000000000000000000000000000061) false (ite (= v185 #x00000000000000000000000000000062) false (ite (= v185 #x00000000000000000000000000000063) true (ite (= v185 #x00000000000000000000000000000064) false (ite (= v185 #x00000000000000000000000000000065) false (ite (= v185 #x00000000000000000000000000000066) false (ite (= v185 #x00000000000000000000000000000067) false (ite (= v185 #x00000000000000000000000000000068) false (ite (= v185 #x00000000000000000000000000000069) true (ite (= v185 #x0000000000000000000000000000006a) false (ite (= v185 #x0000000000000000000000000000006b) true (ite (= v185 #x0000000000000000000000000000006c) false (ite (= v185 #x0000000000000000000000000000006d) false (ite (= v185 #x0000000000000000000000000000006e) false (ite (= v185 #x0000000000000000000000000000006f) false (ite (= v185 #x00000000000000000000000000000070) false (ite (= v185 #x00000000000000000000000000000071) false (ite (= v185 #x00000000000000000000000000000072) false (ite (= v185 #x00000000000000000000000000000073) false (ite (= v185 #x00000000000000000000000000000074) false (ite (= v185 #x00000000000000000000000000000075) false (ite (= v185 #x00000000000000000000000000000076) false (ite (= v185 #x00000000000000000000000000000077) false (ite (= v185 #x00000000000000000000000000000078) false (ite (= v185 #x00000000000000000000000000000079) false (ite (= v185 #x0000000000000000000000000000007a) false (ite (= v185 #x0000000000000000000000000000007b) false (ite (= v185 #x0000000000000000000000000000007c) false (ite (= v185 #x0000000000000000000000000000007d) false (ite (= v185 #x0000000000000000000000000000007e) false (ite (= v185 #x0000000000000000000000000000007f) false (ite (= v185 #x00000000000000000000000000000080) true (ite (= v185 #x00000000000000000000000000000081) true (ite (= v185 #x00000000000000000000000000000082) false (ite (= v185 #x00000000000000000000000000000083) true (ite (= v185 #x00000000000000000000000000000084) true (ite (= v185 #x00000000000000000000000000000085) true (ite (= v185 #x00000000000000000000000000000086) true (ite (= v185 #x00000000000000000000000000000087) true (ite (= v185 #x00000000000000000000000000000088) true (ite (= v185 #x00000000000000000000000000000089) true (ite (= v185 #x0000000000000000000000000000008a) true (ite (= v185 #x0000000000000000000000000000008b) true (ite (= v185 #x0000000000000000000000000000008c) true (ite (= v185 #x0000000000000000000000000000008d) true (ite (= v185 #x0000000000000000000000000000008e) true (ite (= v185 #x0000000000000000000000000000008f) true (ite (= v185 #x00000000000000000000000000000090) false (ite (= v185 #x00000000000000000000000000000091) false (ite (= v185 #x00000000000000000000000000000092) false (ite (= v185 #x00000000000000000000000000000093) false (ite (= v185 #x00000000000000000000000000000094) false (ite (= v185 #x00000000000000000000000000000095) false (ite (= v185 #x00000000000000000000000000000096) false (ite (= v185 #x00000000000000000000000000000097) false (ite (= v185 #x00000000000000000000000000000098) false (ite (= v185 #x00000000000000000000000000000099) false (ite (= v185 #x0000000000000000000000000000009a) false (ite (= v185 #x0000000000000000000000000000009b) false (ite (= v185 #x0000000000000000000000000000009c) false (ite (= v185 #x0000000000000000000000000000009d) false (ite (= v185 #x0000000000000000000000000000009e) false (ite (= v185 #x0000000000000000000000000000009f) false (ite (= v185 #x000000000000000000000000000000a0) false (ite (= v185 #x000000000000000000000000000000a1) false (ite (= v185 #x000000000000000000000000000000a2) false (ite (= v185 #x000000000000000000000000000000a3) false (ite (= v185 #x000000000000000000000000000000a4) false (ite (= v185 #x000000000000000000000000000000a5) false (ite (= v185 #x000000000000000000000000000000a6) false (ite (= v185 #x000000000000000000000000000000a7) false (ite (= v185 #x000000000000000000000000000000a8) false (ite (= v185 #x000000000000000000000000000000a9) false (ite (= v185 #x000000000000000000000000000000aa) false (ite (= v185 #x000000000000000000000000000000ab) false (ite (= v185 #x000000000000000000000000000000ac) false (ite (= v185 #x000000000000000000000000000000ad) false (ite (= v185 #x000000000000000000000000000000ae) false (ite (= v185 #x000000000000000000000000000000af) false (ite (= v185 #x000000000000000000000000000000b0) false (ite (= v185 #x000000000000000000000000000000b1) false (ite (= v185 #x000000000000000000000000000000b2) false (ite (= v185 #x000000000000000000000000000000b3) false (ite (= v185 #x000000000000000000000000000000b4) false (ite (= v185 #x000000000000000000000000000000b5) false (ite (= v185 #x000000000000000000000000000000b6) false (ite (= v185 #x000000000000000000000000000000b7) false (ite (= v185 #x000000000000000000000000000000b8) false (ite (= v185 #x000000000000000000000000000000b9) false (ite (= v185 #x000000000000000000000000000000ba) false (ite (= v185 #x000000000000000000000000000000bb) false (ite (= v185 #x000000000000000000000000000000bc) false (ite (= v185 #x000000000000000000000000000000bd) false (ite (= v185 #x000000000000000000000000000000be) false (ite (= v185 #x000000000000000000000000000000bf) false (ite (= v185 #x000000000000000000000000000000c0) true (ite (= v185 #x000000000000000000000000000000c1) true (ite (= v185 #x000000000000000000000000000000c2) false (ite (= v185 #x000000000000000000000000000000c3) false (ite (= v185 #x000000000000000000000000000000c4) false (ite (= v185 #x000000000000000000000000000000c5) false (ite (= v185 #x000000000000000000000000000000c6) true (ite (= v185 #x000000000000000000000000000000c7) true (ite (= v185 #x000000000000000000000000000000c8) false (ite (= v185 #x000000000000000000000000000000c9) false (ite (= v185 #x000000000000000000000000000000ca) false (ite (= v185 #x000000000000000000000000000000cb) false (ite (= v185 #x000000000000000000000000000000cc) false (ite (= v185 #x000000000000000000000000000000cd) false (ite (= v185 #x000000000000000000000000000000ce) false (ite (= v185 #x000000000000000000000000000000cf) false (ite (= v185 #x000000000000000000000000000000d0) true (ite (= v185 #x000000000000000000000000000000d1) true (ite (= v185 #x000000000000000000000000000000d2) true (ite (= v185 #x000000000000000000000000000000d3) true (ite (= v185 #x000000000000000000000000000000d4) false (ite (= v185 #x000000000000000000000000000000d5) false (ite (= v185 #x000000000000000000000000000000d6) false (ite (= v185 #x000000000000000000000000000000d7) false (ite (= v185 #x000000000000000000000000000000d8) false (ite (= v185 #x000000000000000000000000000000d9) false (ite (= v185 #x000000000000000000000000000000da) false (ite (= v185 #x000000000000000000000000000000db) false (ite (= v185 #x000000000000000000000000000000dc) false (ite (= v185 #x000000000000000000000000000000dd) false (ite (= v185 #x000000000000000000000000000000de) false (ite (= v185 #x000000000000000000000000000000df) false (ite (= v185 #x000000000000000000000000000000e0) false (ite (= v185 #x000000000000000000000000000000e1) false (ite (= v185 #x000000000000000000000000000000e2) false (ite (= v185 #x000000000000000000000000000000e3) false (ite (= v185 #x000000000000000000000000000000e4) false (ite (= v185 #x000000000000000000000000000000e5) false (ite (= v185 #x000000000000000000000000000000e6) false (ite (= v185 #x000000000000000000000000000000e7) false (ite (= v185 #x000000000000000000000000000000e8) false (ite (= v185 #x000000000000000000000000000000e9) false (ite (= v185 #x000000000000000000000000000000ea) false (ite (= v185 #x000000000000000000000000000000eb) false (ite (= v185 #x000000000000000000000000000000ec) false (ite (= v185 #x000000000000000000000000000000ed) false (ite (= v185 #x000000000000000000000000000000ee) false (ite (= v185 #x000000000000000000000000000000ef) false (ite (= v185 #x000000000000000000000000000000f0) false (ite (= v185 #x000000000000000000000000000000f1) false (ite (= v185 #x000000000000000000000000000000f2) false (ite (= v185 #x000000000000000000000000000000f3) false (ite (= v185 #x000000000000000000000000000000f4) false (ite (= v185 #x000000000000000000000000000000f5) false (ite (= v185 #x000000000000000000000000000000f6) true (ite (= v185 #x000000000000000000000000000000f7) true (ite (= v185 #x000000000000000000000000000000f8) false (ite (= v185 #x000000000000000000000000000000f9) false (ite (= v185 #x000000000000000000000000000000fa) false (ite (= v185 #x000000000000000000000000000000fb) false (ite (= v185 #x000000000000000000000000000000fc) false (ite (= v185 #x000000000000000000000000000000fd) false (ite (= v185 #x000000000000000000000000000000fe) true true)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ; 0:0 - 0:0
(assert v186) ; 0:0 - 0:0
(assert (not v181)) ; 0:0 - 0:0
(assert (not v182)) ; 0:0 - 0:0
(assert (not (= #x67 ((_ extract 43 36) v152)))) ; 0:0 - 0:0
(define-const v189 ((_ sign_extend 16) v179)) ; step.sail 2459:103 - 2459:133
(define-const v192 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) v189)))) ; ./segmentation.sail 262:20 - 262:57
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v192)) false (bvslt v192 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(define-const v198 ((_ sign_extend 64) v189)) ; prelude.sail 682:36 - 682:48
(assert (not (not (ite (not (bvsle #xffffffffffffffffffff800000000000 v198)) false (bvslt v198 #x00000000000000000000800000000000))))) ; 0:0 - 0:0
(define-const v207 ((_ zero_extend 12) ((_ sign_extend 4) (bvadd ((_ extract 47 0) v189) #x000000000000)))) ; /home/mbmcloug/.opam/4.10.0/share/sail/lib/vector.sail 141:76 - 141:100
(declare-const v208 (_ BitVec 8)) ; 0:0 - 0:0
(assert (and (and (bvule #x0000000000401000 v207) (bvult (bvadd ((_ zero_extend 65) v207) ((_ zero_extend 65) #x0000000000000001)) ((_ zero_extend 65) #x0000000000411000))) (= v208 (select v35 v207)))) ; 0:0 - 0:0
(read-mem v208 |Read_plain| v207 1)
(define-const v210 (bvor #x00 v208)) ; 0:0 - 0:0
(assert v186) ; 0:0 - 0:0
(define-const v217 ((_ extract 48 0) ((_ sign_extend 64) (bvadd ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) v179)))) #x0000000000000001)))) ; 0:0 - 0:0
(define-const v220 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 79) v217)))) ; ././././decoding_and_spec_utils.sail 80:11 - 80:55
(assert (ite (not (bvsle #xffffffffffffffffffff800000000000 v220)) false (bvslt v220 #x00000000000000000000800000000000))) ; 0:0 - 0:0
(assert v186) ; 0:0 - 0:0
(assert (not (= #x67 ((_ extract 43 36) v152)))) ; 0:0 - 0:0
(assert (not (= ((_ extract 2 0) v210) #b100))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v153) #x00000000000000000000000000000000))) ; 0:0 - 0:0
(assert (not (not (= ((_ zero_extend 120) v153) #x00000000000000000000000000000001)))) ; 0:0 - 0:0
(assert (= ((_ extract 7 6) v210) #b11)) ; 0:0 - 0:0
(assert (not (= #xf0 ((_ extract 11 4) v152)))) ; 0:0 - 0:0
(define-const v243 ((_ extract 2 0) v210)) ; 392:0 - 0:0
(define-const v244 ((_ extract 7 6) v210)) ; 381:0 - 0:0
(assert (not (= #b0 (bvand #b1 ((_ extract 0 0) v153))))) ; 0:0 - 0:0
(assert (= ((_ extract 0 0) (bvlshr v85 #x03)) #b1)) ; 0:0 - 0:0
(assert (= ((_ extract 0 0) (bvlshr v85 #x02)) #b1)) ; 0:0 - 0:0
(define-const v260 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) (bvor #x8 ((_ zero_extend 1) ((_ extract 5 3) v210))))))) ; ./././././register_readers_and_writers.sail 210:4 - 210:23
(assert (bvsle #x00000000000000000000000000000000 v260)) ; 0:0 - 0:0
(assert (bvslt v260 #x00000000000000000000000000000010)) ; 0:0 - 0:0
(define-const v263 ((_ extract 63 0) v260)) ; register_accessors.sail 7:20 - 7:36
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000000))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000001))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000002))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000003))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000004))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000005))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000006))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000007))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000008))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x00000000000000000000000000000009))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x0000000000000000000000000000000a))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x0000000000000000000000000000000b))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v263) #x0000000000000000000000000000000c))) ; 0:0 - 0:0
(assert (not (not (= ((_ sign_extend 64) v263) #x0000000000000000000000000000000d)))) ; 0:0 - 0:0
(read-reg |r13| nil v24)
(define-const v306 ((_ extract 27 20) v152)) ; 1335:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x0000000000000000000000000000002e))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x00000000000000000000000000000036))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x0000000000000000000000000000003e))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x00000000000000000000000000000026))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x00000000000000000000000000000064))) ; 0:0 - 0:0
(assert (not (= ((_ zero_extend 120) v306) #x00000000000000000000000000000065))) ; 0:0 - 0:0
(assert (not (= #x67 ((_ extract 43 36) v152)))) ; 0:0 - 0:0
(assert (not (= v244 #b01))) ; 0:0 - 0:0
(assert (not (= v244 #b10))) ; 0:0 - 0:0
(assert (not (not (= v244 #b11)))) ; 0:0 - 0:0
(assert (= v244 #b11)) ; 0:0 - 0:0
(assert (= v244 #b11)) ; 0:0 - 0:0
(assert (not (= ((_ extract 0 0) (bvlshr v85 #x00)) #b1))) ; 0:0 - 0:0
(define-const v340 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) ((_ zero_extend 1) v243))))) ; ./././././register_readers_and_writers.sail 210:4 - 210:23
(assert (bvsle #x00000000000000000000000000000000 v340)) ; 0:0 - 0:0
(assert (bvslt v340 #x00000000000000000000000000000010)) ; 0:0 - 0:0
(define-const v343 ((_ extract 63 0) v340)) ; register_accessors.sail 7:20 - 7:36
(assert (not (= ((_ sign_extend 64) v343) #x00000000000000000000000000000000))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v343) #x00000000000000000000000000000001))) ; 0:0 - 0:0
(assert (not (not (= ((_ sign_extend 64) v343) #x00000000000000000000000000000002)))) ; 0:0 - 0:0
(read-reg |rdx| nil v33)
(define-const v359 ((_ extract 48 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) ((_ extract 47 0) v217)))))))) ; 0:0 - 0:0
(define-const v362 ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 79) v359)))) ; ././././decoding_and_spec_utils.sail 80:11 - 80:55
(assert (ite (not (bvsle #xffffffffffffffffffff800000000000 v362)) false (bvslt v362 #x00000000000000000000800000000000))) ; 0:0 - 0:0
(define-const v367 ((_ extract 47 0) v359)) ; 0:0 - 0:0
(assert (not (bvslt #x0000000000000000000000000000000f ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 78) ((_ extract 49 0) ((_ sign_extend 64) (bvsub ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 79) ((_ extract 48 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) ((_ extract 47 0) ((_ sign_extend 80) v367)))))))))))) ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 80) ((_ extract 47 0) ((_ sign_extend 80) v49))))))))))))))) ; 0:0 - 0:0
(declare-const v392 (_ BitVec 32)) ; ./././arith_and_logic.sail 43:36 - 43:42
(read-reg |rflags| nil (_ struct (|bits| v392)))
(define-const v393 ((_ extract 63 0) ((_ zero_extend 64) v33))) ; 0:0 - 0:0
(define-const v397 (bvadd ((_ extract 64 0) ((_ zero_extend 64) v393)) ((_ extract 64 0) ((_ zero_extend 64) v24)))) ; 0:0 - 0:0
(define-const v406 ((_ extract 63 0) v397)) ; 0:0 - 0:0
(define-const v407 ((_ zero_extend 63) v397)) ; ././././././rflags_spec.sail 38:46 - 38:66
(assert (bvsle #x00000000000000000000000000000000 v407)) ; 0:0 - 0:0
(define-const v410 (not (bvslt v407 #x00000000000000010000000000000000))) ; ././././././rflags_spec.sail 38:17 - 38:68
(define-const v418 ((_ extract 7 0) v406)) ; 0:0 - 0:0
(define-const v471 (not (ite (not (not (= (bvadd ((_ extract 0 0) (bvadd (bvadd (bvadd (bvadd (bvadd (bvadd ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x00)))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x01))))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x02))))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x03))))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x04))))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x05))))))) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x06)))))))) ((_ extract 0 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 127) (bvor #b0 ((_ extract 0 0) (bvlshr v418 #x07)))))))) #b1))) true false))) ; ../test-generation-patches/logcount_alt.sail 35:17 - 35:69
(define-const v494 (bvslt #x0000000000000000000000000000000f ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 123) ((_ extract 4 0) ((_ sign_extend 64) (bvadd ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) ((_ extract 3 0) v393))))) ((_ extract 63 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) ((_ extract 3 0) v24))))))))))))) ; ././././././rflags_spec.sail 205:36 - 205:54
(define-const v507 ((_ sign_extend 63) (bvadd ((_ extract 64 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) v393)))) ((_ extract 64 0) ((_ sign_extend 64) ((_ extract 63 0) ((_ sign_extend 64) v24))))))) ; ././././././rflags_spec.sail 76:44 - 76:69
(define-const v512 (not (ite (not (bvsle #xffffffffffffffff8000000000000000 v507)) false (bvslt v507 #x00000000000000008000000000000000)))) ; ././././././rflags_spec.sail 76:17 - 76:71
(define-const v525 (bvor (bvand (bvor (bvand (bvor (bvand (bvor (bvand (bvor (bvand (bvor (bvand v392 #xfffffffe) ((_ zero_extend 31) (ite (and (not (= v410 true)) (not (not (= v410 false)))) #b0 #b1))) #xfffffffb) (bvshl ((_ zero_extend 31) (ite (and (not (= v471 true)) (not (not (= v471 false)))) #b0 #b1)) #x00000002)) #xffffffef) (bvshl ((_ zero_extend 31) (ite (and (not (= v494 true)) (not (not (= v494 false)))) #b0 #b1)) #x00000004)) #xffffffbf) (bvshl ((_ zero_extend 31) (ite (not (= ((_ zero_extend 64) v406) #x00000000000000000000000000000000)) #b0 #b1)) #x00000006)) #xffffff7f) (bvshl ((_ zero_extend 31) ((_ extract 63 63) v406)) #x00000007)) #xfffff7ff) (bvshl ((_ zero_extend 31) (ite (and (not (= v512 true)) (not (not (= v512 false)))) #b0 #b1)) #x0000000b))) ; 0:0 - 0:0
(assert (= v244 #b11)) ; 0:0 - 0:0
(assert (not (= ((_ extract 0 0) (bvlshr v85 #x00)) #b1))) ; 0:0 - 0:0
(define-const v531 ((_ extract 63 0) ((_ zero_extend 64) v406))) ; 0:0 - 0:0
(define-const v534 ((_ sign_extend 64) ((_ extract 63 0) ((_ zero_extend 124) ((_ zero_extend 1) v243))))) ; ./././././register_readers_and_writers.sail 218:4 - 218:38
(assert (bvsle #x00000000000000000000000000000000 v534)) ; 0:0 - 0:0
(assert (bvslt v534 #x00000000000000000000000000000010)) ; 0:0 - 0:0
(define-const v537 ((_ extract 63 0) v534)) ; register_accessors.sail 13:4 - 13:55
(assert (not (= ((_ sign_extend 64) v537) #x00000000000000000000000000000000))) ; 0:0 - 0:0
(assert (not (= ((_ sign_extend 64) v537) #x00000000000000000000000000000001))) ; 0:0 - 0:0
(assert (not (not (= ((_ sign_extend 64) v537) #x00000000000000000000000000000002)))) ; 0:0 - 0:0
(write-reg |rdx| nil v531)
(read-reg |log_register_writes| nil false)
(define-const v548 (bvor (bvand v392 #xfffffffe) ((_ zero_extend 31) ((_ extract 0 0) v525)))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v548)))
(read-reg |rflags| nil (_ struct (|bits| v548)))
(define-const v550 (bvor (bvand v548 #xfffffffb) (bvshl ((_ zero_extend 31) ((_ extract 2 2) v525)) #x00000002))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v550)))
(read-reg |rflags| nil (_ struct (|bits| v550)))
(define-const v552 (bvor (bvand v550 #xffffffef) (bvshl ((_ zero_extend 31) ((_ extract 4 4) v525)) #x00000004))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v552)))
(read-reg |rflags| nil (_ struct (|bits| v552)))
(define-const v554 (bvor (bvand v552 #xffffffbf) (bvshl ((_ zero_extend 31) ((_ extract 6 6) v525)) #x00000006))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v554)))
(read-reg |rflags| nil (_ struct (|bits| v554)))
(define-const v556 (bvor (bvand v554 #xffffff7f) (bvshl ((_ zero_extend 31) ((_ extract 7 7) v525)) #x00000007))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v556)))
(read-reg |rflags| nil (_ struct (|bits| v556)))
(define-const v558 (bvor (bvand v556 #xfffff7ff) (bvshl ((_ zero_extend 31) ((_ extract 11 11) v525)) #x0000000b))) ; 0:0 - 0:0
(write-reg |rflags| nil (_ struct (|bits| v558)))
(define-const v559 ((_ sign_extend 16) v367)) ; register_accessors.sail 21:26 - 21:53
(write-reg |rip| nil v559))
use clap::Parser;
use crossbeam::queue::SegQueue;
use isla_lib::init::{initialize_architecture, Initialized};
use isla_lib::ir::{AssertionMode, Def, IRTypeInfo, Name, Symtab, Ty, Val};
use isla_lib::ir_lexer::new_ir_lexer;
use isla_lib::ir_parser;
use isla_lib::log;
use isla_lib::memory::{Memory, SmtKind};
use isla_lib::simplify::{self, WriteOpts};
use isla_lib::smt::smtlib::{self, bits64};
use isla_lib::smt::{self, Checkpoint, Event, ReadOpts, Solver, Sym};
use isla_lib::source_loc::SourceLoc;
use isla_lib::{
bitvector::{b64::B64, BV},
zencode,
};
use isla_lib::{config::ISAConfig, executor::unfreeze_frame};
use isla_lib::{
error::{ExecError, IslaError},
memory::Address,
};
use isla_lib::{
executor::{self, freeze_frame, LocalFrame, TaskState},
ir::linearize,
};
use sha2::{Digest, Sha256};
use std::io::prelude::*;
use std::io::BufWriter;
use std::path::PathBuf;
use std::sync::Arc;
#[derive(Parser)]
struct Options {
/// Architecture definition.
#[clap(long)]
arch: PathBuf,
/// ISA config file.
#[clap(long)]
isa_config: PathBuf,
/// Trace output directory.
#[clap(long, default_value = ".")]
output_dir: PathBuf,
}
fn main() -> anyhow::Result<()> {
let options = Options::parse();
log::set_flags(log::VERBOSE);
// Parse ISLA Architecture.
let contents = std::fs::read_to_string(&options.arch)?;
let mut symtab = Symtab::new();
let mut arch = parse_ir::<B64>(&contents, &mut symtab)?;
// ISLA ISA Config.
let mut hasher = Sha256::new();
let type_info = IRTypeInfo::new(&arch);
let isa_config = match ISAConfig::<B64>::from_file(
&mut hasher,
&options.isa_config,
None,
&symtab,
&type_info,
) {
Ok(isa_config) => isa_config,
Err(msg) => anyhow::bail!(msg),
};
let linearize_functions = vec![
// See: https://github.com/rems-project/isla-testgen/blob/a9759247bfdff9c9c39d95a4cfd85318e5bf50fe/c86-command
//"fdiv_int",
"bool_to_bits",
"bits_to_bool",
//"bit_to_bool",
//"isEven",
"signed_byte_p_int",
"zf_spec",
//"b_xor",
//"logand_int",
//"not_bit",
//"floor2",
];
for name in linearize_functions {
linearize_function(&mut arch, name, &mut symtab)?;
}
let use_model_reg_init = true;
let iarch = initialize_architecture(
&mut arch,
symtab,
type_info,
&isa_config,
AssertionMode::Optimistic,
use_model_reg_init,
);
// Setup machine code.
let machine_code = vec![0x4c, 0x01, 0xea];
println!("machine code = {:02x?}", machine_code);
// ISLA trace.
let paths = trace_opcode(&machine_code, &iarch)?;
// Dump.
for (i, events) in paths.iter().enumerate() {
let filename = format!("trace{i:04}.out");
let path = options.output_dir.join(filename);
log!(log::VERBOSE, format!("write trace to {}", path.display()));
let file = std::fs::File::create(path)?;
write_events(&events, &iarch, file)?;
}
log!(
log::VERBOSE,
format!("generated {} trace paths", paths.len())
);
Ok(())
}
fn trace_opcode<'ir, B: BV>(
opcode: &Vec<u8>,
iarch: &'ir Initialized<'ir, B>,
) -> anyhow::Result<Vec<Vec<Event<B>>>> {
let shared_state = &&iarch.shared_state;
let symtab = &shared_state.symtab;
let initial_checkpoint = Checkpoint::new();
let solver_cfg = smt::Config::new();
let solver_ctx = smt::Context::new(solver_cfg);
let mut solver = Solver::from_checkpoint(&solver_ctx, initial_checkpoint);
let memory = Memory::new();
// Initialization -----------------------------------------------------------
// - run initialization function to set processor in 64-bit mode
let init_function = zencode::encode("initialise_64_bit_mode");
let function_id = shared_state.symtab.lookup(&init_function);
let (args, ret_ty, instrs) = shared_state.functions.get(&function_id).unwrap();
let task_state = TaskState::<B>::new();
let checkpoint = smt::checkpoint(&mut solver);
let task = LocalFrame::new(function_id, args, ret_ty, None, instrs)
.add_lets(&iarch.lets)
.add_regs(&iarch.regs)
.set_memory(memory)
.task_with_checkpoint(0, &task_state, checkpoint);
let queue = Arc::new(SegQueue::new());
executor::start_single(
task,
&shared_state,
&queue,
&move |_tid, _task_id, result, _shared_state, mut solver, queue| match result {
Ok((_, frame)) => {
queue.push((freeze_frame(&frame), smt::checkpoint(&mut solver)));
}
Err(err) => panic!("Initialisation failed: {:?}", err),
},
);
assert_eq!(queue.len(), 1);
let (frame, checkpoint) = queue.pop().expect("pop failed");
let mut solver = Solver::from_checkpoint(&solver_ctx, checkpoint);
// Initialize registers -----------------------------------------------------
// - set symbolic values for all general-purpose registers
let mut local_frame = executor::unfreeze_frame(&frame);
for (n, ty) in &shared_state.registers {
// Only handle general-purpose registers.
if let Ty::Bits(bits) = ty {
let var = solver.fresh();
solver.add(smtlib::Def::DeclareConst(var, smtlib::Ty::BitVec(*bits)));
let val = Val::Symbolic(var);
local_frame.regs_mut().assign(*n, val, shared_state);
}
}
let frame = freeze_frame(&local_frame);
// Setup memory -------------------------------------------------------------
let mut local_frame = unfreeze_frame(&frame);
const INIT_PC: Address = 0x401000;
local_frame
.memory_mut()
.add_symbolic_code_region(INIT_PC..INIT_PC + 0x10000);
let memory_var = solver.fresh();
solver.add(smtlib::Def::DeclareConst(
memory_var,
smtlib::Ty::Array(
Box::new(smtlib::Ty::BitVec(64)),
Box::new(smtlib::Ty::BitVec(8)),
),
));
let memory_client_info: Box<dyn isla_lib::memory::MemoryCallbacks<B>> =
Box::new(SeqMemory { memory_var });
local_frame.memory_mut().set_client_info(memory_client_info);
let frame = freeze_frame(&local_frame);
// Set initial program counter ----------------------------------------------
let local_frame = unfreeze_frame(&frame);
let pc_name = zencode::encode("rip");
let pc_id = symtab.lookup(&pc_name);
let pc = local_frame.regs().get_last_if_initialized(pc_id).unwrap();
solver.add(smtlib::Def::Assert(smtlib::Exp::Eq(
Box::new(smt_value(pc).unwrap()),
Box::new(smtlib::Exp::Bits64(B64::from_u64(INIT_PC))),
)));
let frame = freeze_frame(&local_frame);
// Setup opcode -------------------------------------------------------------
let local_frame = unfreeze_frame(&frame);
let read_val = local_frame
.memory()
.read(
Val::Unit, /* read_kind */
pc.clone(),
Val::I128(opcode.len() as i128),
&mut solver,
false,
ReadOpts::ifetch(),
)
.unwrap();
let opcode_var = solver.fresh();
solver.add(smtlib::Def::DeclareConst(
opcode_var,
smtlib::Ty::BitVec(8 * opcode.len() as u32),
));
solver.add(smtlib::Def::Assert(smtlib::Exp::Eq(
Box::new(smtlib::Exp::Var(opcode_var)),
Box::new(smt_bytes(opcode)),
)));
let read_exp = smt_value(&read_val).unwrap();
solver.add(smtlib::Def::Assert(smtlib::Exp::Eq(
Box::new(smtlib::Exp::Var(opcode_var)),
Box::new(read_exp),
)));
let frame = freeze_frame(&local_frame);
// Debug dump ---------------------------------------------------------------
assert_eq!(solver.check_sat(), smt::SmtResult::Sat);
let checkpoint = smt::checkpoint(&mut solver);
dump_checkpoint(&checkpoint, iarch)?;
// Execute fetch and decode -------------------------------------------------
let local_frame = unfreeze_frame(&frame);
local_frame.memory().log();
let run_instruction_function = zencode::encode("x86_fetch_decode_execute");
let function_id = shared_state.symtab.lookup(&run_instruction_function);
let (args, ret_ty, instrs) = shared_state.functions.get(&function_id).unwrap();
let task_state = TaskState::<B>::new();
let task = local_frame
.new_call(function_id, args, ret_ty, None, instrs)
.task_with_checkpoint(1, &task_state, checkpoint);
let num_threads = 1;
let queue = Arc::new(SegQueue::new());
executor::start_multi(
num_threads,
None,
vec![task],
shared_state,
queue.clone(),
&executor::trace_collector,
);
let mut paths = Vec::new();
loop {
match queue.pop() {
Some(Ok((_, mut events))) => {
// simplify::hide_initialization(&mut events);
simplify::remove_extra_register_fields(&mut events);
simplify::remove_repeated_register_reads(&mut events);
simplify::remove_unused_register_assumptions(&mut events);
simplify::remove_unused(&mut events);
simplify::propagate_forwards_used_once(&mut events);
simplify::commute_extract(&mut events);
simplify::eval(&mut events);
let events: Vec<Event<B>> = events.drain(..).rev().collect();
paths.push(events);
}
// Error during execution
Some(Err(err)) => {
let msg = format!("{}", err);
eprintln!(
"{}",
err.source_loc().message::<PathBuf>(
None,
shared_state.symtab.files(),
&msg,
true,
true
)
);
anyhow::bail!("{}", err);
}
// Empty queue
None => break,
}
}
Ok(paths)
}
#[derive(Debug, Clone)]
struct SeqMemory {
memory_var: Sym,
}
impl<B: BV> isla_lib::memory::MemoryCallbacks<B> for SeqMemory {
fn symbolic_read(
&self,
regions: &[isla_lib::memory::Region<B>],
solver: &mut Solver<B>,
value: &Val<B>,
_read_kind: &Val<B>,
address: &Val<B>,
bytes: u32,
_tag: &Option<Val<B>>,
opts: &ReadOpts,
) {
use isla_lib::smt::smtlib::{Def, Exp};
let read_exp = smt_value(value)
.unwrap_or_else(|err| panic!("Bad memory read value {:?}: {}", value, err));
let addr_exp = smt_value(address)
.unwrap_or_else(|err| panic!("Bad read address value {:?}: {}", address, err));
let read_prop = Exp::Eq(
Box::new(read_exp.clone()),
Box::new(smt_read_exp(self.memory_var, &addr_exp, bytes as u64)),
);
let kind = if opts.is_ifetch {
SmtKind::ReadInstr
} else if opts.is_exclusive {
// We produce a dummy read so that failed store exclusives still get address
// constraints, but the memory must be writable.
SmtKind::WriteData
} else {
SmtKind::ReadData
};
let address_constraint =
isla_lib::memory::smt_address_constraint(regions, &addr_exp, bytes, kind, solver, None);
let full_constraint = Exp::And(Box::new(address_constraint), Box::new(read_prop));
solver.add(Def::Assert(full_constraint));
}
fn symbolic_write(
&mut self,
regions: &[isla_lib::memory::Region<B>],
solver: &mut Solver<B>,
_value: Sym,
_read_kind: &Val<B>,
address: &Val<B>,
data: &Val<B>,
bytes: u32,
_tag: &Option<Val<B>>,
_opts: &smt::WriteOpts,
) {
use isla_lib::smt::smtlib::{Def, Exp};
let data_exp = smt_value(data)
.unwrap_or_else(|err| panic!("Bad memory write value {:?}: {}", data, err));
let addr_exp = smt_value(address)
.unwrap_or_else(|err| panic!("Bad write address value {:?}: {}", address, err));
// TODO: endianness?
let mut mem_exp = Exp::Store(
Box::new(Exp::Var(self.memory_var)),
Box::new(addr_exp.clone()),
Box::new(Exp::Extract(7, 0, Box::new(data_exp.clone()))),
);
for i in 1..bytes {
mem_exp = Exp::Store(
Box::new(mem_exp),
Box::new(Exp::Bvadd(
Box::new(addr_exp.clone()),
Box::new(bits64(i as u64, 64)),
)),
Box::new(Exp::Extract(i * 8 + 7, i * 8, Box::new(data_exp.clone()))),
)
}
self.memory_var = solver.fresh();
solver.add(Def::DefineConst(self.memory_var, mem_exp));
let kind = SmtKind::WriteData;
let address_constraint =
isla_lib::memory::smt_address_constraint(regions, &addr_exp, bytes, kind, solver, None);
solver.add(Def::Assert(address_constraint));
}
fn symbolic_write_tag(
&mut self,
_regions: &[isla_lib::memory::Region<B>],
_solver: &mut Solver<B>,
_value: Sym,
_write_kind: &Val<B>,
_address: &Val<B>,
_tag: &Val<B>,
) {
}
}
fn smt_value<B: BV>(v: &Val<B>) -> Result<smtlib::Exp<Sym>, ExecError> {
isla_lib::primop_util::smt_value(v, SourceLoc::unknown())
}
fn smt_read_exp(memory: Sym, addr_exp: &smtlib::Exp<Sym>, bytes: u64) -> smtlib::Exp<Sym> {
use smtlib::Exp;
// TODO: endianness?
let mut mem_exp = Exp::Select(Box::new(Exp::Var(memory)), Box::new(addr_exp.clone()));
for i in 1..bytes {
mem_exp = Exp::Concat(
Box::new(Exp::Select(
Box::new(Exp::Var(memory)),
Box::new(Exp::Bvadd(
Box::new(addr_exp.clone()),
Box::new(bits64(i as u64, 64)),
)),
)),
Box::new(mem_exp),
)
}
mem_exp
}
fn smt_bytes<V>(bytes: &Vec<u8>) -> smtlib::Exp<V> {
let mut bits = Vec::with_capacity(bytes.len() * 8);
for byte in bytes {
for i in 0..8 {
bits.push((byte >> i) & 1 == 1);
}
}
smtlib::Exp::Bits(bits)
}
fn dump_checkpoint<'ir, B: BV>(
checkpoint: &Checkpoint<B>,
iarch: &'ir Initialized<'ir, B>,
) -> anyhow::Result<()> {
if let Some(trace) = checkpoint.trace() {
let events: Vec<Event<B>> = trace.to_vec().into_iter().cloned().collect();
write_events_to_stdout(&events, iarch)?;
}
Ok(())
}
/// Write ISLA trace events to stdout.
fn write_events_to_stdout<'ir, B: BV>(
events: &Vec<Event<B>>,
iarch: &'ir Initialized<'ir, B>,
) -> anyhow::Result<()> {
let stdout = std::io::stdout().lock();
write_events(events, iarch, stdout)
}
fn write_events<'ir, B: BV>(
events: &Vec<Event<B>>,
iarch: &'ir Initialized<'ir, B>,
w: impl Sized + Write,
) -> anyhow::Result<()> {
let mut handle = BufWriter::with_capacity(5 * usize::pow(2, 20), w);
let write_opts = WriteOpts::default();
simplify::write_events_with_opts(&mut handle, &events, &iarch.shared_state, &write_opts)
.unwrap();
handle.flush().unwrap();
Ok(())
}
/// Parse Jib IR.
fn parse_ir<'a, 'input, B: BV>(
contents: &'input str,
symtab: &'a mut Symtab<'input>,
) -> anyhow::Result<Vec<Def<Name, B>>> {
match ir_parser::IrParser::new().parse(symtab, new_ir_lexer(&contents)) {
Ok(ir) => Ok(ir),
Err(_) => Err(anyhow::Error::msg("bad")),
}
}
fn linearize_function<'ir, B: BV>(
arch: &mut Vec<Def<Name, B>>,
name: &str,
symtab: &mut Symtab<'ir>,
) -> anyhow::Result<()> {
log!(log::VERBOSE, format!("linearize function {}", name));
// Lookup function name.
let target = match symtab.get(&zencode::encode(name)) {
Some(t) => t,
None => anyhow::bail!("function {} could not be found", name),
};
// Find signature.
let (_args, ret) = lookup_signature(arch, target)?;
// Rewrite.
for def in arch.iter_mut() {
if let Def::Fn(f, _, body) = def {
if *f == target {
let rewritten = linearize::linearize(body.to_vec(), &ret, symtab);
*body = rewritten;
}
}
}
Ok(())
}
fn lookup_signature<B: BV>(
arch: &Vec<Def<Name, B>>,
target: Name,
) -> anyhow::Result<(Vec<Ty<Name>>, Ty<Name>)> {
for def in arch {
match def {
Def::Val(f, args, ret) if *f == target => return Ok((args.clone(), ret.clone())),
_ => (),
}
}
anyhow::bail!("could not find type signature")
}
pc = "rip"
ifetch = "Read_ifetch"
read_exclusives = []
write_exclusives = []
[[toolchain]]
name = "default"
assembler = "as"
objdump = "objdump"
nm = "nm"
linker = "ld"
[mmu]
page_table_base = "0x300000"
page_size = "4096"
s2_page_table_base = "0x300000"
s2_page_size = "4096"
# This section contains the base address for loading the code for each
# thread in a litmus test, and the stride which is the distance
# between each thread in bytes. The overall range for thread memory is
# the half-open range [base,top)"
[threads]
base = "0x400000"
top = "0x500000"
stride = "0x10000"
[symbolic_addrs]
base = "0x600000"
top = "0x600000"
stride = "0x10"
[registers]
ignore = []
[registers.defaults]
app_view = true
ms_reg = false
fault_reg = false
log_register_writes = false
# A map from register names in the litmus to Sail register specifiers
# (roughtly corresponding to l-expressions in Sail, i.e. subscripting
# R[n] and field accesses R.field are allowed.)
[registers.renames]
[reads]
[writes]
[cache_ops]
# target/release/isla-testgen -a c86 -T 1 -C ../../x86.toml -A ../sail-cheri-x86/x86.ir
#--max-retries 20
#-L fdiv_int
#-L bool_to_bits
#-L bits_to_bool
#-L bit_to_bool
#-L isEven -L signed_byte_p_int -L zf_spec -L b_xor -L logand_int -L not_bit -L floor2 -L encCapabilityToCapability -L capToEncCap -L getCapBoundsBits
# --debug fmlp
#--test-file
#--sparse
#--code-region 0x10000-0x10fff
#--memory-region 0x11000-0x11fff
#--acl2-insts ../../inst.sexp _
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment