prfm is prefetch instructions in arm64. But what does 488 in the following code mean?
"prfm pldl1keep, [%[src], 448] \n"
I'm not sure which one is right:
1、The above code indicates that 448 bytes of data starting at the SRC address are prefetched into the L1 cache?
2、The above code indicates that 448 bit of data starting at the SRC address are prefetched into the L1 cache?
3、The above code indicates that the data is prefetched from the address of SRC + 448byte offset into the L1 cache. If so, how much data is prefetched? One cache line size?
In A64 assembly, [xN, 0x...]
always means xN + 0x...
, so it's your third option.
The base address for the prefetch hint is src + 448
.
As for the amount of data that is fetched, the only thing the ARMv8 Reference Manual (§ C6.2.247) has to say is:
The effect of an PRFM instruction is IMPLEMENTATION DEFINED.
Most notably, this includes allowing implementations to treat the prefetch hint as a NOP altogether.
So it may fetch one cacheline, it may fetch two, it may fetch zero.