From patchwork Thu Mar 31 06:22:49 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anatoly Sokolov X-Patchwork-Id: 89019 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 6D852B6EF0 for ; Thu, 31 Mar 2011 17:23:01 +1100 (EST) Received: (qmail 917 invoked by alias); 31 Mar 2011 06:22:57 -0000 Received: (qmail 909 invoked by uid 22791); 31 Mar 2011 06:22:56 -0000 X-SWARE-Spam-Status: No, hits=1.9 required=5.0 tests=AWL, BAYES_50, KAM_THEBAT, RCVD_IN_DNSWL_NONE, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from contrabass.post.ru (HELO contrabass.corbina.net) (85.21.78.5) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 31 Mar 2011 06:22:50 +0000 Received: from corbina.ru (mail.post.ru [195.14.50.16]) by contrabass.corbina.net (Postfix) with ESMTP id 0B92ACBA3C; Thu, 31 Mar 2011 10:22:49 +0400 (MSD) Received: from [93.80.237.70] (account aesok@post.ru HELO Vista.corbina.ru) by corbina.ru (CommuniGate Pro SMTP 5.1.14) with ESMTPA id 313077578; Thu, 31 Mar 2011 10:22:49 +0400 Date: Thu, 31 Mar 2011 10:22:49 +0400 From: Anatoly Sokolov Message-ID: <88671551.20110331102249@post.ru> To: gcc-patches@gcc.gnu.org CC: law@redhat.com, kazu@codesourcery.com Subject: [H8300] Hookize GO_IF_MODE_DEPENDENT_ADDRESS MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hello. This patch removes obsolete GO_IF_MODE_DEPENDENT_ADDRESS macros from H8300 back end in the GCC and introduces equivalent TARGET_MODE_DEPENDENT_ADDRESS_P target hook. Regression tested on h8300-unknown-elf with no new failure. OK to install? * config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove macro. * config/h8300/h8300-protos.h (h8300_get_index): Remove. * config/h8300/h8300.c (TARGET_MODE_DEPENDENT_ADDRESS_P): Define. (h8300_mode_dependent_address_p): New function. (h8300_get_index): Make static. Anatoly. Index: gcc/config/h8300/h8300.c =================================================================== --- gcc/config/h8300/h8300.c (revision 171675) +++ gcc/config/h8300/h8300.c (working copy) @@ -113,6 +113,7 @@ static bool h8300_short_move_mem_p (rtx, enum rtx_code); static unsigned int h8300_move_length (rtx *, const h8300_length_table *); static bool h8300_hard_regno_scratch_ok (unsigned int); +static rtx h8300_get_index (rtx, enum machine_mode mode, int *); /* CPU_TYPE, says what cpu we're compiling for. */ int cpu_type; @@ -2094,7 +2097,7 @@ MODE is the mode of the value being accessed. It can be VOIDmode if the address is known to be valid, but its mode is unknown. */ -rtx +static rtx h8300_get_index (rtx x, enum machine_mode mode, int *size) { int dummy, factor; @@ -2156,6 +2159,21 @@ return x; } +/* Worker function for TARGET_MODE_DEPENDENT_ADDRESS_P. + + On the H8/300, the predecrement and postincrement address depend thus + (the amount of decrement or increment being the length of the operand). */ + +static bool +h8300_mode_dependent_address_p (const_rtx addr) +{ + if (GET_CODE (addr) == PLUS + && h8300_get_index (XEXP (addr, 0), VOIDmode, 0) != XEXP (addr, 0)) + return true; + + return false; +} + static const h8300_length_table addb_length_table = { /* #xx Rs @aa @Rs @xx */ @@ -6026,4 +6044,7 @@ #undef TARGET_EXCEPT_UNWIND_INFO #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info +#undef TARGET_MODE_DEPENDENT_ADDRESS_P +#define TARGET_MODE_DEPENDENT_ADDRESS_P h8300_mode_dependent_address_p + struct gcc_target targetm = TARGET_INITIALIZER; Index: gcc/config/h8300/h8300.h =================================================================== --- gcc/config/h8300/h8300.h (revision 171675) +++ gcc/config/h8300/h8300.h (working copy) @@ -771,11 +771,6 @@ On the H8/300, the predecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ - -#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ - if (GET_CODE (ADDR) == PLUS \ - && h8300_get_index (XEXP (ADDR, 0), VOIDmode, 0) != XEXP (ADDR, 0)) \ - goto LABEL; /* Specify the machine mode that this machine uses for the index in the tablejump instruction. */ Index: gcc/config/h8300/h8300-protos.h =================================================================== --- gcc/config/h8300/h8300-protos.h (revision 171675) +++ gcc/config/h8300/h8300-protos.h (working copy) @@ -110,7 +110,6 @@ extern void h8300_pr_interrupt (struct cpp_reader *); extern void h8300_pr_saveall (struct cpp_reader *); extern enum reg_class h8300_reg_class_from_letter (int); -extern rtx h8300_get_index (rtx, enum machine_mode mode, int *); extern unsigned int h8300_insn_length_from_table (rtx, rtx *); extern const char * output_h8sx_shift (rtx *, int, int); extern bool h8300_operands_match_p (rtx *);