<html>
    <head>
      <base href="http://bugzilla.gdcproject.org/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:slavo5150@yahoo.com" title="Mike <slavo5150@yahoo.com>"> <span class="fn">Mike</span></a>
</span> changed
              <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Add support for attribute to mark data as volatile."
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=126">bug 126</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">CC</td>
           <td>
                
           </td>
           <td>slavo5150@yahoo.com
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Add support for attribute to mark data as volatile."
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=126#c7">Comment # 7</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Add support for attribute to mark data as volatile."
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=126">bug 126</a>
              from <span class="vcard"><a class="email" href="mailto:slavo5150@yahoo.com" title="Mike <slavo5150@yahoo.com>"> <span class="fn">Mike</span></a>
</span></b>
        <pre>As I understand it, there are 2 issues to be addressed by 'volatile' or some
other solution.

1.  Ensure a memory location is always read/written and not cached in registes
2.  Ensure instructions that access 'volatile' memory are not reordered by the
compiler.

I believe 'shared' satisfies (1), but not (2).  A 'volatile' memory location is
one which the executing thread does not have complete control of, and can
therefore be changed by some other entity external to the executing thread. 
Therefore is it's contents are volatile.  

I think of 'shared' similarly.  The memory location is shared by the executing
thread with other external entities:  other threads, other processors, a
sensor, or other peripheral that may read or write to that memory location
outside of the context of the executing thread.  What 'shared' doesn't satisfy
is (2). 

peek() and poke() intrinsics would satisfy both (1) and (2).   

I see at least 3 solutions:
1.  Add volatile semantics with either a keyword or an attribute requiring
compilers to address both (1) and (2)
2.  Use 'shared' to address requirement (1) and add some other "don't reorder"
feature to the front-end
3.  Add peek() and poke() intrinsics.

I prefer (2), (3), then (1).  I prefer (2) simply because it is more granular
and both 'shared' and a "don't reorder" feature could be used for other
purposes outside of my immediate need which is peripheral memory mapped IO.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are watching all bug changes.</li>
      </ul>
    </body>
</html>