Skip to content

Commit b2d01b6

Browse files
authored
update rv64 (#76)
1 parent 5cd31f2 commit b2d01b6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2486
-2342
lines changed

LeanRV64IM.lean

Lines changed: 161 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
1+
import LeanRV64IM.Flow
2+
import LeanRV64IM.Prelude
3+
import LeanRV64IM.RiscvXlen
4+
import LeanRV64IM.RvfiDii
5+
import LeanRV64IM.RiscvExtensions
6+
import LeanRV64IM.RiscvTypes
7+
import LeanRV64IM.RiscvRegs
8+
import LeanRV64IM.RiscvSysRegs
9+
import LeanRV64IM.RiscvPmpRegs
10+
import LeanRV64IM.RiscvVextRegs
11+
import LeanRV64IM.RiscvZihpm
12+
import LeanRV64IM.RiscvSmcntrpmf
13+
import LeanRV64IM.RiscvPlatform
14+
import LeanRV64IM.RiscvVmemTlb
15+
import LeanRV64IM.RiscvVmem
116
import LeanRV64IM.RiscvTerminationEnd
2-
import LeanRV64IM.RiscvInstsEnd
317

418
set_option maxHeartbeats 1_000_000_000
519
set_option maxRecDepth 1_000_000
@@ -8,7 +22,7 @@ set_option match.ignoreUnusedAlts true
822

923
open Sail
1024

11-
namespace LeanRV32IM.Functions
25+
namespace LeanRV64IM.Functions
1226

1327
open zvk_vsm4r_funct6
1428
open zvk_vsha2_funct6
@@ -130,4 +144,148 @@ open ExceptionType
130144
open Architecture
131145
open AccessType
132146

133-
end LeanRV32IM.Functions
147+
def initialize_registers (_ : Unit) : SailM Unit := do
148+
writeReg rvfi_instruction (← (undefined_RVFI_DII_Instruction_Packet ()))
149+
writeReg rvfi_inst_data (← (undefined_RVFI_DII_Execution_Packet_InstMetaData ()))
150+
writeReg rvfi_pc_data (← (undefined_RVFI_DII_Execution_Packet_PC ()))
151+
writeReg rvfi_int_data (← (undefined_RVFI_DII_Execution_Packet_Ext_Integer ()))
152+
writeReg rvfi_int_data_present (← (undefined_bool ()))
153+
writeReg rvfi_mem_data (← (undefined_RVFI_DII_Execution_Packet_Ext_MemAccess ()))
154+
writeReg rvfi_mem_data_present (← (undefined_bool ()))
155+
writeReg PC (← (undefined_bitvector 64))
156+
writeReg nextPC (← (undefined_bitvector 64))
157+
writeReg x1 (← (undefined_bitvector 64))
158+
writeReg x2 (← (undefined_bitvector 64))
159+
writeReg x3 (← (undefined_bitvector 64))
160+
writeReg x4 (← (undefined_bitvector 64))
161+
writeReg x5 (← (undefined_bitvector 64))
162+
writeReg x6 (← (undefined_bitvector 64))
163+
writeReg x7 (← (undefined_bitvector 64))
164+
writeReg x8 (← (undefined_bitvector 64))
165+
writeReg x9 (← (undefined_bitvector 64))
166+
writeReg x10 (← (undefined_bitvector 64))
167+
writeReg x11 (← (undefined_bitvector 64))
168+
writeReg x12 (← (undefined_bitvector 64))
169+
writeReg x13 (← (undefined_bitvector 64))
170+
writeReg x14 (← (undefined_bitvector 64))
171+
writeReg x15 (← (undefined_bitvector 64))
172+
writeReg x16 (← (undefined_bitvector 64))
173+
writeReg x17 (← (undefined_bitvector 64))
174+
writeReg x18 (← (undefined_bitvector 64))
175+
writeReg x19 (← (undefined_bitvector 64))
176+
writeReg x20 (← (undefined_bitvector 64))
177+
writeReg x21 (← (undefined_bitvector 64))
178+
writeReg x22 (← (undefined_bitvector 64))
179+
writeReg x23 (← (undefined_bitvector 64))
180+
writeReg x24 (← (undefined_bitvector 64))
181+
writeReg x25 (← (undefined_bitvector 64))
182+
writeReg x26 (← (undefined_bitvector 64))
183+
writeReg x27 (← (undefined_bitvector 64))
184+
writeReg x28 (← (undefined_bitvector 64))
185+
writeReg x29 (← (undefined_bitvector 64))
186+
writeReg x30 (← (undefined_bitvector 64))
187+
writeReg x31 (← (undefined_bitvector 64))
188+
writeReg cur_privilege (← (undefined_Privilege ()))
189+
writeReg cur_inst (← (undefined_bitvector 64))
190+
writeReg mie (← (undefined_Minterrupts ()))
191+
writeReg mip (← (undefined_Minterrupts ()))
192+
writeReg medeleg (← (undefined_Medeleg ()))
193+
writeReg mideleg (← (undefined_Minterrupts ()))
194+
writeReg mtvec (← (undefined_Mtvec ()))
195+
writeReg mcause (← (undefined_Mcause ()))
196+
writeReg mepc (← (undefined_bitvector 64))
197+
writeReg mtval (← (undefined_bitvector 64))
198+
writeReg mscratch (← (undefined_bitvector 64))
199+
writeReg scounteren (← (undefined_Counteren ()))
200+
writeReg mcounteren (← (undefined_Counteren ()))
201+
writeReg mcountinhibit (← (undefined_Counterin ()))
202+
writeReg mcycle (← (undefined_bitvector 64))
203+
writeReg mtime (← (undefined_bitvector 64))
204+
writeReg minstret (← (undefined_bitvector 64))
205+
writeReg minstret_increment (← (undefined_bool ()))
206+
writeReg stvec (← (undefined_Mtvec ()))
207+
writeReg sscratch (← (undefined_bitvector 64))
208+
writeReg sepc (← (undefined_bitvector 64))
209+
writeReg scause (← (undefined_Mcause ()))
210+
writeReg stval (← (undefined_bitvector 64))
211+
writeReg tselect (← (undefined_bitvector 64))
212+
writeReg vstart (← (undefined_bitvector 64))
213+
writeReg vl (← (undefined_bitvector 64))
214+
writeReg vtype (← (undefined_Vtype ()))
215+
writeReg pmpcfg_n (← (undefined_vector 64 (← (undefined_Pmpcfg_ent ()))))
216+
writeReg pmpaddr_n (← (undefined_vector 64 (← (undefined_bitvector 64))))
217+
writeReg vr0 (← (undefined_bitvector 65536))
218+
writeReg vr1 (← (undefined_bitvector 65536))
219+
writeReg vr2 (← (undefined_bitvector 65536))
220+
writeReg vr3 (← (undefined_bitvector 65536))
221+
writeReg vr4 (← (undefined_bitvector 65536))
222+
writeReg vr5 (← (undefined_bitvector 65536))
223+
writeReg vr6 (← (undefined_bitvector 65536))
224+
writeReg vr7 (← (undefined_bitvector 65536))
225+
writeReg vr8 (← (undefined_bitvector 65536))
226+
writeReg vr9 (← (undefined_bitvector 65536))
227+
writeReg vr10 (← (undefined_bitvector 65536))
228+
writeReg vr11 (← (undefined_bitvector 65536))
229+
writeReg vr12 (← (undefined_bitvector 65536))
230+
writeReg vr13 (← (undefined_bitvector 65536))
231+
writeReg vr14 (← (undefined_bitvector 65536))
232+
writeReg vr15 (← (undefined_bitvector 65536))
233+
writeReg vr16 (← (undefined_bitvector 65536))
234+
writeReg vr17 (← (undefined_bitvector 65536))
235+
writeReg vr18 (← (undefined_bitvector 65536))
236+
writeReg vr19 (← (undefined_bitvector 65536))
237+
writeReg vr20 (← (undefined_bitvector 65536))
238+
writeReg vr21 (← (undefined_bitvector 65536))
239+
writeReg vr22 (← (undefined_bitvector 65536))
240+
writeReg vr23 (← (undefined_bitvector 65536))
241+
writeReg vr24 (← (undefined_bitvector 65536))
242+
writeReg vr25 (← (undefined_bitvector 65536))
243+
writeReg vr26 (← (undefined_bitvector 65536))
244+
writeReg vr27 (← (undefined_bitvector 65536))
245+
writeReg vr28 (← (undefined_bitvector 65536))
246+
writeReg vr29 (← (undefined_bitvector 65536))
247+
writeReg vr30 (← (undefined_bitvector 65536))
248+
writeReg vr31 (← (undefined_bitvector 65536))
249+
writeReg vcsr (← (undefined_Vcsr ()))
250+
writeReg mhpmevent (← (undefined_vector 32 (← (undefined_HpmEvent ()))))
251+
writeReg mhpmcounter (← (undefined_vector 32 (← (undefined_bitvector 64))))
252+
writeReg mcyclecfg (← (undefined_CountSmcntrpmf ()))
253+
writeReg minstretcfg (← (undefined_CountSmcntrpmf ()))
254+
writeReg mtimecmp (← (undefined_bitvector 64))
255+
writeReg stimecmp (← (undefined_bitvector 64))
256+
writeReg htif_tohost (← (undefined_bitvector 64))
257+
writeReg htif_done (← (undefined_bool ()))
258+
writeReg htif_exit_code (← (undefined_bitvector 64))
259+
writeReg htif_cmd_write (← (undefined_bit ()))
260+
writeReg htif_payload_writes (← (undefined_bitvector 4))
261+
writeReg satp (← (undefined_bitvector 64))
262+
263+
def sail_model_init (x_0 : Unit) : SailM Unit := do
264+
writeReg misa (_update_Misa_MXL (Mk_Misa (zeros (n := 64))) (architecture_forwards RV64))
265+
writeReg mstatus (let mxl := (architecture_forwards RV64)
266+
(_update_Mstatus_UXL
267+
(_update_Mstatus_SXL (Mk_Mstatus (zeros (n := 64)))
268+
(if (((xlen != 32) && (hartSupports Ext_S)) : Bool)
269+
then mxl
270+
else (zeros (n := 2))))
271+
(if (((xlen != 32) && (hartSupports Ext_U)) : Bool)
272+
then mxl
273+
else (zeros (n := 2)))))
274+
writeReg mseccfg (← (legalize_mseccfg (Mk_Seccfg (zeros (n := 64))) (zeros (n := 64))))
275+
writeReg menvcfg (← (legalize_menvcfg (Mk_MEnvcfg (zeros (n := 64))) (zeros (n := 64))))
276+
writeReg senvcfg (← (legalize_senvcfg (Mk_SEnvcfg (zeros (n := 64))) (zeros (n := 64))))
277+
writeReg mvendorid (← (to_bits_checked (l := 32) (0 : Int)))
278+
writeReg mimpid (← (to_bits_checked (l := 64) (0 : Int)))
279+
writeReg marchid (← (to_bits_checked (l := 64) (0 : Int)))
280+
writeReg mhartid (← (to_bits_checked (l := 64) (0 : Int)))
281+
writeReg mconfigptr (zeros (n := 64))
282+
writeReg plat_ram_base (← (to_bits_checked (l := 64) (2147483648 : Int)))
283+
writeReg plat_ram_size (← (to_bits_checked (l := 64) (2147483648 : Int)))
284+
writeReg plat_rom_base (← (to_bits_checked (l := 64) (4096 : Int)))
285+
writeReg plat_rom_size (← (to_bits_checked (l := 64) (4096 : Int)))
286+
writeReg plat_clint_base (← (to_bits_checked (l := 64) (33554432 : Int)))
287+
writeReg plat_clint_size (← (to_bits_checked (l := 64) (786432 : Int)))
288+
writeReg tlb (vectorInit none)
289+
(initialize_registers ())
290+
291+
end LeanRV64IM.Functions

LeanRV64IM/Arith.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,22 @@ def sub_virtaddr_xlenbits (typ_0 : virtaddr) (offset : (BitVec 64)) : virtaddr :
150150

151151
/-- Type quantifiers: n : Int, m : Int -/
152152
def _shl_int_general (m : Int) (n : Int) : Int :=
153-
bif (n ≥b 0)
153+
if ((n ≥b 0) : Bool)
154154
then (Int.shiftl m n)
155155
else (Int.shiftr m (Neg.neg n))
156156

157157
/-- Type quantifiers: n : Int, m : Int -/
158158
def _shr_int_general (m : Int) (n : Int) : Int :=
159-
bif (n ≥b 0)
159+
if ((n ≥b 0) : Bool)
160160
then (Int.shiftr m n)
161161
else (Int.shiftl m (Neg.neg n))
162162

163163
/-- Type quantifiers: m : Int, n : Int -/
164164
def fdiv_int (n : Int) (m : Int) : Int :=
165-
bif ((n <b 0) && (m >b 0))
165+
if (((n <b 0) && (m >b 0)) : Bool)
166166
then ((Int.tdiv (n +i 1) m) -i 1)
167167
else
168-
(bif ((n >b 0) && (m <b 0))
168+
(if (((n >b 0) && (m <b 0)) : Bool)
169169
then ((Int.tdiv (n -i 1) m) -i 1)
170170
else (Int.tdiv n m))
171171

LeanRV64IM/Arithmetic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def carryless_mul (a : (BitVec k_n)) (b : (BitVec k_n)) : (BitVec (2 * k_n)) :=
152152
for i in [loop_i_lower:loop_i_upper:1]i do
153153
let result := loop_vars
154154
loop_vars :=
155-
bif ((BitVec.access a i) == 1#1)
155+
if (((BitVec.access a i) == 1#1) : Bool)
156156
then (result ^^^ (shiftl (zero_extend (m := (2 *i (Sail.BitVec.length b))) b) i))
157157
else result
158158
(pure loop_vars)
@@ -166,7 +166,7 @@ def carryless_mulr (a : (BitVec k_n)) (b : (BitVec k_n)) : (BitVec k_n) := Id.ru
166166
for i in [loop_i_lower:loop_i_upper:1]i do
167167
let result := loop_vars
168168
loop_vars :=
169-
bif ((BitVec.access a i) == 1#1)
169+
if (((BitVec.access a i) == 1#1) : Bool)
170170
then (result ^^^ (shiftr b (((Sail.BitVec.length result) -i i) -i 1)))
171171
else result
172172
(pure loop_vars)
@@ -202,7 +202,7 @@ def count_ones (x : (BitVec k_n)) : SailM Nat := do
202202
for i in [loop_i_lower:loop_i_upper:1]i do
203203
let count := loop_vars
204204
loop_vars ← do
205-
bif ((BitVec.access x i) == 1#1)
205+
if (((BitVec.access x i) == 1#1) : Bool)
206206
then
207207
(do
208208
let new_count := (count +i 1)

0 commit comments

Comments
 (0)