A recursive call to the code generator could (conceivably) clobber any

register.  Generate code to evaluate both arguments of FastCharCodeAt
before popping either from the stack.
Review URL: http://codereview.chromium.org/13706

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@958 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 5afca497
...@@ -2919,18 +2919,16 @@ void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) { ...@@ -2919,18 +2919,16 @@ void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) {
Label ascii_string; Label ascii_string;
Label got_char_code; Label got_char_code;
// Load the string into eax. // Load the string into eax and the index into ebx.
Load(args->at(0)); Load(args->at(0));
Load(args->at(1));
frame_->Pop(ebx);
frame_->Pop(eax); frame_->Pop(eax);
// If the receiver is a smi return undefined. // If the receiver is a smi return undefined.
ASSERT(kSmiTag == 0); ASSERT(kSmiTag == 0);
__ test(eax, Immediate(kSmiTagMask)); __ test(eax, Immediate(kSmiTagMask));
__ j(zero, &slow_case, not_taken); __ j(zero, &slow_case, not_taken);
// Load the index into ebx.
Load(args->at(1));
frame_->Pop(ebx);
// Check for negative or non-smi index. // Check for negative or non-smi index.
ASSERT(kSmiTag == 0); ASSERT(kSmiTag == 0);
__ test(ebx, Immediate(kSmiTagMask | 0x80000000)); __ test(ebx, Immediate(kSmiTagMask | 0x80000000));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment