================
@@ -1169,7 +1169,11 @@ 
DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_riscv6jumptoEv)
     ILOAD x\i, (RISCV_ISIZE * \i)(a0)
   .endr
   // skip a0 for now
+#if defined(__riscv_abi_rve)
----------------
lenary wrote:

I don't understand how the non-e version of this list relates to either the ABI 
or the architecture, so it's really hard to know what this should be doing in 
the e case. I'm also somewhat surprised that the list in this function is 
different from the one below, in save function. Shouldn't these be somewhat 
symmetric (barring having to do things with a few registers which represent 
unwinder state, like in this case `a0`).

The non-e version is restoring all the argument registers, some (not all) of 
the callee-saves, and some (not all) of the temporary registers. Are there good 
docs as to why it is doing so?

I think we might need to restore according to the architecture rather than the 
ABI, so that we restore live temporary registers correctly, but I'm not 
entirely sure, and if i could understand what the non-e case was doing better, 
I'd be able to give a clearer steer as to which this should be based on.





https://github.com/llvm/llvm-project/pull/98855
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to