Added patch that introduces cache barriers to be used when building SGI IP28 kernels...
authorJoshua Kinard <kumba@gentoo.org>
Sun, 9 Jan 2005 19:02:54 +0000 (19:02 +0000)
committerJoshua Kinard <kumba@gentoo.org>
Sun, 9 Jan 2005 19:02:54 +0000 (19:02 +0000)
sys-devel/gcc/ChangeLog
sys-devel/gcc/Manifest
sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch [new file with mode: 0644]
sys-devel/gcc/gcc-3.4.3-r1.ebuild

index 6523218936294640352b3fd791ecc30101d399d8..efdc6a2c2b4bd8c09780ec410b4cd8dea2bb2253 100644 (file)
@@ -1,6 +1,12 @@
 # ChangeLog for sys-devel/gcc
 # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/ChangeLog,v 1.365 2005/01/07 01:47:41 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/ChangeLog,v 1.366 2005/01/09 19:02:53 kumba Exp $
+
+  09 Jan 2005; Joshua Kinard <kumba@gentoo.org>
+  +files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch, gcc-3.4.3-r1.ebuild:
+  Added patch that introduces cache barriers to be used when building SGI IP28
+  kernels. Only enabled by passing -mip28-cache-barriers. Only patched in if USE
+  ip28 is set, so non-ip28 mips systems will never see this option.
 
   06 Jan 2005; Mike Frysinger <vapier@gentoo.org> gcc-3.3.5-r1.ebuild:
   Update pie patches to fix order #72665.
index 2b580baf4a56663937ee48fb30cd4a4f2ec9a9da..c7c55496187f05fb82711ebb5946cf9c07695b8c 100644 (file)
@@ -1,10 +1,9 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-MD5 6349445e53ce88c6e37b0e976298e9bc ChangeLog 76285
+MD5 1e1f16a6323039d80ce92fab4eabefad ChangeLog 76639
 MD5 1cc192aba411ac83ab6905c2d3c1cb2d gcc-2.95.3-r8.ebuild 8432
 MD5 4ae030bd0b7fd0ef5c859b8ca2d32436 gcc-3.2.3-r4.ebuild 19729
+MD5 a19b796e70f4c208766e6c3783ba0698 gcc-3.4.3-r1.ebuild 16226
 MD5 b722492a21537c1ec3a15acb8f11a387 gcc-3.3.2-r2.ebuild 17859
+MD5 c95b8ce242223591493672f9540b387a gcc-3.3.5-r1.ebuild 12485
 MD5 e8b561dbb0d86dcee9ca99b835813d92 gcc-3.3.2-r5.ebuild 21183
 MD5 778e3f9f0a84fb7e8c477880027fe39d gcc-3.3.2-r7.ebuild 21588
 MD5 3384a275321a4ed8869bfb2d740eb74b gcc-3.3.2.ebuild 16693
@@ -12,47 +11,35 @@ MD5 9480816d969717d52d56af9da7b2df12 gcc-3.3.3-r3.ebuild 23403
 MD5 521e5a311811e8eb920198e20a7c433f gcc-3.3.3-r6.ebuild 24793
 MD5 5b214acf30ab089dfd7d79f8115bbdd6 gcc-3.3.4-r1.ebuild 24684
 MD5 32a49c379c995aa266bd40448f16480c gcc-3.3.4-r2.ebuild 24489
-MD5 c95b8ce242223591493672f9540b387a gcc-3.3.5-r1.ebuild 12485
 MD5 8d5444efd838da5c75c82e64e2625dfd gcc-3.4.1-r3.ebuild 31269
 MD5 1fef307d644a7f84c935236c8b6be083 gcc-3.4.2-r2.ebuild 13486
-MD5 e9b2376ce1618d16fe45f39f96d5fc58 gcc-3.4.3-r1.ebuild 15352
 MD5 d81ef073d429d7ed3d5393ecffc4e610 gcc-3.4.3.ebuild 13254
 MD5 567094e03359ffc1c95af7356395228d metadata.xml 162
 MD5 f7e7042c2ddf66e344b30cbc66ebaf73 files/cc 24
 MD5 80d122265d3062847a4a1b161abe1d26 files/cpp 24
 MD5 3213bd50acdbbd71ce7dd3e40710e30e files/digest-gcc-2.95.3-r8 64
-MD5 5a9db19cd5ad6ad16b0f838d525d842a files/digest-gcc-3.3.3-r3 522
-MD5 9b68e03bb1a6a1494399c8a6537bb766 files/digest-gcc-3.4.3-r1 527
 MD5 a3edf5e9d8bb500178f8dd29c1f9eadd files/digest-gcc-3.3.5-r1 442
