19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2006-2008 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.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_DISASSEMBLER_H_
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_DISASSEMBLER_H_
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/allocation.h"
91c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org
1071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
1171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Disassembler : public AllStatic {
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public:
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Print the bytes in the interval [begin, end) into f.
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  static void Dump(FILE* f, byte* begin, byte* end);
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Decode instructions in the the interval [begin, end) and print the
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // code into f. Returns the number of bytes disassembled or 1 if no
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // instruction could be decoded.
2109d7ab5aba54ebac170eac755664c45eefb0be7dulan@chromium.org  static int Decode(Isolate* isolate, FILE* f, byte* begin, byte* end);
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Decode instructions in code.
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  static void Decode(FILE* f, Code* code);
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private:
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Decode instruction at pc and print disassembled instruction into f.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Returns the instruction length in bytes, or 1 if the instruction could
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // not be decoded.  The number of characters written is written into
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // the out parameter char_count.
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  static int Decode(FILE* f, byte* pc, int* char_count);
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen};
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif  // V8_DISASSEMBLER_H_
36