https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88178
--- Comment #7 from Uroš Bizjak <ubizjak at gmail dot com> --- A quick smoke-test of the idea from Comment #3. The following patch: --cut here-- diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 95abde95f89d..e126fdcb8480 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4775,9 +4775,8 @@ ix86_conditional_register_usage (void) /* If MMX is disabled, squash the registers. */ if (! TARGET_MMX) - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) - if (TEST_HARD_REG_BIT (reg_class_contents[(int)MMX_REGS], i)) - fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = ""; + AND_COMPL_HARD_REG_SET (accessible_reg_set, + reg_class_contents[(int) MMX_REGS]); /* If SSE is disabled, squash the registers. */ if (! TARGET_SSE) --cut here-- and the following testcase void foo (int i) { register int c __asm__ ("mm0") = i; asm volatile ("%0" : : "y"(c) : "mm1"); } generate following warning (-mno-mmx): mm.c: In function ‘foo’: mm.c:3:16: error: the register specified for ‘c’ cannot be accessed by the current target where without the patch: mm.c: In function ‘foo’: mm.c:3:16: error: invalid register name for ‘c’ mm.c:4:3: error: unknown register name ‘mm1’ in ‘asm’ IMO, the new error is better, but something should be done to detect invalid clobber name.