public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [PATCH] Adding target rdos to GCC
@ 2013-01-06 20:32 Uros Bizjak
  2013-01-07 22:13 ` Leif Ekblad
  0 siblings, 1 reply; 16+ messages in thread
From: Uros Bizjak @ 2013-01-06 20:32 UTC (permalink / raw)
  To: gcc-patches; +Cc: Leif Ekblad, H.J. Lu

[-- Attachment #1: Type: text/plain, Size: 1843 bytes --]

Hello!

> Updated patches with the suggestions below, except that the initial value is 0
> (which is not meaningful). I also added a setting in rdos target file to use r15
> for PIC instead of rbx.

*** gcc-4.8-20121230/gcc/config/i386/i386.c	Thu Dec 27 02:58:06 2012
--- gcc-work/gcc/config/i386/i386.c	Sun Jan  6 14:10:34 2013

+   if (ix86_section_threshold == 0)
+     ix86_section_threshold = DEFAULT_SECTION_THRESHOLD;

Please see attached patch on how to initialize an option.

*** gcc-4.8-20121230/gcc/config/i386/i386.h	Wed Dec 19 17:04:12 2012
--- gcc-work/gcc/config/i386/i386.h	Sun Jan  6 13:24:26 2013

+ #define TARGET_MEDIUM_PIC   0

You should just use TARGET_RDOS here (also, please see attached patch).

+ /* Default threshold for putting data in large sections with x86-64
+    medium memory model */
+ #define DEFAULT_SECTION_THRESHOLD 65536

Do not put this define in the middle of i386.h section that deals with
alignment...

*** gcc-4.8-20121230/gcc/config/i386/rdos.h	Thu Jan  1 01:00:00 1970
--- gcc-work/gcc/config/i386/rdos.h	Sun Jan  6 13:20:12 2013

+ #undef REAL_PIC_OFFSET_TABLE_REGNUM
+ #define REAL_PIC_OFFSET_TABLE_REGNUM  R15_REG

Is this header also used for 32bit target? You should not use REX
registers for 32bit targets.

+ #undef TARGET_MEDIUM_PIC
+ #define TARGET_MEDIUM_PIC           1

TARGET_RDOS

+ #define DEFAULT_SECTION_THRESHOLD    0x10

No hex numbers here. Also, you will need to #undef this first to
override the default in i386.h.

*** gcc-4.8-20121230/gcc/config.gcc	Thu Nov 22 00:33:40 2012
--- gcc-work/gcc/config.gcc	Fri Jan  4 21:08:46 2013

+ i[34567]86-*-rdos*)
+     tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h
newlib-stdint.h"
+     ;;

You forgot to include i386/rdos.h here (other headers too?). It is
needed at least for TARGET_EXECUTABLE_SUFFIX define.

Uros.

[-- Attachment #2: r.diff.txt --]
[-- Type: text/plain, Size: 1741 bytes --]

Index: i386.c
===================================================================
--- i386.c	(revision 194945)
+++ i386.c	(working copy)
@@ -3239,6 +3239,8 @@
 	 DLL, and is essentially just as efficient as direct addressing.  */
       if (TARGET_64BIT && DEFAULT_ABI == MS_ABI)
 	ix86_cmodel = CM_SMALL_PIC, flag_pic = 1;
+      else if (TARGET_64BIT && TARGET_RDOS)
+	ix86_cmodel = CM_MEDIUM_PIC, flag_pic = 1;
       else if (TARGET_64BIT)
 	ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
       else
Index: i386.h
===================================================================
--- i386.h	(revision 194945)
+++ i386.h	(working copy)
@@ -519,6 +519,9 @@
 #define MACHOPIC_INDIRECT 0
 #define MACHOPIC_PURE 0
 
+/* For the RDOS  */
+#define TARGET_RDOS 0
+
 /* For the Windows 64-bit ABI.  */
 #define TARGET_64BIT_MS_ABI (TARGET_64BIT && ix86_cfun_abi () == MS_ABI)
 
@@ -2081,6 +2084,10 @@
    asm (SECTION_OP "\n\t"					\
 	"call " CRT_MKSTR(__USER_LABEL_PREFIX__) #FUNC "\n"	\
 	TEXT_SECTION_ASM_OP);
+
+/* Default threshold for putting data in large sections
+   with x86-64 medium memory model */
+#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
 \f
 /* Which processor to tune code generation for.  */
 
Index: i386.opt
===================================================================
--- i386.opt	(revision 194945)
+++ i386.opt	(working copy)
@@ -141,7 +141,7 @@
 Branches are this expensive (1-5, arbitrary units)
 
 mlarge-data-threshold=
-Target RejectNegative Joined UInteger Var(ix86_section_threshold) Init(65536)
+Target RejectNegative Joined UInteger Var(ix86_section_threshold) Init(DEFAULT_LARGE_SECTION_THRESHOLD)
 Data greater than given threshold will go into .ldata section in x86-64 medium model
 
 mcmodel=

^ permalink raw reply	[flat|nested] 16+ messages in thread
* [PATCH] Adding target rdos to GCC
@ 2013-01-04 22:21 Leif Ekblad
  2013-01-04 22:32 ` H.J. Lu
  0 siblings, 1 reply; 16+ messages in thread
