Index: src/ic.cc |
=================================================================== |
--- src/ic.cc (revision 8025) |
+++ src/ic.cc (working copy) |
@@ -306,8 +306,8 @@ |
return KeyedStoreIC::Clear(address, target); |
case Code::CALL_IC: return CallIC::Clear(address, target); |
case Code::KEYED_CALL_IC: return KeyedCallIC::Clear(address, target); |
- case Code::TYPE_RECORDING_UNARY_OP_IC: |
- case Code::TYPE_RECORDING_BINARY_OP_IC: |
+ case Code::UNARY_OP_IC: |
+ case Code::BINARY_OP_IC: |
case Code::COMPARE_IC: |
// Clearing these is tricky and does not |
// make any performance difference. |
@@ -2157,12 +2157,12 @@ |
} |
-void TRUnaryOpIC::patch(Code* code) { |
+void UnaryOpIC::patch(Code* code) { |
set_target(code); |
} |
-const char* TRUnaryOpIC::GetName(TypeInfo type_info) { |
+const char* UnaryOpIC::GetName(TypeInfo type_info) { |
switch (type_info) { |
case UNINITIALIZED: return "Uninitialized"; |
case SMI: return "Smi"; |
@@ -2173,7 +2173,7 @@ |
} |
-TRUnaryOpIC::State TRUnaryOpIC::ToState(TypeInfo type_info) { |
+UnaryOpIC::State UnaryOpIC::ToState(TypeInfo type_info) { |
switch (type_info) { |
case UNINITIALIZED: |
return ::v8::internal::UNINITIALIZED; |
@@ -2187,7 +2187,7 @@ |
return ::v8::internal::UNINITIALIZED; |
} |
-TRUnaryOpIC::TypeInfo TRUnaryOpIC::GetTypeInfo(Handle<Object> operand) { |
+UnaryOpIC::TypeInfo UnaryOpIC::GetTypeInfo(Handle<Object> operand) { |
::v8::internal::TypeInfo operand_type = |
::v8::internal::TypeInfo::TypeFromValue(operand); |
if (operand_type.IsSmi()) { |
@@ -2200,34 +2200,34 @@ |
} |
-TRUnaryOpIC::TypeInfo TRUnaryOpIC::ComputeNewType( |
- TRUnaryOpIC::TypeInfo type, |
- TRUnaryOpIC::TypeInfo previous) { |
- switch (previous) { |
- case TRUnaryOpIC::UNINITIALIZED: |
- return type; |
- case TRUnaryOpIC::SMI: |
- return (type == TRUnaryOpIC::GENERIC) |
- ? TRUnaryOpIC::GENERIC |
- : TRUnaryOpIC::HEAP_NUMBER; |
- case TRUnaryOpIC::HEAP_NUMBER: |
- return TRUnaryOpIC::GENERIC; |
- case TRUnaryOpIC::GENERIC: |
+UnaryOpIC::TypeInfo UnaryOpIC::ComputeNewType( |
+ UnaryOpIC::TypeInfo current_type, |
+ UnaryOpIC::TypeInfo previous_type) { |
+ switch (previous_type) { |
+ case UnaryOpIC::UNINITIALIZED: |
+ return current_type; |
+ case UnaryOpIC::SMI: |
+ return (current_type == UnaryOpIC::GENERIC) |
+ ? UnaryOpIC::GENERIC |
+ : UnaryOpIC::HEAP_NUMBER; |
+ case UnaryOpIC::HEAP_NUMBER: |
+ return UnaryOpIC::GENERIC; |
+ case UnaryOpIC::GENERIC: |
// We should never do patching if we are in GENERIC state. |
UNREACHABLE(); |
- return TRUnaryOpIC::GENERIC; |
+ return UnaryOpIC::GENERIC; |
} |
UNREACHABLE(); |
- return TRUnaryOpIC::GENERIC; |
+ return UnaryOpIC::GENERIC; |
} |
-void TRBinaryOpIC::patch(Code* code) { |
+void BinaryOpIC::patch(Code* code) { |
set_target(code); |
} |
-const char* TRBinaryOpIC::GetName(TypeInfo type_info) { |
+const char* BinaryOpIC::GetName(TypeInfo type_info) { |
switch (type_info) { |
case UNINITIALIZED: return "Uninitialized"; |
case SMI: return "SMI"; |
@@ -2242,7 +2242,7 @@ |
} |
-TRBinaryOpIC::State TRBinaryOpIC::ToState(TypeInfo type_info) { |
+BinaryOpIC::State BinaryOpIC::ToState(TypeInfo type_info) { |
switch (type_info) { |
case UNINITIALIZED: |
return ::v8::internal::UNINITIALIZED; |
@@ -2261,8 +2261,8 @@ |
} |
-TRBinaryOpIC::TypeInfo TRBinaryOpIC::JoinTypes(TRBinaryOpIC::TypeInfo x, |
- TRBinaryOpIC::TypeInfo y) { |
+BinaryOpIC::TypeInfo BinaryOpIC::JoinTypes(BinaryOpIC::TypeInfo x, |
+ BinaryOpIC::TypeInfo y) { |
if (x == UNINITIALIZED) return y; |
if (y == UNINITIALIZED) return x; |
if (x == y) return x; |
@@ -2276,8 +2276,8 @@ |
} |
-TRBinaryOpIC::TypeInfo TRBinaryOpIC::GetTypeInfo(Handle<Object> left, |
- Handle<Object> right) { |
+BinaryOpIC::TypeInfo BinaryOpIC::GetTypeInfo(Handle<Object> left, |
+ Handle<Object> right) { |
::v8::internal::TypeInfo left_type = |
::v8::internal::TypeInfo::TypeFromValue(left); |
::v8::internal::TypeInfo right_type = |
@@ -2315,32 +2315,31 @@ |
// defined in code-stubs-<arch>.cc |
// Only needed to remove dependency of ic.cc on code-stubs-<arch>.h. |
-Handle<Code> GetTypeRecordingUnaryOpStub(int key, |
- TRUnaryOpIC::TypeInfo type_info); |
+Handle<Code> GetUnaryOpStub(int key, UnaryOpIC::TypeInfo type_info); |
-RUNTIME_FUNCTION(MaybeObject*, TypeRecordingUnaryOp_Patch) { |
+RUNTIME_FUNCTION(MaybeObject*, UnaryOp_Patch) { |
ASSERT(args.length() == 4); |
HandleScope scope(isolate); |
Handle<Object> operand = args.at<Object>(0); |
int key = Smi::cast(args[1])->value(); |
Token::Value op = static_cast<Token::Value>(Smi::cast(args[2])->value()); |
- TRUnaryOpIC::TypeInfo previous_type = |
- static_cast<TRUnaryOpIC::TypeInfo>(Smi::cast(args[3])->value()); |
+ UnaryOpIC::TypeInfo previous_type = |
+ static_cast<UnaryOpIC::TypeInfo>(Smi::cast(args[3])->value()); |
- TRUnaryOpIC::TypeInfo type = TRUnaryOpIC::GetTypeInfo(operand); |
- type = TRUnaryOpIC::ComputeNewType(type, previous_type); |
+ UnaryOpIC::TypeInfo type = UnaryOpIC::GetTypeInfo(operand); |
+ type = UnaryOpIC::ComputeNewType(type, previous_type); |
- Handle<Code> code = GetTypeRecordingUnaryOpStub(key, type); |
+ Handle<Code> code = GetUnaryOpStub(key, type); |
if (!code.is_null()) { |
if (FLAG_trace_ic) { |
- PrintF("[TypeRecordingUnaryOpIC (%s->%s)#%s]\n", |
- TRUnaryOpIC::GetName(previous_type), |
- TRUnaryOpIC::GetName(type), |
+ PrintF("[UnaryOpIC (%s->%s)#%s]\n", |
+ UnaryOpIC::GetName(previous_type), |
+ UnaryOpIC::GetName(type), |
Token::Name(op)); |
} |
- TRUnaryOpIC ic(isolate); |
+ UnaryOpIC ic(isolate); |
ic.patch(*code); |
} |
@@ -2371,12 +2370,12 @@ |
// defined in code-stubs-<arch>.cc |
// Only needed to remove dependency of ic.cc on code-stubs-<arch>.h. |
-Handle<Code> GetTypeRecordingBinaryOpStub(int key, |
- TRBinaryOpIC::TypeInfo type_info, |
- TRBinaryOpIC::TypeInfo result_type); |
+Handle<Code> GetBinaryOpStub(int key, |
+ BinaryOpIC::TypeInfo type_info, |
+ BinaryOpIC::TypeInfo result_type); |
-RUNTIME_FUNCTION(MaybeObject*, TypeRecordingBinaryOp_Patch) { |
+RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) { |
ASSERT(args.length() == 5); |
HandleScope scope(isolate); |
@@ -2384,17 +2383,17 @@ |
Handle<Object> right = args.at<Object>(1); |
int key = Smi::cast(args[2])->value(); |
Token::Value op = static_cast<Token::Value>(Smi::cast(args[3])->value()); |
- TRBinaryOpIC::TypeInfo previous_type = |
- static_cast<TRBinaryOpIC::TypeInfo>(Smi::cast(args[4])->value()); |
+ BinaryOpIC::TypeInfo previous_type = |
+ static_cast<BinaryOpIC::TypeInfo>(Smi::cast(args[4])->value()); |
- TRBinaryOpIC::TypeInfo type = TRBinaryOpIC::GetTypeInfo(left, right); |
- type = TRBinaryOpIC::JoinTypes(type, previous_type); |
- TRBinaryOpIC::TypeInfo result_type = TRBinaryOpIC::UNINITIALIZED; |
- if ((type == TRBinaryOpIC::STRING || type == TRBinaryOpIC::BOTH_STRING) && |
+ BinaryOpIC::TypeInfo type = BinaryOpIC::GetTypeInfo(left, right); |
+ type = BinaryOpIC::JoinTypes(type, previous_type); |
+ BinaryOpIC::TypeInfo result_type = BinaryOpIC::UNINITIALIZED; |
+ if ((type == BinaryOpIC::STRING || type == BinaryOpIC::BOTH_STRING) && |
op != Token::ADD) { |
- type = TRBinaryOpIC::GENERIC; |
+ type = BinaryOpIC::GENERIC; |
} |
- if (type == TRBinaryOpIC::SMI && previous_type == TRBinaryOpIC::SMI) { |
+ if (type == BinaryOpIC::SMI && previous_type == BinaryOpIC::SMI) { |
if (op == Token::DIV || |
op == Token::MUL || |
op == Token::SHR || |
@@ -2403,31 +2402,31 @@ |
// That is the only way to get here from the Smi stub. |
// With 32-bit Smis, all overflows give heap numbers, but with |
// 31-bit Smis, most operations overflow to int32 results. |
- result_type = TRBinaryOpIC::HEAP_NUMBER; |
+ result_type = BinaryOpIC::HEAP_NUMBER; |
} else { |
// Other operations on SMIs that overflow yield int32s. |
- result_type = TRBinaryOpIC::INT32; |
+ result_type = BinaryOpIC::INT32; |
} |
} |
- if (type == TRBinaryOpIC::INT32 && previous_type == TRBinaryOpIC::INT32) { |
+ if (type == BinaryOpIC::INT32 && previous_type == BinaryOpIC::INT32) { |
// We must be here because an operation on two INT32 types overflowed. |
- result_type = TRBinaryOpIC::HEAP_NUMBER; |
+ result_type = BinaryOpIC::HEAP_NUMBER; |
} |
- Handle<Code> code = GetTypeRecordingBinaryOpStub(key, type, result_type); |
+ Handle<Code> code = GetBinaryOpStub(key, type, result_type); |
if (!code.is_null()) { |
if (FLAG_trace_ic) { |
- PrintF("[TypeRecordingBinaryOpIC (%s->(%s->%s))#%s]\n", |
- TRBinaryOpIC::GetName(previous_type), |
- TRBinaryOpIC::GetName(type), |
- TRBinaryOpIC::GetName(result_type), |
+ PrintF("[BinaryOpIC (%s->(%s->%s))#%s]\n", |
+ BinaryOpIC::GetName(previous_type), |
+ BinaryOpIC::GetName(type), |
+ BinaryOpIC::GetName(result_type), |
Token::Name(op)); |
} |
- TRBinaryOpIC ic(isolate); |
+ BinaryOpIC ic(isolate); |
ic.patch(*code); |
// Activate inlined smi code. |
- if (previous_type == TRBinaryOpIC::UNINITIALIZED) { |
+ if (previous_type == BinaryOpIC::UNINITIALIZED) { |
PatchInlinedSmiCode(ic.address()); |
} |
} |