Author: [EMAIL PROTECTED] Date: Mon Nov 3 07:21:46 2008 New Revision: 680
Modified: branches/bleeding_edge/src/codegen-arm.cc Log: Smi ranges are not symmetrical. -kMinSmiValue is not a Smi. Review URL: http://codereview.chromium.org/9041 Modified: branches/bleeding_edge/src/codegen-arm.cc ============================================================================== --- branches/bleeding_edge/src/codegen-arm.cc (original) +++ branches/bleeding_edge/src/codegen-arm.cc Mon Nov 3 07:21:46 2008 @@ -1261,9 +1261,15 @@ __ bind(&is_smi); if (min_index != 0) { - // small positive numbers can be immediate operands. + // Small positive numbers can be immediate operands. if (min_index < 0) { - __ add(r0, r0, Operand(Smi::FromInt(-min_index))); + // If min_index is Smi::kMinValue, -min_index is not a Smi. + if (Smi::IsValid(-min_index)) { + __ add(r0, r0, Operand(Smi::FromInt(-min_index))); + } else { + __ add(r0, r0, Operand(Smi::FromInt(-min_index - 1))); + __ add(r0, r0, Operand(Smi::FromInt(1))); + } } else { __ sub(r0, r0, Operand(Smi::FromInt(min_index))); } @@ -1277,7 +1283,7 @@ // the pc-register at the above add. __ stop("Unreachable: Switch table alignment"); - // table containing branch operations. + // Table containing branch operations. for (int i = 0; i < range; i++) { __ b(case_targets[i]); } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---