From: Leif Ekblad @ 2013-01-04 22:21 UTC (permalink / raw)
  To: GCC Patches

[-- Attachment #1: Type: text/plain, Size: 559 bytes --]

Change log:
* config/gthr.m4: Added rdos thread header.
* gcc/config/i386/i386.c: Provided a way to define a default setting for 
medium memory model and PIC. Provided a way to define a default value for 
large-data-threshold.
* gcc/config/i386/i386.h: Defined default value for medium memory model & 
PIC.
* gcc/config/i386/rdos.h: Added new file for rdos target definition.
* gcc/config.gcc: Added rdos target

The change to gthr.m4 requires rebuilding the configure scripts.

Tested with target rdos and rdos32. Is this ok for trunk?

Regards,
Leif Ekblad

[-- Attachment #2: gcc.diff --]
[-- Type: application/octet-stream, Size: 4333 bytes --]

diff -crN gcc-4.8-20121230/config/gthr.m4 gcc-work/config/gthr.m4
*** gcc-4.8-20121230/config/gthr.m4	2012-10-15 15:10:30.000000000 +0200
--- gcc-work/config/gthr.m4	2013-01-03 08:30:36.152649600 +0100
***************
*** 21,26 ****
--- 21,27 ----
      tpf)	thread_header=config/s390/gthr-tpf.h ;;
      vxworks)	thread_header=config/gthr-vxworks.h ;;
      win32)	thread_header=config/i386/gthr-win32.h ;;
+     rdos)	thread_header=config/i386/gthr-rdos.h ;;
  esac
  AC_SUBST(thread_header)
  ])
diff -crN gcc-4.8-20121230/gcc/config/i386/i386.c gcc-work/gcc/config/i386/i386.c
*** gcc-4.8-20121230/gcc/config/i386/i386.c	2012-12-27 02:58:06.000000000 +0100
--- gcc-work/gcc/config/i386/i386.c	2013-01-04 13:39:39.746426400 +0100
***************
*** 3239,3244 ****
--- 3239,3246 ----
  	 DLL, and is essentially just as efficient as direct addressing.  */
        if (TARGET_64BIT && DEFAULT_ABI == MS_ABI)
  	ix86_cmodel = CM_SMALL_PIC, flag_pic = 1;
+       else if (TARGET_64BIT && TARGET_MEDIUM_PIC)
+     ix86_cmodel = CM_MEDIUM_PIC, flag_pic = 1;
        else if (TARGET_64BIT)
  	ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
        else
***************
*** 3919,3924 ****
--- 3921,3930 ----
        && !(target_flags_explicit & MASK_LONG_DOUBLE_64))
      target_flags |= MASK_LONG_DOUBLE_64;
  
+ #ifdef TARGET_SECTION_THRESHOLD
+   ix86_section_threshold = TARGET_SECTION_THRESHOLD;
+ #endif
+ 
    /* Save the initial options in case the user does function specific
       options.  */
    if (main_args_p)
