예제 #1
0
uint32_t Compiler::getPriority(Var& var) const noexcept {
  if (var.getId() == kInvalidValue)
    return kInvalidValue;

  VarData* vd = getVdById(var.getId());
  return vd->getPriority();
}
예제 #2
0
bool Compiler::getSaveOnUnuse(Var& var) const noexcept {
  if (var.getId() == kInvalidValue)
    return false;

  VarData* vd = getVdById(var.getId());
  return static_cast<bool>(vd->_saveOnUnuse);
}
예제 #3
0
void Compiler::setSaveOnUnuse(Var& var, bool value) noexcept {
  if (var.getId() == kInvalidValue)
    return;

  VarData* vd = getVdById(var.getId());
  vd->_saveOnUnuse = value;
}
예제 #4
0
void X86Compiler::rename(Var& var, const char* name)
{
  if (var.getId() == kInvalidValue)
    return;

  X86CompilerVar* vdata = _getVar(var.getId());
  ASMJIT_ASSERT(vdata != NULL);

  vdata->_name = _zoneMemory.sdup(name);
}
예제 #5
0
bool X86Compiler::getSaveOnUnuse(Var& var) const
{
  if (var.getId() == kInvalidValue)
    return false;

  X86CompilerVar* vdata = _getVar(var.getId());
  ASMJIT_ASSERT(vdata != NULL);

  return (bool)vdata->saveOnUnuse;
}
예제 #6
0
void X86Compiler::setSaveOnUnuse(Var& var, bool value)
{
  if (var.getId() == kInvalidValue)
    return;

  X86CompilerVar* vdata = _getVar(var.getId());
  ASMJIT_ASSERT(vdata != NULL);

  vdata->saveOnUnuse = value;
}
예제 #7
0
uint32_t X86Compiler::getPriority(Var& var) const
{
  if (var.getId() == kInvalidValue)
    return kInvalidValue;

  X86CompilerVar* vdata = _getVar(var.getId());
  ASMJIT_ASSERT(vdata != NULL);

  return vdata->getPriority();
}
예제 #8
0
void Compiler::setPriority(Var& var, uint32_t priority) noexcept {
  if (var.getId() == kInvalidValue)
    return;

  if (priority > 255)
    priority = 255;

  VarData* vd = getVdById(var.getId());
  vd->_priority = static_cast<uint8_t>(priority);
}
예제 #9
0
void Compiler::rename(Var& var, const char* name) {
  if (var.getId() == kInvalidValue)
    return;

  VarData* vd = getVdById(var.getId());
  vd->_name = noName;

  if (name != NULL && name[0] != '\0') {
    vd->_name = _stringZone.sdup(name);
  }
}
예제 #10
0
void X86Compiler::setPriority(Var& var, uint32_t priority)
{
  if (var.getId() == kInvalidValue)
    return;

  X86CompilerVar* vdata = _getVar(var.getId());
  ASMJIT_ASSERT(vdata != NULL);

  if (priority > 100) priority = 100;
  vdata->_priority = static_cast<uint8_t>(priority);
}
예제 #11
0
void X86Compiler::_vhint(Var& var, uint32_t hintId, uint32_t hintValue)
{
  if (var.getId() == kInvalidValue)
    return;

  X86CompilerVar* cv = _getVar(var.getId());
  ASMJIT_ASSERT(cv != NULL);

  X86CompilerHint* item = Compiler_newItem<X86CompilerHint>(this, cv, hintId, hintValue);
  addItem(item);
}
예제 #12
0
void bi::InputNetCDFBuffer::readMask0(const VarType type,
    Mask<ON_HOST>& mask) {
  typedef temp_host_matrix<real>::type temp_matrix_type;
  mask.resize(m.getNumVars(type), false);

  Var* var;
  int r;
  long start, len;

  /* sparse masks */
  for (r = 0; r < int(recDims.size()); ++r) {
    if (timeVars[r] < 0) {
      BOOST_AUTO(range, modelVars.equal_range(r));
      BOOST_AUTO(iter, range.first);
      BOOST_AUTO(end, range.second);

      start = 0;
      len = nc_inq_dimlen(ncid, recDims[r]);

      temp_matrix_type C(iter->second->getNumDims(), len);
      readCoords(coordVars[r], start, len, C);
      for (; iter != end; ++iter) {
        var = iter->second;
        if (var->getType() == type) {
          mask.addSparseMask(var->getId(), C.size2());
          serialiseCoords(var, C, mask.getIndices(var->getId()));
        }
      }
    }
  }

  /* dense masks */
  r = -1;  // for those vars not associated with a record dimension
  BOOST_AUTO(range, modelVars.equal_range(r));
  BOOST_AUTO(iter, range.first);
  BOOST_AUTO(end, range.second);

  for (; iter != end; ++iter) {
    var = iter->second;
    if (var->getType() == type) {
      mask.addDenseMask(var->getId(), var->getSize());
    }
  }
}
예제 #13
0
void bi::InputNetCDFBuffer::readMask(const size_t k, const VarType type,
    Mask<ON_HOST>& mask) {
  typedef temp_host_matrix<real>::type temp_matrix_type;

  mask.resize(m.getNumVars(type), false);

  Var* var;
  int r;
  long start, len;
  for (r = 0; r < int(recDims.size()); ++r) {
    if (timeVars[r] >= 0) {
      start = recStarts[k][r];
      len = recLens[k][r];

      if (len > 0) {
        BOOST_AUTO(range, modelVars.equal_range(r));
        BOOST_AUTO(iter, range.first);
        BOOST_AUTO(end, range.second);

        if (coordVars[r] >= 0) {
          /* sparse mask */
          temp_matrix_type C(iter->second->getNumDims(), len);
          readCoords(coordVars[r], start, len, C);
          for (; iter != end; ++iter) {
            var = iter->second;
            if (var->getType() == type) {
              mask.addSparseMask(var->getId(), len);
              serialiseCoords(var, C, mask.getIndices(var->getId()));
            }
          }
        } else {
          /* dense mask */
          for (; iter != end; ++iter) {
            var = iter->second;
            if (var->getType() == type) {
              mask.addDenseMask(var->getId(), var->getSize());
            }
          }
        }
      }
    }
  }
}
예제 #14
0
void Compiler::rename(Var& var, const char* fmt, ...) noexcept {
  if (var.getId() == kInvalidValue)
    return;

  VarData* vd = getVdById(var.getId());
  vd->_name = noName;

  if (fmt != nullptr && fmt[0] != '\0') {
    char buf[64];

    va_list ap;
    va_start(ap, fmt);

    vsnprintf(buf, ASMJIT_ARRAY_SIZE(buf), fmt, ap);
    buf[ASMJIT_ARRAY_SIZE(buf) - 1] = '\0';

    vd->_name = _stringAllocator.sdup(buf);
    va_end(ap);
  }
}
예제 #15
0
Error Compiler::_hint(Var& var, uint32_t hint, uint32_t value) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;

  HLHint* node = newHintNode(var, hint, value);
  if (node == nullptr)
    return setLastError(kErrorNoHeapMemory);

  addNode(node);
  return kErrorOk;
}
예제 #16
0
Error Compiler::alloc(Var& var) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;
  return _hint(var, kVarHintAlloc, kInvalidValue);
}
예제 #17
0
Error Compiler::alloc(Var& var, uint32_t regIndex) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;
  return _hint(var, kVarHintAlloc, regIndex);
}
예제 #18
0
Error Compiler::unuse(Var& var) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;
  return _hint(var, kVarHintUnuse, kInvalidValue);
}
예제 #19
0
Error Compiler::spill(Var& var) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;
  return _hint(var, kVarHintSpill, kInvalidValue);
}
예제 #20
0
Error Compiler::alloc(Var& var, const Reg& reg) noexcept {
  if (var.getId() == kInvalidValue)
    return kErrorOk;
  return _hint(var, kVarHintAlloc, reg.getRegIndex());
}