<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
You had changed TWord.Rotate() uses to assume Target.Integer.bytes.<BR>
 x: M3x86Rep.Operand; <BR>
 TWord.Rotate(x.imm, m, n) => TWord.Roate(x.imm, Target.Integer.bytes, m, n) <BR>
What probably would have worked is more like: <BR>
 TWord.Rotate(x.imm, m, n) => TWord.Rotate(x.imm, TypeSize(x.optype) * 4, m, n) <BR>
 <BR>
 <BR>
Most uses of TWord/TInt are ok with the new always 8 byte precision, but Rotate is special. <BR>
Precision affects the intermediate results. <BR>
 <BR>
 <BR>
That's the only possible problem that stood out to me on a quick read.<BR>
Whatever it all was though, the compiler no longer worked, basically not at all,<BR>
even if I removed the assertions about integers fitting in their claimed types.<BR>
I wasn't too keen on debugging that right now but I should before much longer.<BR>
I'd rather not keep a separate copy of TInt/TWord..<BR>
 <BR>
 <BR>
  - Jay<BR><BR> <BR>> From: hosking@cs.purdue.edu<BR>> Date: Thu, 18 Feb 2010 12:07:57 -0500<BR>> To: jay.krell@cornell.edu<BR>> CC: m3commit@elegosoft.com<BR>> Subject: Re: [M3commit] CVS Update: cm3<BR>> <BR>> I'm not sure what you mean about the type size... Please elaborate. Do you have a test case?<BR>> Yes, my intention here is that *no* client should presume anything about the actual precision of TInt/TWord. Indeed, we could make it larger, and should be able to without affecting clients. The only thing clients must do when manipulating Target.Int with TWord is to realise that the results are still interpreted in the TInt.Size space. To get a smaller interpretation they must explicitly use TInt.Chop to cut down to the desired number of bytes (and so sign-extend from that smaller size out to the TInt.Size). You will need to use Chop in places where you insert/extract/rotate/Xor (i.e., the sign needs extending in the result).<BR>> <BR>> On 18 Feb 2010, at 05:05, Jay K wrote:<BR>> <BR>> > Another problem now is that 64bit rotate of constants doesn't get the type size correct.<BR>> > Anyway I'm trying to get things back to working by bringing in the old code, only in m3back, and then can find the actual problems..<BR>> > I agree it is simpler now that TInt/TWord have a fixed precision of exactly 64 bits. Maybe make it even larger, say 72 bytes, a) to fix that warning a different way b) to sort of get better testing?<BR>> > <BR>> > - Jay<BR>> > <BR>> > <BR>> > From: jay.krell@cornell.edu<BR>> > To: jkrell@elego.de; m3commit@elegosoft.com<BR>> > Date: Thu, 18 Feb 2010 08:09:30 +0000<BR>> > Subject: Re: [M3commit] CVS Update: cm3<BR>> > <BR>> > Tony there are multiple related problems here.<BR>> > <BR>> > 1) The front end likes to output values between 128 and 256 with type Int8 instead of Word8.<BR>> > e.g. in InitTypecell.<BR>> > And maybe similar for 16/32/64, I don't know.<BR>> > <BR>> > 2) Even if the front end used the correct Word8 for them, m3back needs to use TWord.ToBytes vs. TInt.ToBytes for unsigned types, but TWord.ToBytes doesn't exist.<BR>> > <BR>> > I'll see what I can do.<BR>> > I'll probably add TWord.ToBytes and if the value fits using it, accept it.<BR>> > <BR>> > - Jay<BR>> > <BR>> > > Date: Thu, 18 Feb 2010 08:30:35 +0000<BR>> > > To: m3commit@elegosoft.com<BR>> > > From: jkrell@elego.de<BR>> > > Subject: [M3commit] CVS Update: cm3<BR>> > > <BR>> > > CVSROOT: /usr/cvs<BR>> > > Changes by: jkrell@birch. 10/02/18 08:30:35<BR>> > > <BR>> > > Modified files:<BR>> > > cm3/m3-sys/m3back/src/: M3x86.m3 <BR>> > > <BR>> > > Log message:<BR>> > > more information when this assertion fails, as it now does:<BR>> > > <BR>> > > == package C:\dev2\cm3.2\m3-libs\m3core ==<BR>> > > <BR>> > > +++ C:\cm3\bin\cm3.exe -build -DROOT=C:/dev2/cm3.2 -DCM3_VERSION_TEXT=d5.8.2<BR>> > > <BR>> > > new source -> compiling RTHooks.i3<BR>> > > "..\src\runtime\common\RTHooks.i3", line 15: len:2 t:Int.8 CG_Bytes[t]:1 158<BR>> > > <BR>> > > ***<BR>> > > *** runtime error:<BR>> > > *** <*ASSERT*> failed.<BR>> > > *** file "..\src\M3x86.m3", line 1114<BR>> > > ***<BR>> > > <BR>> > > Stack trace:<BR>> > > FP PC Procedure<BR>> > > --------- --------- -------------------------------<BR>> > > 0x12f5cc 0x43c230 init_int + 0x488 in ..\src\M3x86.m3<BR>> > > 0x12f5f8 0x63f506 init_int + 0xa5 in ..\src\M3CG_Check.m3<BR>> > > 0x12f638 0x4fe1ce Init_int + 0x1be in ..\src\misc\CG.m3<BR>> > > 0x12f65c 0x4fe33e DumpInt + 0x34 in ..\src\misc\CG.m3<BR>> > > 0x12f6a4 0x4fc86a DumpPendingNodes + 0x2c2 in ..\src\misc\CG.m3<BR>> > > 0x12f6cc 0x4fa4c6 Bind_segment + 0xe0 in ..\src\misc\CG.m3<BR>> > > 0x12f72c 0x4c71e8 GenLinkerInfo + 0x7d7 in ..\src\values\Module.m3<BR>> > > 0x12f770 0x4c577c CompileInterface + 0x30a in ..\src\values\Module.m3<BR>> > > 0x12f7a8 0x4c5252 Compile + 0x24d in ..\src\values\Module.m3<BR>> > > 0x12f804 0x4aff65 DoCompile + 0x7cd in ..\src\misc\M3Front.m3<BR>> > > <BR>> > > confusion here about signed vs. unsigned integers;<BR>> > > the signed number 158 requires 2 bytes but the unsigned number 158<BR>> > > only requirs 1 byte<BR>> > > <BR>> > <BR>> <BR>                                         </body>
</html>