Fix non-simulated ARM calling of RegExp code.
Review URL: http://codereview.chromium.org/6526043 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6805 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
7de60ef84d
commit
abbcadf221
@ -48,10 +48,16 @@ namespace internal {
|
||||
#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
|
||||
(entry(p0, p1, p2, p3, p4))
|
||||
|
||||
// Call the generated regexp code directly. The entry function pointer should
|
||||
// expect seven int/pointer sized arguments and return an int.
|
||||
typedef int (*arm_regexp_matcher)(String*, int, const byte*, const byte*,
|
||||
void*, int*, Address, int);
|
||||
|
||||
|
||||
// Call the generated regexp code directly. The code at the entry address
|
||||
// should act as a function matching the type arm_regexp_matcher.
|
||||
// The fifth argument is a dummy that reserves the space used for
|
||||
// the return address added by the ExitFrame in native calls.
|
||||
#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6) \
|
||||
(entry(p0, p1, p2, p3, NULL, p4, p5, p6))
|
||||
(FUNCTION_CAST<arm_regexp_matcher>(entry)(p0, p1, p2, p3, NULL, p4, p5, p6))
|
||||
|
||||
#define TRY_CATCH_FROM_ADDRESS(try_catch_address) \
|
||||
(reinterpret_cast<TryCatch*>(try_catch_address))
|
||||
@ -362,8 +368,7 @@ class Simulator {
|
||||
FUNCTION_ADDR(entry), 5, p0, p1, p2, p3, p4))
|
||||
|
||||
#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6) \
|
||||
Simulator::current()->Call( \
|
||||
FUNCTION_ADDR(entry), 8, p0, p1, p2, p3, NULL, p4, p5, p6)
|
||||
Simulator::current()->Call(entry, 8, p0, p1, p2, p3, NULL, p4, p5, p6)
|
||||
|
||||
#define TRY_CATCH_FROM_ADDRESS(try_catch_address) \
|
||||
try_catch_address == \
|
||||
|
@ -38,10 +38,15 @@ namespace internal {
|
||||
#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
|
||||
(entry(p0, p1, p2, p3, p4))
|
||||
|
||||
// Call the generated regexp code directly. The entry function pointer should
|
||||
|
||||
typedef int (*regexp_matcher)(String*, int, const byte*,
|
||||
const byte*, int*, Address, int);
|
||||
|
||||
// Call the generated regexp code directly. The code at the entry address should
|
||||
// expect seven int/pointer sized arguments and return an int.
|
||||
#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6) \
|
||||
(entry(p0, p1, p2, p3, p4, p5, p6))
|
||||
(FUNCTION_CAST<regexp_matcher>(entry)(p0, p1, p2, p3, p4, p5, p6))
|
||||
|
||||
|
||||
#define TRY_CATCH_FROM_ADDRESS(try_catch_address) \
|
||||
(reinterpret_cast<TryCatch*>(try_catch_address))
|
||||
|
@ -154,16 +154,12 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Execute(
|
||||
const byte* input_start,
|
||||
const byte* input_end,
|
||||
int* output) {
|
||||
typedef int (*matcher)(String*, int, const byte*,
|
||||
const byte*, int*, Address, int);
|
||||
matcher matcher_func = FUNCTION_CAST<matcher>(code->entry());
|
||||
|
||||
// Ensure that the minimum stack has been allocated.
|
||||
RegExpStack stack;
|
||||
Address stack_base = RegExpStack::stack_base();
|
||||
|
||||
int direct_call = 0;
|
||||
int result = CALL_GENERATED_REGEXP_CODE(matcher_func,
|
||||
int result = CALL_GENERATED_REGEXP_CODE(code->entry(),
|
||||
input,
|
||||
start_offset,
|
||||
input_start,
|
||||
|
@ -39,10 +39,13 @@ namespace internal {
|
||||
#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
|
||||
(entry(p0, p1, p2, p3, p4))
|
||||
|
||||
// Call the generated regexp code directly. The entry function pointer should
|
||||
typedef int (*regexp_matcher)(String*, int, const byte*,
|
||||
const byte*, int*, Address, int);
|
||||
|
||||
// Call the generated regexp code directly. The code at the entry address should
|
||||
// expect seven int/pointer sized arguments and return an int.
|
||||
#define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6) \
|
||||
(entry(p0, p1, p2, p3, p4, p5, p6))
|
||||
(FUNCTION_CAST<regexp_matcher>(entry)(p0, p1, p2, p3, p4, p5, p6))
|
||||
|
||||
#define TRY_CATCH_FROM_ADDRESS(try_catch_address) \
|
||||
(reinterpret_cast<TryCatch*>(try_catch_address))
|
||||
|
Loading…
Reference in New Issue
Block a user