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