Deutsch   English   Français   Italiano  
<4437f472f21a302eadee66fcd1998d8f@www.novabbs.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: mitchalsup@aol.com (MitchAlsup1)
Newsgroups: comp.arch
Subject: Re: Cost of handling misaligned access
Date: Tue, 18 Feb 2025 23:31:49 +0000
Organization: Rocksolid Light
Message-ID: <4437f472f21a302eadee66fcd1998d8f@www.novabbs.org>
References: <5lNnP.1313925$2xE6.991023@fx18.iad> <vnosj6$t5o0$1@dont-email.me> <2025Feb3.075550@mips.complang.tuwien.ac.at> <volg1m$31ca1$1@dont-email.me> <voobnc$3l2dl$1@dont-email.me> <0fc4cc997441e25330ff5c8735247b54@www.novabbs.org> <vp0m3f$1cth6$1@dont-email.me> <74142fbdc017bc560d75541f3f3c5118@www.novabbs.org> <20250218150739.0000192a@yahoo.com> <vp31uk$1tg85$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Info: i2pn2.org;
	logging-data="697354"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="o5SwNDfMfYu6Mv4wwLiW6e/jbA93UAdzFodw5PEa6eU";
User-Agent: Rocksolid Light
X-Rslight-Site: $2y$10$oqzQoVDvZP1RZ9ROdKmNaedyPzcSx5.GfA/LYLsoZYsCcpouivLSS
X-Rslight-Posting-User: cb29269328a20fe5719ed6a1c397e21f651bda71
X-Spam-Checker-Version: SpamAssassin 4.0.0
Bytes: 2733
Lines: 48

On Tue, 18 Feb 2025 22:34:48 +0000, BGB wrote:


> Say, one could imagine an abstract model where Binary64 FADD works sort
> of like:
>    sgnA=valA>>63;
>    sgnB=valA>>63;
>    expA=(valA>>52)&2047;
>    expB=(valB>>52)&2047;
>    fraA=(valA&((1ULL<<52)-1));
>    fraB=(valB&((1ULL<<52)-1));
>    if(expA!=0)fraA|=1ULL<<52;
>    if(expB!=0)fraB|=1ULL<<52;
>    fraA=fraA<<9;  //9 sub ULP bits
>    fraB=fraB<<9;
>    shrA=(expB>=expA)?(expB-expA):0;
>    shrB=(expA>=expB)?(expA-expA):0;
                        expA-expB
>    sgn2A=sgnA; exp2A=expA; fra2A=fraA>>shrA;
>    sgn2B=sgnB; exp2B=expB; fra2B=fraB>>shrB;
>    //logical clock-edge here.
>    fr1C_A=fra2A+fra2B;
>    fr1C_B=fra2A-fra2B;
>    fr1C_C=fra2B-fra2A;
>    if(sgn2A^sgn2B)
>    {
>      if(fr1C_C>>63)
>        { sgn1C=sgn2A; fra1C=fr1C_B; }
>      else
>        { sgn1C=sgn2B; fra1C=fr1C_C; }
>    }
>    else
>      { sgn1C=!sgn2A; fra1C=fr1C_A; }
>    //logical clock-edge here.
>    if(fra2C>>62)
>      { exp3C=exp2C+1; fra3C=fra2C>>1; }
>    else
>      { shl=clz64(fra2C)-2; exp3C=exp2C-shl; fra3C=fra2C<<shl; }
>    //logical clock-edge here.
>    if((exp3C>=2047) || (exp3C<=0))
>      { sgnC=sgn2C; expC=(exp3C<=0)?0:2047; fraC=0; }
>    else
>    {
>      sgnC=sgn2C; expC=exp3C; fraC=fra3C>>9;
>      //if rounding is done, it goes here.
>    }
>    valC=(sgnC<<63)|(expC<<52)|fraC;
>    //final clock edge.
>    //result is now ready.