aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2012-08-29 09:33:49 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2012-08-29 09:33:49 +0000
commit1274718f64c1aa5bd0ec72a658502d26db864220 (patch)
tree95ecbd26b0cecc0e3e0a75ae56bb06a2134cab3e
parent867a8345348ba8723f93182c858c77a31e404dcf (diff)
downloadgcc-1274718f64c1aa5bd0ec72a658502d26db864220.zip
gcc-1274718f64c1aa5bd0ec72a658502d26db864220.tar.gz
gcc-1274718f64c1aa5bd0ec72a658502d26db864220.tar.bz2
mips.h (CRT_CALL_STATIC_FUNCTION): Add nomips16 asm directives, remove #ifndef __mips16 guards.
2012-08-29 Chung-Lin Tang <cltang@codesourcery.com> * config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Add nomips16 asm directives, remove #ifndef __mips16 guards. * config/mips/t-linux64 (MULTILIB_OSDIRNAMES): Change to use mapping style, add ../lib/mips16. (MULTILIB_OPTIONS,MULTILIB_DIRNAMES): Add mips16. (MULTILIB_EXCLUSIONS): Exclude mips16 when not -mabi=32. From-SVN: r190774
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/mips/mips.h8
-rw-r--r--gcc/config/mips/t-linux6410
3 files changed, 24 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d652521..76738f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2012-08-29 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Add nomips16 asm
+ directives, remove #ifndef __mips16 guards.
+ * config/mips/t-linux64 (MULTILIB_OSDIRNAMES): Change to use
+ mapping style, add ../lib/mips16.
+ (MULTILIB_OPTIONS,MULTILIB_DIRNAMES): Add mips16.
+ (MULTILIB_EXCLUSIONS): Exclude mips16 when not -mabi=32.
+
2012-08-28 Walter Lee <walt@tilera.com>
* confg/tilegx/tilegx.md: Fix code style.
(*zero_extendsidi_truncdisi): Fix typo.
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index caad3c3..090b6a3 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2793,7 +2793,6 @@ while (0)
#define STORE_BY_PIECES_P(SIZE, ALIGN) \
mips_store_by_pieces_p (SIZE, ALIGN)
-#ifndef __mips16
/* Since the bits of the _init and _fini function is spread across
many object files, each potentially with its own GP, we must assume
we need to load our GP. We don't preserve $gp or $ra, since each
@@ -2802,27 +2801,32 @@ while (0)
#if (defined _ABIO32 && _MIPS_SIM == _ABIO32)
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
asm (SECTION_OP "\n\
+ .set push\n\
+ .set nomips16\n\
.set noreorder\n\
bal 1f\n\
nop\n\
1: .cpload $31\n\
.set reorder\n\
jal " USER_LABEL_PREFIX #FUNC "\n\
+ .set pop\n\
" TEXT_SECTION_ASM_OP);
#endif /* Switch to #elif when we're no longer limited by K&R C. */
#if (defined _ABIN32 && _MIPS_SIM == _ABIN32) \
|| (defined _ABI64 && _MIPS_SIM == _ABI64)
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
asm (SECTION_OP "\n\
+ .set push\n\
+ .set nomips16\n\
.set noreorder\n\
bal 1f\n\
nop\n\
1: .set reorder\n\
.cpsetup $31, $2, 1b\n\
jal " USER_LABEL_PREFIX #FUNC "\n\
+ .set pop\n\
" TEXT_SECTION_ASM_OP);
#endif
-#endif
#ifndef HAVE_AS_TLS
#define HAVE_AS_TLS 0
diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
index 5197e5e..420ee68 100644
--- a/gcc/config/mips/t-linux64
+++ b/gcc/config/mips/t-linux64
@@ -18,4 +18,12 @@
MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
MULTILIB_DIRNAMES = n32 32 64
-MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
+MULTILIB_OSDIRNAMES = mabi.n32=../lib32
+MULTILIB_OSDIRNAMES += mabi.32=../lib
+MULTILIB_OSDIRNAMES += mabi.64=../lib64
+
+# MIPS16 is currently only supported under O32
+MULTILIB_OPTIONS += mips16
+MULTILIB_DIRNAMES += mips16
+MULTILIB_OSDIRNAMES += mabi.32/mips16=../lib/mips16
+MULTILIB_EXCLUSIONS = !mabi=32/mips16