hsail,gpu-compute: fixes to appease clang++

fixes to appease clang++. tested on:

Ubuntu clang version 3.5.0-4ubuntu2~trusty2
(tags/RELEASE_350/final) (based on LLVM 3.5.0)

Ubuntu clang version 3.6.0-2ubuntu1~trusty1
(tags/RELEASE_360/final) (based on LLVM 3.6.0)

the fixes address the following five issues:

1) the exec continuations in gpu_static_inst.hh were marked
   as protected when they should be public. here we mark
   them as public

2) the Abs instruction uses std::abs() in its execute method.
   because Abs is templated, it can also operate on U32 and U64,
   types, which cause Abs::execute() to pass uint32_t and uint64_t
   types to std::abs() respectively. this triggers a warning
   because std::abs() has no effect in this case. to rememdy this
   we add template specialization for the execute() method of Abs
   when its template paramter is U32 or U64.

3) Some potocols that utilize the code in cprintf.hh were missing
   includes to BoolVec.hh, which defines operator<< for the BoolVec
   type. This would cause issues when the generated code would try
   to pass a BoolVec type to a method in cprintf.hh that used
   operator<< on an instance of a BoolVec.

4) Surprise, clang doesn't like it when you clobber all the bits
   in a newly allocated object. I.e., this code:

   tlb = new GpuTlbEntry\[size\];
   std::memset(tlb, 0, sizeof(GpuTlbEntry) \* size);

   Let's use std::vector to track the TLB entries in the GpuTlb now...

5) There were a few variables used only in DPRINTFs, so we mark them
   with M5_VAR_USED.
This commit is contained in:
Tony Gutierrez
2016-10-26 22:48:45 -04:00
parent dc16c1ceb8
commit 74249f80df
6 changed files with 59 additions and 11 deletions

View File

@@ -221,7 +221,6 @@ class GPUStaticInst : public GPUStaticInstFlags
void setFlag(Flags flag) { _flags[flag] = true; }
protected:
virtual void
execLdAcq(GPUDynInstPtr gpuDynInst)
{
@@ -246,6 +245,7 @@ class GPUStaticInst : public GPUStaticInstFlags
fatal("calling execAtomicAcq() on a non-atomic instruction.\n");
}
protected:
const std::string opcode;
std::string disassembly;
int _instNum;

View File

@@ -71,16 +71,15 @@ namespace X86ISA
accessDistance = p->accessDistance;
clock = p->clk_domain->clockPeriod();
tlb = new GpuTlbEntry[size];
std::memset(tlb, 0, sizeof(GpuTlbEntry) * size);
tlb.assign(size, GpuTlbEntry());
freeList.resize(numSets);
entryList.resize(numSets);
for (int set = 0; set < numSets; ++set) {
for (int way = 0; way < assoc; ++way) {
int x = set*assoc + way;
freeList[set].push_back(&tlb[x]);
int x = set * assoc + way;
freeList[set].push_back(&tlb.at(x));
}
}
@@ -133,9 +132,6 @@ namespace X86ISA
{
// make sure all the hash-maps are empty
assert(translationReturnEvent.empty());
// delete the TLB
delete[] tlb;
}
BaseSlavePort&

View File

@@ -170,7 +170,7 @@ namespace X86ISA
*/
bool accessDistance;
GpuTlbEntry *tlb;
std::vector<GpuTlbEntry> tlb;
/*
* It's a per-set list. As long as we have not reached