-MD5 3fd5a29d44b89f4fb220fccaa968fc05 files/digest-gcc-3.3.3-r6 442
-MD5 d197c7ddd1a614b89bddbc3babb31c3b files/digest-gcc-3.4.3 442
-MD5 69687aac826654ad375b7eae45a01e0b files/digest-gcc-3.4.2-r2 443
-MD5 6df16eb92245a931ecfc4cbcc73c84cf files/digest-gcc-3.3.4-r1 442
+MD5 40e6872c09149a81973f01a78c80bbb7 files/digest-gcc-3.2.3-r4 279
+MD5 9b68e03bb1a6a1494399c8a6537bb766 files/digest-gcc-3.4.3-r1 527
 MD5 cf81ae4b2da79c34a005da1182c40134 files/digest-gcc-3.3.2 130
 MD5 f48105f24e5c714530e66a94aa56d615 files/digest-gcc-3.3.2-r2 361
+MD5 01c41c9e6857eb40d402f2acb2bd96f9 files/digest-gcc-3.3.2-r5 361
+MD5 e58b6c1f3122b79a5d0d273acc3c008c files/digest-gcc-3.3.2-r7 361
+MD5 5a9db19cd5ad6ad16b0f838d525d842a files/digest-gcc-3.3.3-r3 522
+MD5 3fd5a29d44b89f4fb220fccaa968fc05 files/digest-gcc-3.3.3-r6 442
+MD5 6df16eb92245a931ecfc4cbcc73c84cf files/digest-gcc-3.3.4-r1 442
+MD5 6df16eb92245a931ecfc4cbcc73c84cf files/digest-gcc-3.3.4-r2 442
+MD5 c6ea8a92bac6d2638c54c011f98bc5b8 files/digest-gcc-3.4.1-r3 442
+MD5 69687aac826654ad375b7eae45a01e0b files/digest-gcc-3.4.2-r2 443
+MD5 d197c7ddd1a614b89bddbc3babb31c3b files/digest-gcc-3.4.3 442
 MD5 9bb4a999eb75c9e3eadab9aa71e91879 files/fix_libtool_files.sh 1731
 MD5 60e02a7ee2f579ac72ab223679d81e7a files/gcc-spec-env.patch 819
-MD5 ea2cf3df0d89a26d5fdc1a531176e395 files/pro-police-docs.patch 3287
 MD5 8baffb486c75efe253bd2daa88daa7d6 files/gcc331_use_multilib.amd64.patch 352
 MD5 e3193bdffb435b77a21bfb504ff6f591 files/mkinfodir 7324
+MD5 ea2cf3df0d89a26d5fdc1a531176e395 files/pro-police-docs.patch 3287
 MD5 07b57d62aa1a8cd4d1cd37984ebe2053 files/scan_libgcc_linked_ssp.sh 861
-MD5 01c41c9e6857eb40d402f2acb2bd96f9 files/digest-gcc-3.3.2-r5 361
-MD5 6df16eb92245a931ecfc4cbcc73c84cf files/digest-gcc-3.3.4-r2 442
-MD5 40e6872c09149a81973f01a78c80bbb7 files/digest-gcc-3.2.3-r4 279
-MD5 e58b6c1f3122b79a5d0d273acc3c008c files/digest-gcc-3.3.2-r7 361
-MD5 c6ea8a92bac6d2638c54c011f98bc5b8 files/digest-gcc-3.4.1-r3 442
 MD5 b1a242694f56184cbcdd40ba25800d50 files/2.95.3/gcc-2.95.3-alpha.diff 14345
 MD5 523970c128b929fe7c7cf36508ebd1d5 files/2.95.3/gcc-2.95.3-new-atexit.diff 13604
-MD5 27120401d2355e5d959b8d2d55eba310 files/3.3.4/gcc334-gentoo-branding.patch 876
-MD5 8c779f2dca6ab1b5b95e2ee211d26c8c files/3.3.4/gcc-3.3.4-spec-env.patch 786
-MD5 5fb5b49f3f16cc9e7e27e582c92ffa2f files/3.3.4/libffi-without-libgcj.patch 890
-MD5 86ae592deb82c4564eb61f770fe5f8a7 files/3.4.1/gcc-3.4.1-gentoo-branding.patch 759
-MD5 df06b1cf70425c78e2e59136ed372ab4 files/3.4.1/gcc341-ppc64-mozilla-ICE-fix.patch 729
-MD5 14fec2000fc63536d4cf22195e88e14f files/3.4.1/gcc-3.4.1-r2-gentoo-branding.patch 781
-MD5 cd770c23ece7458db5e6c5067f262ce0 files/3.4.1/gcc-3.4.1-glibc-is-native.patch 760
-MD5 7cb2138ac2df6f8674d19974e966a45b files/3.4.1/gcc-3.4.1-mips-n32only.patch 614
-MD5 aa8e15a63d797df37bbd4e489ed0267f files/3.4.1/gcc-3.4.1-mips-n64only.patch 614
-MD5 97d7409ba5038bea85f9cabe023e28a6 files/3.4.1/gcc-3.4.1-spec-env.patch 755
 MD5 3f6d070c2a4a899e7d879fdb55eecba4 files/3.4.3/libffi-nogcj-lib-path-fix.patch 1691
 MD5 007c62d92efd70fd44c4d2e6a326036b files/3.4.3/libffi-without-libgcj.patch 1658
 MD5 7434140298091f759eba5e9706264130 files/3.4.3/libssp.patch 2029
