diff options
author | Ryan <ry@tinyclouds.org> | 2009-09-02 11:13:46 +0200 |
---|---|---|
committer | Ryan <ry@tinyclouds.org> | 2009-09-02 11:13:46 +0200 |
commit | 97ce138621b375f24db98280972a56e063be0b1d (patch) | |
tree | 3bc3aa651233955ade15b1f5a00678e042be1076 /deps/v8/src/regexp-macro-assembler.cc | |
parent | 78bb53b009e04c94f142aa3241b06c640395b170 (diff) | |
download | node-new-97ce138621b375f24db98280972a56e063be0b1d.tar.gz |
Upgrade V8 to 1.3.9
Diffstat (limited to 'deps/v8/src/regexp-macro-assembler.cc')
-rw-r--r-- | deps/v8/src/regexp-macro-assembler.cc | 57 |
1 files changed, 50 insertions, 7 deletions
diff --git a/deps/v8/src/regexp-macro-assembler.cc b/deps/v8/src/regexp-macro-assembler.cc index 7f830fe485..0d00ceec35 100644 --- a/deps/v8/src/regexp-macro-assembler.cc +++ b/deps/v8/src/regexp-macro-assembler.cc @@ -30,6 +30,13 @@ #include "assembler.h" #include "regexp-stack.h" #include "regexp-macro-assembler.h" +#if V8_TARGET_ARCH_ARM +#include "arm/simulator-arm.h" +#elif V8_TARGET_ARCH_IA32 +#include "ia32/simulator-ia32.h" +#elif V8_TARGET_ARCH_X64 +#include "x64/simulator-x64.h" +#endif namespace v8 { namespace internal { @@ -42,6 +49,15 @@ RegExpMacroAssembler::~RegExpMacroAssembler() { } +bool RegExpMacroAssembler::CanReadUnaligned() { +#ifdef V8_HOST_CAN_READ_UNALIGNED + return true; +#else + return false; +#endif +} + + #ifdef V8_NATIVE_REGEXP // Avoid unused code, e.g., on ARM. NativeRegExpMacroAssembler::NativeRegExpMacroAssembler() { @@ -51,6 +67,15 @@ NativeRegExpMacroAssembler::NativeRegExpMacroAssembler() { NativeRegExpMacroAssembler::~NativeRegExpMacroAssembler() { } + +bool NativeRegExpMacroAssembler::CanReadUnaligned() { +#ifdef V8_TARGET_CAN_READ_UNALIGNED + return true; +#else + return false; +#endif +} + const byte* NativeRegExpMacroAssembler::StringCharacterPosition( String* subject, int start_index) { @@ -162,13 +187,14 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Execute( RegExpStack stack; Address stack_base = RegExpStack::stack_base(); - int result = matcher_func(input, - start_offset, - input_start, - input_end, - output, - at_start_val, - stack_base); + int result = CALL_GENERATED_REGEXP_CODE(matcher_func, + input, + start_offset, + input_start, + input_end, + output, + at_start_val, + stack_base); ASSERT(result <= SUCCESS); ASSERT(result >= RETRY); @@ -213,5 +239,22 @@ int NativeRegExpMacroAssembler::CaseInsensitiveCompareUC16( return 1; } + +Address NativeRegExpMacroAssembler::GrowStack(Address stack_pointer, + Address* stack_base) { + size_t size = RegExpStack::stack_capacity(); + Address old_stack_base = RegExpStack::stack_base(); + ASSERT(old_stack_base == *stack_base); + ASSERT(stack_pointer <= old_stack_base); + ASSERT(static_cast<size_t>(old_stack_base - stack_pointer) <= size); + Address new_stack_base = RegExpStack::EnsureCapacity(size * 2); + if (new_stack_base == NULL) { + return NULL; + } + *stack_base = new_stack_base; + intptr_t stack_content_size = old_stack_base - stack_pointer; + return new_stack_base - stack_content_size; +} + #endif // V8_NATIVE_REGEXP } } // namespace v8::internal |