/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: set ts=8 sts=2 et sw=2 tw=80:
*/ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include"jit/Snapshots.h"
#include"jsapi-tests/tests.h"
usingnamespace js; usingnamespace js::jit;
// These tests are checking that all slots of the current architecture can all // be encoded and decoded correctly. We iterate on all registers and on many // fake stack locations (Fibonacci). static RValueAllocation Read(const RValueAllocation& slot) {
CompactBufferWriter writer;
slot.write(writer);
class Fibonacci { class Iterator { public: // std::iterator traits. using iterator_category = std::input_iterator_tag; using value_type = int32_t; using difference_type = int32_t; using pointer = value_type*; using reference = value_type&;
BEGIN_TEST(testJitRValueAlloc_UntypedRegReg) {
RValueAllocation s; for (uint32_t i = 0; i < Registers::Total; i++) { for (uint32_t j = 0; j < Registers::Total; j++) { if (i == j) { continue;
}
s = RValueAllocation::Untyped(Register::FromCode(i), Register::FromCode(j));
MOZ_ASSERT(s == Read(s));
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedRegReg)
BEGIN_TEST(testJitRValueAlloc_UntypedRegStack) {
RValueAllocation s; for (uint32_t i = 0; i < Registers::Total; i++) { for (auto j : Fibonacci{}) {
s = RValueAllocation::Untyped(Register::FromCode(i), j);
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedRegStack)
BEGIN_TEST(testJitRValueAlloc_UntypedStackReg) {
RValueAllocation s; for (auto i : Fibonacci{}) { for (uint32_t j = 0; j < Registers::Total; j++) {
s = RValueAllocation::Untyped(i, Register::FromCode(j));
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedStackReg)
BEGIN_TEST(testJitRValueAlloc_UntypedStackStack) {
RValueAllocation s; for (auto i : Fibonacci{}) { for (auto j : Fibonacci{}) {
s = RValueAllocation::Untyped(i, j);
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedStackStack)
#else
BEGIN_TEST(testJitRValueAlloc_UntypedReg) {
RValueAllocation s; for (uint32_t i = 0; i < Registers::Total; i++) {
s = RValueAllocation::Untyped(Register::FromCode(i));
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedReg)
BEGIN_TEST(testJitRValueAlloc_UntypedStack) {
RValueAllocation s; for (auto i : Fibonacci{}) {
s = RValueAllocation::Untyped(i);
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_UntypedStack)
#endif
BEGIN_TEST(testJitRValueAlloc_UndefinedAndNull) {
RValueAllocation s;
s = RValueAllocation::Undefined();
CHECK(s == Read(s));
s = RValueAllocation::Null();
CHECK(s == Read(s)); returntrue;
}
END_TEST(testJitRValueAlloc_UndefinedAndNull)
BEGIN_TEST(testJitRValueAlloc_ConstantPool) {
RValueAllocation s; for (auto i : Fibonacci{}) {
s = RValueAllocation::ConstantPool(i);
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_ConstantPool)
BEGIN_TEST(testJitRValueAlloc_Int64Cst) { for (auto i : Fibonacci{}) { for (auto j : Fibonacci{}) { auto s = RValueAllocation::Int64Constant(i, j);
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64Cst)
#ifdefined(JS_NUNBOX32)
BEGIN_TEST(testJitRValueAlloc_Int64RegReg) {
RValueAllocation s; for (uint32_t i = 0; i < Registers::Total; i++) { for (uint32_t j = 0; j < Registers::Total; j++) { if (i == j) { continue;
}
s = RValueAllocation::Int64(Register::FromCode(i), Register::FromCode(j));
MOZ_ASSERT(s == Read(s));
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64RegReg)
BEGIN_TEST(testJitRValueAlloc_Int64RegStack) {
RValueAllocation s; for (uint32_t i = 0; i < Registers::Total; i++) { for (auto j : Fibonacci{}) {
s = RValueAllocation::Int64(Register::FromCode(i), j);
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64RegStack)
BEGIN_TEST(testJitRValueAlloc_Int64StackReg) {
RValueAllocation s; for (auto i : Fibonacci{}) { for (uint32_t j = 0; j < Registers::Total; j++) {
s = RValueAllocation::Int64(i, Register::FromCode(j));
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64StackReg)
BEGIN_TEST(testJitRValueAlloc_Int64StackStack) {
RValueAllocation s; for (auto i : Fibonacci{}) { for (auto j : Fibonacci{}) {
s = RValueAllocation::Int64(i, j);
CHECK(s == Read(s));
}
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64StackStack) #else
BEGIN_TEST(testJitRValueAlloc_Int64Reg) { for (uint32_t i = 0; i < Registers::Total; i++) { auto s = RValueAllocation::Int64(Register::FromCode(i));
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64Reg)
BEGIN_TEST(testJitRValueAlloc_Int64Stack) { for (auto i : Fibonacci{}) { auto s = RValueAllocation::Int64(i);
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_Int64Stack) #endif
BEGIN_TEST(testJitRValueAlloc_IntPtrCst) { #if !defined(JS_64BIT) for (auto i : Fibonacci{}) { auto s = RValueAllocation::IntPtrConstant(i);
CHECK(s == Read(s));
} #else for (auto i : Fibonacci{}) { for (auto j : Fibonacci{}) { auto s = RValueAllocation::IntPtrConstant(i, j);
CHECK(s == Read(s));
}
} #endif returntrue;
}
END_TEST(testJitRValueAlloc_IntPtrCst)
BEGIN_TEST(testJitRValueAlloc_IntPtrReg) { for (uint32_t i = 0; i < Registers::Total; i++) { auto s = RValueAllocation::IntPtr(Register::FromCode(i));
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_IntPtrReg)
BEGIN_TEST(testJitRValueAlloc_IntPtrStack) { for (auto i : Fibonacci{}) { auto s = RValueAllocation::IntPtr(i);
CHECK(s == Read(s));
} returntrue;
}
END_TEST(testJitRValueAlloc_IntPtrStack)
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.