2727
2828#% set labels.next_tick = 14
2929
30- #% set labels.end_instruction_with_rd_and_poll_interrupts = 152
30+ #% set labels.end_instruction_with_rd_and_poll_interrupts = 151
3131#% set labels.end_instruction_with_rd_and_fire_interrupts = _labels_vals|last + 1
3232#% set labels.end_instruction_with_rd = _labels_vals|last + 1
3333#% set labels.end_instruction = _labels_vals|last + 2
8686 read _address prev_proc "_address"
8787 read address prev_proc "address"
8888 read breakpoint_address prev_proc "breakpoint_address"
89+ read csr_mcycle prev_proc "csr_mcycle"
8990 read csr_mie prev_proc "csr_mie"
9091 read csr_minstret prev_proc "csr_minstret"
9192 read csr_mip prev_proc "csr_mip"
@@ -136,22 +137,19 @@ reset:
136137
137138 # these variables don't need to be saved because this should only ever run at the start of a tick
138139
139- #directive push_saved __mcycle __mcycleh
140140 # increment mcycle
141- read __mcycle {{CSRS}} "{{ 'mcycle'|csr }}"
142- op add __mcycle __mcycle 1
143- jump reset__no_overflow lessThan __mcycle 0x100000000
141+ op add csr_mcycle csr_mcycle 1
142+ jump reset__no_overflow lessThan csr_mcycle 0x100000000
144143
145144 # overflow mcycle into mcycleh
146145 # TODO: handle mcycleh overflow
147- set __mcycle 0
146+ set csr_mcycle 0
147+ #directive push_saved __mcycleh
148148 read __mcycleh {{CSRS}} "{{ 'mcycleh'|csr }}"
149149 op add __mcycleh __mcycleh 1
150150 write __mcycleh {{CSRS}} "{{ 'mcycleh'|csr }}"
151-
151+ #directive pop_saved __mcycleh
152152reset__no_overflow:
153- write __mcycle {{CSRS}} "{{ 'mcycle'|csr }}"
154- #directive pop_saved __mcycle __mcycleh
155153
156154 # if we just started executing, don't restore @counter
157155 jump poll_interrupts equal prev_proc {{CONTROLLER}}
@@ -2569,11 +2567,15 @@ csr_write_stimecmph:
25692567 set csr_stimecmph result
25702568 jump end_instruction_with_rd_and_poll_interrupts always
25712569
2572- csr_read_cycle :
2570+ csr_read_mcycle :
25732571#% do declare_locals(modify_csr_locals)
2574- read rd {{CSRS}} "{{ 'mcycle'|csr }}"
2572+ set rd csr_mcycle
25752573 jump check_xcounteren always
25762574
2575+ csr_write_mcycle:
2576+ set csr_mcycle result
2577+ jump end_instruction_with_rd always
2578+
25772579csr_read_cycleh:
25782580#% do declare_locals(modify_csr_locals)
25792581 read rd {{CSRS}} "{{ 'mcycleh'|csr }}"
@@ -2787,7 +2789,7 @@ jump decode_JALR always
27872789jump decode_JAL always
27882790jump decode_SYSTEM always
27892791jump csr_read_csrs always
2790- jump csr_read_cycle always
2792+ jump csr_read_mcycle always
27912793jump csr_read_cycleh always
27922794jump csr_read_hpmcounter always
27932795jump csr_read_mie always
@@ -2805,6 +2807,7 @@ jump csr_read_time always
28052807jump csr_read_timeh always
28062808jump csr_read_zero always
28072809jump csr_write_csrs always
2810+ jump csr_write_mcycle always
28082811jump csr_write_mie always
28092812jump csr_write_minstret always
28102813jump csr_write_minstreth always
0 commit comments