Line 50:
Line 50:
=== ps_abs ===
=== ps_abs ===
ps_abs frD, frB
ps_abs frD, frB
−
This instruction gets the absolute values of both paired-singles in '''frB''', and stores them in the paired-singles in '''frD'''.
+
+
frD(ps0) = abs(frB(ps0))
+
frD(ps1) = abs(frB(ps1))
+
=== ps_mr ===
=== ps_mr ===
ps_mr frD, frB
ps_mr frD, frB
−
This instruction moves both paired-singles in '''frB''' into the paired-singles in '''frD'''.
+
+
frD(ps0) = frB(ps0)
+
frD(ps1) = frB(ps1)
+
=== ps_nabs ===
=== ps_nabs ===
ps_nabs frD, frB
ps_nabs frD, frB
−
This instruction gets the negative absolute values of both paired-singles in '''frB''', and stores them in the paired-singles in '''frD'''.
+
+
frD(ps0) = -abs(frB(ps0))
+
frD(ps1) = -abs(frB(ps1))
+
=== ps_neg ===
=== ps_neg ===
ps_neg frD, frB
ps_neg frD, frB
−
This instruction negates the values of both paired-singles in '''frB''', and stores them in the paired-singles in '''frD'''.
+
+
frD(ps0) = -frB(ps0)
+
frD(ps1) = -frB(ps1)
+
=== ps_res ===
=== ps_res ===
ps_res frD, frB
ps_res frD, frB
−
This instruction gets an estimate of the reciprocals of both paired-singles in '''frB''' accurate to a precision of 1/4096, and stores them in the paired-singles in '''frD'''.
+
+
frD(ps0) = -1/frB(ps0)
+
frD(ps1) = -1/frB(ps1)
+
Accurate to a precision of 1/4096.
+
=== ps_rsqrte ===
=== ps_rsqrte ===
ps_rsqrte frD, frB
ps_rsqrte frD, frB
−
This instruction gets an estimate of the reciprocals of the square roots of both paired-singles in '''frB''' accurate to a precision of 1/4096, and stores them in the paired-singles in '''frD'''.
+
+
frD(ps0) = -1/sqrt(frB(ps0))
+
frD(ps1) = -1/sqrt(frB(ps1))
+
Accurate to a precision of 1/4096.
== Basic Math ==
== Basic Math ==
Line 71:
Line 90:
=== ps_add ===
=== ps_add ===
ps_add frD, frA, frB
ps_add frD, frA, frB
−
This instruction adds the paired-singles in '''frA''' to the ones in '''frB''', then stores the results in the paired-singles in '''frD'''.
+
+
frD(ps0) = frA(ps0) + frB(ps0)
+
frD(ps1) = frA(ps1) + frB(ps1)
+
=== ps_div ===
=== ps_div ===
ps_div frD, frA, frB
ps_div frD, frA, frB
−
This instruction divides the paired-singles in '''frA''' by the ones in '''frB''', then stores the results in the paired-singles in '''frD'''.
+
+
frD(ps0) = frA(ps0) / frB(ps0)
+
frD(ps1) = frA(ps1) / frB(ps1)
+
=== ps_mul ===
=== ps_mul ===
ps_mul frD, frA, frC
ps_mul frD, frA, frC
−
This instruction multiplies the paired-singles in '''frA''' by the ones in '''frC''', then stores the results in the paired-singles in '''frD'''.
+
+
frD(ps0) = frA(ps0) * frC(ps0)
+
frD(ps1) = frA(ps1) * frC(ps1)
+
=== ps_sub ===
=== ps_sub ===
ps_sub frD, frA, frB
ps_sub frD, frA, frB
−
This instruction subtracts the paired-singles in '''frB''' from the ones in '''frA''', then stores the results in the paired-singles in '''frD'''.
+
+
frD(ps0) = frA(ps0) - frB(ps0)
+
frD(ps1) = frA(ps1) - frB(ps1)
+
+
== Comparison ==
+
=== ps_cmpo0 ===
+
ps_cmpo0 crfD, frA, frB
+
ps_cmpu0 crfD, frA, frB
+
+
cfrD = frA(ps0) compare frB(ps0)
+
+
=== ps_cmpo1 ===
+
ps_cmpo1 crfD, frA, frB
+
ps_cmpu1 crfD, frA, frB
+
+
cfrD = frA(ps1) compare frB(ps1)
+
+
== Complex Multiply ==
+
These instructions multiply in complex ways
+
=== ps_madd ===
+
ps_madd frD, frA, frC, frB
+
+
frD(ps0) = frA(ps0) * frC(ps0) + frB(ps0)
+
frD(ps1) = frA(ps1) * frC(ps1) + frB(ps1)
+
+
=== ps_madds0 ===
+
ps_madds0 frD, frA, frC, frB
+
+
frD(ps0) = frA(ps0) * frC(ps0) + frB(ps0)
+
frD(ps1) = frA(ps1) * frC(ps0) + frB(ps1)
+
+
=== ps_madds1 ===
+
ps_madds1 frD, frA, frC, frB
+
+
frD(ps0) = frA(ps0) * frC(ps1) + frB(ps0)
+
frD(ps1) = frA(ps1) * frC(ps1) + frB(ps1)
+
+
=== ps_msub ===
+
ps_msub frD, frA, frC, frB
+
+
frD(ps0) = frA(ps0) * frC(ps0) - frB(ps0)
+
frD(ps1) = frA(ps1) * frC(ps1) - frB(ps1)
+
+
=== ps_muls0 ===
+
ps_muls0 frD, frA, frC
+
+
frD(ps0) = frA(ps0) * frC(ps0)
+
frD(ps1) = frA(ps1) * frC(ps0)
+
+
=== ps_muls1 ===
+
ps_muls1 frD, frA, frC
+
+
frD(ps0) = frA(ps0) * frC(ps1)
+
frD(ps1) = frA(ps1) * frC(ps1)
+
+
=== ps_nmadd ===
+
ps_nmadd frD, frA, frC, frB
+
+
frD(ps0) = -(frA(ps0) * frC(ps0) + frB(ps0))
+
frD(ps1) = -(frA(ps1) * frC(ps1) + frB(ps1))
+
+
=== ps_nmsub ===
+
ps_nmsub frD, frA, frC, frB
+
+
frD(ps0) = -(frA(ps0) * frC(ps0) - frB(ps0))
+
frD(ps1) = -(frA(ps1) * frC(ps1) - frB(ps1))