[M3commit] [modula3/cm3] 0a1cad: Fix two problems found by m3-libs/m3core/src/floa...

GitHub noreply at github.com
Tue Jul 26 09:34:21 CEST 2016

  Branch: refs/heads/master
  Home:   https://github.com/modula3/cm3
  Commit: 0a1cadc9ebc6ec223d58582ace43408e7a51c49c
  Author: Jay Krell <jay.krell at cornell.edu>
  Date:   2016-07-26 (Tue, 26 Jul 2016)

  Changed paths:
    M m3-sys/m3back/src/M3x86.m3
    M m3-sys/m3back/src/Stackx86.m3

  Log Message:
   Fix two problems found by m3-libs/m3core/src/float/Common/grisu/Grisu.m3:
   VAR a,b: LONGINT;
  F(a * b);

 Generates an internal/helper function call while
 generating another call.

 Previously we could only build up one parameter list a at a time.

 Constructs like:
   VAR: a,b,c,d: INTEGER:
    F(G(a*b), c*d);

 get unwrapped by the frontend into:
  temp1 := G(a*b);
  temp2 := F(temp1, c*d);

 But NOT:
  temp1 := a*b:
  temp2 := G(temp1);
  temp3 := c*d;
  temp4 := F(temp2, temp3);

 which would be nice and also address that.

 Fix the NT386 backend to maintain a stack of calls being built
 to handle that.

 2. LOOPHOLEing to a floating point type asserted
   that it was to Type.Reel.

  This made good historical sense when the internal
  stack was of single words. It became insufficient
  when the stack was optionally widended to double words
  for LONGINT. So now assert just that the size
  isn't changing when converting between floats and non-floats
  (non-float is typicall integer, but could be pointer).

There is still unsolved:

new opaque info -> recompiling StubGenTool.m3
 -> linking shobjcodegen.exe

*** runtime error:
***    <*ASSERT*> failed.
***    file "..\src\float\Common\grisu\IEEE.m3", line 155

 seconds  #times  operation
Stack trace:
   FP         PC      Procedure
---------  ---------  -------------------------------
 0x1ef540  0x14f52cd  AsNormalizedGFP_D + 0x4b in ..\src\float\Common\grisu\IEEE
 0x1ef5bc  0x14e718f  Grisu3 + 0xa7 in ..\src\float\Common\grisu\Grisu.m3
 0x1ef608  0x14e7810  FastDtoa + 0xf9 in ..\src\float\Common\grisu\Grisu.m3
 0x1ef698  0x14d43fa  ToDecimal + 0x114 in ..\src\float\IEEE\LongFloat.m3
 0x1ef708  0x147cc29  LongReal + 0x42 in ..\src\fmtlex\Fmt.m3
 0x1ef730  0x147f94d  FmtTime + 0x27 in ..\src\etimer\ETimer.m3
 0x1ef7a8  0x147f6c5  Dump + 0x242 in ..\src\etimer\ETimer.m3
 0x1ef7c4  0x1444fb2  Stop + 0xa6 in ..\src\M3Timers.m3
 0x1ef858  0x1214de0  CleanUp + 0x137 in ..\src\Main.m3
 0x1ef874  0x14ae0a0  InvokeExitors + 0x46 in ..\src\runtime\common\RTProcess.m3

.........  .........  ... more frames ...

 - Jay

More information about the M3commit mailing list