diff options
author | Joshua Kinard <kumba@gentoo.org> | 2005-04-24 03:31:34 +0000 |
---|---|---|
committer | Joshua Kinard <kumba@gentoo.org> | 2005-04-24 03:31:34 +0000 |
commit | f88d4f827a49a60a6e8dcc36461d6317e2b2acda (patch) | |
tree | b6311d8cb25de520e72cb9aae82b3b40284b54d9 /sys-devel | |
parent | CFLAGS fix (diff) | |
download | gentoo-2-f88d4f827a49a60a6e8dcc36461d6317e2b2acda.tar.gz gentoo-2-f88d4f827a49a60a6e8dcc36461d6317e2b2acda.tar.bz2 gentoo-2-f88d4f827a49a60a6e8dcc36461d6317e2b2acda.zip |
Update the gcc-3.4.3 ebuilds to use a newer IP28 cache barrier patch. Won't affect mainstream Mips systems.
(Portage version: 2.0.51.19)
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/gcc/ChangeLog | 9 | ||||
-rw-r--r-- | sys-devel/gcc/Manifest | 45 | ||||
-rw-r--r-- | sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch | 458 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-3.4.3-r1.ebuild | 4 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild | 4 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild | 4 |
6 files changed, 490 insertions, 34 deletions
diff --git a/sys-devel/gcc/ChangeLog b/sys-devel/gcc/ChangeLog index bbf2dce354fc..013bc7847722 100644 --- a/sys-devel/gcc/ChangeLog +++ b/sys-devel/gcc/ChangeLog @@ -1,6 +1,13 @@ # 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.400 2005/04/21 20:56:37 eradicator Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/ChangeLog,v 1.401 2005/04/24 03:31:33 kumba Exp $ + + 23 Apr 2005; Joshua Kinard <kumba@gentoo.org> + +files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch, + gcc-3.4.3-r1.ebuild, gcc-3.4.3.20050110-r1.ebuild, + gcc-3.4.3.20050110-r2.ebuild: + Update the gcc-3.4.3 ebuilds to use a newer IP28 cache barrier patch. Won't + affect mainstream Mips systems. *gcc-4.0.0 (21 Apr 2005) diff --git a/sys-devel/gcc/Manifest b/sys-devel/gcc/Manifest index 59f34244655a..1a338aad5b2b 100644 --- a/sys-devel/gcc/Manifest +++ b/sys-devel/gcc/Manifest @@ -1,48 +1,45 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - +MD5 51b47544d19af0ad86cf81fd991beb86 ChangeLog 83715 MD5 32233b4175cc076b602394c34d4b4ee1 gcc-2.95.3-r8.ebuild 7485 +MD5 37f3db1694d592dc3a3db07507390b76 gcc-3.1.1-r2.ebuild 9270 MD5 f95107278e3a6306068d0f9ef63fc5de gcc-3.2.3-r4.ebuild 19890 -MD5 e622e539e4c2ec647d861b76db694fec gcc-4.0.0.ebuild 1583 MD5 c875d0b5ad78da8eff6870f5ba5e8dda gcc-3.3.2-r5.ebuild 21355 MD5 09891e4b52abc8c327c9487109ee6ffd gcc-3.3.2-r7.ebuild 21802 MD5 39b8d66380bdd073167264ea187df557 gcc-3.3.2.ebuild 16865 -MD5 80da34df63e80f3b7d6d5fcfe0ef8e2d gcc-4.0.0_beta20050416.ebuild 1593 -MD5 680798d363aa7e5386c7d3eac3f1e5d3 gcc-3.3.5.20050130-r2.ebuild 3150 -MD5 f98c0ecb52c84b6be855eabe5b2c9379 gcc-3.4.3.20050110-r2.ebuild 5160 MD5 fb69c034139312afc2b848c7cc978371 gcc-3.3.5-r1.ebuild 3712 +MD5 db7010d356ca222dbbf06e8a8675745f gcc-3.3.5.20050130-r1.ebuild 3149 +MD5 680798d363aa7e5386c7d3eac3f1e5d3 gcc-3.3.5.20050130-r2.ebuild 3150 MD5 4049fc7101de8475e00204ed483252c0 gcc-3.3.5.20050130.ebuild 3618 MD5 79b339721708f16d61f3e78a16531d55 gcc-3.4.1-r3.ebuild 31433 -MD5 0f816c989a5ceb219fa75c3e64096ba2 ChangeLog 83409 -MD5 7a972e82094d5d6c91c3fdaf4a9298ba gcc-3.4.3-r1.ebuild 5269 +MD5 74fbb4c74c4eee375394bdb726444676 gcc-3.4.3-r1.ebuild 5272 +MD5 664625ec965523c6d7024de166cae076 gcc-3.4.3.20050110-r1.ebuild 5241 +MD5 05345df589e1fe7f3b71a9e495ae1340 gcc-3.4.3.20050110-r2.ebuild 5163 +MD5 e622e539e4c2ec647d861b76db694fec gcc-4.0.0.ebuild 1583 +MD5 80da34df63e80f3b7d6d5fcfe0ef8e2d gcc-4.0.0_beta20050416.ebuild 1593 MD5 567094e03359ffc1c95af7356395228d metadata.xml 162 -MD5 db7010d356ca222dbbf06e8a8675745f gcc-3.3.5.20050130-r1.ebuild 3149 -MD5 edeb03d4b6d5d309f99a66b1d6fad97c gcc-3.4.3.20050110-r1.ebuild 5238 -MD5 37f3db1694d592dc3a3db07507390b76 gcc-3.1.1-r2.ebuild 9270 MD5 f7e7042c2ddf66e344b30cbc66ebaf73 files/cc 24 MD5 80d122265d3062847a4a1b161abe1d26 files/cpp 24 -MD5 d94ab93895a7b6bcff53aa5ec4dd0ff2 files/digest-gcc-4.0.0 64 MD5 a570da9000df56c70620ec2e36e864a3 files/digest-gcc-2.95.3-r8 137 +MD5 0d683280daf95e6bb9712549352a200c files/digest-gcc-3.1.1-r2 140 MD5 40e6872c09149a81973f01a78c80bbb7 files/digest-gcc-3.2.3-r4 279 MD5 cf81ae4b2da79c34a005da1182c40134 files/digest-gcc-3.3.2 130 MD5 01c41c9e6857eb40d402f2acb2bd96f9 files/digest-gcc-3.3.2-r5 361 MD5 e58b6c1f3122b79a5d0d273acc3c008c files/digest-gcc-3.3.2-r7 361 -MD5 4b854fcd0809339f9cc6d2e03a7b1313 files/digest-gcc-4.0.0_beta20050416 71 -MD5 9e216fb231a24884fe548b31864296b8 files/digest-gcc-3.3.5.20050130-r2 620 -MD5 a98425f9d4389f8df683d7f809563d8d files/digest-gcc-3.4.3.20050110-r2 616 MD5 a3edf5e9d8bb500178f8dd29c1f9eadd files/digest-gcc-3.3.5-r1 442 MD5 456037b22f0662c84d2360c7a15a6d75 files/digest-gcc-3.3.5.20050130 540 +MD5 b29f3bde3e23f17cd9a9bb4a5b026ea1 files/digest-gcc-3.3.5.20050130-r1 620 +MD5 9e216fb231a24884fe548b31864296b8 files/digest-gcc-3.3.5.20050130-r2 620 MD5 c6ea8a92bac6d2638c54c011f98bc5b8 files/digest-gcc-3.4.1-r3 442 MD5 9b68e03bb1a6a1494399c8a6537bb766 files/digest-gcc-3.4.3-r1 527 +MD5 7f2bf81dfe5bd01ac373d19b599e072f files/digest-gcc-3.4.3.20050110-r1 616 +MD5 a98425f9d4389f8df683d7f809563d8d files/digest-gcc-3.4.3.20050110-r2 616 +MD5 d94ab93895a7b6bcff53aa5ec4dd0ff2 files/digest-gcc-4.0.0 64 +MD5 4b854fcd0809339f9cc6d2e03a7b1313 files/digest-gcc-4.0.0_beta20050416 71 MD5 1acd56209164ab837c5f91723434464e files/fix_libtool_files.sh 1712 MD5 60e02a7ee2f579ac72ab223679d81e7a files/gcc-spec-env.patch 819 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 0d683280daf95e6bb9712549352a200c files/digest-gcc-3.1.1-r2 140 -MD5 b29f3bde3e23f17cd9a9bb4a5b026ea1 files/digest-gcc-3.3.5.20050130-r1 620 -MD5 7f2bf81dfe5bd01ac373d19b599e072f files/digest-gcc-3.4.3.20050110-r1 616 MD5 8ec9b0352d226e4693cabffe0fa5bba6 files/3.2.1/gcc31-loop-load-final-value.patch 3324 MD5 5e8f2122ef7f9ce187b0a0d50ac9d24a files/3.2.1/gcc32-arm-disable-mathf.patch 2229 MD5 044a164462d9392aa67cde6f9fd5c1bc files/3.2.1/gcc32-arm-reload1-fix.patch 932 @@ -106,17 +103,11 @@ MD5 f3a1b668077c6486c542dcef1cdd9672 files/3.4.2/gcc-3.4.2-mips-ip28_cache_barri 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 00cca5c6d608d147bf379a38fe3b2d45 files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch 14576 +MD5 4a62ecf1101f7973ea9a60dc4cb98c43 files/3.4.3/35_all_pr18987-fix.patch 748 MD5 0b31c7f32c0c28bafdd75c5c0dfc16a5 files/3.4.3/gcc-3.4.3-cross-compile.patch 2919 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 -MD5 4a62ecf1101f7973ea9a60dc4cb98c43 files/3.4.3/35_all_pr18987-fix.patch 748 MD5 c8fd3851ccee57651e43cac458dba7c1 files/awk/fixlafiles.awk 7837 MD5 c672adb59a1f452475ab0a864b9d1bd1 files/awk/scanforssp.awk 5830 ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.1 (GNU/Linux) - -iD8DBQFCaBOhArHZZzCEUG0RAoV6AJ4+TNMQMusIwXe8uJeISQdqciqL8QCZAXlT -Uby7wTuHRa6aEekMrOVTGmc= -=5QYA ------END PGP SIGNATURE----- diff --git a/sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch b/sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch new file mode 100644 index 000000000000..1c85e05ff389 --- /dev/null +++ b/sys-devel/gcc/files/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch @@ -0,0 +1,458 @@ +--- 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
++
++#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 Thu Apr 7 00:00:05 2005
+@@ -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);
+
+ /* 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;
+ }
+
+ 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,254 @@
+ symbol_queue_size = 0;
+ }
+ }
++
++
++#ifdef TARGET_IP28
++
++/* Check, whether an instruction is a possibly harmful store instruction,
++ i.e. a store which might cause damage, if speculatively executed. */
++
++static rtx
++find_mem_expr (rtx xexp)
++{
++ if (xexp)
++ {
++ const char *fmt;
++ int i, j, lng;
++ rtx x;
++ RTX_CODE code = GET_CODE (xexp);
++
++ if (MEM == code)
++ return xexp;
++
++ fmt = GET_RTX_FORMAT (code);
++ lng = GET_RTX_LENGTH (code);
++
++ for (i = 0; i < lng; ++i)
++ switch (fmt[i])
++ {
++ case 'e':
++ x = find_mem_expr (XEXP (xexp, i));
++ if (x)
++ return x;
++ break;
++ case 'E':
++ if (XVEC (xexp, i))
++ for (j = 0; j < XVECLEN (xexp, i); ++j)
++ {
++ x = find_mem_expr (XVECEXP (xexp, i, j));
++ if (x)
++ return x;
++ }
++ }
++ }
++ return 0;
++}
++
++static int
++check_mem_expr (rtx memx)
++{
++ /* Check the expression `memx' (with type GET_CODE(memx) == MEM)
++ for the most common stackpointer-addressing modes.
++ It's not worthwile to avoid a cache barrier also on the
++ remaining unfrequently used modes. */
++ rtx x = XEXP (memx, 0);
++ switch (GET_CODE (x))
++ {
++ case REG:
++ if (REGNO (x) == STACK_POINTER_REGNUM)
++ return 0;
++ default:
++ break;
++ case PLUS: case MINUS: /* always `SP + const' ? */
++ if (GET_CODE (XEXP (x, 1)) == REG
++ && REGNO (XEXP (x, 1)) == STACK_POINTER_REGNUM)
++ return 0;
++ case NEG: case SIGN_EXTEND: case ZERO_EXTEND:
++ if (GET_CODE (XEXP (x, 0)) == REG
++ && REGNO (XEXP (x, 0)) == STACK_POINTER_REGNUM)
++ return 0;
++ }
++
++ /* Stores/Loads to/from constant addresses can be considered
++ harmless, since:
++ 1) the address is always valid, even when taken speculatively.
++ 2a) the location is (hopefully) never used as a dma-target, thus
++ there is no danger of cache-inconsistency.
++ 2b) uncached loads/stores are guaranteed to be non-speculative. */
++ if ( CONSTANT_P(x) )
++ return 0;
++
++ return 1;
++}
++
++/* inline */ static int
++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)
++
++ Speculative loads from invalid addresses also cause bus errors...
++ So check for (set (reg:M ...) (mem:M (non_stackpointer_address)))
++ too. */
++
++ if (body && GET_CODE (body) == SET)
++ {
++ rtx x = find_mem_expr (body);
++
++ if (x && check_mem_expr (x))
++ 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)
++ {
++ /* Since we don't know, what's inside, we must take inline
++ assembly to be dangerous */
++ if (GET_CODE (body) == ASM_INPUT)
++ return 1;
++
++ 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
++ */
diff --git a/sys-devel/gcc/gcc-3.4.3-r1.ebuild b/sys-devel/gcc/gcc-3.4.3-r1.ebuild index 68d938729c44..d4901c3be717 100644 --- a/sys-devel/gcc/gcc-3.4.3-r1.ebuild +++ b/sys-devel/gcc/gcc-3.4.3-r1.ebuild @@ -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.34 2005/03/28 00:16:19 hardave Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.4.3-r1.ebuild,v 1.35 2005/04/24 03:31:33 kumba Exp $ MAN_VER="3.4.3" BRANCH_UPDATE="20041125" @@ -133,7 +133,7 @@ src_unpack() { # 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 + epatch ${FILESDIR}/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch fi ;; amd64) diff --git a/sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild b/sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild index 34769bc67dfc..744e1b3c4900 100644 --- a/sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild +++ b/sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild @@ -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.20050110-r1.ebuild,v 1.4 2005/04/06 00:43:22 vapier Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.4.3.20050110-r1.ebuild,v 1.5 2005/04/24 03:31:33 kumba Exp $ MAN_VER="3.4.3" PATCH_VER="1.2" @@ -134,7 +134,7 @@ src_unpack() { # 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 + epatch ${FILESDIR}/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch fi ;; amd64) diff --git a/sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild b/sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild index 01c9becf9e20..5f7bbff06065 100644 --- a/sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild +++ b/sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild @@ -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.20050110-r2.ebuild,v 1.1 2005/04/08 02:52:07 vapier Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.4.3.20050110-r2.ebuild,v 1.2 2005/04/24 03:31:33 kumba Exp $ MAN_VER="3.4.3" PATCH_VER="1.3" @@ -131,7 +131,7 @@ src_unpack() { # 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 + epatch ${FILESDIR}/3.4.2/gcc-3.4.2-mips-ip28_cache_barriers-v2.patch fi ;; amd64) |