115613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org// Copyright 2012 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.
4a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
64b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org
7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/ast.h"
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/regexp-macro-assembler.h"
9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/regexp-macro-assembler-tracer.h"
10a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
1171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
1271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
13a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
14a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssemblerTracer::RegExpMacroAssemblerTracer(
15a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    RegExpMacroAssembler* assembler) :
167028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org  RegExpMacroAssembler(assembler->zone()),
17a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_(assembler) {
18a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  unsigned int type = assembler->Implementation();
19e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org  DCHECK(type < 6);
20fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org  const char* impl_names[] = {"IA32", "ARM", "ARM64",
21864abd7677f434b5aef191e3388e71cd4dd1e6c8machenbach@chromium.org                              "MIPS", "X64", "X87", "Bytecode"};
22a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF("RegExpMacroAssembler%s();\n", impl_names[type]);
23a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
24a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
25a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
26a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssemblerTracer::~RegExpMacroAssemblerTracer() {
27a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
28a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
29a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
30f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org// This is used for printing out debugging information.  It makes an integer
31f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org// that is closely related to the address of an object.
32f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.orgstatic int LabelToInt(Label* label) {
33f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  return static_cast<int>(reinterpret_cast<intptr_t>(label));
34f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org}
35f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org
36f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org
37a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Bind(Label* label) {
38f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF("label[%08x]: (Bind)\n", LabelToInt(label));
39a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->Bind(label);
40a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
41a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
42a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
43a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::AdvanceCurrentPosition(int by) {
44a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" AdvanceCurrentPosition(by=%d);\n", by);
45a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->AdvanceCurrentPosition(by);
46a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
47a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
48a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
498bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckGreedyLoop(Label* label) {
50f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF(" CheckGreedyLoop(label[%08x]);\n\n", LabelToInt(label));
518bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org  assembler_->CheckGreedyLoop(label);
528bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}
538bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org
548bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org
55a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PopCurrentPosition() {
56a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" PopCurrentPosition();\n");
57a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->PopCurrentPosition();
58a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
59a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
60a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
61a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PushCurrentPosition() {
62a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" PushCurrentPosition();\n");
63a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->PushCurrentPosition();
64a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
65a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
66a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
67a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Backtrack() {
68a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" Backtrack();\n");
69a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->Backtrack();
70a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
71a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
72a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
73a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::GoTo(Label* label) {
74f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF(" GoTo(label[%08x]);\n\n", LabelToInt(label));
75a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->GoTo(label);
76a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
77a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
78a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
79a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PushBacktrack(Label* label) {
80f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF(" PushBacktrack(label[%08x]);\n", LabelToInt(label));
81a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->PushBacktrack(label);
82a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
83a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
84a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
8515613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.orgbool RegExpMacroAssemblerTracer::Succeed() {
8615613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org  bool restart = assembler_->Succeed();
8715613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org  PrintF(" Succeed();%s\n", restart ? " [restart for global match]" : "");
8815613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org  return restart;
89a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
90a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
91a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
92a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::Fail() {
9315613d0b07bac19e341905ff374c930420b3b9c8mstarzinger@chromium.org  PrintF(" Fail();");
94a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->Fail();
95a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
96a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
97a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
98a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::PopRegister(int register_index) {
99a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" PopRegister(register=%d);\n", register_index);
100a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->PopRegister(register_index);
101a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
102a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
103a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
1043291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgvoid RegExpMacroAssemblerTracer::PushRegister(
1053291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org    int register_index,
1063291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org    StackCheckFlag check_stack_limit) {
1073291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org  PrintF(" PushRegister(register=%d, %s);\n",
1083291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org         register_index,
1093291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org         check_stack_limit ? "check stack limit" : "");
1103291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org  assembler_->PushRegister(register_index, check_stack_limit);
111a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
112a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
113a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
114a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::AdvanceRegister(int reg, int by) {
115a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" AdvanceRegister(register=%d, by=%d);\n", reg, by);
116a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->AdvanceRegister(reg, by);
117a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
118a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
119a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
1204a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.orgvoid RegExpMacroAssemblerTracer::SetCurrentPositionFromEnd(int by) {
1214a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org  PrintF(" SetCurrentPositionFromEnd(by=%d);\n", by);
1224a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org  assembler_->SetCurrentPositionFromEnd(by);
1234a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org}
1244a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org
1254a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.org
126a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::SetRegister(int register_index, int to) {
127a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" SetRegister(register=%d, to=%d);\n", register_index, to);
128a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->SetRegister(register_index, to);
129a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
130a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
131a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
1328bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvoid RegExpMacroAssemblerTracer::WriteCurrentPositionToRegister(int reg,
1338bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org                                                                int cp_offset) {
1348bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org  PrintF(" WriteCurrentPositionToRegister(register=%d,cp_offset=%d);\n",
1358bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org         reg,
1368bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org         cp_offset);
1378bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org  assembler_->WriteCurrentPositionToRegister(reg, cp_offset);
138a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
139a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
140a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
141ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgvoid RegExpMacroAssemblerTracer::ClearRegisters(int reg_from, int reg_to) {
142ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org  PrintF(" ClearRegister(from=%d, to=%d);\n", reg_from, reg_to);
143ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org  assembler_->ClearRegisters(reg_from, reg_to);
1443291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org}
1453291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org
1463291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org
147a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::ReadCurrentPositionFromRegister(int reg) {
148a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" ReadCurrentPositionFromRegister(register=%d);\n", reg);
149a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->ReadCurrentPositionFromRegister(reg);
150a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
151a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
152a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
153a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::WriteStackPointerToRegister(int reg) {
154a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" WriteStackPointerToRegister(register=%d);\n", reg);
155a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->WriteStackPointerToRegister(reg);
156a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
157a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
158a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
159a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::ReadStackPointerFromRegister(int reg) {
160a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" ReadStackPointerFromRegister(register=%d);\n", reg);
161a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->ReadStackPointerFromRegister(reg);
162a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
163a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
164a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
165a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::LoadCurrentCharacter(int cp_offset,
16637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                                      Label* on_end_of_input,
16737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                                      bool check_bounds,
16837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                                      int characters) {
16937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  const char* check_msg = check_bounds ? "" : " (unchecked)";
17037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  PrintF(" LoadCurrentCharacter(cp_offset=%d, label[%08x]%s (%d chars));\n",
1718bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org         cp_offset,
172f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_end_of_input),
17337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         check_msg,
17437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         characters);
17537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  assembler_->LoadCurrentCharacter(cp_offset,
17637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                   on_end_of_input,
17737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                   check_bounds,
17837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                   characters);
1798bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org}
1808bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org
1818bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org
1821456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgclass PrintablePrinter {
1831456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org public:
1841456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  explicit PrintablePrinter(uc16 character) : character_(character) { }
1851456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
1861456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  const char* operator*() {
1871456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    if (character_ >= ' ' && character_ <= '~') {
1881456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      buffer_[0] = '(';
1891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      buffer_[1] = static_cast<char>(character_);
1901456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      buffer_[2] = ')';
1911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      buffer_[3] = '\0';
1921456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    } else {
1931456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      buffer_[0] = '\0';
1941456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    }
1951456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return &buffer_[0];
1963c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org  }
1971456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
1981456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org private:
1991456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  uc16 character_;
2001456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  char buffer_[4];
2011456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org};
2021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
2031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
204a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterLT(uc16 limit, Label* on_less) {
2051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(limit);
2061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckCharacterLT(c=0x%04x%s, label[%08x]);\n",
2071456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         limit,
2081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
2091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         LabelToInt(on_less));
210a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckCharacterLT(limit, on_less);
211a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
212a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
213a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
214a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterGT(uc16 limit,
215a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org                                                  Label* on_greater) {
2161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(limit);
2171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckCharacterGT(c=0x%04x%s, label[%08x]);\n",
2181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         limit,
2191456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
2201456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         LabelToInt(on_greater));
221a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckCharacterGT(limit, on_greater);
222a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
223a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
224a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
225c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacter(unsigned c, Label* on_equal) {
2261456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(c);
2271456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckCharacter(c=0x%04x%s, label[%08x]);\n",
2281456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         c,
2291456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
2301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         LabelToInt(on_equal));
231a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckCharacter(c, on_equal);
232a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
233a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
234a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
235ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckAtStart(Label* on_at_start) {
236f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF(" CheckAtStart(label[%08x]);\n", LabelToInt(on_at_start));
237ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org  assembler_->CheckAtStart(on_at_start);
238ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}
239ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org
240ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org
241a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotAtStart(Label* on_not_at_start) {
242f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  PrintF(" CheckNotAtStart(label[%08x]);\n", LabelToInt(on_not_at_start));
243a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckNotAtStart(on_not_at_start);
244a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
245a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
246a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
247c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotCharacter(unsigned c,
248a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org                                                   Label* on_not_equal) {
2491456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(c);
2501456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckNotCharacter(c=0x%04x%s, label[%08x]);\n",
2511456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         c,
2521456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
2531456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         LabelToInt(on_not_equal));
254a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckNotCharacter(c, on_not_equal);
255a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
256a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
257a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
25837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckCharacterAfterAnd(
259c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org    unsigned c,
260c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org    unsigned mask,
26137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com    Label* on_equal) {
2621456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(c);
2631456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n",
26437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         c,
2651456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
26637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         mask,
267f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_equal));
26837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  assembler_->CheckCharacterAfterAnd(c, mask, on_equal);
269a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
270a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
271a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
27237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckNotCharacterAfterAnd(
273c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org    unsigned c,
274c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org    unsigned mask,
27537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com    Label* on_not_equal) {
2761456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable(c);
2771456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckNotCharacterAfterAnd(c=0x%04x%s, mask=0x%04x, label[%08x]);\n",
27837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         c,
2791456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable,
28037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         mask,
281f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_not_equal));
28237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  assembler_->CheckNotCharacterAfterAnd(c, mask, on_not_equal);
28337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}
28437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com
28537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com
28637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.comvoid RegExpMacroAssemblerTracer::CheckNotCharacterAfterMinusAnd(
287a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    uc16 c,
28837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com    uc16 minus,
289a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    uc16 mask,
290a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    Label* on_not_equal) {
2911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckNotCharacterAfterMinusAnd(c=0x%04x, minus=%04x, mask=0x%04x, "
29237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com             "label[%08x]);\n",
29337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         c,
29437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         minus,
29537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         mask,
296f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_not_equal));
29737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  assembler_->CheckNotCharacterAfterMinusAnd(c, minus, mask, on_not_equal);
298a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
299a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
300a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
3011456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterInRange(
3021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    uc16 from,
3031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    uc16 to,
3041456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    Label* on_not_in_range) {
3051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable_from(from);
3061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable_to(to);
3071456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckCharacterInRange(from=0x%04x%s, to=0x%04x%s, label[%08x]);\n",
3081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         from,
3091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable_from,
3101456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         to,
3111456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         *printable_to,
3121456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org         LabelToInt(on_not_in_range));
3131456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  assembler_->CheckCharacterInRange(from, to, on_not_in_range);
3141456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}
3151456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
3161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
3171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckCharacterNotInRange(
3181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    uc16 from,
3191456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    uc16 to,
3201456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    Label* on_in_range) {
3211456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable_from(from);
3221456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintablePrinter printable_to(to);
3231456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(
3241456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      " CheckCharacterNotInRange(from=0x%04x%s," " to=%04x%s, label[%08x]);\n",
3251456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      from,
3261456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      *printable_from,
3271456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      to,
3281456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      *printable_to,
3291456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      LabelToInt(on_in_range));
3301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  assembler_->CheckCharacterNotInRange(from, to, on_in_range);
3311456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}
3321456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
3331456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
3341456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid RegExpMacroAssemblerTracer::CheckBitInTable(
3351456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    Handle<ByteArray> table, Label* on_bit_set) {
3361456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(" CheckBitInTable(label[%08x] ", LabelToInt(on_bit_set));
3371456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  for (int i = 0; i < kTableSize; i++) {
3381456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    PrintF("%c", table->get(i) != 0 ? 'X' : '.');
3391456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    if (i % 32 == 31 && i != kTableMask) {
3401456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org      PrintF("\n                                 ");
3411456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    }
3421456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
3431456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  PrintF(");\n");
3441456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  assembler_->CheckBitInTable(table, on_bit_set);
3451456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}
3461456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
3471456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org
348a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotBackReference(int start_reg,
349a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org                                                       Label* on_no_match) {
350a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" CheckNotBackReference(register=%d, label[%08x]);\n", start_reg,
351f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_no_match));
352a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckNotBackReference(start_reg, on_no_match);
353a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
354a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
355a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
356a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::CheckNotBackReferenceIgnoreCase(
357a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    int start_reg,
358a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    Label* on_no_match) {
359a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" CheckNotBackReferenceIgnoreCase(register=%d, label[%08x]);\n",
360f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         start_reg, LabelToInt(on_no_match));
361a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->CheckNotBackReferenceIgnoreCase(start_reg, on_no_match);
362a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
363a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
364a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
36537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.combool RegExpMacroAssemblerTracer::CheckSpecialCharacterClass(
36637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com    uc16 type,
36737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com    Label* on_no_match) {
36837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  bool supported = assembler_->CheckSpecialCharacterClass(type,
36937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com                                                          on_no_match);
3700c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  PrintF(" CheckSpecialCharacterClass(type='%c', label[%08x]): %s;\n",
37137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         type,
372f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         LabelToInt(on_no_match),
37337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com         supported ? "true" : "false");
37437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  return supported;
37537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com}
37637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com
37737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com
378a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterLT(int register_index,
379a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org                                              int comparand, Label* if_lt) {
380a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" IfRegisterLT(register=%d, number=%d, label[%08x]);\n",
381f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         register_index, comparand, LabelToInt(if_lt));
382a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->IfRegisterLT(register_index, comparand, if_lt);
383a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
384a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
385a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
3863291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterEqPos(int register_index,
3873291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org                                                 Label* if_eq) {
3883291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org  PrintF(" IfRegisterEqPos(register=%d, label[%08x]);\n",
389f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         register_index, LabelToInt(if_eq));
3903291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org  assembler_->IfRegisterEqPos(register_index, if_eq);
3913291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org}
3923291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org
3933291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org
394a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid RegExpMacroAssemblerTracer::IfRegisterGE(int register_index,
395a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org                                              int comparand, Label* if_ge) {
396a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  PrintF(" IfRegisterGE(register=%d, number=%d, label[%08x]);\n",
397f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org         register_index, comparand, LabelToInt(if_ge));
398a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  assembler_->IfRegisterGE(register_index, comparand, if_ge);
399a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
400a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
401a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
402a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgRegExpMacroAssembler::IrregexpImplementation
403a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    RegExpMacroAssemblerTracer::Implementation() {
404a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  return assembler_->Implementation();
405a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
406a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
407a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
40883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.orgHandle<HeapObject> RegExpMacroAssemblerTracer::GetCode(Handle<String> source) {
409afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org  PrintF(" GetCode(%s);\n", source->ToCString().get());
4108bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org  return assembler_->GetCode(source);
411a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}
412a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
413a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org}}  // namespace v8::internal
414