https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99144

            Bug ID: 99144
           Summary: -mtune=68040 doesn't respect restrictions set by
                    -march=68060
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: miro.kropacek at gmail dot com
  Target Milestone: ---

man gcc states:

-m68060
[...]
This option inhibits the use of 68020 and 68881/68882 instructions that have to
be emulated by software on the 68060.

-mtune=tune
Tune the code for a particular microarchitecture, within the constraints set by
-march and -mcpu.

... and yet when I compile this code with -march=68060 -mtune=68040:

extern float x(int i);
extern unsigned long long y(int h);
extern unsigned long long z;

int main() {
    z = y(0)*y(1);
    return 0;
}

I can see a "mulu.l %d1,%d1:%d2" generated in the final code. This shouldn't be
possible as the 64-bit mulu has to be emulated by software on the 68060.

The same can be observered in a reverse scenario when "fintrz" (emulated on
040)  is generated even if I set -march=68040 -mtune=68060.

Looking into m68k.md and m68k.h the reason is obvious, there is no TARGET_68060
defined, i.e. 040 and 060 instruction sets are considered equal and only
TUNE_68040 and TUNE_68060 is taken into account.

Reply via email to