Author: [EMAIL PROTECTED]
Date: Wed Nov 26 05:54:08 2008
New Revision: 848

Added:
    branches/bleeding_edge/src/regexp-macro-assembler-arm.cc
       - copied, changed from r847,  
/branches/bleeding_edge/src/macro-assembler.h
    branches/bleeding_edge/src/regexp-macro-assembler-arm.h
       - copied, changed from r847,  
/branches/bleeding_edge/src/macro-assembler.h
Modified:
    branches/bleeding_edge/src/SConscript
    branches/bleeding_edge/src/codegen.h
    branches/bleeding_edge/src/execution.cc
    branches/bleeding_edge/src/frames-inl.h
    branches/bleeding_edge/src/jsregexp.cc
    branches/bleeding_edge/src/macro-assembler.h
    branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
    branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
    branches/bleeding_edge/test/cctest/test-regexp.cc

Log:
Made ARM/IA32 handling in Regexp symmetric (although without an ARM  
implementation yet).


Modified: branches/bleeding_edge/src/SConscript
==============================================================================
--- branches/bleeding_edge/src/SConscript       (original)
+++ branches/bleeding_edge/src/SConscript       Wed Nov 26 05:54:08 2008
@@ -52,7 +52,8 @@
    ],
    'arch:arm':  ['assembler-arm.cc', 'builtins-arm.cc', 'codegen-arm.cc',
        'cpu-arm.cc', 'disasm-arm.cc', 'frames-arm.cc', 'ic-arm.cc',
-      'macro-assembler-arm.cc', 'stub-cache-arm.cc'],
+      'macro-assembler-arm.cc', 'regexp-macro-assembler-arm.cc',
+      'stub-cache-arm.cc'],
    'arch:ia32': ['assembler-ia32.cc', 'builtins-ia32.cc', 'codegen-ia32.cc',
        'cpu-ia32.cc', 'disasm-ia32.cc', 'frames-ia32.cc', 'ic-ia32.cc',
        'macro-assembler-ia32.cc', 'regexp-macro-assembler-ia32.cc',

Modified: branches/bleeding_edge/src/codegen.h
==============================================================================
--- branches/bleeding_edge/src/codegen.h        (original)
+++ branches/bleeding_edge/src/codegen.h        Wed Nov 26 05:54:08 2008
@@ -59,7 +59,7 @@
  // CodeGenerator::FastCaseSwitchMinCaseCount
  // CodeGenerator::FastCaseSwitchMaxOverheadFactor

-#if defined(ARM)
+#ifdef ARM
  #include "codegen-arm.h"
  #else
  #include "codegen-ia32.h"

Modified: branches/bleeding_edge/src/execution.cc
==============================================================================
--- branches/bleeding_edge/src/execution.cc     (original)
+++ branches/bleeding_edge/src/execution.cc     Wed Nov 26 05:54:08 2008
@@ -32,7 +32,7 @@
  #include "api.h"
  #include "codegen-inl.h"

-#if defined(ARM) || defined (__arm__) || defined(__thumb__)
+#ifdef ARM
  #include "simulator-arm.h"
  #else  // ia32
  #include "simulator-ia32.h"

Modified: branches/bleeding_edge/src/frames-inl.h
==============================================================================
--- branches/bleeding_edge/src/frames-inl.h     (original)
+++ branches/bleeding_edge/src/frames-inl.h     Wed Nov 26 05:54:08 2008
@@ -29,7 +29,7 @@
  #define V8_FRAMES_INL_H_

  #include "frames.h"
-#if defined(ARM) || defined (__arm__) || defined(__thumb__)
+#ifdef ARM
  #include "frames-arm.h"
  #else
  #include "frames-ia32.h"

Modified: branches/bleeding_edge/src/jsregexp.cc
==============================================================================
--- branches/bleeding_edge/src/jsregexp.cc      (original)
+++ branches/bleeding_edge/src/jsregexp.cc      Wed Nov 26 05:54:08 2008
@@ -43,11 +43,14 @@
  #include "assembler-irregexp.h"
  #include "regexp-macro-assembler.h"
  #include "regexp-macro-assembler-irregexp.h"
-#if defined __arm__ || defined __thumb__ || defined ARM
-// include regexp-macro-assembler-arm.h when created.
-#else  // ia32
+
+#ifdef ARM
+#include "regexp-macro-assembler-arm.h"
+#else  // IA32
+#include "macro-assembler-ia32.h"
  #include "regexp-macro-assembler-ia32.h"
  #endif
+
  #include "interpreter-irregexp.h"

  // Including pcre.h undefines DEBUG to avoid getting debug output from
@@ -2579,18 +2582,17 @@
      return Handle<FixedArray>::null();
    }

