The p_fn instruction

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.