Example #1
0
void DotBuilder::doCall(ASTCall* element)
{
  const Vector<ASTElement*>& arguments = element->getArguments();
  size_t i, len = arguments.getLength();
  size_t celter = len / 2;

  _sb.appendFormat("  N_%u [label=\"", element->getElementId());
  _sb.appendFormat("<F0>%s", Hash<Function>::dataToKey(element->getFunction()));
  for (i = 0; i < len; i++)
  {
    _sb.appendFormat("<A%u>", (unsigned int)i);
  }
  _sb.appendString("\"];\n");

  for (i = 0; i < len; i++)
  {
    _sb.appendFormat("  N_%u:A%u -> N_%u:F0;\n",
      element->getElementId(),
      (unsigned int)i,
      arguments[i]->getElementId());
  }

  for (i = 0; i < len; i++)
  {
    doElement(arguments[i]);
  }
}
Example #2
0
  virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected)
  {
    typedef void (*Func)(int*);
    Func func = asmjit_cast<Func>(_func);

    int i;
    int resultBuf[32];
    int expectedBuf[32];

    for (i = 0; i < ASMJIT_ARRAY_SIZE(resultBuf); i++)
      expectedBuf[i] = i * 32;

    bool success = true;
    func(resultBuf);

    for (i = 0; i < ASMJIT_ARRAY_SIZE(resultBuf); i++)
    {
      result.appendFormat("%d", resultBuf[i]);
      expected.appendFormat("%d", expectedBuf[1]);

      success &= (resultBuf[i] == expectedBuf[i]);
    }

    return success;
  }
Example #3
0
void DotBuilder::doOperator(ASTOperator* element)
{
  uint operatorType = element->getOperatorType();

  ASTElement* left  = element->getLeft();
  ASTElement* right = element->getRight();

  const char* opString = NULL;

  switch (operatorType)
  {
    case MOPERATOR_ASSIGN: opString = "="; break;
    case MOPERATOR_PLUS  : opString = "+"; break;
    case MOPERATOR_MINUS : opString = "-"; break;
    case MOPERATOR_MUL   : opString = "*"; break;
    case MOPERATOR_DIV   : opString = "/"; break;
    case MOPERATOR_MOD   : opString = "%"; break;
	case MOPERATOR_POW   : opString = "^"; break;
    default:
      MP_ASSERT_NOT_REACHED();
  }

  _sb.appendFormat("  N_%u [label=\"<L>|<F0>%s|<R>\"];\n", element->getElementId(), opString);
  _sb.appendFormat("  N_%u:L -> N_%u:F0;\n", element->getElementId(), left->getElementId());
  _sb.appendFormat("  N_%u:R -> N_%u:F0;\n", element->getElementId(), right->getElementId());

  doElement(left);
  doElement(right);
}
Example #4
0
void DotBuilder::doTransform(ASTTransform* element)
{
  uint transformType = element->getTransformType();
  ASTElement* child = element->getChild();

  const char* opString = NULL;

  switch (transformType)
  {
    case MTRANSFORM_NONE  : opString = ""; break;
    case MTRANSFORM_NEGATE: opString = "-"; break;
    default:
      MP_ASSERT_NOT_REACHED();
  }

  _sb.appendFormat("  N_%u [label=\"<F0>%s\"];\n", element->getElementId(), opString);
  _sb.appendFormat("  N_%u -> N_%u:F0;\n", element->getElementId(), child->getElementId());
  doElement(child);
}
Example #5
0
void DotBuilder::doBlock(ASTBlock* element)
{
  Vector<ASTElement*>& children = element->_elements;
  size_t i, len = children.getLength();

  _sb.appendFormat("  N_%u [label=\"", element->getElementId());
  for (i = 0; i < len; i++) _sb.appendFormat("<F%u> |", (uint)i);
  _sb.appendFormat(" \"];\n", element->getElementId());

  for (i = 0; i < len; i++)
  {
    _sb.appendFormat("  N_%u:F%u -> N_%u:F0\n",
      element->getElementId(), (uint)i, children[i]->getElementId());
  }

  for (i = 0; i < len; i++)
  {
    doElement(children[i]);
  }
}
Example #6
0
  virtual bool run(void* _func, StringBuilder& result, StringBuilder& expected)
  {
    typedef void (*Func)(uint32_t*, const uint32_t*, size_t);
    Func func = asmjit_cast<Func>(_func);

    enum { kBufferSize = 32 };
    uint32_t dstBuffer[kBufferSize];
    uint32_t srcBuffer[kBufferSize];
  
    uint i;
    for (i = 0; i < kBufferSize; i++)
    {
      dstBuffer[i] = 0;
      srcBuffer[i] = i;
    }
    
    func(dstBuffer, srcBuffer, kBufferSize);

    result.setString("buf={");
    expected.setString("buf={");

    for (i = 0; i < kBufferSize; i++)
    {
      if (i != 0)
      {
        result.appendString(", ");
        expected.appendString(", ");
      }

      result.appendFormat("%u", static_cast<uint>(dstBuffer[i]));
      expected.appendFormat("%u", static_cast<uint>(srcBuffer[i]));
    }

    result.appendString("}");
    expected.appendString("}");

    return memcmp(dstBuffer, srcBuffer, kBufferSize * sizeof(uint32_t)) == 0;
  }
Example #7
0
void DotBuilder::doVariable(ASTVariable* element)
{
  _sb.appendFormat("  N_%u [label=\"<F0>", element->getElementId())
     .appendEscaped(Hash<Variable>::dataToKey(element->getVariable()))
     .appendString("\"];\n");
}
Example #8
0
void DotBuilder::doConstant(ASTConstant* element)
{
  _sb.appendFormat("  N_%u [label=\"<F0>%f\"];\n", element->getElementId(), element->getValue());
}