Hello,

I've studied the GCC3.3.2's patch for building h8300 toolchains and I've learned its mechanism and I am encountered with new question.
Would you please teach me.

When gcc-configuration makes libgcc.a,double must be 64 bits,and when making h8300-elf-gcc double must be 32 bits.
In order to distinguish two targets the patch exhanges next lines.

-#define LONG_LONG_TYPE_SIZE 32
+#define LONG_LONG_TYPE_SIZE (TARGET_INT32 ? 64 : 32)
-#define DOUBLE_TYPE_SIZE 32
+#define DOUBLE_TYPE_SIZE (TARGET_INT32 ? 64 : 32)

And there were next codes in GCC3.3.2's /gcc/config/h8300/h8300.h.

--- from GCC3.3.2's /gcc/config/h8300/h8300.h
/* Run-time compilation parameters selecting different hardware subsets.  */

extern int target_flags;

/* Masks for the -m switches.  */
#define MASK_H8300S  0x00000001
#define MASK_MAC  0x00000002
#define MASK_INT32  0x00000008
#define MASK_ADDRESSES  0x00000040
#define MASK_QUICKCALL  0x00000080
#define MASK_SLOWBYTE  0x00000100
#define MASK_NORMAL_MODE  0x00000200
#define MASK_RELAX  0x00000400
#define MASK_RTL_DUMP  0x00000800
#define MASK_H8300H  0x00001000
#define MASK_ALIGN_300  0x00002000

/* Macros used in the machine description to test the flags.  */

/* Make int's 32 bits.  */
#define TARGET_INT32 (target_flags & MASK_INT32)

/* Dump recorded insn lengths into the output file.  This helps debug the
  md file.  */
#define TARGET_ADDRESSES (target_flags & MASK_ADDRESSES)

/* Pass the first few arguments in registers.  */
#define TARGET_QUICKCALL (target_flags & MASK_QUICKCALL)

/* Pretend byte accesses are slow.  */
#define TARGET_SLOWBYTE (target_flags & MASK_SLOWBYTE)

/* Dump each assembler insn's rtl into the output file.
  This is for debugging the compiler only.  */
#define TARGET_RTL_DUMP (target_flags & MASK_RTL_DUMP)
---

But there are not above codes in GCC4.4.0's /gcc/config/h8300/h8300.h !!!

I tentatively added above codes in GCC4.4.0's /gcc/config/h8300/h8300.h and applied patch codes and tried to configure gcc. Altough there was not error in configuration,but when I built application using h8300-elf-gcc there appeared previous error saying libgcc.a must be 64-bit doubles.

-- error
/opt/ecos/ecos-3.0/packages/language/c/libm/v3_0/src/mathincl/fdlibm.h:78:3: error: #error IEEE-style 64-bit doubles are required to use the math library

I presumed in GCC4.4.0 or newer GCC,target_flags does not function as the same as in GCC3.3.2.

Now the question is ;
Do you think my concocted patch using TARGET_INT32 (target_flags & MASK_INT32) usable in GCC4.4.0 ? If it is usable, am I right in supposing that configuration succeeded in building libgcc.a 64 bits double and h8300-elf-gcc 32 bits double ?
And above mentioned error was caused by another problem ?

If it is not usable would you teach me what mechanism is used in newer GCC versions to differ libgcc.a 64 bits double and h8300-elf-gcc 32 bits double ? How should I distinguish targets, libgcc.a and h8300-elf-gcc, in configuring ?

Would you please enlighten me ?

Masahiro Ariga



Reply via email to