From c641b1eb813fb8fb8aaeca68b727e1550471f0b7 Mon Sep 17 00:00:00 2001 From: "cand@51b69dee28eeccfe0f04790433b843689895c6e3" Date: Thu, 10 Dec 2020 18:11:47 +0000 Subject: [PATCH] --- openpower/sv/av_opcodes.mdwn | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/openpower/sv/av_opcodes.mdwn b/openpower/sv/av_opcodes.mdwn index ba4b6145c..1cef144ca 100644 --- a/openpower/sv/av_opcodes.mdwn +++ b/openpower/sv/av_opcodes.mdwn @@ -80,39 +80,40 @@ with twin predication the elwidth can be overridden on both src and dest such th ## Float estimates -vec_expte - float 2^x -vec_loge - float log2(x) -vec_re - float 1/x -vec_rsqrte - float 1/sqrt(x) + vec_expte - float 2^x + vec_loge - float log2(x) + vec_re - float 1/x + vec_rsqrte - float 1/sqrt(x) The spec says the max relative inaccuracy is 1/4096. ## vec_madd(s) - FMA, multiply-add, optionally saturated -a * b + c + a * b + c ## vec_msum(s) - horizontal gather multiply-add, optionally saturated This should be separated to a horizontal multiply and a horizontal add. How a horizontal operation would work in SV is TBD, how wide is it, etc. -a.x + a.y + a.z ... -a.x * a.y * a.z ... + a.x + a.y + a.z ... + a.x * a.y * a.z ... ## vec_mul* There should be both a same-width multiply and a widening multiply. Signed and unsigned versions. Optionally saturated. -u8 * u8 = u8 -u8 * u8 = u16 + + u8 * u8 = u8 + u8 * u8 = u16 For 8,16,32,64, resulting in 8,16,32,64,128. ## vec_rl - rotate left -(a << x) | (a >> (WIDTH - x) + (a << x) | (a >> (WIDTH - x) ## vec_sel - bitwise select -(a ? b : c) + (a ? b : c) ## vec_splat - scatter -- 2.30.2