summaryrefslogtreecommitdiff
path: root/gcc/config/tilepro/tilepro-multiply.h
diff options
context:
space:
mode:
authorWalter Lee <walt@tilera.com>2012-02-14 10:02:21 +0000
committerWalter Lee <walt@gcc.gnu.org>2012-02-14 10:02:21 +0000
commitdd552284fd817c9d946598a7b647f9e67753bed6 (patch)
tree2ebff3fcffa7603a372455fbc14c68ad06466730 /gcc/config/tilepro/tilepro-multiply.h
parent62513f7bedaa6e0467da08030b61a35a1b83ab39 (diff)
downloadgcc-dd552284fd817c9d946598a7b647f9e67753bed6.tar.gz
Add ports for TILE-Gx and TILEPro.
. * MAINTAINERS (tilegx port): Add myself. (tilepro port): Add myself. contrib * config-list.mk (LIST): Add tilegx-linux-gnu and tilepro-linux-gnu. * gcc_update (gcc/config/tilegx/mul-tables.c): New dependencies. (gcc/config/tilepro/mul-tables.c): New dependencies. gcc * config.gcc: Handle tilegx and tilepro. * configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for tilegx and tilepro. Add HAVE_AS_TLS check for tilegx and tilepro. * configure: Regenerate. * doc/contrib.texi: Add Mat Hostetter and self. * doc/extend.texi (TILE-Gx Built-in Functions): New node. Document instruction intrinsics and network accessing intrinsics. (TILEPro Built-in Functions): New node. Document instruction intrinsics and network accessing intrinsics. * doc/install.texi (Specific, tilegx-*-linux*): Document it. (Specific, tilepro-*-linux*): Likewise. * doc/invoke.texi (TILE-Gx Options): New section. (TILEPro Options): New section. * doc/md.texi (TILE-Gx): New section. (TILEPro): New section. * common/config/tilegx: New directory for tilegx. * common/config/tilepro: New directory for tilepro. * config/tilegx: New directory for tilegx. * config/tilepro: New directory for tilepro. gcc/testsuite * g++.dg/other/PR23205.C: Disable test on tile. * g++.dg/other/pr23205-2.C: Disable test on tile. * gcc.dg/20020312-2.c: Add a condition for __tile__. * gcc.dg/20040813-1.c: Disable test on tile. * gcc.dg/lower-subreg-1.c: Disable test on tilegx. * gcc.misc-tests/linkage.exp: Handle tilegx. libcpp * configure.ac: Require 64-bit hwint for tilegx and tilepro. * configure: Regenerate. libgcc * config.host: Handle tilegx and tilepro. * config/tilegx: New directory for tilegx. * config/tilepro: New directory for tilepro. libgomp * configure.tgt: Handle tilegx and tilepro. * config/linux/tile: New directory for tilegx and tilepro. Added: trunk/gcc/common/config/tilegx/tilegx-common.c trunk/gcc/common/config/tilepro/tilepro-common.c trunk/gcc/config/tilegx/constraints.md trunk/gcc/config/tilegx/linux.h trunk/gcc/config/tilegx/mul-tables.c trunk/gcc/config/tilegx/predicates.md trunk/gcc/config/tilegx/sync.md trunk/gcc/config/tilegx/t-tilegx trunk/gcc/config/tilegx/tilegx-builtins.h trunk/gcc/config/tilegx/tilegx-c.c trunk/gcc/config/tilegx/tilegx-generic.md trunk/gcc/config/tilegx/tilegx-modes.def trunk/gcc/config/tilegx/tilegx-multiply.h trunk/gcc/config/tilegx/tilegx-protos.h trunk/gcc/config/tilegx/tilegx.c trunk/gcc/config/tilegx/tilegx.h trunk/gcc/config/tilegx/tilegx.md trunk/gcc/config/tilegx/tilegx.opt trunk/gcc/config/tilepro/constraints.md trunk/gcc/config/tilepro/gen-mul-tables.cc trunk/gcc/config/tilepro/linux.h trunk/gcc/config/tilepro/mul-tables.c trunk/gcc/config/tilepro/predicates.md trunk/gcc/config/tilepro/t-tilepro trunk/gcc/config/tilepro/tilepro-builtins.h trunk/gcc/config/tilepro/tilepro-c.c trunk/gcc/config/tilepro/tilepro-generic.md trunk/gcc/config/tilepro/tilepro-modes.def trunk/gcc/config/tilepro/tilepro-multiply.h trunk/gcc/config/tilepro/tilepro-protos.h trunk/gcc/config/tilepro/tilepro.c trunk/gcc/config/tilepro/tilepro.h trunk/gcc/config/tilepro/tilepro.md trunk/gcc/config/tilepro/tilepro.opt trunk/libgcc/config/tilegx/sfp-machine.h trunk/libgcc/config/tilegx/sfp-machine32.h trunk/libgcc/config/tilegx/sfp-machine64.h trunk/libgcc/config/tilegx/t-crtstuff trunk/libgcc/config/tilegx/t-softfp trunk/libgcc/config/tilegx/t-tilegx trunk/libgcc/config/tilepro/atomic.c trunk/libgcc/config/tilepro/atomic.h trunk/libgcc/config/tilepro/linux-unwind.h trunk/libgcc/config/tilepro/sfp-machine.h trunk/libgcc/config/tilepro/softdivide.c trunk/libgcc/config/tilepro/softmpy.S trunk/libgcc/config/tilepro/t-crtstuff trunk/libgcc/config/tilepro/t-tilepro trunk/libgomp/config/linux/tile/futex.h Modified: trunk/MAINTAINERS trunk/contrib/config-list.mk trunk/contrib/gcc_update trunk/gcc/config.gcc trunk/gcc/configure trunk/gcc/configure.ac trunk/gcc/doc/contrib.texi trunk/gcc/doc/extend.texi trunk/gcc/doc/install.texi trunk/gcc/doc/invoke.texi trunk/gcc/doc/md.texi trunk/gcc/testsuite/g++.dg/other/PR23205.C trunk/gcc/testsuite/g++.dg/other/pr23205-2.C trunk/gcc/testsuite/gcc.dg/20020312-2.c trunk/gcc/testsuite/gcc.dg/20040813-1.c trunk/gcc/testsuite/gcc.dg/lower-subreg-1.c trunk/gcc/testsuite/gcc.misc-tests/linkage.exp trunk/libcpp/configure trunk/libcpp/configure.ac trunk/libgcc/config.host trunk/libgomp/configure.tgt From-SVN: r184203
Diffstat (limited to 'gcc/config/tilepro/tilepro-multiply.h')
-rw-r--r--gcc/config/tilepro/tilepro-multiply.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/gcc/config/tilepro/tilepro-multiply.h b/gcc/config/tilepro/tilepro-multiply.h
new file mode 100644
index 00000000000..e3f88587e6a
--- /dev/null
+++ b/gcc/config/tilepro/tilepro-multiply.h
@@ -0,0 +1,83 @@
+/* Header for constant multiple table for TILEPro.
+ Copyright (C) 2011, 2012
+ Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_TILEPRO_MULTIPLY_H
+#define GCC_TILEPRO_MULTIPLY_H
+
+/* A node of a tilepro_multiply_insn_seq, corresponding to a single
+ machine instruction such as 'add', 's1a', or an shl by a
+ constant. */
+struct tilepro_multiply_insn_seq_entry
+{
+ /* Which operation this node performs (e.g. an add or sub). Don't
+ use this directly, call get_opcode() table to get a
+ insn_code. */
+ unsigned char compressed_opcode;
+
+ /* The left-hand side of this expression tree.
+ If equal to 0, it refers to 'zero'.
+ If equal to 1, it refers to the original input to the multiply
+ operation.
+ Otherwise, subtract two and it is an index into the containing
+ tilepro_multiply_insn_seq's 'op' array. Since it can only point
+ to some value that has already been computed it will always point
+ to an earlier entry in the array. */
+ unsigned char lhs;
+
+ /* This is like lhs, but for the right-hand side. However, for shift
+ opcodes this is a shift count rather than an operand index. */
+ unsigned char rhs;
+};
+
+/* Maximum size of op array. */
+#define tilepro_multiply_insn_seq_MAX_OPERATIONS 4
+
+/* This defines a DAG describing how to multiply by a constant in
+ terms of one or more machine instructions. */
+struct tilepro_multiply_insn_seq
+{
+ /* The constant factor by which this expression tree multiplies its
+ input. */
+ int multiplier;
+
+ /* The nodes of the parse tree. These are ordered so that
+ instructions can be emitted in the same order that they appear in
+ this array. Entry entry in this array can only refer to earlier
+ entries in the array. */
+ struct tilepro_multiply_insn_seq_entry
+ op[tilepro_multiply_insn_seq_MAX_OPERATIONS];
+
+};
+
+/* A mapping from the compressed opcode to the corresponding enum
+ insn_code. */
+extern const enum insn_code tilepro_multiply_insn_seq_decode_opcode[];
+
+/* Table mapping constant int multipliers to an expression tree that
+ efficiently performs that multiplication. This is sorted by its
+ 'multiplier' field so a binary search can look for matches. */
+extern const struct tilepro_multiply_insn_seq
+ tilepro_multiply_insn_seq_table[];
+
+/* The number of elements in multiply_insn_seq_table. */
+extern const int tilepro_multiply_insn_seq_table_size;
+
+#endif /* !GCC_TILEPRO_MULTIPLY_H */