@@ -81,41 +68,45 @@ MD5 088e0807e677010cafe4e590e8711be1 files/3.3/gcc33-no-multilib-amd64.patch 343
 MD5 453122edf63d75cca3a6c56a6dac45b0 files/3.3/gcc33-propolice-version.patch 570
 MD5 d3e53318166d71a05d2b51bd44502270 files/3.3.1/gcc331-gentoo-branding.patch 874
 MD5 b398b7415b93423ff04952c6e69bdb4d files/3.3.1/gcc331-pp-fixup.patch 407
-MD5 d9ae122db2768f8e504dfef256d4991f files/3.3.2/gcc332-gentoo-branding.patch 874
 MD5 9e7ed6184a1cdcb69db29f1de26c2d18 files/3.3.2/gcc332-altivec-fix.patch 1607
-MD5 40eea3a959b76abb57fc629c029a3427 files/awk/fixlafiles.awk 7753
-MD5 c672adb59a1f452475ab0a864b9d1bd1 files/awk/scanforssp.awk 5830
+MD5 d9ae122db2768f8e504dfef256d4991f files/3.3.2/gcc332-gentoo-branding.patch 874
+MD5 66df5567226338b7504bbd3c25cea92c files/3.3.3/gcc-3.3.3-libiberty-pic.patch 370
+MD5 ee700275f341541af37d56bd15dcf863 files/3.3.3/gcc-3.3.3-norelro.patch 606
+MD5 ff6d7b5082c5e39fab8a5d8932c1a8b7 files/3.3.3/gcc-3.3.3-uclibc-add-ssp.patch 461
+MD5 308a0e53f03e9cb74b3d12c2633cbee2 files/3.3.3/gcc-uclibc-3.3-loop.patch 433
+MD5 9ba0bd0b103cf9535927ad7c482fe780 files/3.3.3/gcc333-debian-arm-getoff.patch 3501
+MD5 25eda9981106a55c413d1df3d3a87db5 files/3.3.3/gcc333-debian-arm-ldm.patch 3383
 MD5 cd87c02e4896f47bf6029eef0dc29468 files/3.3.3/gcc333-gentoo-branding.patch 874
+MD5 e5812da37c1862908a29cdae004c4e52 files/3.3.3/gcc333-pr15693.patch 3927
+MD5 bb0078854a778b2a279cfb15d8933c29 files/3.3.3/gcc333-ssp-3.3.2_1-fixup.patch 2598
 MD5 0e8d94bbc14fbb3fbad1df4f404b39ef files/3.3.3/gcc333-ssp-3.3_7-fixup.patch 2616
 MD5 4b249bff27ab6328436e6289ac9f9cfc files/3.3.3/gcc333_pre20040215-gentoo-branding.patch 839
 MD5 f317331e0b196ca455ca9554479cd8eb files/3.3.3/gcc333_pre20040322-gentoo-branding.patch 817
 MD5 43c60f04779324d74d3aac52224bed95 files/3.3.3/gcc333_pre20040408-gentoo-branding.patch 820
 MD5 3210d5fd70806c44d4426c3dceebd480 files/3.3.3/gcc333_pre20040408-stack-size.patch 653
 MD5 43c60f04779324d74d3aac52224bed95 files/3.3.3/gcc333_pre20040426-gentoo-branding.patch 820
