< prev index next >
src/cpu/ppc/vm/assembler_ppc.hpp
Print this page
rev 12409 : 8171244: PPC64: Make interpreter's math entries consistent with C1 and C2 and support FMA
Reviewed-by:
*** 458,477 ****
FCTIDZ_OPCODE = (63u << OPCODE_SHIFT | 815u << 1),
FCTIW_OPCODE = (63u << OPCODE_SHIFT | 14u << 1),
FCTIWZ_OPCODE = (63u << OPCODE_SHIFT | 15u << 1),
FRSP_OPCODE = (63u << OPCODE_SHIFT | 12u << 1),
! // WARNING: using fmadd results in a non-compliant vm. Some floating
! // point tck tests will fail.
! FMADD_OPCODE = (59u << OPCODE_SHIFT | 29u << 1),
! DMADD_OPCODE = (63u << OPCODE_SHIFT | 29u << 1),
! FMSUB_OPCODE = (59u << OPCODE_SHIFT | 28u << 1),
! DMSUB_OPCODE = (63u << OPCODE_SHIFT | 28u << 1),
! FNMADD_OPCODE = (59u << OPCODE_SHIFT | 31u << 1),
! DNMADD_OPCODE = (63u << OPCODE_SHIFT | 31u << 1),
! FNMSUB_OPCODE = (59u << OPCODE_SHIFT | 30u << 1),
! DNMSUB_OPCODE = (63u << OPCODE_SHIFT | 30u << 1),
LFD_OPCODE = (50u << OPCODE_SHIFT | 00u << 1),
LFDU_OPCODE = (51u << OPCODE_SHIFT | 00u << 1),
LFDX_OPCODE = (31u << OPCODE_SHIFT | 599u << 1),
LFS_OPCODE = (48u << OPCODE_SHIFT | 00u << 1),
--- 458,476 ----
FCTIDZ_OPCODE = (63u << OPCODE_SHIFT | 815u << 1),
FCTIW_OPCODE = (63u << OPCODE_SHIFT | 14u << 1),
FCTIWZ_OPCODE = (63u << OPCODE_SHIFT | 15u << 1),
FRSP_OPCODE = (63u << OPCODE_SHIFT | 12u << 1),
! // Fused multiply-accumulate instructions.
! FMADD_OPCODE = (63u << OPCODE_SHIFT | 29u << 1),
! FMADDS_OPCODE = (59u << OPCODE_SHIFT | 29u << 1),
! FMSUB_OPCODE = (63u << OPCODE_SHIFT | 28u << 1),
! FMSUBS_OPCODE = (59u << OPCODE_SHIFT | 28u << 1),
! FNMADD_OPCODE = (63u << OPCODE_SHIFT | 31u << 1),
! FNMADDS_OPCODE = (59u << OPCODE_SHIFT | 31u << 1),
! FNMSUB_OPCODE = (63u << OPCODE_SHIFT | 30u << 1),
! FNMSUBS_OPCODE = (59u << OPCODE_SHIFT | 30u << 1),
LFD_OPCODE = (50u << OPCODE_SHIFT | 00u << 1),
LFDU_OPCODE = (51u << OPCODE_SHIFT | 00u << 1),
LFDX_OPCODE = (31u << OPCODE_SHIFT | 599u << 1),
LFS_OPCODE = (48u << OPCODE_SHIFT | 00u << 1),
*** 1937,1946 ****
--- 1936,1965 ----
inline void fdiv( FloatRegister d, FloatRegister a, FloatRegister b);
inline void fdiv_( FloatRegister d, FloatRegister a, FloatRegister b);
inline void fdivs( FloatRegister d, FloatRegister a, FloatRegister b);
inline void fdivs_(FloatRegister d, FloatRegister a, FloatRegister b);
+ // Fused multiply-accumulate instructions.
+ // WARNING: Use only when rounding between the 2 parts is not desired.
+ // Some floating point tck tests will fail if used incorrectly.
+ inline void fmadd( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmadd_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmadds( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmadds_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmsub( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmsub_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmsubs( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fmsubs_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmadd( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmadd_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmadds( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmadds_(FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmsub( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmsub_( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmsubs( FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+ inline void fnmsubs_(FloatRegister d, FloatRegister a, FloatRegister c, FloatRegister b);
+
// PPC 1, section 4.6.6 Floating-Point Rounding and Conversion Instructions
inline void frsp( FloatRegister d, FloatRegister b);
inline void fctid( FloatRegister d, FloatRegister b);
inline void fctidz(FloatRegister d, FloatRegister b);
inline void fctiw( FloatRegister d, FloatRegister b);
< prev index next >