Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(654)

Unified Diff: runtime/vm/instructions_arm64.h

Issue 221133002: Begins work on ARM64, first assembler test. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: adds files Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/instructions.h ('k') | runtime/vm/instructions_arm64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/instructions_arm64.h
===================================================================
--- runtime/vm/instructions_arm64.h (revision 0)
+++ runtime/vm/instructions_arm64.h (revision 0)
@@ -0,0 +1,101 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Classes that describe assembly patterns as used by inline caches.
+
+#ifndef VM_INSTRUCTIONS_ARM64_H_
+#define VM_INSTRUCTIONS_ARM64_H_
+
+#ifndef VM_INSTRUCTIONS_H_
+#error Do not include instructions_arm64.h directly; use instructions.h instead.
+#endif
+
+#include "vm/constants_arm64.h"
+#include "vm/object.h"
+
+namespace dart {
+
+class InstructionPattern : public AllStatic {
+ public:
+ // Decodes a load sequence ending at 'end' (the last instruction of the
+ // load sequence is the instruction before the one at end). Returns the
+ // address of the first instruction in the sequence. Returns the register
+ // being loaded and the loaded object in the output parameters 'reg' and
+ // 'obj' respectively.
+ static uword DecodeLoadObject(uword end,
+ const Array& object_pool,
+ Register* reg,
+ Object* obj);
+
+ // Decodes a load sequence ending at 'end' (the last instruction of the
+ // load sequence is the instruction before the one at end). Returns the
+ // address of the first instruction in the sequence. Returns the register
+ // being loaded and the loaded immediate value in the output parameters
+ // 'reg' and 'value' respectively.
+ static uword DecodeLoadWordImmediate(uword end,
+ Register* reg,
+ intptr_t* value);
+
+ // Decodes a load sequence ending at 'end' (the last instruction of the
+ // load sequence is the instruction before the one at end). Returns the
+ // address of the first instruction in the sequence. Returns the register
+ // being loaded and the index in the pool being read from in the output
+ // parameters 'reg' and 'index' respectively.
+ static uword DecodeLoadWordFromPool(uword end,
+ Register* reg,
+ intptr_t* index);
+};
+
+
+class CallPattern : public ValueObject {
+ public:
+ CallPattern(uword pc, const Code& code);
+
+ RawICData* IcData();
+ RawArray* ClosureArgumentsDescriptor();
+
+ uword TargetAddress() const;
+ void SetTargetAddress(uword target_address) const;
+
+ // This constant length is only valid for inserted call patterns used for
+ // lazy deoptimization. Regular call pattern may vary in length.
+ static int LengthInBytes();
+
+ static void InsertAt(uword pc, uword target_address);
+
+ private:
+ const Array& object_pool_;
+
+ uword end_;
+ uword args_desc_load_end_;
+ uword ic_data_load_end_;
+
+ intptr_t target_address_pool_index_;
+ Array& args_desc_;
+ ICData& ic_data_;
+
+ DISALLOW_COPY_AND_ASSIGN(CallPattern);
+};
+
+
+class JumpPattern : public ValueObject {
+ public:
+ JumpPattern(uword pc, const Code& code);
+
+ static const int kLengthInBytes = 3 * Instr::kInstrSize;
+
+ static int pattern_length_in_bytes();
+
+ bool IsValid() const;
+ uword TargetAddress() const;
+ void SetTargetAddress(uword target_address) const;
+
+ private:
+ const uword pc_;
+
+ DISALLOW_COPY_AND_ASSIGN(JumpPattern);
+};
+
+} // namespace dart
+
+#endif // VM_INSTRUCTIONS_ARM64_H_
« no previous file with comments | « runtime/vm/instructions.h ('k') | runtime/vm/instructions_arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698