<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Why? You do realize, though it doesn't really matter, that the function cannot be implemented in Modula-3, or C, and isn't implemented on most platforms. It is only implemented on NT, in assembly.<BR>
Maybe RTHooks is the holder for most function calls from generated code?<BR>
The interface between any library and m3front?<BR>
No matter how and if they are implemented?<BR>
 <BR>
(it could perhaps be implemented in C, void* m3_alloca(size_t n) { return alloca(n); } but I have a "problem" with that, not sure it is a real problem or not, that it strongly resembles returning the address of a local, and if tools had enough visibility into our code, they would flag it as a bug and/or misoptimize it.)<BR>
 <BR>
As well, this still requires the backend to recognize and special-case the function.<BR>
As well, it seems like atomics could fit the same model. Why are they in m3cg?<BR>
 <BR>
I'm trying not to insist on anything in particular, but I'd like to understand why the different options.<BR>
m3cg offers the most direct, easily implemented, easily optimized, special-case free approach, though it makes m3cg "wider" and m3cg is kind of scary and large. But making special-case functions is just a way to hide the interface widening..in a way that is easier to remove or omit per-target if applicable perhaps..<BR>
 <BR>
 <BR>
 - Jay<BR> <BR>

<HR id=stopSpelling>
From: hosking@cs.purdue.edu<BR>Date: Tue, 1 Feb 2011 15:01:44 -0500<BR>To: jay.krell@cornell.edu<BR>CC: m3devel@elegosoft.com<BR>Subject: Re: [M3devel] link failure on NT386<BR><BR>
<DIV>RTHooks makes most sense. <BR><BR>Sent from my iPhone</DIV>
<DIV><BR>On Feb 1, 2011, at 2:20 PM, Jay K <<A href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</A>> wrote:<BR><BR></DIV>
<DIV></DIV>
<BLOCKQUOTE>
<DIV>Modeling something as a function in m3cg does not necessarily correlate to generating a function call.<BR>E.g. the existing m3_alloca.<BR>And vice versa. e.g some of the set operations.<BR>Almost anything can be modeled as a function call in m3cg, but not end up generating one.<BR>Many things can be not modeled as a function call, but end up generating one.<BR>gcc has a huge number of "builtin functions". So does Visual C++.<BR>In Visual C++, basically any "new instruction" (mmx, sse2/3/4, avx) ends up modeled<BR>as a function, but generates roughly one instruction per function calls.<BR>It's a slightly high level assembly -- i.e. you get to chose the important algorithmic instructions,<BR>the compiler does register allocation, stack/local allocation, etc.<BR><BR>I can add it -- surely my diff from a few weeks ago wasn't terrible?<BR><BR>I'm ok either way.<BR>I'm more curious to understand than to "do". I admit.<BR><BR> - Jay<BR><BR>
<HR id=ecxstopSpelling>
CC: <A href="mailto:m3devel@elegosoft.com"><A href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</A></A><BR>From: <A href="mailto:hosking@cs.purdue.edu"><A href="mailto:hosking@cs.purdue.edu">hosking@cs.purdue.edu</A></A><BR>Subject: Re: [M3devel] link failure on NT386<BR>Date: Tue, 1 Feb 2011 09:46:22 -0500<BR>To: <A href="mailto:jay.krell@cornell.edu"><A href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</A></A><BR><BR>
<DIV>The atomics are not necessarily functions.   They approximate real instructions generated inline.</DIV>
<DIV>Shall I just go ahead and add it?<BR><BR>Sent from my iPad</DIV>
<DIV><BR>On 01/02/2011, at 2:12 AM, Jay K <<A href="mailto:jay.krell@cornell.edu"><A href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</A></A>> wrote:<BR><BR></DIV>
<DIV></DIV>
<BLOCKQUOTE>
<DIV>Interesting. Me playing honestly dumb: how do you decide among runtime hooks vs. "special" functions recognized by the backend?<BR>In either case, the best reason I think for an m3cg hook is that the calling convention is unusual.<BR>Why are the atomics in m3cg?<BR>I grant, a possible reason: in the atomics case, the transform from "regular function" to "special function" might be more significant.<BR>alloca is simpler just by virtue of it only taking one parameter.<BR><BR>Why aren't and/or/xor/add runtime hooks, or special functions?<BR>Or the set operations?<BR><BR>I'm very willing to accept the answer that I suspect is the truth: there isn't a cut and dry reason, and many approaches lead to almost identical results.<BR><BR>And that there may be a desire to in general avoid growing m3cg.<BR>esp. to speed up a case that is very slow for other reasons and that we'd like to speed up in a way that would remove the need for the m3cg hook.<BR><BR>I'm also wishy washy. I can see it is easy to implement easily any way.<BR>I'm just overly bothered when I see obvious easy to fix inefficiency, even it is just a micro-optimization.<BR><BR><BR>At some point, I realize, you can model just about everything as function calls, except, calling functions. :)<BR><BR>I think runtime hooks are somewhat preferred for stuff implemented in Modula-3.<BR>Since anything implemented in Modula-3 and exposed must be in some interface.<BR>However runtime hooks can be implemented in C as well.<BR>It depends somewhat if they are only called by generated code or also hand written Modula-3.<BR>You know, if it is just implemented in C, and only called from generated code, there isn't a strict interface/module system,<BR>there is just relying on m3front and m3core agreeing.<BR><BR><BR> - Jay<BR><BR><BR>
<HR id=ecxstopSpelling>
From: <A href="mailto:hosking@cs.purdue.edu"></A><A href="mailto:hosking@cs.purdue.edu"><A href="mailto:hosking@cs.purdue.edu">hosking@cs.purdue.edu</A></A><BR>Date: Mon, 31 Jan 2011 22:39:36 -0500<BR>To: <A href="mailto:jay.krell@cornell.edu"></A><A href="mailto:jay.krell@cornell.edu"><A href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</A></A><BR>CC: <A href="mailto:m3devel@elegosoft.com"></A><A href="mailto:m3devel@elegosoft.com"><A href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</A></A><BR>Subject: Re: [M3devel] link failure on NT386<BR><BR>Why can't we just have a run-time hook that resolves differently on different targets?
<DIV>Take a look at m3front/src/misc/Runtyme and m3core/src/runtime/RTHooks.</DIV>
<DIV>
<DIV><BR>
<DIV>
<DIV>On Jan 31, 2011, at 7:53 PM, Jay K wrote:</DIV><BR class=ecxApple-interchange-newline>
<BLOCKQUOTE><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; WORD-SPACING: 0px" class=ecxApple-style-span>
<DIV style="FONT-FAMILY: Tahoma; FONT-SIZE: 10pt" class=ecxhmmessage>Oops, I was just wondering to self if I had fixed that.<BR>I can get to it fairly soon.<BR>We "just" have to translate m3_alloca to _chkstk..and fiddle with the calling<BR>convention (which imho is a good reason to<BR>make it a separate m3cg call...)<BR>(The input parameter is in eax, and the output is in esp.)<BR>(Tony, you really don't want a separate m3cg call?)<BR> <BR> <BR> - Jay<BR> <BR>
<HR id=ecxstopSpelling>
From:<SPAN class=ecxApple-converted-space> </SPAN><A href="mailto:rcolebur@SCIRES.COM"></A><A href="mailto:rcolebur@SCIRES.COM"><A href="mailto:rcolebur@SCIRES.COM">rcolebur@SCIRES.COM</A></A><BR>To:<SPAN class=ecxApple-converted-space> </SPAN><A href="mailto:m3devel@elegosoft.com"></A><A href="mailto:m3devel@elegosoft.com"><A href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</A></A><BR>Date: Mon, 31 Jan 2011 19:48:21 -0500<BR>Subject: [M3devel] link failure on NT386<BR><BR>
<DIV class=ecxWordSection1>
<DIV style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 0px">Jay:  I note the HEAD branch is still broken for builds on NT386 due to the linker problem with unresolved symbol we talked about earlier.</DIV>
<DIV style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 0px">Do you have a plan to fix?</DIV>
<DIV style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 0px">Anything I can do to help?</DIV>
<DIV style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 0px">--Randy Coleburn</DIV></DIV></DIV></SPAN></BLOCKQUOTE></DIV><BR></DIV></DIV></DIV></BLOCKQUOTE></DIV></BLOCKQUOTE>                                       </body>
</html>