vector_register_state.cc revision 11534
14104Ssaidi@eecs.umich.edu/*
24104Ssaidi@eecs.umich.edu * Copyright (c) 2015 Advanced Micro Devices, Inc.
34104Ssaidi@eecs.umich.edu * All rights reserved.
44104Ssaidi@eecs.umich.edu *
54104Ssaidi@eecs.umich.edu * For use for simulation and test purposes only
64104Ssaidi@eecs.umich.edu *
74104Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
84104Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are met:
94104Ssaidi@eecs.umich.edu *
104104Ssaidi@eecs.umich.edu * 1. Redistributions of source code must retain the above copyright notice,
114104Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer.
124104Ssaidi@eecs.umich.edu *
134104Ssaidi@eecs.umich.edu * 2. Redistributions in binary form must reproduce the above copyright notice,
144104Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer in the documentation
154104Ssaidi@eecs.umich.edu * and/or other materials provided with the distribution.
164104Ssaidi@eecs.umich.edu *
174104Ssaidi@eecs.umich.edu * 3. Neither the name of the copyright holder nor the names of its contributors
184104Ssaidi@eecs.umich.edu * may be used to endorse or promote products derived from this software
194104Ssaidi@eecs.umich.edu * without specific prior written permission.
204104Ssaidi@eecs.umich.edu *
214104Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
224104Ssaidi@eecs.umich.edu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
234104Ssaidi@eecs.umich.edu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
244104Ssaidi@eecs.umich.edu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
254104Ssaidi@eecs.umich.edu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
264104Ssaidi@eecs.umich.edu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
274104Ssaidi@eecs.umich.edu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
284104Ssaidi@eecs.umich.edu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
294104Ssaidi@eecs.umich.edu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
304104Ssaidi@eecs.umich.edu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
314104Ssaidi@eecs.umich.edu * POSSIBILITY OF SUCH DAMAGE.
324104Ssaidi@eecs.umich.edu *
334104Ssaidi@eecs.umich.edu * Author: John Kalamatianos
344104Ssaidi@eecs.umich.edu */
354104Ssaidi@eecs.umich.edu
364104Ssaidi@eecs.umich.edu#include "gpu-compute/vector_register_state.hh"
374104Ssaidi@eecs.umich.edu
384104Ssaidi@eecs.umich.edu#include <limits>
394104Ssaidi@eecs.umich.edu
408229Snate@binkert.org#include "gpu-compute/compute_unit.hh"
414104Ssaidi@eecs.umich.edu
424762Snate@binkert.orgVecRegisterState::VecRegisterState() : computeUnit(nullptr)
434104Ssaidi@eecs.umich.edu{
444104Ssaidi@eecs.umich.edu    s_reg.clear();
454104Ssaidi@eecs.umich.edu    d_reg.clear();
464104Ssaidi@eecs.umich.edu}
474104Ssaidi@eecs.umich.edu
484104Ssaidi@eecs.umich.eduvoid
494104Ssaidi@eecs.umich.eduVecRegisterState::setParent(ComputeUnit *_computeUnit)
504104Ssaidi@eecs.umich.edu{
514104Ssaidi@eecs.umich.edu    computeUnit = _computeUnit;
524104Ssaidi@eecs.umich.edu    _name = computeUnit->name() + ".VecRegState";
534104Ssaidi@eecs.umich.edu}
544104Ssaidi@eecs.umich.edu
554104Ssaidi@eecs.umich.eduvoid
564104Ssaidi@eecs.umich.eduVecRegisterState::init(uint32_t _size, uint32_t wf_size)
574104Ssaidi@eecs.umich.edu{
584104Ssaidi@eecs.umich.edu    s_reg.resize(_size);
594104Ssaidi@eecs.umich.edu    fatal_if(wf_size > std::numeric_limits<unsigned long long>::digits ||
604104Ssaidi@eecs.umich.edu             wf_size <= 0,
614104Ssaidi@eecs.umich.edu             "WF size is larger than the host can support or is zero");
624104Ssaidi@eecs.umich.edu    fatal_if((wf_size & (wf_size - 1)) != 0,
634104Ssaidi@eecs.umich.edu             "Wavefront size should be a power of 2");
644104Ssaidi@eecs.umich.edu    for (int i = 0; i < s_reg.size(); ++i) {
654104Ssaidi@eecs.umich.edu        s_reg[i].resize(wf_size, 0);
664104Ssaidi@eecs.umich.edu    }
674104Ssaidi@eecs.umich.edu    d_reg.resize(_size);
684104Ssaidi@eecs.umich.edu    for (int i = 0; i < d_reg.size(); ++i) {
694104Ssaidi@eecs.umich.edu        d_reg[i].resize(wf_size, 0);
704104Ssaidi@eecs.umich.edu    }
714104Ssaidi@eecs.umich.edu}
724104Ssaidi@eecs.umich.edu