144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org// Copyright 2011 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.
47c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org
55ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#ifndef V8_ARM_CODEGEN_ARM_H_
65ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#define V8_ARM_CODEGEN_ARM_H_
77c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/ast.h"
9a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org#include "src/macro-assembler.h"
10357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org
1171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
1271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
137c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org
147c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org
153bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.orgenum TypeofState { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF };
16013f3e12d3af426bf5545b5f457aa08ee98bdca2fschneider@chromium.org
177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
181b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgclass StringCharLoadGenerator : public AllStatic {
191b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org public:
201b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  // Generates the code for handling different string types and loading the
211b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  // indexed character into |result|.  We expect |index| as untagged input and
221b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  // |result| as untagged output.
231b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  static void Generate(MacroAssembler* masm,
241b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                       Register string,
251b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                       Register index,
261b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                       Register result,
271b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org                       Label* call_runtime);
281b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org
291b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org private:
301b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org  DISALLOW_COPY_AND_ASSIGN(StringCharLoadGenerator);
311b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org};
321b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org
331f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org
341f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.orgclass MathExpGenerator : public AllStatic {
351f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org public:
363d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org  // Register input isn't modified. All other registers are clobbered.
371f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org  static void EmitMathExp(MacroAssembler* masm,
38a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org                          DwVfpRegister input,
39a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org                          DwVfpRegister result,
40a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org                          DwVfpRegister double_scratch1,
41a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org                          DwVfpRegister double_scratch2,
421f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org                          Register temp1,
431f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org                          Register temp2,
441f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org                          Register temp3);
451f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org
461f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org private:
471f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org  DISALLOW_COPY_AND_ASSIGN(MathExpGenerator);
481f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org};
491f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org
507c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} }  // namespace v8::internal
517c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org
525ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org#endif  // V8_ARM_CODEGEN_ARM_H_
53