-MD5 9ba0bd0b103cf9535927ad7c482fe780 files/3.3.3/gcc333-debian-arm-getoff.patch 3501
-MD5 25eda9981106a55c413d1df3d3a87db5 files/3.3.3/gcc333-debian-arm-ldm.patch 3383
-MD5 ff6d7b5082c5e39fab8a5d8932c1a8b7 files/3.3.3/gcc-3.3.3-uclibc-add-ssp.patch 461
-MD5 308a0e53f03e9cb74b3d12c2633cbee2 files/3.3.3/gcc-uclibc-3.3-loop.patch 433
-MD5 bb0078854a778b2a279cfb15d8933c29 files/3.3.3/gcc333-ssp-3.3.2_1-fixup.patch 2598
-MD5 66df5567226338b7504bbd3c25cea92c files/3.3.3/gcc-3.3.3-libiberty-pic.patch 370
-MD5 ee700275f341541af37d56bd15dcf863 files/3.3.3/gcc-3.3.3-norelro.patch 606
-MD5 e5812da37c1862908a29cdae004c4e52 files/3.3.3/gcc333-pr15693.patch 3927
-MD5 b2922cfe76692e7d2b373a0a255f405e files/3.4.2/gcc-3.4.x-mips-add-march-r10k.patch 14248
-MD5 2970ce4d26f78bbb7e76f1d41a177bfb files/3.4.2/gcc34-fix-sse2_pinsrw.patch 901
-MD5 2c1ce849de55d8c81af4e081dbb2f5e4 files/3.4.2/gcc34-m32-no-sse2.patch 1058
-MD5 a720c913b78bcfbd7f63319130fadd4a files/3.4.2/810-arm-bigendian-uclibc.patch 1139
+MD5 8c779f2dca6ab1b5b95e2ee211d26c8c files/3.3.4/gcc-3.3.4-spec-env.patch 786
+MD5 27120401d2355e5d959b8d2d55eba310 files/3.3.4/gcc334-gentoo-branding.patch 876
+MD5 5fb5b49f3f16cc9e7e27e582c92ffa2f files/3.3.4/libffi-without-libgcj.patch 890
+MD5 17b3190d64e34ed7709d022b326d08ae files/3.4.0/gcc-3.4.0-cc1-no-stack-protector.patch 563
+MD5 66edf32babf498517ca56fa44c901f26 files/3.4.0/gcc-3.4.0-move-propolice-into-glibc.patch 894
 MD5 06580106a905e8fa2ff23aa190f9d82c files/3.4.0/gcc-3.4.0-r6-gentoo-branding.patch 781
 MD5 c7ed491e4bcee6cae89067d4e1c899a8 files/3.4.0/gcc34-ia64-lib64.patch 1395
-MD5 66edf32babf498517ca56fa44c901f26 files/3.4.0/gcc-3.4.0-move-propolice-into-glibc.patch 894
-MD5 31470a0e018eb2cdfe68c71039ede80f files/3.4.0/gcc34-multi32-hack.patch 2445
 MD5 c919e0a2cd429d0121b6133c1b4e41a6 files/3.4.0/gcc34-ice-hack.patch 8605
+MD5 31470a0e018eb2cdfe68c71039ede80f files/3.4.0/gcc34-multi32-hack.patch 2445
 MD5 bae93db3186aa0fc25d659b7799ef499 files/3.4.0/gcc34-ppc64-m32-m64-multilib-only.patch 825
