<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi Eliot,<br>
    <br>
    This fixed that issue and then I ran into another issue doing a
    32-bit Cog/Spur build on Ubuntu 64-bit.<br>
    <br>
    <br>
    <blockquote>In file included from
/home/rabbit/warren/cogvm/platforms/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.c:30:0:<br>
      /home/rabbit/warren/cogvm/platforms/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.h:16:3:
      error: conflicting types for 'glRenderer'<br>
       } glRenderer;<br>
        <br>
    </blockquote>
    <br>
    <br>
    I looked into the file and see this, not sure if it is the issue,
    tho:<br>
    <br>
    <blockquote>#if !defined(GL_RENDERER_DEFINED)<br>
      typedef struct glRenderer {<br>
              GLint bufferRect[4];<br>
              GLint viewport[4];<br>
      } glRenderer;<br>
      #endif<br>
      struct glRenderer *glRendererFromHandle(int rendererHandle);</blockquote>
    <br>
    <br>
    - Robert<br>
    <br>
    <div class="moz-cite-prefix">On 12/12/2015 05:37 PM,
      <a class="moz-txt-link-abbreviated" href="mailto:commits@source.squeak.org">commits@source.squeak.org</a> wrote:<br>
    </div>
    <blockquote
cite="mid:566c5b83.685f8c0a.3703f.1c91SMTPIN_ADDED_MISSING@mx.google.com"
      type="cite">
      <pre wrap=""> 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
<a class="moz-txt-link-freetext" href="http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1581.mcz">http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1581.mcz</a>

==================== Summary ====================

Name: VMMaker.oscog-eem.1581
Author: eem
Time: 12 December 2015, 9:36:18.788 am
UUID: ceb64363-bb65-4efc-a5c9-ad90ef4fc645
Ancestors: VMMaker.oscog-eem.1580

Cogit: Fix regression from NoReg change.

=============== Diff against VMMaker.oscog-eem.1580 ===============

Item was changed:
  ----- Method: Cogit&gt;&gt;genEnilopmartFor:and:and:forCall:called: (in category 'initialization') -----
  genEnilopmartFor: regArg1 and: regArg2OrNone and: regArg3OrNone forCall: forCall called: trampolineName
          "An enilopmart (the reverse of a trampoline) is a piece of code that makes
           the system-call-like transition from the C runtime into generated machine
           code.  The desired arguments and entry-point are pushed on a stackPage's
           stack.  The enilopmart pops off the values to be loaded into registers and
           then executes a return instruction to pop off the entry-point and jump to it.
  
                                                  BEFORE                                AFTER                        (stacks grow down)
                                                  whatever                        stackPointer -&gt;        whatever
                                                  target address =&gt;        reg1 = reg1val, etc
                                                  reg1val                                pc = target address
                                                  reg2val
                  stackPointer -&gt;        reg3val"
  
          &lt;var: #trampolineName type: #'char *'&gt;
+         &lt;returnTypeC: #'void (*genEnilopmartForandandforCallcalled(sqInt regArg1, sqInt regArg2OrNone, sqInt regArg3OrNone, sqInt forCall, char *trampolineName))(void)'&gt;
-         &lt;returnTypeC: #'void (*genEnilopmartForandandforCallcalled(sqInt regArg1, sqInt regArg2, sqInt regArg3, sqInt forCall, char *trampolineName))(void)'&gt;
  
          | size endAddress enilopmart |
          self zeroOpcodeIndex.
          backEnd maybeEstablishVarBase. "Must happen first; value may be used in genLoadStackPointers"
          backEnd genLoadStackPointers.
          regArg3OrNone ~= NoReg ifTrue: [self PopR: regArg3OrNone].
          regArg2OrNone ~= NoReg ifTrue: [self PopR: regArg2OrNone].
          self PopR: regArg1.
          self genEnilopmartReturn: forCall.
          self computeMaximumSizes.
          size := self generateInstructionsAt: methodZoneBase.
          endAddress := self outputInstructionsAt: methodZoneBase.
          self assert: methodZoneBase + size = endAddress.
          enilopmart := methodZoneBase.
          methodZoneBase := self alignUptoRoutineBoundary: endAddress.
          backEnd stopsFrom: endAddress to: methodZoneBase - 1.
          self recordGeneratedRunTime: trampolineName address: enilopmart.
          ^self cCoerceSimple: enilopmart to: #'void (*)(void)'!

</pre>
    </blockquote>
    <br>
  </body>
</html>