-#if !(defined ARM || defined __arm__ || defined __thumb__)
-  if (FLAG_irregexp_native) {  // Flag only checked in IA32 mode.
-    // TODO(lrn) Move compilation to a later point in the life-cycle
-    // of the RegExp. We don't know the type of input string yet.
-    // For now, always assume two-byte strings.
+  if (FLAG_irregexp_native) {
+#ifdef ARM
+    UNIMPLEMENTED();
+#else  // IA32
      RegExpMacroAssemblerIA32  
macro_assembler(RegExpMacroAssemblerIA32::UC16,
                                               (input->capture_count + 1) *  
2);
      return compiler.Assemble(&macro_assembler,
                               node,
                               input->capture_count);
-  }
  #endif
+  }
    byte codes[1024];
    IrregexpAssembler assembler(Vector<byte>(codes, 1024));
    RegExpMacroAssemblerIrregexp macro_assembler(&assembler);

Modified: branches/bleeding_edge/src/macro-assembler.h
==============================================================================
--- branches/bleeding_edge/src/macro-assembler.h        (original)
+++ branches/bleeding_edge/src/macro-assembler.h        Wed Nov 26 05:54:08 2008
@@ -28,7 +28,7 @@
  #ifndef V8_MACRO_ASSEMBLER_H_
  #define V8_MACRO_ASSEMBLER_H_

-#if defined(ARM) || defined (__arm__) || defined(__thumb__)
+#ifdef ARM

  #include "constants-arm.h"
  #include "assembler.h"

