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(¯o_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
-~----------~----~----~----~------~----~------~--~---