hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
changeset 41323 ddd5600d4762
parent 40071 53e12df44b7b
child 41337 4493ad6de04d
equal deleted inserted replaced
41321:463ff7705f2f 41323:ddd5600d4762
   804     // Seems to be precise
   804     // Seems to be precise
   805     post_barrier(addr, val.result());
   805     post_barrier(addr, val.result());
   806   }
   806   }
   807 }
   807 }
   808 
   808 
       
   809 void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
       
   810   assert(x->number_of_arguments() == 3, "wrong type");
       
   811   assert(UseFMA, "Needs FMA instructions support.");
       
   812   LIRItem value(x->argument_at(0), this);
       
   813   LIRItem value1(x->argument_at(1), this);
       
   814   LIRItem value2(x->argument_at(2), this);
       
   815 
       
   816   value2.set_destroys_register();
       
   817 
       
   818   value.load_item();
       
   819   value1.load_item();
       
   820   value2.load_item();
       
   821 
       
   822   LIR_Opr calc_input = value.result();
       
   823   LIR_Opr calc_input1 = value1.result();
       
   824   LIR_Opr calc_input2 = value2.result();
       
   825   LIR_Opr calc_result = rlock_result(x);
       
   826 
       
   827   switch (x->id()) {
       
   828   case vmIntrinsics::_fmaD:   __ fmad(calc_input, calc_input1, calc_input2, calc_result); break;
       
   829   case vmIntrinsics::_fmaF:   __ fmaf(calc_input, calc_input1, calc_input2, calc_result); break;
       
   830   default:                    ShouldNotReachHere();
       
   831   }
       
   832 
       
   833 }
       
   834 
   809 
   835 
   810 void LIRGenerator::do_MathIntrinsic(Intrinsic* x) {
   836 void LIRGenerator::do_MathIntrinsic(Intrinsic* x) {
   811   assert(x->number_of_arguments() == 1 || (x->number_of_arguments() == 2 && x->id() == vmIntrinsics::_dpow), "wrong type");
   837   assert(x->number_of_arguments() == 1 || (x->number_of_arguments() == 2 && x->id() == vmIntrinsics::_dpow), "wrong type");
   812 
   838 
   813   if (x->id() == vmIntrinsics::_dexp || x->id() == vmIntrinsics::_dlog ||
   839   if (x->id() == vmIntrinsics::_dexp || x->id() == vmIntrinsics::_dlog ||