https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97715
--- Comment #10 from Qing Zhao <qing.zhao at oracle dot com> --- > On Nov 4, 2020, at 9:45 AM, ubizjak at gmail dot com > <gcc-bugzi...@gcc.gnu.org> wrote: >> fixed registers should already be excluded from zeroing. >> are ST registers considered FIXED registers when -mno-80387 is specified? > > They used to be, I used the following in middle end to exclude fixed registers from being zeroed: if (fixed_regs[regno]) continue; So, looks like that ST registers are not included in fixed_regs when !TARGET_80387. Is this a bug in gcc? > but now they are cleared from accessible_reg_set. > > /* If the FPU is disabled, disable the registers. */ > if (! (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387)) > accessible_reg_set &= ~reg_class_contents[FLOAT_REGS]; The above means that ST registers are excluded from the accessible_reg_set, i.e, they cannot be used in the function body anymore? Then, no need to zero them? Is this information available to middle end? Or I have to delete them from the register set in i386 backend?