<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
xEQ should be EQ but I wasn't confident I wrote it correctly.<BR>
So the actual EQ computes three values, including xEQ, asserts they are all the same, and returns one of them.<BR>
Obviously a bit dumb, but I wasn't sure of myself and wanted something reasonably quickly so I could move on, and the obvious inefficiency wasn't/isn't a concern.<BR>
It should be fairly clear from the code.<BR>
 <BR>
 - Jay<BR> <BR>> From: hosking@cs.purdue.edu<BR>> Date: Wed, 10 Feb 2010 10:23:08 -0500<BR>> To: jkrell@elego.de<BR>> CC: m3commit@elegosoft.com<BR>> Subject: Re: [M3commit] CVS Update: cm3<BR>> <BR>> What does xEQ do exactly?<BR>> <BR>> PS You are stepping all over the work I have been doing to simplify TInt/TWord. So, be warned that your m3back code might break when I check things in.<BR>> <BR>> On 10 Feb 2010, at 14:46, Jay Krell wrote:<BR>> <BR>> > CVSROOT: /usr/cvs<BR>> > Changes by: jkrell@birch. 10/02/10 14:46:28<BR>> > <BR>> > Modified files:<BR>> > cm3/m3-sys/m3middle/src/: TWord.m3 <BR>> > <BR>> > Log message:<BR>> > Just remove the size check in Extract.<BR>> > It appears it will just naturally treat the value as zero extended, which<BR>> > is reasonable and allows the rest to work.<BR>> > <BR>> > This lets Tony's fix for initializing Longint work.<BR>> > To be reapplied shortly.<BR>> > <BR>> > Deobfuscate Mask and Base here as well, like in TInt.<BR>> > <BR>> > Cleanup my TWord.xEQ function (still could use further cleanup, clearly,<BR>> > once confidence is total)<BR>> > <BR>> > Index: src/TWord.m3<BR>> > ===================================================================<BR>> > RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/TWord.m3,v<BR>> > retrieving revision 1.10<BR>> > diff -u -r1.10 TWord.m3<BR>> > --- src/TWord.m3 8 Feb 2010 08:33:20 -0000 1.10<BR>> > +++ src/TWord.m3 10 Feb 2010 13:45:49 -0000<BR>> > @@ -16,8 +16,8 @@<BR>> > LShift = Word.LeftShift;<BR>> > <BR>> > CONST<BR>> > - Mask = RShift (Word.Not (0), Word.Size - BITSIZE (IByte));<BR>> > - Base = Mask + 1;<BR>> > + Mask = 16_FF;<BR>> > + Base = 16_100;<BR>> > <BR>> > (*------------------------------------------- unsigned integer operations ---*)<BR>> > <BR>> > @@ -278,8 +278,8 @@<BR>> > BEGIN<BR>> > <*ASSERT n # 0*><BR>> > FOR i := n-1 TO 0 BY -1 DO<BR>> > - IF a.x[i] # b.x[i] THEN RETURN FALSE;<BR>> > - ELSIF a.x[i] # b.x[i] THEN RETURN FALSE;<BR>> > + IF a.x[i] # b.x[i] THEN<BR>> > + RETURN FALSE;<BR>> > END;<BR>> > END;<BR>> > FOR i := n TO a.n-1 DO IF a.x[i] # 0 THEN RETURN FALSE END END;<BR>> > @@ -449,10 +449,7 @@<BR>> > <BR>> > PROCEDURE Extract (READONLY x: Int; i, n: CARDINAL; VAR r: Int): BOOLEAN =<BR>> > VAR w, b: INTEGER;<BR>> > - size := x.n * BITSIZE (IByte);<BR>> > BEGIN<BR>> > - IF i + n > size THEN RETURN FALSE; END;<BR>> > -<BR>> > RightShift (x, i, r);<BR>> > <BR>> > w := n DIV BITSIZE (IByte);<BR>> <BR>                                    </body>
</html>