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

Side by Side Diff: src/mips/full-codegen-mips.cc

Issue 7650009: MIPS: port Implement Harmony semantics for typeof null (behind a flag). (Closed)
Patch Set: Created 9 years, 4 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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4034 matching lines...) Expand 10 before | Expand all | Expand 10 after
4045 __ Branch(if_false, ge, a1, Operand(FIRST_NONSTRING_TYPE)); 4045 __ Branch(if_false, ge, a1, Operand(FIRST_NONSTRING_TYPE));
4046 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset)); 4046 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset));
4047 __ And(a1, a1, Operand(1 << Map::kIsUndetectable)); 4047 __ And(a1, a1, Operand(1 << Map::kIsUndetectable));
4048 Split(eq, a1, Operand(zero_reg), 4048 Split(eq, a1, Operand(zero_reg),
4049 if_true, if_false, fall_through); 4049 if_true, if_false, fall_through);
4050 } else if (check->Equals(isolate()->heap()->boolean_symbol())) { 4050 } else if (check->Equals(isolate()->heap()->boolean_symbol())) {
4051 __ LoadRoot(at, Heap::kTrueValueRootIndex); 4051 __ LoadRoot(at, Heap::kTrueValueRootIndex);
4052 __ Branch(if_true, eq, v0, Operand(at)); 4052 __ Branch(if_true, eq, v0, Operand(at));
4053 __ LoadRoot(at, Heap::kFalseValueRootIndex); 4053 __ LoadRoot(at, Heap::kFalseValueRootIndex);
4054 Split(eq, v0, Operand(at), if_true, if_false, fall_through); 4054 Split(eq, v0, Operand(at), if_true, if_false, fall_through);
4055 } else if (FLAG_harmony_typeof &&
4056 check->Equals(isolate()->heap()->null_symbol())) {
4057 __ LoadRoot(at, Heap::kNullValueRootIndex);
4058 Split(eq, v0, Operand(at), if_true, if_false, fall_through);
4055 } else if (check->Equals(isolate()->heap()->undefined_symbol())) { 4059 } else if (check->Equals(isolate()->heap()->undefined_symbol())) {
4056 __ LoadRoot(at, Heap::kUndefinedValueRootIndex); 4060 __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
4057 __ Branch(if_true, eq, v0, Operand(at)); 4061 __ Branch(if_true, eq, v0, Operand(at));
4058 __ JumpIfSmi(v0, if_false); 4062 __ JumpIfSmi(v0, if_false);
4059 // Check for undetectable objects => true. 4063 // Check for undetectable objects => true.
4060 __ lw(v0, FieldMemOperand(v0, HeapObject::kMapOffset)); 4064 __ lw(v0, FieldMemOperand(v0, HeapObject::kMapOffset));
4061 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset)); 4065 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset));
4062 __ And(a1, a1, Operand(1 << Map::kIsUndetectable)); 4066 __ And(a1, a1, Operand(1 << Map::kIsUndetectable));
4063 Split(ne, a1, Operand(zero_reg), if_true, if_false, fall_through); 4067 Split(ne, a1, Operand(zero_reg), if_true, if_false, fall_through);
4064 } else if (check->Equals(isolate()->heap()->function_symbol())) { 4068 } else if (check->Equals(isolate()->heap()->function_symbol())) {
4065 __ JumpIfSmi(v0, if_false); 4069 __ JumpIfSmi(v0, if_false);
4066 __ GetObjectType(v0, a1, v0); // Leave map in a1. 4070 __ GetObjectType(v0, a1, v0); // Leave map in a1.
4067 Split(ge, v0, Operand(FIRST_CALLABLE_SPEC_OBJECT_TYPE), 4071 Split(ge, v0, Operand(FIRST_CALLABLE_SPEC_OBJECT_TYPE),
4068 if_true, if_false, fall_through); 4072 if_true, if_false, fall_through);
4069 4073
4070 } else if (check->Equals(isolate()->heap()->object_symbol())) { 4074 } else if (check->Equals(isolate()->heap()->object_symbol())) {
4071 __ JumpIfSmi(v0, if_false); 4075 __ JumpIfSmi(v0, if_false);
4072 __ LoadRoot(at, Heap::kNullValueRootIndex); 4076 if (!FLAG_harmony_typeof) {
4073 __ Branch(if_true, eq, v0, Operand(at)); 4077 __ LoadRoot(at, Heap::kNullValueRootIndex);
4078 __ Branch(if_true, eq, v0, Operand(at));
4079 }
4074 // Check for JS objects => true. 4080 // Check for JS objects => true.
4075 __ GetObjectType(v0, v0, a1); 4081 __ GetObjectType(v0, v0, a1);
4076 __ Branch(if_false, lt, a1, Operand(FIRST_NONCALLABLE_SPEC_OBJECT_TYPE)); 4082 __ Branch(if_false, lt, a1, Operand(FIRST_NONCALLABLE_SPEC_OBJECT_TYPE));
4077 __ lbu(a1, FieldMemOperand(v0, Map::kInstanceTypeOffset)); 4083 __ lbu(a1, FieldMemOperand(v0, Map::kInstanceTypeOffset));
4078 __ Branch(if_false, gt, a1, Operand(LAST_NONCALLABLE_SPEC_OBJECT_TYPE)); 4084 __ Branch(if_false, gt, a1, Operand(LAST_NONCALLABLE_SPEC_OBJECT_TYPE));
4079 // Check for undetectable objects => false. 4085 // Check for undetectable objects => false.
4080 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset)); 4086 __ lbu(a1, FieldMemOperand(v0, Map::kBitFieldOffset));
4081 __ And(a1, a1, Operand(1 << Map::kIsUndetectable)); 4087 __ And(a1, a1, Operand(1 << Map::kIsUndetectable));
4082 Split(eq, a1, Operand(zero_reg), if_true, if_false, fall_through); 4088 Split(eq, a1, Operand(zero_reg), if_true, if_false, fall_through);
4083 } else { 4089 } else {
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
4312 __ Addu(at, a1, Operand(masm_->CodeObject())); 4318 __ Addu(at, a1, Operand(masm_->CodeObject()));
4313 __ Jump(at); 4319 __ Jump(at);
4314 } 4320 }
4315 4321
4316 4322
4317 #undef __ 4323 #undef __
4318 4324
4319 } } // namespace v8::internal 4325 } } // namespace v8::internal
4320 4326
4321 #endif // V8_TARGET_ARCH_MIPS 4327 #endif // V8_TARGET_ARCH_MIPS
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