Copied: branches/bleeding_edge/src/regexp-macro-assembler-arm.cc (from  
r847, /branches/bleeding_edge/src/macro-assembler.h)
==============================================================================
--- /branches/bleeding_edge/src/macro-assembler.h       (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-arm.cc    Wed Nov 26  
05:54:08 2008
@@ -25,26 +25,19 @@
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-#ifndef V8_MACRO_ASSEMBLER_H_
-#define V8_MACRO_ASSEMBLER_H_
+#include "v8.h"
+#include "ast.h"
+#include "regexp-macro-assembler.h"
+#include "regexp-macro-assembler-arm.h"

-#if defined(ARM) || defined (__arm__) || defined(__thumb__)
+namespace v8 { namespace internal {

-#include "constants-arm.h"
-#include "assembler.h"
-#include "assembler-arm.h"
-#include "assembler-arm-inl.h"
-#include "code.h"  // must be after assembler_*.h
-#include "macro-assembler-arm.h"
+RegExpMacroAssemblerARM::RegExpMacroAssemblerARM() {
+  UNIMPLEMENTED();
+}

-#else  // ia32

-#include "assembler.h"
-#include "assembler-ia32.h"
-#include "assembler-ia32-inl.h"
-#include "code.h"  // must be after assembler_*.h
-#include "macro-assembler-ia32.h"
+RegExpMacroAssemblerARM::~RegExpMacroAssemblerARM() {}

-#endif
+}}  // namespace v8::internal

-#endif  // V8_MACRO_ASSEMBLER_H_

Copied: branches/bleeding_edge/src/regexp-macro-assembler-arm.h (from r847,  
/branches/bleeding_edge/src/macro-assembler.h)
==============================================================================
--- /branches/bleeding_edge/src/macro-assembler.h       (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-arm.h     Wed Nov 26  
05:54:08 2008
@@ -25,26 +25,17 @@
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-#ifndef V8_MACRO_ASSEMBLER_H_
-#define V8_MACRO_ASSEMBLER_H_
+#ifndef REGEXP_MACRO_ASSEMBLER_ARM_H_
+#define REGEXP_MACRO_ASSEMBLER_ARM_H_

-#if defined(ARM) || defined (__arm__) || defined(__thumb__)
+namespace v8 { namespace internal {

-#include "constants-arm.h"
-#include "assembler.h"
-#include "assembler-arm.h"
-#include "assembler-arm-inl.h"
-#include "code.h"  // must be after assembler_*.h
-#include "macro-assembler-arm.h"
+class RegExpMacroAssemblerARM: public RegExpMacroAssembler {
+ public:
+  RegExpMacroAssemblerARM();
+  virtual ~RegExpMacroAssemblerARM();
+};

-#else  // ia32
+}}  // namespace v8::internal

-#include "assembler.h"
-#include "assembler-ia32.h"
-#include "assembler-ia32-inl.h"
-#include "code.h"  // must be after assembler_*.h
-#include "macro-assembler-ia32.h"
-
-#endif
-
-#endif  // V8_MACRO_ASSEMBLER_H_
+#endif /* REGEXP_MACRO_ASSEMBLER_ARM_H_ */

Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc   (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc   Wed Nov 26  
05:54:08 2008
@@ -30,9 +30,12 @@
  #include "log.h"
  #include "ast.h"
  #include "macro-assembler.h"
+#include "regexp-macro-assembler.h"
+#include "macro-assembler-ia32.h"
  #include "regexp-macro-assembler-ia32.h"

  namespace v8 { namespace internal {
+
  /*
   * This assembler uses the following register assignment convention
   * - edx : current character. Must be loaded using LoadCurrentCharacter
@@ -355,7 +358,7 @@
    __ bind(&entry_label_);
    __ push(esi);
    __ push(edi);
-  __ enter(Immediate(num_registers_ * sizeof(uint32_t)));
+  __ enter(Immediate(num_registers_ * kPointerSize));
    __ mov(esi, Operand(ebp, kInputEndOffset));
    __ mov(edi, Operand(ebp, kInputStartOffset));
    __ sub(edi, Operand(esi));
@@ -388,7 +391,7 @@
        if (char_size() == 2) {
          __ shr(eax);
        }
-      __ mov(Operand(ebx, i * sizeof(int32_t)), eax);
+      __ mov(Operand(ebx, i * kPointerSize), eax);
      }
    }
    __ mov(eax, Immediate(1));
@@ -516,7 +519,7 @@
  Operand RegExpMacroAssemblerIA32::register_location(
      int register_index) {
    ASSERT(register_index < (1<<30));
-  return Operand(ebp, -(register_index + 1) * sizeof(uint32_t));
+  return Operand(ebp, -(register_index + 1) * kPointerSize);
  }


@@ -629,4 +632,4 @@
  }

  #undef __
-}}
+}}  // namespace v8::internal

Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.h    (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.h    Wed Nov 26  
05:54:08 2008
@@ -28,16 +28,13 @@
  #ifndef REGEXP_MACRO_ASSEMBLER_IA32_H_
  #define REGEXP_MACRO_ASSEMBLER_IA32_H_

-#if !(defined(ARM) || defined(__arm__) || defined(__thumb__))
-
-#include "regexp-macro-assembler.h"
-#include "macro-assembler-ia32.h"
-
  namespace v8 { namespace internal {

  class RegExpMacroAssemblerIA32: public RegExpMacroAssembler {
   public:
+  // Type of input string to generate code for.
    enum Mode {ASCII = 1, UC16 = 2};
+
    RegExpMacroAssemblerIA32(Mode mode, int registers_to_save);
    virtual ~RegExpMacroAssemblerIA32();
    virtual void AdvanceCurrentPosition(int by);
@@ -88,6 +85,7 @@
    virtual void Succeed();
    virtual void WriteCurrentPositionToRegister(int reg);
    virtual void WriteStackPointerToRegister(int reg);
+
   private:
    // Offsets from ebp of arguments to function.
    static const int kBackup_edi = 1 * sizeof(uint32_t);
@@ -97,6 +95,15 @@
    static const int kInputEndOffset = 6 * sizeof(uint32_t);
    static const int kRegisterOutput = 7 * sizeof(uint32_t);

+  // Initial size of code buffer.
+  static const size_t kRegExpCodeSize = 1024;
+  // Initial size of constant buffers allocated during compilation.
+  static const int kRegExpConstantsSize = 256;
+  // Only unroll loops up to this length.
+  static const int kMaxInlineStringTests = 8;
+  // Special "character" marking end of input.
+  static const uint32_t kEndOfInput = ~0;
+
    // The ebp-relative location of a regexp register.
    Operand register_location(int register_index);

@@ -130,16 +137,9 @@
    // (and checks if we have hit the stack limit too).
    void CheckStackLimit();

-  // Initial size of code buffer.
-  static const size_t kRegExpCodeSize = 1024;
-  // Initial size of constant buffers allocated during compilation.
-  static const int kRegExpConstantsSize = 256;
-  // Only unroll loops up to this length.
-  static const int kMaxInlineStringTests = 8;
-  // Special "character" marking end of input.
-  static const uint32_t kEndOfInput = ~0;
-
    MacroAssembler* masm_;
+  // Constant buffer provider. Allocates external storage for storing
+  // constants.
    ByteArrayProvider constants_;
    // Which mode to generate code for (ASCII or UTF16).
    Mode mode_;
@@ -148,8 +148,7 @@
    // Number of registers to output at the end (the saved registers
    // are always 0..num_saved_registers_-1)
    int num_saved_registers_;
-  // Whether to generate code that is case-insensitive. Only relevant for
-  // back-references.
+  // Labels used internally.
    Label entry_label_;
    Label start_label_;
    Label success_label_;
@@ -157,8 +156,7 @@
    // Handle used to represent the generated code object itself.
    Handle<Object> self_;
  };
-}}

-#endif  // !ARM
+}}  // namespace v8::internal

  #endif /* REGEXP_MACRO_ASSEMBLER_IA32_H_ */

Modified: branches/bleeding_edge/test/cctest/test-regexp.cc
==============================================================================
--- branches/bleeding_edge/test/cctest/test-regexp.cc   (original)
+++ branches/bleeding_edge/test/cctest/test-regexp.cc   Wed Nov 26 05:54:08  
2008
@@ -39,7 +39,12 @@
  #include "assembler-irregexp.h"
  #include "regexp-macro-assembler.h"
  #include "regexp-macro-assembler-irregexp.h"
+#ifdef ARM
+#include "regexp-macro-assembler-arm.h"
+#else  // IA32
+#include "macro-assembler-ia32.h"
  #include "regexp-macro-assembler-ia32.h"
+#endif
  #include "interpreter-irregexp.h"


@@ -720,7 +725,7 @@
  }


-#if !(defined(ARM) || defined(__arm__) || defined(__thumb__))
+#ifndef ARM  // IA32 only tests.

  TEST(MacroAssemblerIA32Success) {
    typedef bool (*AsciiTest) (
@@ -954,7 +959,7 @@
    CHECK_EQ(9, output[4]);
  }

-#endif  // !(defined(ARM) || defined(__arm__) || defined(__thumb__))
+#endif  // !defined ARM

  TEST(AddInverseToTable) {
    static const int kLimit = 1000;

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to