<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Kang Su's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/kangsu/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/kangsu/feed.xml</link>
    <description>We make things faster...</description>
    <lastBuildDate>Wed, 17 Apr 2019 04:03:27 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>From Phoenix to Media Center...</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/from-phoenix-to-media-center</link>
      <pubDate>Sat, 23 Feb 2008 16:49:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2008/02/23/from-phoenix-to-media-center/</guid>
      <description><![CDATA[After nearly six years working on Visual C++ and Phoenix, I will be taking on a new job at Microsoft...]]></description>
      <content:encoded><![CDATA[<P>After nearly six years working on Visual C++ and Phoenix, I will be taking on a new job at Microsoft on the eHome team.&nbsp; I'm going to be working on the Media Center TV product to help bring the future of TV to you.&nbsp; </P>
<P>It's been a pleasure talking with developers here, on MSDN forums, at conferences, and via email.&nbsp;&nbsp;But my departure doesn't mean that you won't hear from me -- some of you also must watch TV, so I hope to continue having conversations with some of you over there.&nbsp; It may not be in this particular blog, but I don't think it will be hard to find me...</P>
<P>Lastly, I hope you're enjoying Visual Studio 2008.&nbsp; It's a great release.&nbsp; And this division will continue to delight you in future releases -- even if I'm not actively working on them&nbsp; :-)</P>]]></content:encoded>
    </item>
    <item>
      <title>What Do You Want More Information About (with respect to Phoenix)?</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/what-do-you-want-more-information-about-with-respect-to-phoenix</link>
      <pubDate>Mon, 21 Jan 2008 17:53:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2008/01/21/what-do-you-want-more-information-about-with-respect-to-phoenix/</guid>
      <description><![CDATA[As you can probably imagine, we are still hard at work on Phoenix (yes, a new version of the SDK is...]]></description>
      <content:encoded><![CDATA[<P>As you can probably imagine, we are still hard at work on Phoenix (yes, a new version of the SDK is coming, although I don't have a date yet). One of the things that I'm very interested in is what would YOU like to see in the samples and documentation sections.&nbsp; We want to make sure that we give you the best bang for the buck.</P>
<P>So please, leave a comment (or email) letting me know what code samples and/or documentation you'd like to see.&nbsp; We'll do our best to make it happen either for this upcoming SDK or some future version of the SDK -- or maybe even this blog.</P>]]></content:encoded>
    </item>
    <item>
      <title>What do c2 Phases do?</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/what-do-c2-phases-do</link>
      <pubDate>Mon, 22 Oct 2007 18:45:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/10/22/what-do-c2-phases-do/</guid>
      <description><![CDATA[On the Forums, someone asked the good question of "What do the C2 phases actually do?"&nbsp; Andy...]]></description>
      <content:encoded><![CDATA[<P>On the Forums, someone asked the good question of "What do the C2 phases actually do?"&nbsp; Andy got some info from our documentation team about the phases, so I thought I'd also add them here.&nbsp; Expect this info in future version of the SDK:</P>
<P mce_keep="true">&nbsp;</P>
<P>
<TABLE class=TablewithHeader style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1 class="TablewithHeader">
<TBODY>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: silver 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Phase</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: silver 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Phase Action</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana color=#000000><SPAN class=LinkText>CxxIL Reader</SPAN></FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Converts CxxIL to Phoenix IR.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Warnings Analysis Detection Phase</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Detects and emits back-end warnings (C4700, C4701, and so on).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Add CallGraph Call Site Information</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Modifies call graph (if present) to refer to specific call sites within the function.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Inliner</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Inlines functions.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Type Checker</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Verifies that IR is correctly typed.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Flow Optimization</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Streamlines control flow (for example, eliminates jumps to jumps).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>MIR Lower</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Lowers object model instructions.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Loop recognition and loop transformations</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Performs basic loop restructuring.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Global optimization</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Performs optimizations such as constant propagation, global value numbering, constant subexpression elimination, and dead code elimination.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Loop optimizations</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><A><FONT face=Verdana size=2>Recognizes induction variables for strength reduction and loop-invariant code motion</FONT></A><FONT size=2><FONT face=Verdana>.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>GS Shadow Copying</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Implements the /GS option (stack security).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>GS Security Cookie Allocation</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Implements the /GS option (stack security).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>X86 scalar Sse</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Prepares the compiler to use SSE floating point instead of x87 floating point.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Canonicalize</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Transforms IR to canonical form in preparation for lowering.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>ShiftExpansion Strength Reduction</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Transform multiplications and divisions by constants into shifts and additions.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Address Mode Builder</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Transforms HIR/MIR to take advantage of target architecture's built-in addressing modes.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Lower</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Lowers most instructions to machine level.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>SSA-based idioms optimization phase</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Performs classic "peephole" optimizations.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Priority Order Register Allocation</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Assigns registers to operands.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>X87 Stack Allocation</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Allocates the x87 stack.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>GS Security Cookie Initialization and Check</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Implements the /GS option (stack security).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Native EH Lower</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Expresses exception handling the way that the run-time convention expects.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Stack Packer</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Assigns stack locations to operands.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Frame Generation</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Determines shape of stack frame for the function.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Switch Lower</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Lowers switch instructions.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Dead Stores</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Removes dead stores (that is, stores that are guaranteed not to be read).</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Block Layout</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Places IR in final order.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Flow Optimization</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Removes jump-to-jump and jump-to-next instructions.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Finish EH Lower</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Finishes the process begun by Native EH Lower.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Encoding</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Produces machine encoding for IR, and debug information.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Emission</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Puts encoded IR into the object file.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Emit Referenced Symbols</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Verifies the references made from the encoded IR to ensure that the compiler emits a fully closed set of functions and data.</FONT></FONT></P></TD></TR>
<TR>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: silver 1pt solid; WIDTH: 184.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=245>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Assembly Listing</FONT></FONT></P></TD>
<TD class="" style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 258.75pt; PADDING-TOP: 0in; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=345>
<P class=MsoNormal style="MARGIN: 3pt 0in"><FONT size=2><FONT face=Verdana>Produces the .asm listing file.</FONT></FONT></P></TD></TR></TBODY></TABLE></P>]]></content:encoded>
    </item>
    <item>
      <title>Finding the Base Class of a Function with Phoenix</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/finding-the-base-class-of-a-function-with-phoenix</link>
      <pubDate>Mon, 08 Oct 2007 18:20:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/10/08/finding-the-base-class-of-a-function-with-phoenix/</guid>
      <description><![CDATA[This came up on an internal alias today, so I thought I would post the solution.
&nbsp;The issue is...]]></description>
      <content:encoded><![CDATA[<P>This came up on an internal alias today, so I thought I would post the solution.</P>
<P>&nbsp;The issue is when there is some code like the following:</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">class</SPAN> <SPAN style="COLOR: #2b91af">BaseClass<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; {<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; }<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">class</SPAN> <SPAN style="COLOR: #2b91af">InheritedClass</SPAN> : <SPAN style="COLOR: #2b91af">BaseClass<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; {<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">void</SPAN> SomeFunction() { }<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; }<o:p></o:p></SPAN></P>
<P>And you have a pointer to the SomeFunction function unit, how do you find out the&nbsp;associated base class of that function (in this case it is BaseClass).</P>
<P>The answer is:&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="COLOR: #1f497d"><FONT size=3><FONT face=Calibri>functionSymbol.EnclosingAggregateType.PrimaryBaseAggregateType<o:p></o:p></FONT></FONT></SPAN></P>]]></content:encoded>
    </item>
    <item>
      <title>volatile, acquire/release, memory fences, and VC2005</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/volatile-acquirerelease-memory-fences-and-vc2005</link>
      <pubDate>Mon, 16 Jul 2007 18:23:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/07/16/volatile-acquirerelease-memory-fences-and-vc2005/</guid>
      <description><![CDATA[One of the more common questions I get about VC2005 code generation relates to the code generation...]]></description>
      <content:encoded><![CDATA[<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>One of the more common questions I get about VC2005 code generation relates to the code generation of volatile on x86/x64.&nbsp; If we take a look at MSDN we see that it defines the <A class="" href="https://msdn2.microsoft.com/en-us/library/12a04hfd(VS.80).aspx" mce_href="https://msdn2.microsoft.com/en-us/library/12a04hfd(VS.80).aspx">semantics for volatile in VC2005</A> as :</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>A write to a volatile object (volatile write) has Release semantics; a reference to a global or static object that occurs before a write to a volatile object in the instruction sequence will occur before that volatile write in the compiled binary.<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>A read of a volatile object (volatile read) has Acquire semantics; a reference to a global or static object that occurs after a read of volatile memory in the instruction sequence will occur after that volatile read in the compiled binary.<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'"><o:p></o:p></SPAN></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>So, what does this mean for code that you might write?&nbsp; Let's look at the Read Acquire semantics in an example.&nbsp; In this example the volatile variable has the name 'V'.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Read Acquire Semantics:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load V</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>The Read Acquire semantics say that Store C and Load D must remain below Load V.&nbsp; Store A and Load B are not constrained by Load V (at least, they have no constraint as a result of the load acquire semantics, but other hardware constraints may constrain their movement).</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Now let’s look at Store Release semantics.&nbsp; Again, the volatile variable is 'V':</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store Release Semantics:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store V</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>The store release semantics state that Store A and Load B must remain about Store V.&nbsp; In this case Store C and Load D are not constrained by Store V (again, at least not with respect to the store release semantics).&nbsp; </FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>OK, this behavior is exactly what many people want.&nbsp; So what they often do at this point is they use volatile in code and then they look at the generated assembly code to see what type of synchronization the compiler introduces to ensure that the acquire/release semantics are preserved.&nbsp; (Note, that the compiler has internal constraints which ensure that the compiler does not violate these semantics when it generates code).&nbsp;&nbsp; For many people they're surprised to see that there are no synchronization primitives used.&nbsp; Wait, this can't be right?!&nbsp; How do we keep the CPU from violating these semantics without some type of lfence or sfence or something?&nbsp; Well lets talk about what the hardware might do to our instruction sequence.&nbsp; </FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>With respect to a single core all loads and stores are perceived by the programmer to occur in program order (note, that when I say program order, at this point I mean the assembly program).&nbsp; There is no reordering that occurs.&nbsp; OK, that makes things easy, but again that's just a single core looking at its own instruction sequence.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>But things get more interesting when you have more than one processor/core (doesn't it always?).&nbsp; Across processors, one "might" see different ordering, i.e., processor 1 might observe loads/stores retired in a different order than processor 0 has in its program order (note, this is probably the weakest memory model you will see on x86/x64, but if we work here, we'll work for something stronger).&nbsp; Hmmm… that may cause problems for our volatile (or will it?).&nbsp; Lets dig into what this reordering Processor 1 might observe is.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>The possible reordering that Processor 1 might observe is that Loads can pass Stores (as long as the Store is non-conflicting).&nbsp; But Loads with respect to other Loads will remain ordered.&nbsp; And Stores with respect to other Stores will remain ordered.&nbsp; Lets see an example:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Original Program Order on Processor 0:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store E</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load F</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Possible Reordering Processor 1 Might See:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load F</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store E</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>or </FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load F</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store E</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>If you look at this, you see that Loads can "float" upwards past Stores (again, as long as the Store is non-conflicting), and "can" continue to float upwards&nbsp; until it hits another Load.&nbsp; </FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>So how does this affect our volatile semantics?&nbsp; Let’s start with the Read Acquire semantics example (example copied from above):</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Read Acquire Semantics:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load V</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Another processor observing this instruction sequence may see Load B float above Store A, which is fine (no violation).&nbsp; But since Store's don't float upward, Store C must remain below Load V.&nbsp; Load D can float upward, but it can't go past another Load, so it can't pass Load V.&nbsp; Thus any instruction originally below Load V, will be observed by another processor to execute after Load V.&nbsp; Good.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Now let’s look at the Store Release Semantics (again, copied from above):</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store Release Semantics:</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store A</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load B</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store V</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Store C</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Load D</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>In this case Load D can float past Store C and Store V, but Store Release semantics don't care about instructions that occur below the Store V, so no violation here.&nbsp; Loads can float upward, but not downward, so Load B can not be observed to execute after Store V.&nbsp; And Store's are always observed in program order.&nbsp; Again we're good.&nbsp; So our volatile model is preserved, even with this reordering semantics.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Last thing… these rules don't apply to SSE streaming instructions or fast string operations; so if you are using weakly ordered instructions, then you'll need to use lfence, sfence, mfence, etc...</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>PS - On Itanium, with its weaker memory model, we generate ld.acquire and st.release instructions explicitly.&nbsp; </FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>PLDI Phoenix Tutorial Sold Out!</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/pldi-phoenix-tutorial-sold-out</link>
      <pubDate>Wed, 23 May 2007 20:55:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/05/23/pldi-phoenix-tutorial-sold-out/</guid>
      <description><![CDATA[For those of you who were interested in attending the PLDI tutorial on Phoenix, I hope you have...]]></description>
      <content:encoded><![CDATA[<P>For those of you who were interested in attending the PLDI tutorial on Phoenix, I hope you have signed up already.&nbsp; We actually sold out during the pre-registration timeframe!&nbsp; We think it will be a fun tutorial, with a strong focus on writing code.&nbsp; </P>
<P>If you didn't sign-up, hopefully we'll have some more events in the future.</P>]]></content:encoded>
    </item>
    <item>
      <title>Native code raise to MIR?</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/native-code-raise-to-mir</link>
      <pubDate>Thu, 19 Apr 2007 23:25:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/04/19/native-code-raise-to-mir/</guid>
      <description><![CDATA[I've heard several questions lately about Phoenix's ability to raise native code to MIR...]]></description>
      <content:encoded><![CDATA[<P>I've heard several questions lately about Phoenix's ability to raise native code to MIR (Phx.FunctionUnit.SymbolicFunctionUnitState).&nbsp; Today Phoenix does not support raising native code to MIR.&nbsp; We do plan to support raising beyond LIR in the future for native code, but at this moment in time it is just LIR.&nbsp; </P>
<P>Note that we can raise managed code to Phx.FunctionUnit.SymbolicFunctionUnitState.</P>]]></content:encoded>
    </item>
    <item>
      <title>Phoenix Tutorial Updates...</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/phoenix-tutorial-updates</link>
      <pubDate>Mon, 19 Mar 2007 21:09:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/03/19/phoenix-tutorial-updates/</guid>
      <description><![CDATA[OK, first of all I'd like to start out by saying that it sounds like the CGO tutorial was a...]]></description>
      <content:encoded><![CDATA[<P>OK, first of all I'd like to start out by saying that it sounds like the CGO tutorial was a success.&nbsp; I wasn't there, but I've heard second hand that people really liked it.&nbsp; We have some of the material from the tutorial available for download now at: <A href="https://connect.microsoft.com/Phoenix/Downloads/DownloadDetails.aspx?DownloadID=5742">https://connect.microsoft.com/Phoenix/Downloads/DownloadDetails.aspx?DownloadID=5742</A>&nbsp;(you'll need a Live ID).</P>
<P>The next thing is that the PLDI 2007 Tutorial info is now posted and you can get info on the Phoenix tutorial.&nbsp; It is located at: <A href="https://ties.ucsd.edu/PLDI/tutorials.shtml#phoenix">https://ties.ucsd.edu/PLDI/tutorials.shtml#phoenix</A>.&nbsp; Conference registration is not expected until May 12th, so mark your calendars.&nbsp; Also, the webpage lists the tutorial for 2-hours, but it is a 4-hour tutorial.&nbsp; </P>
<P>&nbsp;That's it for now.&nbsp; More shortly...</P>]]></content:encoded>
    </item>
    <item>
      <title>Phoenix News!</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/phoenix-news</link>
      <pubDate>Sun, 04 Mar 2007 00:06:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/03/04/phoenix-news/</guid>
      <description><![CDATA[There's been quite a bit going on with Phoenix lately.&nbsp; Probably the biggest thing is that a...]]></description>
      <content:encoded><![CDATA[<P>There's been quite a bit going on with Phoenix lately.&nbsp; Probably the biggest thing is that a new RDK has been released.&nbsp; Go to the Phoenix Connect site and you can download it;</P>
<P><A href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=214">https://connect.microsoft.com/site/sitehome.aspx?SiteID=214</A></P>
<P>From the description on the webpage:</P>
<P>"<A href="https://connect.microsoft.com/Downloads/DownloadDetails.aspx?SiteID=214&amp;DownloadID=5538">Phoenix RDK March 2007</A><FONT color=#ff0000> </FONT><FONT color=#000000>features improved API naming, m</FONT><FONT color=#000000>ore optimizations, v</FONT><FONT color=#000000>olatile supports for acquire/release semantics, i</FONT><FONT color=#000000>mprovements to c2 generated debug information, </FONT><FONT color=#000000>more robust and accurate raising of MSIL to LIR</FONT><FONT color=#000000>, improved conditional branch semantics, and </FONT><FONT color=#000000>improved documentation."</FONT></P>
<P>Some other cool news is that there is a <A class="" href="https://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1328&amp;SiteID=1" mce_href="https://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1328&amp;SiteID=1">Phoenix MSDN Forum</A> now!&nbsp; In the past the forum was restricted to only academics, and it was on more difficult to use message board system.&nbsp; Now we've joined all of the other Visual Studio technologies in the MSDN Forum, and it is open to everyone.&nbsp; So if you have any questions, or comments, that's a great place to post them!</P>
<P>And just as a reminder the <A class="" href="https://research.microsoft.com/phoenix/phx_cgo2007.aspx" mce_href="https://research.microsoft.com/phoenix/phx_cgo2007.aspx">Phoenix CGO</A> tutorial is coming up in just a about a week.&nbsp; I got to sit in a dry run session at Microsoft that Andy Ayers gave and it's some cool stuff.&nbsp; We didn't do the whole tutorial, but we used extension objects, the dataflow/simulation package, and had fun with flow graphs and the bit-vector package.&nbsp; Online registration I believe is closed, but there are still spaces open if you register onsite.</P>
<P>And lastly, myself, Jim Hogg, and Andy Ayers had our proposal for a Phoenix tutorial at PLDI 2007 accepted.&nbsp; While it will also be hands-on, the focus will be on building tools.&nbsp; More info on this as I get it.&nbsp; Also, if people have feedback on what they'd like to see in a hands-on tutorial, please let me know.&nbsp; We have plenty of time to custom craft it.</P>]]></content:encoded>
    </item>
    <item>
      <title>A couple of new things in the Phoenix RDK</title>
      <link>https://docs.microsoft.com/archive/blogs/kangsu/a-couple-of-new-things-in-the-phoenix-rdk</link>
      <pubDate>Mon, 05 Feb 2007 14:04:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/kangsu/2007/02/05/a-couple-of-new-things-in-the-phoenix-rdk/</guid>
      <description><![CDATA[We are getting ready to have a new Phoenix RDK in time for CGO 2007 and expect to see quite a few...]]></description>
      <content:encoded><![CDATA[<P>We are getting ready to have a new Phoenix RDK in time for CGO 2007 and expect to see quite a few new things in it.&nbsp; Probably the two most visible things is that we are enabling a lot more optimizations in c2 and the API will look very different.&nbsp; </P>
<P>For the optimizations, the Phoenix C++ code generator will generate much better code with this new RDK, although the code quality still won't be quite as good as the shipping Visual C++ 2005 compiler.</P>
<P>What will probably be the most visible difference to&nbsp;users of the RDK&nbsp;is that we have done some name auditing, and now the names for classes, methods, properties, etc are a lot clearer,&nbsp;and we removed needless (and often confusing) abbreviations.&nbsp; Additionally, we needed to be more inline with our own company's guidelines on <A class="" href="https://msdn2.microsoft.com/en-us/netframework/aa497250.aspx" mce_href="https://msdn2.microsoft.com/en-us/netframework/aa497250.aspx">building .NET class&nbsp;libraries</A>.&nbsp; We will also ship a tool in the RDK that will help you convert your existing Phoenix code to use these new names, so we're making this transition as easy as possible</P>
<P>All in all, we think that this will go a decent ways towards making the API usable.&nbsp; And I know this is something that many people have inquired about.</P>]]></content:encoded>
    </item>
  </channel>
</rss>