| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index b1c9a17554e02d3f93bb65b5021f0d5622f270fc..c5d1d972a659568691701ec73d803e15febffa8b 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -293,7 +293,30 @@ bool LCodeGen::GenerateBody() {
|
| }
|
|
|
| if (emit_instructions) {
|
| - Comment(";;; @%d: %s.", current_instruction_, instr->Mnemonic());
|
| + if (FLAG_code_comments) {
|
| + HValue* hydrogen = instr->hydrogen_value();
|
| + if (hydrogen != NULL) {
|
| + if (hydrogen->IsChange()) {
|
| + HValue* changed_value = HChange::cast(hydrogen)->value();
|
| + int use_id = 0;
|
| + const char* use_mnemo = "dead";
|
| + if (hydrogen->UseCount() >= 1) {
|
| + HValue* use_value = hydrogen->uses().value();
|
| + use_id = use_value->id();
|
| + use_mnemo = use_value->Mnemonic();
|
| + }
|
| + Comment(";;; @%d: %s. <of #%d %s for #%d %s>",
|
| + current_instruction_, instr->Mnemonic(),
|
| + changed_value->id(), changed_value->Mnemonic(),
|
| + use_id, use_mnemo);
|
| + } else {
|
| + Comment(";;; @%d: %s. <#%d>", current_instruction_,
|
| + instr->Mnemonic(), hydrogen->id());
|
| + }
|
| + } else {
|
| + Comment(";;; @%d: %s.", current_instruction_, instr->Mnemonic());
|
| + }
|
| + }
|
| instr->CompileToNative(this);
|
| }
|
| }
|
| @@ -4387,6 +4410,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
| // Check for undefined. Undefined is converted to zero for truncating
|
| // conversions.
|
| __ cmp(input_reg, factory()->undefined_value());
|
| + __ RecordComment("Deferred TaggedToI: cannot truncate");
|
| DeoptimizeIf(not_equal, instr->environment());
|
| __ mov(input_reg, 0);
|
| __ jmp(&done, Label::kNear);
|
| @@ -4407,6 +4431,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
| __ j(less, &convert, Label::kNear);
|
| // Pop FPU stack before deoptimizing.
|
| __ fstp(0);
|
| + __ RecordComment("Deferred TaggedToI: exponent too big");
|
| DeoptimizeIf(no_condition, instr->environment());
|
|
|
| // Reserve space for 64 bit answer.
|
| @@ -4432,6 +4457,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
| }
|
| } else {
|
| // Deoptimize if we don't have a heap number.
|
| + __ RecordComment("Deferred TaggedToI: not a heap number");
|
| DeoptimizeIf(not_equal, instr->environment());
|
|
|
| XMMRegister xmm_temp = ToDoubleRegister(instr->temp());
|
| @@ -4439,13 +4465,16 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
| __ cvttsd2si(input_reg, Operand(xmm0));
|
| __ cvtsi2sd(xmm_temp, Operand(input_reg));
|
| __ ucomisd(xmm0, xmm_temp);
|
| + __ RecordComment("Deferred TaggedToI: lost precision");
|
| DeoptimizeIf(not_equal, instr->environment());
|
| + __ RecordComment("Deferred TaggedToI: NaN");
|
| DeoptimizeIf(parity_even, instr->environment()); // NaN.
|
| if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) {
|
| __ test(input_reg, Operand(input_reg));
|
| __ j(not_zero, &done);
|
| __ movmskpd(input_reg, xmm0);
|
| __ and_(input_reg, 1);
|
| + __ RecordComment("Deferred TaggedToI: minus zero");
|
| DeoptimizeIf(not_zero, instr->environment());
|
| }
|
| }
|
|
|