This is the mail archive of the
mailing list for the GCC project.
Re: [patch,m68k] Get rid of #ifdef MOTOROLA
- From: Bernardo Innocenti <bernie at develer dot com>
- To: Gunther Nikl <gni at gecko dot de>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Andreas Schwab <schwab at suse dot de>
- Date: Sat, 08 Nov 2003 09:10:50 +0100
- Subject: Re: [patch,m68k] Get rid of #ifdef MOTOROLA
- Organization: Develer S.r.l.
- References: <3FAB4BFA.firstname.lastname@example.org> <20031107110030.GA73880@lorien.int.gecko.de>
Gunther Nikl wrote:
As discussed with Gunther Nikl a few weeks days ago, this patch turns
most occurrences of "#ifdef MOTOROLA" in m68k.c to C statements
testing for its value.
Most is not good enough I am afraid. All occurrences must be converted
and it seems you forgot the MD file. I also believe config.gcc must
get adjusted since MOTOROLA is already present in some tm_defines.
Well, actually MOTOROLA will be _undefined_ in all files but m68k.c.
It's only there that I define it conditionally to 0 if it is undefined.
In all other places, MOTOROLA is set to 1. Well, you're right about the
tm_defines. I'll see if it's possible to preset a value for it.
Otherwise, I could do this in m68k.c:
/* Force a truth value for MOTOROLA. */
# undef MOTOROLA
# define MOTOROLA 1
# define MOTOROLA 0
Regtesting on a MIT target would be highly desiderable before applying,
but I have no easy way to do it.
Since the MD file isn't converted I don't think I can test it.
I have some comments on the patch.
You can. I'd suggest converting m68k.md later, because it's already
a massive patch now, and the place where it makes most sense to do
this change is m68k.c anyway.
diff -u -p -u -p -r1.119 m68k.c
--- gcc/config/m68k/m68k.c 30 Oct 2003 00:55:15 -0000 1.119
+++ gcc/config/m68k/m68k.c 7 Nov 2003 07:15:19 -0000
+#define MOTOROLA 0 /* Use the MIT syntax */
I don't think this the correct way to define MOTOROLA if its not defined.
It should be defined in m68k.h to a value used by the majority of targets.
All other targets must provide the value through config.gcc.
I agree, but we can do that only when all of config/m68k/ has been converted.
Wouldn't it be better to do it in two or more steps?
+/* The ASM_DOT macro allows easy string pasting to handle the differences
+ between MOTOROLA and MIT syntaxes in asm_fprintf(). */
+# define ASM_DOT "."
+# define ASM_DOTW ".w"
+# define ASM_DOTL ".l"
+# define ASM_DOT ""
+# define ASM_DOTW ""
+# define ASM_DOTL ""
This would have to be in m68k.h then. BTW, you should mention the fact
that asm_fprintf doesn't handle "%." ;-)
Yeah... that would be the famous place where it would make sense to
tell it at once ;-)
- fprintf (stream, "\tpea (%s)\n\tmove.l %s,%s\n",
- fprintf (stream, "\tpea %s@\n\tmovel %s,%s\n",
+ fprintf (stream, MOTOROLA ?
+ "\tpea (%s)\n\tmove.l %s,%s\n" :
+ "\tpea %s@\n\tmovel %s,%s\n",
else if (fsize_with_regs < 0x8000)
I like this transformation but be careful with argument order.
Yes, it's not possible in all places. This one works by luck ;)
- if (TARGET_COLDFIRE)
- asm_fprintf (stream, "\t%Omove.l %I%d,%Ra1\n",
- -fsize - current_frame.offset);
- asm_fprintf (stream, "\tmovel %I%d,%Ra1\n",
- -fsize - current_frame.offset);
- asm_fprintf (stream, "\t%Omove.l %I%wd,%Ra1\n", -fsize);
- asm_fprintf (stream, "\tmovel %I%wd,%Ra1\n", -fsize);
+ asm_fprintf (stream, "\t%Omove" ASM_DOT "l %I%wd,%Ra1\n",
+ TARGET_COLDFIRE ? -fsize - current_frame.offset : -fsize);
This might be wrong because the MOTOROLA case has %O and the non-MOTOROLA
case doesn't have it.
%O replaces an opcode with its assembler specific version. It shouldn't
affect MIT syntax output. On the countrary, we could take advantage of it
to merge more instructions: those where the only difference is in the
Then I would prefer to adjust fsize before the printf
since fsize is clobbered after that statement:
fsize = 0, big = true;
You're right, the change you suggest would also allow me to move the
ColdFire specific comment next to ColdFire specific code.
Lastly, it might be a good idea to turn most other symbols used in
#if[n]def into 0/1 defines eg. SGS, SGS_CMP_ORDER, USE_GAS, HPUX_ASM.
That might be the next step.
Yes, I was planning to do that too, but then I noticed that the SGS
assembler is only used by m68k-*-sysv and m68k-*-hp*, both of which
are good candidates for obsoletion in 3.5. So it's probably not worth
// Bernardo Innocenti - Develer S.r.l., R&D dept.