https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108595
--- Comment #3 from Idan Horowitz <idan.horowitz at gmail dot com> --- (In reply to Andrew Pinski from comment #2) > I am suspecting this is just an invalid option to use here. a1 is indeed used for argument passing, it's used to pass the second argument. I don't think the GCC documentation forbids using `fcall-saved` for caller-saved argument registers, only for the return value register. (a0) I'm using this on a boundary where the caller function assumes it can re-use the the argument registers (a1-a7) without saving them. This has been working fine for more than a year at this point - this is just the first time I tried using an asm statement, so also the first time I encountered this issue. It's not obvious to me why GCC even save/restores it around the asm statement based on this option, since it's not a function call boundary.