gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
misc.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2015 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * For use for simulation and test purposes only
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its contributors
18  * may be used to endorse or promote products derived from this software
19  * without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Author: Steve Reinhardt
34  */
35 
36 #ifndef __MISC_HH__
37 #define __MISC_HH__
38 
39 #include <bitset>
40 #include <limits>
41 #include <memory>
42 
43 #include "base/misc.hh"
44 
45 class GPUDynInst;
46 
47 typedef std::bitset<std::numeric_limits<unsigned long long>::digits> VectorMask;
48 typedef std::shared_ptr<GPUDynInst> GPUDynInstPtr;
49 
50 class WaitClass
51 {
52  public:
54  void init(uint64_t *_tcnt, uint32_t _numStages=0)
55  {
56  tcnt = _tcnt;
57  numStages = _numStages;
58  }
59 
60  void set(uint32_t i)
61  {
63  "Can't allocate resource because it is busy!!!");
64  nxtAvail = *tcnt + i;
65  }
66  void preset(uint32_t delay)
67  {
68  lookAheadAvail = std::max(lookAheadAvail, delay + (*tcnt) - numStages);
69  }
70  bool rdy() const { return *tcnt >= nxtAvail; }
71  bool prerdy() const { return *tcnt >= lookAheadAvail; }
72 
73  private:
74  // timestamp indicating when resource will be available
75  uint64_t nxtAvail;
76  // timestamp indicating when resource will be available including
77  // pending uses of the resource (when there is a cycle gap between
78  // rdy() and set()
79  uint64_t lookAheadAvail;
80  // current timestamp
81  uint64_t *tcnt;
82  // number of stages between checking if a resource is ready and
83  // setting the resource's utilization
84  uint32_t numStages;
85 };
86 
87 class Float16
88 {
89  public:
90  uint16_t val;
91 
92  Float16() { val = 0; }
93 
94  Float16(const Float16 &x) : val(x.val) { }
95 
96  Float16(float x)
97  {
98  uint32_t ai = *(uint32_t *)&x;
99 
100  uint32_t s = (ai >> 31) & 0x1;
101  uint32_t exp = (ai >> 23) & 0xff;
102  uint32_t mant = (ai >> 0) & 0x7fffff;
103 
104  if (exp == 0 || exp <= 0x70) {
105  exp = 0;
106  mant = 0;
107  } else if (exp == 0xff) {
108  exp = 0x1f;
109  } else if (exp >= 0x8f) {
110  exp = 0x1f;
111  mant = 0;
112  } else {
113  exp = exp - 0x7f + 0x0f;
114  }
115 
116  mant = mant >> 13;
117 
118  val = 0;
119  val |= (s << 15);
120  val |= (exp << 10);
121  val |= (mant << 0);
122  }
123 
124  operator float() const
125  {
126  uint32_t s = (val >> 15) & 0x1;
127  uint32_t exp = (val >> 10) & 0x1f;
128  uint32_t mant = (val >> 0) & 0x3ff;
129 
130  if (!exp) {
131  exp = 0;
132  mant = 0;
133  } else if (exp == 0x1f) {
134  exp = 0xff;
135  } else {
136  exp = exp - 0x0f + 0x7f;
137  }
138 
139  uint32_t val1 = 0;
140  val1 |= (s << 31);
141  val1 |= (exp << 23);
142  val1 |= (mant << 13);
143 
144  return *(float*)&val1;
145  }
146 };
147 
148 #endif // __MISC_HH__
bool rdy() const
Definition: misc.hh:70
Bitfield< 7 > i
Definition: miscregs.hh:1378
uint64_t nxtAvail
Definition: misc.hh:75
std::bitset< std::numeric_limits< unsigned long long >::digits > VectorMask
Definition: misc.hh:45
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition: misc.hh:48
Float16(float x)
Definition: misc.hh:96
bool prerdy() const
Definition: misc.hh:71
uint64_t lookAheadAvail
Definition: misc.hh:79
uint16_t val
Definition: misc.hh:90
void preset(uint32_t delay)
Definition: misc.hh:66
Definition: misc.hh:87
uint64_t * tcnt
Definition: misc.hh:81
void init(uint64_t *_tcnt, uint32_t _numStages=0)
Definition: misc.hh:54
Bitfield< 44 > s
Definition: misc.hh:882
Float16(const Float16 &x)
Definition: misc.hh:94
WaitClass()
Definition: misc.hh:53
fatal_if(p->js_features.size() > 16,"Too many job slot feature registers specified (%i)\n", p->js_features.size())
Float16()
Definition: misc.hh:92
uint32_t numStages
Definition: misc.hh:84
Bitfield< 1 > x
Definition: types.hh:105
void set(uint32_t i)
Definition: misc.hh:60

Generated on Fri Jun 9 2017 13:03:38 for gem5 by doxygen 1.8.6