From ac9cd70f207c6c83d3f34fd79d2f07d1d52051d0 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 31 May 2000 17:14:13 -0700 Subject: [PATCH] ia64.c (sdata_symbolic_operand): Consider small CONSTANT_POOL_ADDRESS_P addresses for .sdata. * config/ia64/ia64.c (sdata_symbolic_operand): Consider small CONSTANT_POOL_ADDRESS_P addresses for .sdata. * config/ia64/sysv4.h (SELECT_RTX_SECTION): New. From-SVN: r34319 --- gcc/ChangeLog | 6 ++++++ gcc/config/ia64/ia64.c | 16 +++++++++++----- gcc/config/ia64/sysv4.h | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 53ba7fc..9d60871 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2000-05-31 Richard Henderson + * config/ia64/ia64.c (sdata_symbolic_operand): Consider small + CONSTANT_POOL_ADDRESS_P addresses for .sdata. + * config/ia64/sysv4.h (SELECT_RTX_SECTION): New. + +2000-05-31 Richard Henderson + * config/ia64/ia64-protos.h (ia64_expand_prediction): Remove. * config/ia64/ia64.c (ia64_expand_prediction): Move code ... (ia64_print_operand) [+]: ... here. Use current_output_insn. diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 3e170f8..8328d7f 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -144,13 +144,19 @@ sdata_symbolic_operand (op, mode) { switch (GET_CODE (op)) { + case CONST: + if (GET_CODE (XEXP (op, 0)) != PLUS + || GET_CODE (XEXP (XEXP (op, 0), 0)) != SYMBOL_REF) + break; + op = XEXP (XEXP (op, 0), 0); + /* FALLTHRU */ + case SYMBOL_REF: - return XSTR (op, 0)[0] == SDATA_NAME_FLAG_CHAR; + if (CONSTANT_POOL_ADDRESS_P (op)) + return GET_MODE_SIZE (get_pool_mode (op)) <= ia64_section_threshold; + else + return XSTR (op, 0)[0] == SDATA_NAME_FLAG_CHAR; - case CONST: - return (GET_CODE (XEXP (op, 0)) == PLUS - && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF - && XSTR (XEXP (XEXP (op, 0), 0), 0)[0] == SDATA_NAME_FLAG_CHAR); default: break; } diff --git a/gcc/config/ia64/sysv4.h b/gcc/config/ia64/sysv4.h index 7e9e2c9..9c1c125 100644 --- a/gcc/config/ia64/sysv4.h +++ b/gcc/config/ia64/sysv4.h @@ -226,6 +226,21 @@ do { \ const_section (); \ } +/* Similarly for constant pool data. */ + +extern int ia64_section_threshold; +#undef SELECT_RTX_SECTION +#define SELECT_RTX_SECTION(MODE, RTX) \ +{ \ + if (GET_MODE_SIZE (MODE) > 0 \ + && GET_MODE_SIZE (MODE) <= ia64_section_threshold) \ + sdata_section (); \ + else if (flag_pic && symbolic_operand ((RTX), (MODE))) \ + data_section (); \ + else \ + const_section (); \ +} + #undef EXTRA_SECTIONS #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sdata, in_sbss -- 2.7.4