androm3da added a comment.

This patch spans several areas, so I would be happy to decompose it into 
smaller parts if it made it easier for reviewers.



================
Comment at: compiler-rt/lib/xray/xray_hexagon.cpp:76-84
+static void WriteInstFlushCache(void *Addr, uint32_t NewInstruction) {
+  asm volatile("icinva(%[inst_addr])\n\t"
+               "isync\n\t"
+               "memw(%[inst_addr]) = %[new_inst]\n\t"
+               "dccleaninva(%[inst_addr])\n\t"
+               "syncht\n\t"
+               :
----------------
If we need to support cases where the entire sled spans cache lines, then we 
must iterate over the icinva() instead.



================
Comment at: compiler-rt/lib/xray/xray_hexagon.cpp:76-84
+static void WriteInstFlushCache(void *Addr, uint32_t NewInstruction) {
+  asm volatile("icinva(%[inst_addr])\n\t"
+               "isync\n\t"
+               "memw(%[inst_addr]) = %[new_inst]\n\t"
+               "dccleaninva(%[inst_addr])\n\t"
+               "syncht\n\t"
+               :
----------------
androm3da wrote:
> If we need to support cases where the entire sled spans cache lines, then we 
> must iterate over the icinva() instead.
> 
Other arches do atomic stores.  I think we will need to change this to: LL 
first, then icinva/isync, then SC.  

If the SC fails then either we re-run all those steps because we want to 
clobber it or we do nothing because we assume some other thread applied the 
same patch first?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113638/new/

https://reviews.llvm.org/D113638

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to