| 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.