src/share/vm/c1/c1_LIR.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/c1/c1_LIR.cpp	Tue Aug 25 15:22:48 2009
--- new/src/share/vm/c1/c1_LIR.cpp	Tue Aug 25 15:22:48 2009

*** 565,576 **** --- 565,574 ---- case lir_mul: case lir_div: case lir_rem: case lir_sqrt: case lir_abs: case lir_log: case lir_log10: case lir_logic_and: case lir_logic_or: case lir_logic_xor: case lir_shl: case lir_shr:
*** 642,658 **** --- 640,659 ---- } case lir_tan: case lir_sin: - case lir_cos: { + case lir_log: + case lir_log10: { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; // sin and cos need two temporary fpu stack slots, so register // two temp operands. Register input operand as temp to // guarantee that they do not overlap + // On x86 tan/sin/cos need two temporary fpu stack slots and + // log/log10 need one so handle opr2 and tmp as temp inputs. + // Register input operand as temp to guarantee that it doesn't + // overlap with the input. assert(op2->_info == NULL, "not used"); assert(op2->_opr1->is_valid(), "used"); do_input(op2->_opr1); do_temp(op2->_opr1); if (op2->_opr2->is_valid()) do_temp(op2->_opr2);

src/share/vm/c1/c1_LIR.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File