OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [tilepro/] [tilepro-multiply.h] - Blame information for rev 709

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 709 jeremybenn
/* Header for constant multiple table for TILEPro.
2
   Copyright (C) 2011, 2012
3
   Free Software Foundation, Inc.
4
   Contributed by Walter Lee (walt@tilera.com)
5
 
6
   This file is part of GCC.
7
 
8
   GCC is free software; you can redistribute it and/or modify it
9
   under the terms of the GNU General Public License as published
10
   by the Free Software Foundation; either version 3, or (at your
11
   option) any later version.
12
 
13
   GCC is distributed in the hope that it will be useful, but WITHOUT
14
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16
   License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with GCC; see the file COPYING3.  If not see
20
   <http://www.gnu.org/licenses/>.  */
21
 
22
#ifndef GCC_TILEPRO_MULTIPLY_H
23
#define GCC_TILEPRO_MULTIPLY_H
24
 
25
/* A node of a tilepro_multiply_insn_seq, corresponding to a single
26
   machine instruction such as 'add', 's1a', or an shl by a
27
   constant.  */
28
struct tilepro_multiply_insn_seq_entry
29
{
30
  /* Which operation this node performs (e.g. an add or sub).  Don't
31
     use this directly, call get_opcode() table to get a
32
     insn_code.  */
33
  unsigned char compressed_opcode;
34
 
35
  /* The left-hand side of this expression tree.
36
     If equal to 0, it refers to 'zero'.
37
     If equal to 1, it refers to the original input to the multiply
38
     operation.
39
     Otherwise, subtract two and it is an index into the containing
40
     tilepro_multiply_insn_seq's 'op' array. Since it can only point
41
     to some value that has already been computed it will always point
42
     to an earlier entry in the array.  */
43
  unsigned char lhs;
44
 
45
  /* This is like lhs, but for the right-hand side. However, for shift
46
     opcodes this is a shift count rather than an operand index.  */
47
  unsigned char rhs;
48
};
49
 
50
/* Maximum size of op array.  */
51
#define tilepro_multiply_insn_seq_MAX_OPERATIONS 4
52
 
53
/* This defines a DAG describing how to multiply by a constant in
54
   terms of one or more machine instructions.  */
55
struct tilepro_multiply_insn_seq
56
{
57
  /* The constant factor by which this expression tree multiplies its
58
     input.  */
59
  int multiplier;
60
 
61
  /* The nodes of the parse tree. These are ordered so that
62
     instructions can be emitted in the same order that they appear in
63
     this array.  Entry entry in this array can only refer to earlier
64
     entries in the array.  */
65
  struct tilepro_multiply_insn_seq_entry
66
    op[tilepro_multiply_insn_seq_MAX_OPERATIONS];
67
 
68
};
69
 
70
/* A mapping from the compressed opcode to the corresponding enum
71
   insn_code.  */
72
extern const enum insn_code tilepro_multiply_insn_seq_decode_opcode[];
73
 
74
/* Table mapping constant int multipliers to an expression tree that
75
   efficiently performs that multiplication.  This is sorted by its
76
   'multiplier' field so a binary search can look for matches.  */
77
extern const struct tilepro_multiply_insn_seq
78
  tilepro_multiply_insn_seq_table[];
79
 
80
/* The number of elements in multiply_insn_seq_table.  */
81
extern const int tilepro_multiply_insn_seq_table_size;
82
 
83
#endif /* !GCC_TILEPRO_MULTIPLY_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.