<p>
There are currently 3 designs under consideration. They differ in where most
-of the implmentation work is done. The functionality exposed to the customer
+of the implementation work is done. The functionality exposed to the customer
should be identical (and conforming) for all three designs.
</p>
<p>
The compiler supplies all of the intrinsics as described below. This list of
intrinsics roughly parallels the requirements of the C and C++ atomics
-proposals. The C and C++ library imlpementations simply drop through to these
+proposals. The C and C++ library implementations simply drop through to these
intrinsics. Anything the platform does not support in hardware, the compiler
arranges for a (compiler-rt) library call to be made which will do the job with
a mutex, and in this case ignoring the memory ordering parameter (effectively
<blockquote><pre>
<font color="#C80000">// In every intrinsic signature below, type* atomic_obj may be a pointer to a</font>
-<font color="#C80000">// volatile-qualifed type.</font>
+<font color="#C80000">// volatile-qualified type.</font>
<font color="#C80000">// Memory ordering values map to the following meanings:</font>
<font color="#C80000">// memory_order_relaxed == 0</font>
<font color="#C80000">// memory_order_consume == 1</font>
representable by higher level C or C++ expressions. The design of the libc++
<tt><atomic></tt> header started with this goal in mind. A secondary, but
still very important goal is that the compiler should have to do minimal work to
-faciliate the implementaiton of <tt><atomic></tt>. Without this second
+facilitate the implementation of <tt><atomic></tt>. Without this second
goal, then practically speaking, the libc++ <tt><atomic></tt> header would
be doomed to be a barely supported, second class citizen on almost every
platform.