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
116import LeanRV64IM.RiscvTerminationEnd
2- import LeanRV64IM.RiscvInstsEnd
317
418set_option maxHeartbeats 1_000_000_000
519set_option maxRecDepth 1_000_000
@@ -8,7 +22,7 @@ set_option match.ignoreUnusedAlts true
822
923open Sail
1024
11- namespace LeanRV32IM .Functions
25+ namespace LeanRV64IM .Functions
1226
1327open zvk_vsm4r_funct6
1428open zvk_vsha2_funct6
@@ -130,4 +144,148 @@ open ExceptionType
130144open Architecture
131145open 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
0 commit comments