1f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 4f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 6f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 7fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org#if V8_TARGET_ARCH_ARM64 8f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/globals.h" 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/utils.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/arm64/decoder-arm64.h" 12f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 13f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 14f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgnamespace v8 { 15f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgnamespace internal { 16f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 17f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 18f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgvoid DispatchingDecoderVisitor::AppendVisitor(DecoderVisitor* new_visitor) { 19f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.remove(new_visitor); 20f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.push_front(new_visitor); 21f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 22f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 23f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 24f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgvoid DispatchingDecoderVisitor::PrependVisitor(DecoderVisitor* new_visitor) { 25f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.remove(new_visitor); 26f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.push_back(new_visitor); 27f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 28f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 29f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 30f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgvoid DispatchingDecoderVisitor::InsertVisitorBefore( 31f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org DecoderVisitor* new_visitor, DecoderVisitor* registered_visitor) { 32f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.remove(new_visitor); 33f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org std::list<DecoderVisitor*>::iterator it; 34f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org for (it = visitors_.begin(); it != visitors_.end(); it++) { 35f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org if (*it == registered_visitor) { 36f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.insert(it, new_visitor); 37f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return; 38f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 39f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 40f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org // We reached the end of the list. The last element must be 41f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org // registered_visitor. 42f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org ASSERT(*it == registered_visitor); 43f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.insert(it, new_visitor); 44f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 45f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 46f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 47f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgvoid DispatchingDecoderVisitor::InsertVisitorAfter( 48f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org DecoderVisitor* new_visitor, DecoderVisitor* registered_visitor) { 49f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.remove(new_visitor); 50f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org std::list<DecoderVisitor*>::iterator it; 51f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org for (it = visitors_.begin(); it != visitors_.end(); it++) { 52f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org if (*it == registered_visitor) { 53f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org it++; 54f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.insert(it, new_visitor); 55f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return; 56f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 57f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 58f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org // We reached the end of the list. The last element must be 59f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org // registered_visitor. 60f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org ASSERT(*it == registered_visitor); 61f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.push_back(new_visitor); 62f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 63f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 64f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 65f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgvoid DispatchingDecoderVisitor::RemoveVisitor(DecoderVisitor* visitor) { 66f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org visitors_.remove(visitor); 67f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 68f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 69f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 70f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org#define DEFINE_VISITOR_CALLERS(A) \ 71f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org void DispatchingDecoderVisitor::Visit##A(Instruction* instr) { \ 72f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org if (!(instr->Mask(A##FMask) == A##Fixed)) { \ 73f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org ASSERT(instr->Mask(A##FMask) == A##Fixed); \ 74f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } \ 75f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org std::list<DecoderVisitor*>::iterator it; \ 76f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org for (it = visitors_.begin(); it != visitors_.end(); it++) { \ 77f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org (*it)->Visit##A(instr); \ 78f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } \ 79f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 80f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgVISITOR_LIST(DEFINE_VISITOR_CALLERS) 81f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org#undef DEFINE_VISITOR_CALLERS 82f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 83f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 84f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} } // namespace v8::internal 85f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 86fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org#endif // V8_TARGET_ARCH_ARM64 87