Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: src/ppc/code-stubs-ppc.cc

Issue 1035003002: PPC64: Fix return value checks for generated regexp code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_PPC 7 #if V8_TARGET_ARCH_PPC
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2347 matching lines...) Expand 10 before | Expand all | Expand 10 after
2358 // what it thinks is C code compiled for the simulator/host 2358 // what it thinks is C code compiled for the simulator/host
2359 // platform. 2359 // platform.
2360 __ LoadP(code, MemOperand(code, 0)); // Instruction address 2360 __ LoadP(code, MemOperand(code, 0)); // Instruction address
2361 #endif 2361 #endif
2362 2362
2363 DirectCEntryStub stub(isolate()); 2363 DirectCEntryStub stub(isolate());
2364 stub.GenerateCall(masm, code); 2364 stub.GenerateCall(masm, code);
2365 2365
2366 __ LeaveExitFrame(false, no_reg, true); 2366 __ LeaveExitFrame(false, no_reg, true);
2367 2367
2368 // r3: result 2368 // r3: result (int32)
2369 // subject: subject string (callee saved) 2369 // subject: subject string (callee saved)
2370 // regexp_data: RegExp data (callee saved) 2370 // regexp_data: RegExp data (callee saved)
2371 // last_match_info_elements: Last match info elements (callee saved) 2371 // last_match_info_elements: Last match info elements (callee saved)
2372 // Check the result. 2372 // Check the result.
2373 Label success; 2373 Label success;
2374 __ cmpi(r3, Operand(1)); 2374 __ cmpwi(r3, Operand(1));
2375 // We expect exactly one result since we force the called regexp to behave 2375 // We expect exactly one result since we force the called regexp to behave
2376 // as non-global. 2376 // as non-global.
2377 __ beq(&success); 2377 __ beq(&success);
2378 Label failure; 2378 Label failure;
2379 __ cmpi(r3, Operand(NativeRegExpMacroAssembler::FAILURE)); 2379 __ cmpwi(r3, Operand(NativeRegExpMacroAssembler::FAILURE));
2380 __ beq(&failure); 2380 __ beq(&failure);
2381 __ cmpi(r3, Operand(NativeRegExpMacroAssembler::EXCEPTION)); 2381 __ cmpwi(r3, Operand(NativeRegExpMacroAssembler::EXCEPTION));
2382 // If not exception it can only be retry. Handle that in the runtime system. 2382 // If not exception it can only be retry. Handle that in the runtime system.
2383 __ bne(&runtime); 2383 __ bne(&runtime);
2384 // Result must now be exception. If there is no pending exception already a 2384 // Result must now be exception. If there is no pending exception already a
2385 // stack overflow (on the backtrack stack) was detected in RegExp code but 2385 // stack overflow (on the backtrack stack) was detected in RegExp code but
2386 // haven't created the exception yet. Handle that in the runtime system. 2386 // haven't created the exception yet. Handle that in the runtime system.
2387 // TODO(592): Rerunning the RegExp to get the stack overflow exception. 2387 // TODO(592): Rerunning the RegExp to get the stack overflow exception.
2388 __ mov(r4, Operand(isolate()->factory()->the_hole_value())); 2388 __ mov(r4, Operand(isolate()->factory()->the_hole_value()));
2389 __ mov(r5, Operand(ExternalReference(Isolate::kPendingExceptionAddress, 2389 __ mov(r5, Operand(ExternalReference(Isolate::kPendingExceptionAddress,
2390 isolate()))); 2390 isolate())));
2391 __ LoadP(r3, MemOperand(r5, 0)); 2391 __ LoadP(r3, MemOperand(r5, 0));
(...skipping 3194 matching lines...) Expand 10 before | Expand all | Expand 10 after
5586 kStackUnwindSpace, NULL, 5586 kStackUnwindSpace, NULL,
5587 MemOperand(fp, 6 * kPointerSize), NULL); 5587 MemOperand(fp, 6 * kPointerSize), NULL);
5588 } 5588 }
5589 5589
5590 5590
5591 #undef __ 5591 #undef __
5592 } 5592 }
5593 } // namespace v8::internal 5593 } // namespace v8::internal
5594 5594
5595 #endif // V8_TARGET_ARCH_PPC 5595 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698