Matthew Fortune <matthew.fort...@imgtec.com> writes:
> Richard Sandiford <rdsandif...@googlemail.com> writes:
>> Matthew Fortune <matthew.fort...@imgtec.com> writes:
>> > As it stands I wasn't planning on supporting .module arch= I was just
>> > going to add .module fp= and leave it at that. The only thing I need
>> > to give assembly code writers absolute control over is the overall FP
>> > mode of the module. I don't currently see any real need to increase
>> > the control a user has over architecture level. If we had .module
>> > arch= then having it just set the arch ignorant of FP mode seems fine,
>> > checking for erroneous combinations would be difficult due to some
>> > chicken and egg scenarios. Do you think I need to add .module arch= if
>> > I add .module fp= or can I take the easy option?
>> 
>> Despite the "arch controlling fp" difference, I think .set and .module
>> should use common parsing code.  I.e. we should generalise s_mipsset to
>> handle both of them rather than write a second parsing function for
>> .module.
>> There will be some cases where the function has to check "is this .set?"
>> (e.g. push/pop), but that's good IMO, because it makes the differences
>> obvious.
>> 
>> If we do have a common routine then we should make .module handle
>> everything it can handle rather than just fp=.
>
> Every case would need to look at set vs module as .set writes to
> mips_opts and .module writes to things like file_mips_arch? I suppose I
> could just rework all the global options to be part of a single
> mips_set_options structure to abstract this. Does that sound OK?

Yeah, that's the kind of thing I was thinking of.  FWIW, if this is feeling
like feature creep then I have a go this weekend.

> The push/pop case (and perhaps some others) will still need special
> handling to prohibit them for .module.

Right.  But like I say, that's good IMO, since the differences become
more obvious than they'd be with two different implementations.

> Back to one of your questions discussing things like:
>
> .module fp=xx
> .module arch=mips2
>
> An easy option would be to continue to have the arch options infer fp32
> or fp64 and require the .module fp=xx to come second. Then we just have
> error checking on the .module fp= option to ensure it is suitable for
> use with the previously specified architecture.

I don't think it's a good idea for the order of the .modules to matter.
I think as far as possible, putting .module in the code should be the
same as passing the associated command-line option.

It probably makes sense to prohibit .module after an instruction has
been assembled or after .set has been seen.  We could then handle the
.module-adjusted options at those points (or at the end, if there are
no .sets and no instructions).

> With .module in place like this then I expect the compiler should then
> start to record more information in the assembly text to indicate things
> like arch as well as fp. Obviously this will be tied to a configure time
> assembler feature test.

Agreed.

Thanks,
Richard

Reply via email to