-MD5 17b3190d64e34ed7709d022b326d08ae files/3.4.0/gcc-3.4.0-cc1-no-stack-protector.patch 563
 MD5 4edccdf0b4f6dbbc9f7bc9370c255e0c files/3.4.0/gcc34-reiser4-fix.patch 587
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.9.14 (GNU/Linux)
-
-iD8DBQFB3qwxroRuSHgZdywRAhWBAKCO+yrCBI+mJMy6JXobEFrGuvQ85wCePb6c
-pnyPJPLm3v9EyKWFtkeFGFY=
-=THlo
------END PGP SIGNATURE-----
+MD5 86ae592deb82c4564eb61f770fe5f8a7 files/3.4.1/gcc-3.4.1-gentoo-branding.patch 759
+MD5 cd770c23ece7458db5e6c5067f262ce0 files/3.4.1/gcc-3.4.1-glibc-is-native.patch 760
+MD5 7cb2138ac2df6f8674d19974e966a45b files/3.4.1/gcc-3.4.1-mips-n32only.patch 614
+MD5 aa8e15a63d797df37bbd4e489ed0267f files/3.4.1/gcc-3.4.1-mips-n64only.patch 614
+MD5 14fec2000fc63536d4cf22195e88e14f files/3.4.1/gcc-3.4.1-r2-gentoo-branding.patch 781
+MD5 97d7409ba5038bea85f9cabe023e28a6 files/3.4.1/gcc-3.4.1-spec-env.patch 755
+MD5 df06b1cf70425c78e2e59136ed372ab4 files/3.4.1/gcc341-ppc64-mozilla-ICE-fix.patch 729
+MD5 a720c913b78bcfbd7f63319130fadd4a files/3.4.2/810-arm-bigendian-uclibc.patch 1139
+MD5 b2922cfe76692e7d2b373a0a255f405e files/3.4.2/gcc-3.4.x-mips-add-march-r10k.patch 14248
+MD5 2970ce4d26f78bbb7e76f1d41a177bfb files/3.4.2/gcc34-fix-sse2_pinsrw.patch 901
+MD5 2c1ce849de55d8c81af4e081dbb2f5e4 files/3.4.2/gcc34-m32-no-sse2.patch 1058
+MD5 f3a1b668077c6486c542dcef1cdd9672 files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch 12545
+MD5 40eea3a959b76abb57fc629c029a3427 files/awk/fixlafiles.awk 7753
+MD5 c672adb59a1f452475ab0a864b9d1bd1 files/awk/scanforssp.awk 5830
diff --git a/sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch b/sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch
new file mode 100644 (file)
index 0000000..38b1832
--- /dev/null
@@ -0,0 +1,392 @@
+--- gcc-3.4.2/gcc/config/mips/mips.h   Thu Jul 15 02:42:47 2004
++++ gcc-3.4.2/gcc/config/mips/mips.h   Sat Sep 18 00:41:48 2004
+@@ -122,6 +122,7 @@
+ extern const char *mips_isa_string;   /* for -mips{1,2,3,4} */
+ extern const char *mips_abi_string;   /* for -mabi={32,n32,64} */
+ extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */
++extern const char *mips_ip28_cache_barrier;/* for -mip28-cache-barrier */
+ extern int mips_string_length;                /* length of strings for mips16 */
+ extern const struct mips_cpu_info mips_cpu_info_table[];
+ extern const struct mips_cpu_info *mips_arch_info;
+@@ -333,6 +334,7 @@
+ #define TARGET_MIPS9000             (mips_arch == PROCESSOR_R9000)
+ #define TARGET_SB1                  (mips_arch == PROCESSOR_SB1)
+ #define TARGET_SR71K                (mips_arch == PROCESSOR_SR71000)
++#define TARGET_IP28                 (mips_ip28_cache_barrier != 0)
+ 
+ /* Scheduling target defines.  */
+ #define TUNE_MIPS3000               (mips_tune == PROCESSOR_R3000)
+@@ -752,6 +754,8 @@
+       N_("Don't call any cache flush functions"), 0},                 \
+   { "flush-func=", &mips_cache_flush_func,                            \
+       N_("Specify cache flush function"), 0},                         \
++  { "ip28-cache-barrier", &mips_ip28_cache_barrier,                   \
++      N_("Generate special cache barriers for SGI Indigo2 R10k"), 0}, \
+ }
+ 
+ /* This is meant to be redefined in the host dependent files.  */
+@@ -3448,3 +3452,11 @@
+       " TEXT_SECTION_ASM_OP);
+ #endif
+ #endif
++\f
++#define ASM_OUTPUT_R10K_CACHE_BARRIER(STREAM)         \
++  fprintf (STREAM, "\tcache 0x14,0($sp)\t%s Cache Barrier\n", ASM_COMMENT_START)
++
++/*
++ * mips.h     Thu Jul 15 02:42:47 2004
++ * mips.h     Fri Sep 17 23:18:19 2004        ip28
++ */
+--- gcc-3.4.2/gcc/config/mips/mips.c   Wed Jul  7 21:21:10 2004
++++ gcc-3.4.2/gcc/config/mips/mips.c   Fri Sep 17 23:33:44 2004
+@@ -502,6 +502,11 @@
+ 
+ const char *mips_cache_flush_func = CACHE_FLUSH_FUNC;
+ 
++/* Nonzero means generate special cache barriers to inhibit speculative
++   stores which might endanger cache coherency or reference invalid
++   addresses (especially on SGI's Indigo2 R10k (IP28)).  */
++const char *mips_ip28_cache_barrier;
++
+ /* If TRUE, we split addresses into their high and low parts in the RTL.  */
+ int mips_split_addresses;
+ 
+@@ -9676,3 +9681,7 @@
+ #endif /* TARGET_IRIX */
+ 
+ #include "gt-mips.h"
++/*
++ * mips.c     Wed Jul  7 21:21:10 2004
++ * mips.c     Fri Sep 17 23:25:53 2004        ip28
++ */
+--- gcc-3.4.2/gcc/final.c      Sun Jan 18 23:39:57 2004
++++ gcc-3.4.2/gcc/final.c      Fri Nov 19 00:40:50 2004
+@@ -146,6 +146,13 @@
+ 
+ static rtx last_ignored_compare = 0;
+ 
++/* Flag indicating this insn is the start of a new basic block.  */
++
++#define NEW_BLOCK_LABEL  1
++#define NEW_BLOCK_BRANCH 2
++
++static int new_block = NEW_BLOCK_LABEL;
++
+ /* Assign a unique number to each insn that is output.
+    This can be used to generate unique local labels.  */
+ 
+@@ -235,6 +242,7 @@
+ #ifdef HAVE_ATTR_length
+ static int align_fuzz (rtx, rtx, int, unsigned);
+ #endif
++static int output_store_cache_barrier (FILE *, rtx);
+ \f
+ /* Initialize data in final at the beginning of a compilation.  */
+ 
+@@ -1505,6 +1513,7 @@
+   int seen = 0;
+ 
+   last_ignored_compare = 0;
++  new_block = NEW_BLOCK_LABEL;
+ 
+ #ifdef SDB_DEBUGGING_INFO
+   /* When producing SDB debugging info, delete troublesome line number
+@@ -1571,6 +1580,7 @@
+ 
+       insn = final_scan_insn (insn, file, optimize, prescan, 0, &seen);
+     }
++  new_block = 0;
+ }
+ \f
+ const char *
+@@ -1851,6 +1861,7 @@
+ #endif
+       if (prescan > 0)
+       break;
++      new_block = NEW_BLOCK_LABEL;
+ 
+       if (LABEL_NAME (insn))
+       (*debug_hooks->label) (insn);
+@@ -2009,6 +2020,26 @@
+ 
+           break;
+         }
++
++#ifdef TARGET_IP28
++      if (new_block)
++        {
++          /* .reorder: not really in the branch-delay-slot. */
++          if (! set_noreorder)
++            new_block = NEW_BLOCK_LABEL;
++
++          if (new_block == NEW_BLOCK_BRANCH)
++            /* Not yet, only *after* the branch-delay-slot ! */
++            new_block = NEW_BLOCK_LABEL;
++          else
++            {
++              if (TARGET_IP28)
++                output_store_cache_barrier (file, insn);
++              new_block = 0;
++            }
++        }
++#endif
++
+       /* Output this line note if it is the first or the last line
+          note in a row.  */
+       if (notice_source_line (insn))
+@@ -2132,8 +2163,29 @@
+              clobbered by the function.  */
+           if (GET_CODE (XVECEXP (body, 0, 0)) == CALL_INSN)
+             {
++#ifdef TARGET_IP28
++              if (TARGET_IP28)
++                new_block = NEW_BLOCK_LABEL;
++#endif
+               CC_STATUS_INIT;
+             }
++#ifdef TARGET_IP28
++          /* Following a conditional branch sequence, we have a new basic
++             block.  */
++          if (TARGET_IP28)
++            {
++              rtx insn = XVECEXP (body, 0, 0);
++              rtx body = PATTERN (insn);
++
++              if ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET
++                   && GET_CODE (SET_SRC (body)) != LABEL_REF)
++                  || (GET_CODE (insn) == JUMP_INSN
++                      && GET_CODE (body) == PARALLEL
++                      && GET_CODE (XVECEXP (body, 0, 0)) == SET
++                      && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF))
++                new_block = NEW_BLOCK_LABEL;
++            }
++#endif
+           break;
+         }
+ 
+@@ -2188,6 +2240,20 @@
+         }
+ #endif
+ 
++#ifdef TARGET_IP28
++      /* Following a conditional branch, we have a new basic block.
++         But if we are inside a sequence, the new block starts after the
++         last insn of the sequence.  */
++      if (TARGET_IP28 && final_sequence == 0
++          && (GET_CODE (insn) == CALL_INSN
++              || (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET
++                  && GET_CODE (SET_SRC (body)) != LABEL_REF)
++              || (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == PARALLEL
++                  && GET_CODE (XVECEXP (body, 0, 0)) == SET
++                  && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF)))
++            new_block = NEW_BLOCK_BRANCH;
++#endif
++
+ #ifndef STACK_REGS
+       /* Don't bother outputting obvious no-ops, even without -O.
+          This optimization is fast and doesn't interfere with debugging.
+@@ -2402,6 +2468,7 @@
+ 
+           if (prev_nonnote_insn (insn) != last_ignored_compare)
+             abort ();
++          new_block = 0;
+ 
+           /* We have already processed the notes between the setter and
+              the user.  Make sure we don't process them again, this is
+@@ -2435,6 +2502,7 @@
+           abort ();
+ #endif
+ 
++          new_block = 0;
+           return new;
+         }
+ 
+@@ -3866,3 +3934,188 @@
+       symbol_queue_size = 0;
+     }
+ }
++
++
++#ifdef TARGET_IP28
++
++/* Check, whether `insn' is a possibly harmful store instruction, i.e.
++   a store which might cause damage, if speculatively executed. */
++
++static int /*inline*/
++check_pattern_for_store (rtx body)
++{
++  /* Check for (set (mem:M (non_stackpointer_address) ...)).  Here we
++     assume, that addressing with the stackpointer accesses neither
++     uncached-aliased nor invalid memory.  (May be, this applies to the
++     global pointer and frame pointer also, but its saver not to assume
++     it. And probably it's not worthwile to regard these registers) */
++
++  if (body && GET_CODE (body) == SET)
++    {
++      rtx xexp = SET_DEST (body);
++      if (GET_CODE (xexp) == MEM)
++        {
++          /* Check for the most common stackpointer-addressing modes.
++             It's not worthwile to avoid a cache barrier also on the
++             remaining unfrequently used modes.  */
++          xexp = XEXP (xexp, 0);
++          switch (GET_CODE (xexp))
++            {
++            case REG:
++              if (REGNO (xexp) == STACK_POINTER_REGNUM)
++                return 0;
++              break;
++            case PLUS: case MINUS: /* always `SP + const' ? */
++              if (GET_CODE (XEXP (xexp, 0)) == REG
++                  && REGNO (XEXP (xexp, 0)) == STACK_POINTER_REGNUM)
++                return 0;
++              if (GET_CODE (XEXP (xexp, 1)) == REG
++                  && REGNO (XEXP (xexp, 1)) == STACK_POINTER_REGNUM)
++                return 0;
++            }
++          return 1;
++        }
++    }
++  return 0;
++}
++
++static int
++check_insn_for_store (int state, rtx insn)
++{
++  /* Check for (ins (set (mem:M (dangerous_address)) ...)) or end of the
++     current basic block.
++     Criteria to recognize end-of/next basic-block are reduplicated here
++     from final_scan_insn. */
++
++  rtx body;
++  int code;
++
++  if (INSN_DELETED_P (insn))
++    return 0;
++
++  switch (code = GET_CODE (insn))
++    {
++    case CODE_LABEL:
++      return -1;
++    case CALL_INSN:
++    case JUMP_INSN:
++    case INSN:
++      body = PATTERN (insn);
++      if (GET_CODE (body) == SEQUENCE)
++        {
++          /* A delayed-branch sequence */
++          rtx ins0 = XVECEXP (body, 0, 0);
++          rtx pat0 = PATTERN (ins0);
++          int i;
++          for (i = 0; i < XVECLEN (body, 0); i++)
++            {
++              rtx insq = XVECEXP (body, 0, i);
++              if (! INSN_DELETED_P (insq))
++                {
++                  int j = check_insn_for_store (state|1, insq);
++                  if (j)
++                    return j;
++                }
++            }
++          /* Following a conditional branch sequence, we have a new
++             basic block.  */
++          if (GET_CODE (ins0) == JUMP_INSN)
++            if ((GET_CODE (pat0) == SET
++                 && GET_CODE (SET_SRC (pat0)) != LABEL_REF)
++                || (GET_CODE (pat0) == PARALLEL
++                    && GET_CODE (XVECEXP (pat0, 0, 0)) == SET
++                    && GET_CODE (SET_SRC (XVECEXP (pat0, 0, 0))) != LABEL_REF))
++              return -1;
++          /* Handle a call sequence like a conditional branch sequence */
++          if (GET_CODE (ins0) == CALL_INSN)
++            return -1;
++          break;
++        }
++      if (GET_CODE (body) == PARALLEL)
++        {
++          int i;
++          for (i = 0; i < XVECLEN (body, 0); i++)
++            if (check_pattern_for_store (XVECEXP (body, 0, i)))
++              return 1;
++        }
++      /* Now, only a `simple' INSN or JUMP_INSN remains to be checked. */
++      if (code == INSN)
++        if (check_pattern_for_store (body))
++          return 1;
++      /* Handle a CALL_INSN instruction like a conditional branch */
++      if (code == JUMP_INSN || code == CALL_INSN)
++        {
++          /* Following a conditional branch, we have a new basic block. */
++          int ckds = 0;
++          if (code == CALL_INSN)
++            ckds = 1;
++          else
++            {
++              code = GET_CODE (body);
++              if ((code == SET
++                   && GET_CODE (SET_SRC (body)) != LABEL_REF)
++                  || (code == PARALLEL
++                      && GET_CODE (XVECEXP (body, 0, 0)) == SET
++                      && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF))
++                ckds = 1;
++            }
++          if (ckds)
++            {
++              /* But check insn(s) in delay-slot first.  If we could know in
++                 advance that this jump is in `.reorder' mode, where gas will
++                 insert a `nop' into the delay-slot, we could skip this test.
++                 Since we don't know, always assume `.noreorder', sometimes
++                 emitting a cache-barrier, that isn't needed.  */
++              /* But if we are here recursively, already checking a (pseudo-)
++                 delay-slot, we are done.  */
++              if ( !(state & 2) )
++                for (insn = NEXT_INSN (insn); insn; insn = NEXT_INSN (insn))
++                  switch (GET_CODE (insn))
++                    {
++                    case INSN:
++                      if (check_insn_for_store (state|1|2, insn) > 0)
++                        return 1;
++                    case CODE_LABEL:
++                    case CALL_INSN:
++                    case JUMP_INSN:
++                      return -1;
++                    default:
++                      /* skip NOTE,... */;
++                    }
++              return -1;
++            }
++        }
++      /*break*/
++    }
++  return 0;
++}
++
++/* Scan a basic block, starting with `insn', for a possibly harmful store
++   instruction.  If found, output a cache barrier at the start of this
++   block.  */
++
++static int
++output_store_cache_barrier (FILE *file, rtx insn)
++{
++  for (; insn; insn = NEXT_INSN (insn))
++    {
++      int found = check_insn_for_store (0, insn);
++      if (found < 0)
++        break;
++      if (found > 0)
++        {
++          /* found critical store instruction */
++          ASM_OUTPUT_R10K_CACHE_BARRIER(file);
++          return 1;
++        }
++    }
++  fprintf(file, "\t%s Cache Barrier omitted.\n", ASM_COMMENT_START);
++  return 0;
++}
++
++#endif /* TARGET_IP28 */
++
++/*
++ * final.c    Sun Jan 18 23:39:57 2004
++ * final.c    Sat Sep 18 00:23:34 2004        ip28
++ */
index 81fd55f58ff1eb9c45ca52d4fe6a000a2cf89698..515f0a78895fd899af484f9a87c373b7668fc153 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2005 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.4.3-r1.ebuild,v 1.12 2005/01/07 01:47:41 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.4.3-r1.ebuild,v 1.13 2005/01/09 19:02:54 kumba Exp $
 
 DESCRIPTION="The GNU Compiler Collection.  Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking"
 