diff -crN gcc-4.8-20121230/gcc/config/i386/i386.h gcc-work/gcc/config/i386/i386.h
*** gcc-4.8-20121230/gcc/config/i386/i386.h	2012-12-19 17:04:11.000000000 +0100
--- gcc-work/gcc/config/i386/i386.h	2013-01-03 08:30:36.175651900 +0100
***************
*** 86,91 ****
--- 86,93 ----
  #define TARGET_LP64	TARGET_ABI_64
  #define TARGET_X32	TARGET_ABI_X32
  
+ #define TARGET_MEDIUM_PIC   0
+ 
  /* SSE4.1 defines round instructions */
  #define	OPTION_MASK_ISA_ROUND	OPTION_MASK_ISA_SSE4_1
  #define	TARGET_ISA_ROUND	((ix86_isa_flags & OPTION_MASK_ISA_ROUND) != 0)
diff -crN gcc-4.8-20121230/gcc/config/i386/rdos.h gcc-work/gcc/config/i386/rdos.h
*** gcc-4.8-20121230/gcc/config/i386/rdos.h	1970-01-01 01:00:00.000000000 +0100
--- gcc-work/gcc/config/i386/rdos.h	2013-01-04 13:41:21.409591700 +0100
***************
*** 0 ****
--- 1,19 ----
+ 
+ /* RDOS uses .exe suffix */
+ #undef TARGET_EXECUTABLE_SUFFIX
+ #define TARGET_EXECUTABLE_SUFFIX ".exe"
+ 
+ #undef TARGET_MEDIUM_PIC
+ #define TARGET_MEDIUM_PIC           1
+ #define TARGET_SECTION_THRESHOLD    0x10
+ 
+ #define TARGET_OS_CPP_BUILTINS()                \
+   do                                            \
+     {                                           \
+         builtin_define ("__RDOS__");            \
+         builtin_assert ("system=rdos");         \
+     }                                           \
+   while (0)
+ 
+ /* RDOS headers are C++-aware (and often use C++).  */
+ #define NO_IMPLICIT_EXTERN_C
diff -crN gcc-4.8-20121230/gcc/config.gcc gcc-work/gcc/config.gcc
*** gcc-4.8-20121230/gcc/config.gcc	2012-11-22 00:33:40.000000000 +0100
--- gcc-work/gcc/config.gcc	2013-01-04 14:43:38.598930800 +0100
***************
*** 739,744 ****
--- 739,750 ----
    use_gcc_stdint=wrap
    tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC SINGLE_LIBC"
    ;;
+ *-*-rdos*)
+   case ${enable_threads} in
+     "" | yes | rdos) thread_file='rdos' ;;
+   esac
+   use_gcc_stdint=wrap
+   ;;
  *-*-solaris2*)
    # i?86-*-solaris2* needs to insert headers between cpu default and
    # Solaris 2 specific ones.
***************
*** 1205,1210 ****
--- 1211,1223 ----
  x86_64-*-elf*)
  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
  	;;
+ i[34567]86-*-rdos*)
+     tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h"
+     ;;
+ x86_64-*-rdos*)
+     tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h  i386/x86-64.h i386/rdos.h"
+     tmake_file="i386/t-i386elf t-svr4"
+     ;;
  i[34567]86-*-freebsd*)
  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
  	;;

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-05-13 19:03 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-06 20:32 [PATCH] Adding target rdos to GCC Uros Bizjak
2013-01-07 22:13 ` Leif Ekblad
2013-01-08 20:32   ` Leif Ekblad
2013-01-09  6:58     ` Uros Bizjak
2013-01-09  8:38       ` Richard Biener
2013-01-28  6:51         ` Leif Ekblad
2013-01-28  7:23           ` Uros Bizjak
2013-01-28 19:58             ` Leif Ekblad
2013-01-28 20:03               ` Uros Bizjak
2013-01-28 20:14                 ` Leif Ekblad
2013-01-28 20:45                   ` Uros Bizjak
2013-01-28 21:44                     ` Leif Ekblad
2013-05-13 19:03                     ` Using GS for TLS on x86-64 for target RDOS Leif Ekblad
  -- strict thread matches above, loose matches on Subject: below --
2013-01-04 22:21 [PATCH] Adding target rdos to GCC Leif Ekblad
2013-01-04 22:32 ` H.J. Lu
2013-01-06 17:08   ` Leif Ekblad

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).