
3:116
Volume 3: Instruction Reference
fpms
fpms — Floating-point Parallel Multiply Subtract
Format:
(
qp
) fpms.
sf f
1
=
f
3
,
f
4
,
f
2
Description:
The pair of products of the pairs of single precision values in the significand fields of FR
f
3
and FR
f
4
are computed to infinite precision and then the pair of single precision
values in the significand field of FR
f
2
is subtracted from these products, again in infinite
precision. The resulting values are then rounded to single precision using the rounding
mode specified by FPSR.
sf
.
rc
. The pair of rounded results are stored in the significand
field of FR
f
1
. The exponent field of FR
f
1
is set to the biased exponent for 2.0
63
(0x1003E) and the sign field of FR
f
1
is set to positive (0).
Note:
If any of FR
f
3
, FR
f
4
, or FR
f
2
is a NaTVal, FR
f
1
is set to NaTVal instead of the
computed results.
Mapping:
If
f
2
is f0 in the fpms instruction, just the IEEE multiply operation is performed.
The mnemonic values for
sf
are given in
The encodings and interpretation for the status field’s
rc
are given in
Operation:
if (PR[
qp
]) {
fp_check_target_register(
f
1
);
if (tmp_isrcode = fp_reg_disabled(
f
1
,
f
2
,
f
3
,
f
4
))
disabled_fp_register_fault(tmp_isrcode, 0);
if (fp_is_natval(FR[
f
2
]) || fp_is_natval(FR[
f
3
]) ||
fp_is_natval(FR[
f
4
])) {
FR[
f
1
] = NATVAL;
fp_update_psr(
f
1
);
} else {
tmp_default_result_pair = fpms_fpnma_exception_fault_check(
f
2
,
f
3
,
f
4
,
sf,
&tmp_fp_env);
if (fp_raise_fault(tmp_fp_env))
fp_exception_fault(fp_decode_fault(tmp_fp_env));
if (fp_is_nan_or_inf(tmp_default_result_pair.hi)) {
tmp_res_hi = fp_single(tmp_default_result_pair.hi);
} else {
tmp_res = fp_mul(fp_reg_read_hi(
f
3
), fp_reg_read_hi(
f
4
));
if (
f
2
!= 0) {
tmp_sub = fp_reg_read_hi(
f
2
);
tmp_sub.sign = !tmp_sub.sign;
tmp_res = fp_add(tmp_res, tmp_sub, tmp_fp_env);
}
tmp_res_hi = fp_ieee_round_sp(tmp_res, HIGH, &tmp_fp_env);
}
if (fp_is_nan_or_inf(tmp_default_result_pair.lo)) {
tmp_res_lo = fp_single(tmp_default_result_pair.lo);
} else {
tmp_res = fp_mul(fp_reg_read_lo(
f
3
), fp_reg_read_lo(
f
4
));
if (
f
2
!= 0) {
tmp_sub = fp_reg_read_lo(
f
2
);
tmp_sub.sign = !tmp_sub.sign;
tmp_res = fp_add(tmp_res, tmp_sub, tmp_fp_env);
}
Summary of Contents for Itanium 9150M
Page 1: ......
Page 209: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault...
Page 405: ...3 396 Volume 3 Resource and Dependency Semantics...
Page 406: ...3 397 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index...
Page 407: ...3 398 Intel Itanium Architecture Software Developer s Manual Rev 2 3...
Page 419: ...INDEX Index 12 Index for Volumes 1 2 3 and 4...
Page 420: ......