The p_fn
instruction reserves a hart on the next core (it does not fork yet; fork is effective only after the following p_jal has been issued).
The next function call instruction (p_jal ra, t0, g in the example) sends the continuation address .L2 to the next core as the starting
point of the allocated hart (core 0, hart 1 is the allocating hart and core 1, hart 0 is the allocated hart).
In the example, after the p_jal ra, t0, g
instruction, the current hart fetches g (i.e. code portion (3)) and the
new hart in the next core fetches .L2.
As both harts reside on different cores, they run in parallel.