Skip to content

Commit ad861e1

Browse files
committed
Merge branch 'v8-3.1' into v0.4
2 parents ed74db0 + 6631983 commit ad861e1

12 files changed

+138
-6
lines changed

deps/v8/SConstruct

-1
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,6 @@ V8_EXTRA_FLAGS = {
306306
'gcc': {
307307
'all': {
308308
'WARNINGFLAGS': ['-Wall',
309-
'-Werror',
310309
'-W',
311310
'-Wno-unused-parameter',
312311
'-Wnon-virtual-dtor']

deps/v8/src/arm/code-stubs-arm.cc

+38-2
Original file line numberDiff line numberDiff line change
@@ -2856,6 +2856,9 @@ void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
28562856
case TRBinaryOpIC::HEAP_NUMBER:
28572857
GenerateHeapNumberStub(masm);
28582858
break;
2859+
case TRBinaryOpIC::ODDBALL:
2860+
GenerateOddballStub(masm);
2861+
break;
28592862
case TRBinaryOpIC::STRING:
28602863
GenerateStringStub(masm);
28612864
break;
@@ -3572,10 +3575,43 @@ void TypeRecordingBinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
35723575
}
35733576

35743577

3578+
void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
3579+
Label call_runtime;
3580+
3581+
if (op_ == Token::ADD) {
3582+
// Handle string addition here, because it is the only operation
3583+
// that does not do a ToNumber conversion on the operands.
3584+
GenerateAddStrings(masm);
3585+
}
3586+
3587+
// Convert oddball arguments to numbers.
3588+
Label check, done;
3589+
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
3590+
__ cmp(r1, ip);
3591+
__ b(ne, &check);
3592+
if (Token::IsBitOp(op_)) {
3593+
__ mov(r1, Operand(Smi::FromInt(0)));
3594+
} else {
3595+
__ LoadRoot(r1, Heap::kNanValueRootIndex);
3596+
}
3597+
__ jmp(&done);
3598+
__ bind(&check);
3599+
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
3600+
__ cmp(r0, ip);
3601+
__ b(ne, &done);
3602+
if (Token::IsBitOp(op_)) {
3603+
__ mov(r0, Operand(Smi::FromInt(0)));
3604+
} else {
3605+
__ LoadRoot(r0, Heap::kNanValueRootIndex);
3606+
}
3607+
__ bind(&done);
3608+
3609+
GenerateHeapNumberStub(masm);
3610+
}
3611+
3612+
35753613
void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
35763614
Label not_numbers, call_runtime;
3577-
ASSERT(operands_type_ == TRBinaryOpIC::HEAP_NUMBER);
3578-
35793615
GenerateFPOperation(masm, false, &not_numbers, &call_runtime);
35803616

35813617
__ bind(&not_numbers);

deps/v8/src/arm/code-stubs-arm.h

+1
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ class TypeRecordingBinaryOpStub: public CodeStub {
302302
void GenerateSmiStub(MacroAssembler* masm);
303303
void GenerateInt32Stub(MacroAssembler* masm);
304304
void GenerateHeapNumberStub(MacroAssembler* masm);
305+
void GenerateOddballStub(MacroAssembler* masm);
305306
void GenerateStringStub(MacroAssembler* masm);
306307
void GenerateGenericStub(MacroAssembler* masm);
307308
void GenerateAddStrings(MacroAssembler* masm);

deps/v8/src/heap.h

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ namespace internal {
163163
V(name_symbol, "name") \
164164
V(number_symbol, "number") \
165165
V(Number_symbol, "Number") \
166+
V(nan_symbol, "NaN") \
166167
V(RegExp_symbol, "RegExp") \
167168
V(source_symbol, "source") \
168169
V(global_symbol, "global") \

deps/v8/src/ia32/code-stubs-ia32.cc

+36-1
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,9 @@ void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
13421342
case TRBinaryOpIC::HEAP_NUMBER:
13431343
GenerateHeapNumberStub(masm);
13441344
break;
1345+
case TRBinaryOpIC::ODDBALL:
1346+
GenerateOddballStub(masm);
1347+
break;
13451348
case TRBinaryOpIC::STRING:
13461349
GenerateStringStub(masm);
13471350
break;
@@ -2006,9 +2009,41 @@ void TypeRecordingBinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
20062009
}
20072010

20082011

2012+
void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
2013+
Label call_runtime;
2014+
2015+
if (op_ == Token::ADD) {
2016+
// Handle string addition here, because it is the only operation
2017+
// that does not do a ToNumber conversion on the operands.
2018+
GenerateAddStrings(masm);
2019+
}
2020+
2021+
// Convert odd ball arguments to numbers.
2022+
NearLabel check, done;
2023+
__ cmp(edx, Factory::undefined_value());
2024+
__ j(not_equal, &check);
2025+
if (Token::IsBitOp(op_)) {
2026+
__ xor_(edx, Operand(edx));
2027+
} else {
2028+
__ mov(edx, Immediate(Factory::nan_value()));
2029+
}
2030+
__ jmp(&done);
2031+
__ bind(&check);
2032+
__ cmp(eax, Factory::undefined_value());
2033+
__ j(not_equal, &done);
2034+
if (Token::IsBitOp(op_)) {
2035+
__ xor_(eax, Operand(eax));
2036+
} else {
2037+
__ mov(eax, Immediate(Factory::nan_value()));
2038+
}
2039+
__ bind(&done);
2040+
2041+
GenerateHeapNumberStub(masm);
2042+
}
2043+
2044+
20092045
void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
20102046
Label call_runtime;
2011-
ASSERT(operands_type_ == TRBinaryOpIC::HEAP_NUMBER);
20122047

20132048
// Floating point case.
20142049
switch (op_) {

deps/v8/src/ia32/code-stubs-ia32.h

+1
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ class TypeRecordingBinaryOpStub: public CodeStub {
306306
void GenerateSmiStub(MacroAssembler* masm);
307307
void GenerateInt32Stub(MacroAssembler* masm);
308308
void GenerateHeapNumberStub(MacroAssembler* masm);
309+
void GenerateOddballStub(MacroAssembler* masm);
309310
void GenerateStringStub(MacroAssembler* masm);
310311
void GenerateGenericStub(MacroAssembler* masm);
311312
void GenerateAddStrings(MacroAssembler* masm);

deps/v8/src/ic.cc

+16
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,16 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
11131113
MaybeObject* KeyedLoadIC::Load(State state,
11141114
Handle<Object> object,
11151115
Handle<Object> key) {
1116+
// Check for values that can be converted into a symbol.
1117+
// TODO(1295): Remove this code.
1118+
HandleScope scope;
1119+
if (key->IsHeapNumber() &&
1120+
isnan(HeapNumber::cast(*key)->value())) {
1121+
key = Factory::nan_symbol();
1122+
} else if (key->IsUndefined()) {
1123+
key = Factory::undefined_symbol();
1124+
}
1125+
11161126
if (key->IsSymbol()) {
11171127
Handle<String> name = Handle<String>::cast(key);
11181128

@@ -2082,6 +2092,7 @@ const char* TRBinaryOpIC::GetName(TypeInfo type_info) {
20822092
case SMI: return "SMI";
20832093
case INT32: return "Int32s";
20842094
case HEAP_NUMBER: return "HeapNumbers";
2095+
case ODDBALL: return "Oddball";
20852096
case STRING: return "Strings";
20862097
case GENERIC: return "Generic";
20872098
default: return "Invalid";
@@ -2096,6 +2107,7 @@ TRBinaryOpIC::State TRBinaryOpIC::ToState(TypeInfo type_info) {
20962107
case SMI:
20972108
case INT32:
20982109
case HEAP_NUMBER:
2110+
case ODDBALL:
20992111
case STRING:
21002112
return MONOMORPHIC;
21012113
case GENERIC:
@@ -2143,6 +2155,10 @@ TRBinaryOpIC::TypeInfo TRBinaryOpIC::GetTypeInfo(Handle<Object> left,
21432155
return STRING;
21442156
}
21452157

2158+
// Check for oddball objects.
2159+
if (left->IsUndefined() && right->IsNumber()) return ODDBALL;
2160+
if (left->IsNumber() && right->IsUndefined()) return ODDBALL;
2161+
21462162
return GENERIC;
21472163
}
21482164

deps/v8/src/ic.h

+1
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ class TRBinaryOpIC: public IC {
576576
SMI,
577577
INT32,
578578
HEAP_NUMBER,
579+
ODDBALL,
579580
STRING, // Only used for addition operation. At least one string operand.
580581
GENERIC
581582
};

deps/v8/src/platform-freebsd.cc

+6-1
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,11 @@ class FreeBSDMutex : public Mutex {
526526
return result;
527527
}
528528

529+
virtual bool TryLock() {
530+
int result = pthread_mutex_trylock(&mutex_);
531+
return result == 0;
532+
}
533+
529534
private:
530535
pthread_mutex_t mutex_; // Pthread mutex for POSIX platforms.
531536
};
@@ -604,7 +609,7 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
604609
TickSample sample;
605610

606611
// We always sample the VM state.
607-
sample.state = VMState::current_state();
612+
sample.state = Top::current_vm_state();
608613

609614
// If profiling, we extract the current pc and sp.
610615
if (active_sampler_->IsProfiling()) {

deps/v8/src/version.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#define MAJOR_VERSION 3
3636
#define MINOR_VERSION 1
3737
#define BUILD_NUMBER 8
38-
#define PATCH_LEVEL 5
38+
#define PATCH_LEVEL 8
3939
#define CANDIDATE_VERSION false
4040

4141
// Define SONAME to have the SCons build the put a specific SONAME into the

deps/v8/src/x64/code-stubs-x64.cc

+36
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,9 @@ void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
10531053
case TRBinaryOpIC::HEAP_NUMBER:
10541054
GenerateHeapNumberStub(masm);
10551055
break;
1056+
case TRBinaryOpIC::ODDBALL:
1057+
GenerateOddballStub(masm);
1058+
break;
10561059
case TRBinaryOpIC::STRING:
10571060
GenerateStringStub(masm);
10581061
break;
@@ -1428,6 +1431,39 @@ void TypeRecordingBinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
14281431
}
14291432

14301433

1434+
void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
1435+
Label call_runtime;
1436+
1437+
if (op_ == Token::ADD) {
1438+
// Handle string addition here, because it is the only operation
1439+
// that does not do a ToNumber conversion on the operands.
1440+
GenerateStringAddCode(masm);
1441+
}
1442+
1443+
// Convert oddball arguments to numbers.
1444+
NearLabel check, done;
1445+
__ CompareRoot(rdx, Heap::kUndefinedValueRootIndex);
1446+
__ j(not_equal, &check);
1447+
if (Token::IsBitOp(op_)) {
1448+
__ xor_(rdx, rdx);
1449+
} else {
1450+
__ LoadRoot(rdx, Heap::kNanValueRootIndex);
1451+
}
1452+
__ jmp(&done);
1453+
__ bind(&check);
1454+
__ CompareRoot(rax, Heap::kUndefinedValueRootIndex);
1455+
__ j(not_equal, &done);
1456+
if (Token::IsBitOp(op_)) {
1457+
__ xor_(rax, rax);
1458+
} else {
1459+
__ LoadRoot(rax, Heap::kNanValueRootIndex);
1460+
}
1461+
__ bind(&done);
1462+
1463+
GenerateHeapNumberStub(masm);
1464+
}
1465+
1466+
14311467
void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
14321468
Label gc_required, not_number;
14331469
GenerateFloatingPointCode(masm, &gc_required, &not_number);

deps/v8/src/x64/code-stubs-x64.h

+1
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ class TypeRecordingBinaryOpStub: public CodeStub {
289289
void GenerateSmiStub(MacroAssembler* masm);
290290
void GenerateInt32Stub(MacroAssembler* masm);
291291
void GenerateHeapNumberStub(MacroAssembler* masm);
292+
void GenerateOddballStub(MacroAssembler* masm);
292293
void GenerateStringStub(MacroAssembler* masm);
293294
void GenerateGenericStub(MacroAssembler* masm);
294295

0 commit comments

Comments
 (0)