This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: core changes for mep port


> Earlier you sent out a patch preventing inlining.  That suggests that
> you can not compile code to run on both the main processor and the
> coprocessor at the same time.

No, that's not how it works.  We always support both the main
processor and the coprocessor at the same time, in the same
compilation, in the same function.  The inlining keeps us from mixing
VLIW and non-VLIW mode at the same time, since VLIW mode has a wider
range (superset) of opcodes, so if you use a __builtin_* or asm() that
only works in VLIW mode, you can't inline it into a non-VLIW function
because those __builtin's or asm()'s won't work.

What you're suggesting is similar to having to move all i686 floating
point operations into a separate file from the integer operations.

> If that is correct, then why do you need these coprocessor modes?
> For example, why can't you set the mode in struct machine_function
> and check that when recognizing insns?

No, it's more like this:

typedef int copsi __attribute__((mode(COPSI)));

void foo (int *a, copsi *b, int i)
{
  while (i--)
  {
    *a *= 2;
    *b *= 2;
  }
}

This will keep both the core multiplier and the coprocessor multiplier
busy.

Since both units run simultaneously, we need two sets of modes, one
for each unit, so the programmer can indicate which unit each
operation belongs on.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]