@@ -162,19 +162,37 @@ src_unpack() {
                #epatch ${FILESDIR}/3.4.3/libffi-nogcj-lib-path-fix.patch
        fi
 
-       # If mips, and we DON'T want multilib, then rig gcc to only use n32 OR n64
-       if use mips && use !multilib; then
-               use n32 && epatch ${FILESDIR}/3.4.1/gcc-3.4.1-mips-n32only.patch
-               use n64 && epatch ${FILESDIR}/3.4.1/gcc-3.4.1-mips-n64only.patch
-       fi
-
-       # Patch forward-ported from a gcc-3.0.x patch that adds -march=r10000 and
-       # -mtune=r10000 support to gcc (Allows the compiler to generate code to
-       # take advantage of R10k's second ALU, perform shifts, etc..
-       # Needs re-porting for DFA in gcc-4.0
+       # /* Begin mips bits */
        if use mips; then
+               # If mips, and we DON'T want multilib, then rig gcc to only use n32 OR n64
+               if use !multilib; then
+                       use n32 && epatch ${FILESDIR}/3.4.1/gcc-3.4.1-mips-n32only.patch
+                       use n64 && epatch ${FILESDIR}/3.4.1/gcc-3.4.1-mips-n64only.patch
+               fi
+
+               # Patch forward-ported from a gcc-3.0.x patch that adds -march=r10000 and
+               # -mtune=r10000 support to gcc (Allows the compiler to generate code to
+               # take advantage of R10k's second ALU, perform shifts, etc..
+               #
+               # Needs re-porting to DFA in gcc-4.0 - Any Volunteers? :)
                epatch ${FILESDIR}/3.4.2/gcc-3.4.x-mips-add-march-r10k.patch
+
+               # This is a very special patch -- it allows us to build semi-usable kernels
+               # on SGI IP28 (Indigo2 Impact R10000) systems.  The patch is henceforth
+               # regarded as a kludge by upstream, and thus, it will never get accepted upstream,
+               # but for our purposes of building a kernel, it works.
+               # Unless you're building an IP28 kernel, you really don't need care about what
+               # this patch does, because if you are, you are probably already aware of what
+               # it does.
+               # All that said, the abilities of this patch are disabled by default and need
+               # to be enabled by passing -mip28-cache-barrier.  Only used to build kernels, 
+               # There is the possibility it may be used for very specific userland apps too.
+               if use ip28; then
+                       epatch ${FILESDIR}/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers.patch
+               fi
        fi
+       # /* End mips bits */
+
 
        # hack around some ugly 32bit sse2 wrong-code bugs
        epatch ${FILESDIR}/3.4.2/gcc34-m32-no-sse2.patch