summaryrefslogtreecommitdiff
path: root/gcc/config/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/sparc')
-rw-r--r--gcc/config/sparc/constraints.md4
-rw-r--r--gcc/config/sparc/linux.h3
-rw-r--r--gcc/config/sparc/linux64.h3
3 files changed, 6 insertions, 4 deletions
diff --git a/gcc/config/sparc/constraints.md b/gcc/config/sparc/constraints.md
index ee0fbbda69a..73c4087d904 100644
--- a/gcc/config/sparc/constraints.md
+++ b/gcc/config/sparc/constraints.md
@@ -35,10 +35,10 @@
;; In the non-V9 case, coerce V9 'e' class to 'f', so we can use 'e' in the
;; MD file for V8 and V9.
-(define_register_constraint "e" "TARGET_V9 ? EXTRA_FP_REGS : FP_REGS"
+(define_register_constraint "e" "(TARGET_FPU ? (TARGET_V9 ? EXTRA_FP_REGS : FP_REGS) : NO_REGS)"
"Any floating-point register")
-(define_register_constraint "f" "FP_REGS"
+(define_register_constraint "f" "(TARGET_FPU ? FP_REGS : NO_REGS)"
"Lower floating-point register")
(define_register_constraint "h" "(TARGET_V9 && TARGET_V8PLUS ? I64_REGS : NO_REGS)"
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
index 530a6ae7065..1272d2aba7d 100644
--- a/gcc/config/sparc/linux.h
+++ b/gcc/config/sparc/linux.h
@@ -107,7 +107,8 @@ along with GCC; see the file COPYING3. If not see
%{Ym,*} \
%{Wa,*:%*} \
-s \
-%{fpic|fPIC|fpie|fPIE|findirect-dispatch:-K PIC} \
+%{fpic|fPIC|fpie|fPIE:-K PIC} \
+%{!.c:%{findirect-dispatch:-K PIC}} \
%(asm_cpu) %(asm_relax)"
#undef ASM_OUTPUT_ALIGNED_LOCAL
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
index 369c13c8e3c..d8a242758dd 100644
--- a/gcc/config/sparc/linux64.h
+++ b/gcc/config/sparc/linux64.h
@@ -236,7 +236,8 @@ along with GCC; see the file COPYING3. If not see
%{Ym,*} \
%{Wa,*:%*} \
-s \
-%{fpic|fPIC|fpie|fPIE|findirect-dispatch:-K PIC} \
+%{fpic|fPIC|fpie|fPIE:-K PIC} \
+%{!.c:%{findirect-dispatch:-K PIC}} \
%{mlittle-endian:-EL} \
%(asm_cpu) %(asm_arch) %(asm_relax)"