xsmulqp
VSX Scalar Multiply Quad-Precision
Multiplies two quad-precision floating-point numbers and rounds the result to odd.
Details
The xsmulqp instruction multiplies two quad-precision floating-point numbers and rounds the result according to the specified rounding mode. If RO=0, the rounding mode is determined by FPSCR.RN; if RO=1, the rounding mode is Round to Odd.
Pseudocode Operation
if src1 is QNaN or SNaN then
v <- src1
vxsnan_flag <- 1
else if src2 is QNaN or SNaN then
v <- src2
vxsnan_flag <- 1
else if src1 is +Infinity and src2 is +Zero then
v <- +Infinity
vximz_flag <- 1
else if src1 is +Infinity and src2 is -Zero then
v <- -Infinity
vximz_flag <- 1
else if src1 is -Infinity and src2 is +Zero then
v <- -Infinity
vximz_flag <- 1
else if src1 is -Infinity and src2 is -Zero then
v <- +Infinity
vximz_flag <- 1
else if src1 is +Zero and src2 is +Infinity then
v <- +Infinity
vximz_flag <- 1
else if src1 is +Zero and src2 is -Infinity then
v <- -Infinity
vximz_flag <- 1
else if src1 is -Zero and src2 is +Infinity then
v <- -Infinity
vximz_flag <- 1
else if src1 is -Zero and src2 is -Infinity then
v <- +Infinity
vximz_flag <- 1
else
v <- mul(src1, src2)
end if
Programming Note
The xsmulqp instruction handles special cases like NaNs and infinities, setting flags accordingly. Ensure proper handling of these conditions to avoid unexpected results. The instruction operates at the VSX privilege level and may raise exceptions for invalid operations. Performance can vary based on input values and rounding modes.
Example
Encoding
Operands
-
vD
Target -
vA
Source A -
vB
Source B -
VRT
Target Vector Register -
VRA
Source Vector Register -
VRB
Source Vector Register