< prev index next >
src/cpu/ppc/vm/c1_LIRGenerator_ppc.cpp
Print this page
rev 12409 : 8171244: PPC64: Make interpreter's math entries consistent with C1 and C2 and support FMA
Reviewed-by: kvn, goetz
*** 1433,1443 ****
}
}
}
void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
! fatal("FMA intrinsic is not implemented on this platform");
}
void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
fatal("vectorizedMismatch intrinsic is not implemented on this platform");
}
--- 1433,1462 ----
}
}
}
void LIRGenerator::do_FmaIntrinsic(Intrinsic* x) {
! assert(x->number_of_arguments() == 3, "wrong type");
! assert(UseFMA, "Needs FMA instructions support.");
! LIRItem value(x->argument_at(0), this);
! LIRItem value1(x->argument_at(1), this);
! LIRItem value2(x->argument_at(2), this);
!
! value.load_item();
! value1.load_item();
! value2.load_item();
!
! LIR_Opr calc_input = value.result();
! LIR_Opr calc_input1 = value1.result();
! LIR_Opr calc_input2 = value2.result();
! LIR_Opr calc_result = rlock_result(x);
!
! switch (x->id()) {
! case vmIntrinsics::_fmaD: __ fmad(calc_input, calc_input1, calc_input2, calc_result); break;
! case vmIntrinsics::_fmaF: __ fmaf(calc_input, calc_input1, calc_input2, calc_result); break;
! default: ShouldNotReachHere();
! }
}
void LIRGenerator::do_vectorizedMismatch(Intrinsic* x) {
fatal("vectorizedMismatch intrinsic is not implemented on this platform");
}
< prev index next >