Fixed bug in PodVectorTmp<> implementation and added a test-case for it.

This commit is contained in:
kobalicek
2016-03-28 02:03:25 +02:00
parent b81004bc99
commit 4a654c2c49
3 changed files with 46 additions and 4 deletions

View File

@@ -4,8 +4,9 @@ AsmJit
Complete x86/x64 JIT and Remote Assembler for C++.
* [Official Repository (kobalicek/asmjit)](https://github.com/kobalicek/asmjit)
* [Official Chat (Gitter)](https://gitter.im/kobalicek/asmjit)
* [Zlib Licensed](http://www.opensource.org/licenses/zlib-license.php)
* [Official Blog (asmbits)] (https://asmbits.blogspot.com/ncr)
* [Official Chat (gitter)](https://gitter.im/kobalicek/asmjit)
* [Permissive ZLIB license](./LICENSE.md)
Introduction
------------

View File

@@ -109,9 +109,9 @@ Error PodVectorBase::_reserve(size_t n, size_t sizeOfT) noexcept {
if (ASMJIT_UNLIKELY(d == nullptr))
return kErrorNoHeapMemory;
size_t len = d->length;
size_t len = oldD->length;
d->length = len;
::memcpy(d, oldD->getData(), len * sizeOfT);
::memcpy(d->getData(), oldD->getData(), len * sizeOfT);
}
else {
d = static_cast<Data*>(ASMJIT_REALLOC(d, nBytes));

View File

@@ -216,6 +216,46 @@ struct X86Test_JumpCross : public X86Test {
}
};
// ============================================================================
// [X86Test_JumpMany]
// ============================================================================
struct X86Test_JumpMany : public X86Test {
X86Test_JumpMany() : X86Test("[Misc] Jump Many") {}
static void add(PodVector<X86Test*>& tests) {
tests.append(new X86Test_JumpMany());
}
virtual void compile(X86Compiler& c) {
c.addFunc(FuncBuilder0<int>(kCallConvHost));
for (uint32_t i = 0; i < 1000; i++) {
Label L = c.newLabel();
c.jmp(L);
c.bind(L);
}
X86GpVar ret = c.newInt32("ret");
c.xor_(ret, ret);
c.ret(ret);
c.endFunc();
}
virtual bool run(void* _func, StringBuilder& result, StringBuilder& expect) {
typedef int (*Func)(void);
Func func = asmjit_cast<Func>(_func);
int resultRet = func();
int expectRet = 0;
result.setFormat("ret={%d}", resultRet);
expect.setFormat("ret={%d}", expectRet);
return resultRet == expectRet;
}
};
// ============================================================================
// [X86Test_JumpUnreachable1]
// ============================================================================
@@ -2869,6 +2909,7 @@ X86TestSuite::X86TestSuite() :
// Jump.
ADD_TEST(X86Test_JumpCross);
ADD_TEST(X86Test_JumpMany);
ADD_TEST(X86Test_JumpUnreachable1);
ADD_TEST(X86Test_JumpUnreachable2);