From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5083 invoked by alias); 29 May 2012 04:14:03 -0000 Received: (qmail 4753 invoked by uid 22791); 29 May 2012 04:13:59 -0000 X-SWARE-Spam-Status: No, hits=-5.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-gg0-f175.google.com (HELO mail-gg0-f175.google.com) (209.85.161.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 29 May 2012 04:13:42 +0000 Received: by ggnp4 with SMTP id p4so2340157ggn.20 for ; Mon, 28 May 2012 21:13:42 -0700 (PDT) Received: by 10.100.243.28 with SMTP id q28mr988anh.43.1338264821990; Mon, 28 May 2012 21:13:41 -0700 (PDT) Received: from localhost (cpe-174-109-057-184.nc.res.rr.com. [174.109.57.184]) by mx.google.com with ESMTPS id w44sm54038873yhd.11.2012.05.28.21.13.40 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 28 May 2012 21:13:41 -0700 (PDT) From: Matt Turner To: gcc-patches@gcc.gnu.org Cc: Ramana Radhakrishnan , Richard Earnshaw , Nick Clifton , Paul Brook , Xinyu Qi Subject: [PATCH ARM iWMMXt 5/5] pipeline description Date: Tue, 29 May 2012 04:14:00 -0000 Message-Id: <1338264799-12374-6-git-send-email-mattst88@gmail.com> In-Reply-To: <1338264799-12374-1-git-send-email-mattst88@gmail.com> References: <1338264799-12374-1-git-send-email-mattst88@gmail.com> Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-05/txt/msg01878.txt.bz2 From: Xinyu Qi gcc/ * config/arm/t-arm (MD_INCLUDES): Add marvell-f-iwmmxt.md. * config/arm/marvell-f-iwmmxt.md: New file. * config/arm/arm.md (marvell-f-iwmmxt.md): Include. --- gcc/config/arm/arm.md | 1 + gcc/config/arm/marvell-f-iwmmxt.md | 179 ++++++++++++++++++++++++++++++++++++ gcc/config/arm/t-arm | 1 + 3 files changed, 181 insertions(+), 0 deletions(-) create mode 100644 gcc/config/arm/marvell-f-iwmmxt.md diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index b0333c2..baa3b7c 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -546,6 +546,7 @@ (const_string "yes") (const_string "no")))) +(include "marvell-f-iwmmxt.md") (include "arm-generic.md") (include "arm926ejs.md") (include "arm1020e.md") diff --git a/gcc/config/arm/marvell-f-iwmmxt.md b/gcc/config/arm/marvell-f-iwmmxt.md new file mode 100644 index 0000000..fe8e455 --- /dev/null +++ b/gcc/config/arm/marvell-f-iwmmxt.md @@ -0,0 +1,179 @@ +;; Marvell WMMX2 pipeline description +;; Copyright (C) 2011 Free Software Foundation, Inc. +;; Written by Marvell, Inc. + +;; This file is part of GCC. + +;; GCC is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published +;; by the Free Software Foundation; either version 3, or (at your +;; option) any later version. + +;; GCC is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +;; License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; . + + +(define_automaton "marvell_f_iwmmxt") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Pipelines +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; This is a 7-stage pipelines: +;; +;; MD | MI | ME1 | ME2 | ME3 | ME4 | MW +;; +;; There are various bypasses modelled to a greater or lesser extent. +;; +;; Latencies in this file correspond to the number of cycles after +;; the issue stage that it takes for the result of the instruction to +;; be computed, or for its side-effects to occur. + +(define_cpu_unit "mf_iwmmxt_MD" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_MI" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_ME1" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_ME2" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_ME3" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_ME4" "marvell_f_iwmmxt") +(define_cpu_unit "mf_iwmmxt_MW" "marvell_f_iwmmxt") + +(define_reservation "mf_iwmmxt_ME" + "mf_iwmmxt_ME1,mf_iwmmxt_ME2,mf_iwmmxt_ME3,mf_iwmmxt_ME4" +) + +(define_reservation "mf_iwmmxt_pipeline" + "mf_iwmmxt_MD, mf_iwmmxt_MI, mf_iwmmxt_ME, mf_iwmmxt_MW" +) + +;; An attribute to indicate whether our reservations are applicable. +(define_attr "marvell_f_iwmmxt" "yes,no" + (const (if_then_else (symbol_ref "arm_arch_iwmmxt") + (const_string "yes") (const_string "no")))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; instruction classes +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; An attribute appended to instructions for classification + +(define_attr "wmmxt_shift" "yes,no" + (if_then_else (eq_attr "wtype" "wror, wsll, wsra, wsrl") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_pack" "yes,no" + (if_then_else (eq_attr "wtype" "waligni, walignr, wmerge, wpack, wshufh, wunpckeh, wunpckih, wunpckel, wunpckil") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_mult_c1" "yes,no" + (if_then_else (eq_attr "wtype" "wmac, wmadd, wmiaxy, wmiawxy, wmulw, wqmiaxy, wqmulwm") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_mult_c2" "yes,no" + (if_then_else (eq_attr "wtype" "wmul, wqmulm") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_alu_c1" "yes,no" + (if_then_else (eq_attr "wtype" "wabs, wabsdiff, wand, wandn, wmov, wor, wxor") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_alu_c2" "yes,no" + (if_then_else (eq_attr "wtype" "wacc, wadd, waddsubhx, wavg2, wavg4, wcmpeq, wcmpgt, wmax, wmin, wsub, waddbhus, wsubaddhx") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_alu_c3" "yes,no" + (if_then_else (eq_attr "wtype" "wsad") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_transfer_c1" "yes,no" + (if_then_else (eq_attr "wtype" "tbcst, tinsr, tmcr, tmcrr") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_transfer_c2" "yes,no" + (if_then_else (eq_attr "wtype" "textrm, tmovmsk, tmrc, tmrrc") + (const_string "yes") (const_string "no")) +) + +(define_attr "wmmxt_transfer_c3" "yes,no" + (if_then_else (eq_attr "wtype" "tmia, tmiaph, tmiaxy") + (const_string "yes") (const_string "no")) +) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Main description +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define_insn_reservation "marvell_f_iwmmxt_alu_c1" 1 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_alu_c1" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_pack" 1 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_pack" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_shift" 1 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_shift" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_transfer_c1" 1 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_transfer_c1" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_transfer_c2" 5 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_transfer_c2" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_alu_c2" 2 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_alu_c2" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_alu_c3" 3 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_alu_c3" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_transfer_c3" 4 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_transfer_c3" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_mult_c1" 4 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_mult_c1" "yes")) + "mf_iwmmxt_pipeline") + +;There is a forwarding path from ME3 stage +(define_insn_reservation "marvell_f_iwmmxt_mult_c2" 3 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wmmxt_mult_c2" "yes")) + "mf_iwmmxt_pipeline") + +(define_insn_reservation "marvell_f_iwmmxt_wstr" 0 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wtype" "wstr")) + "mf_iwmmxt_pipeline") + +;There is a forwarding path from MW stage +(define_insn_reservation "marvell_f_iwmmxt_wldr" 5 + (and (eq_attr "marvell_f_iwmmxt" "yes") + (eq_attr "wtype" "wldr")) + "mf_iwmmxt_pipeline") diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm index 83c18f7..30687e1 100644 --- a/gcc/config/arm/t-arm +++ b/gcc/config/arm/t-arm @@ -51,6 +51,7 @@ MD_INCLUDES= $(srcdir)/config/arm/arm1020e.md \ $(srcdir)/config/arm/iwmmxt.md \ $(srcdir)/config/arm/iwmmxt2.md \ $(srcdir)/config/arm/ldmstm.md \ + $(srcdir)/config/arm/marvell-f-iwmmxt.md \ $(srcdir)/config/arm/neon.md \ $(srcdir)/config/arm/predicates.md \ $(srcdir)/config/arm/sync.md \ -- 1.7.3.4