https://bugzilla.gdcproject.org/show_bug.cgi?id=266
Johannes Pfau <johannesp...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |johannesp...@gmail.com --- Comment #1 from Johannes Pfau <johannesp...@gmail.com> --- Interesting. Is there any documentation for these functions? I'm wondering whether these functions are always guaranteed to save/restore all registers? And why is __builtin_unwind_init required? Is this used to mark registers as 'live' as written in some exception documentation? We probably have to be careful when calling the builtin directly: https://github.com/gcc-mirror/gcc/blob/master/gcc/ipa-split.c#L928 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31128 Also generated ARM code looks basically good, but there's one thing I don't understand: https://explore.dgnu.org/g/U2QTsK push {r4, r5, r6, r7, r8, r9, r10, fp} add fp, sp, #28 str sp, [r0] mov sp, r1 sub sp, fp, #28 pop {r4, r5, r6, r7, r8, r9, r10, fp} bx lr What is the add/sub fp code supposed to do? Doesn't this actually restore the old stack pointer (have to look up the ARM assembler operand order, but isn't add.. => fp = sp+28 and sub... => sp = fp-28 which restores the old sp?). -- You are receiving this mail because: You are watching all bug changes.