<feed xmlns='http://www.w3.org/2005/Atom'>
<title>src/sys/alpha/include/atomic.h, branch releng/5.3</title>
<subtitle>FreeBSD source tree</subtitle>
<id>https://cgit-dev.freebsd.org/src/atom?h=releng%2F5.3</id>
<link rel='self' href='https://cgit-dev.freebsd.org/src/atom?h=releng%2F5.3'/>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/'/>
<updated>2004-09-13T21:52:04Z</updated>
<entry>
<title>MFC:</title>
<updated>2004-09-13T21:52:04Z</updated>
<author>
<name>Wilko Bulte</name>
<email>wilko@FreeBSD.org</email>
</author>
<published>2004-09-13T21:52:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=46be224b52871a71e93dea0d329da46cf69aa827'/>
<id>urn:sha1:46be224b52871a71e93dea0d329da46cf69aa827</id>
<content type='text'>
revision 1.19
date: 2004/09/10 05:00:27;  author: marcel;  state: Exp;  lines: +14 -62
The previous commit, roughly one and a half years ago removed the
branch prediction optimization for LINT, because the kernel was too
large. This commit now removes it altogether since it causes build
failures for GENERIC kernels and the various applicable trends are
such that one can expect that it these failure will cause more
problems than they're worth in the future. These trends include:
1. Alpha was demoted from tier 1 to tier 2 due to lack of active
   support. The number of people willing to fix build breakages
   is not likely to increase and those developers that do have the
   gumption to test MI changes on alpha are not likely to spend
   time fixing unexpected build failures first.
2. The kernel will only increase in size. Even though stripped-down
   kernels do link without problems now, compiler optimizations (like
   inlining) and new (non-optional) functionality will likely cause
   stripped-down kernels to break in the future as well.

So, with my asbestos suit on, get rid of potential problems before
they happen.

Approved by: re (scottl)
</content>
</entry>
<entry>
<title>Workaround for compiling LINT. Large kernels (like LINT) can have</title>
<updated>2003-02-23T06:34:21Z</updated>
<author>
<name>Marcel Moolenaar</name>
<email>marcel@FreeBSD.org</email>
</author>
<published>2003-02-23T06:34:21Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=19d4fb8e5cf2c257f2a1f0925516f1d930c5615f'/>
<id>urn:sha1:19d4fb8e5cf2c257f2a1f0925516f1d930c5615f</id>
<content type='text'>
branch targets that are too far apart for the BRADDR relocation.
This is caused by the branch prediction optimizationi in the atomic
inlines here, because they jump across sections.
The workaround is to suppress jumping to a different section when
compiling LINT. To generate correct code in that case, the section
directives are replaced by a branch and a label to deal with the
fall-through case. Reasonably good C compilers will optimize this
away anyway, so the end result isn't really that bad.
</content>
</entry>
<entry>
<title>Remove extranious memory barriers, and correct the placement of a few others.</title>
<updated>2002-10-30T01:41:44Z</updated>
<author>
<name>Andrew Gallatin</name>
<email>gallatin@FreeBSD.org</email>
</author>
<published>2002-10-30T01:41:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=7a966f2ded110856471f7090b54500a0f324949c'/>
<id>urn:sha1:7a966f2ded110856471f7090b54500a0f324949c</id>
<content type='text'>
This provides a 30% reduction in system time and a 6% reduction in wallclock time
for a make buildworld on my xp1000 (one 21264).

FWIW, I've been running this for nearly 2 months without problems.

Portions submitted by: ticso, jhb
Tested by: jhb (ds20 dual 21264)
</content>
</entry>
<entry>
<title>Use the newer "+" modifier on output contraints when a register or</title>
<updated>2002-10-25T20:22:12Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2002-10-25T20:22:12Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=4c86c028ac059eee8f4d6d069be669719d51ccbc'/>
<id>urn:sha1:4c86c028ac059eee8f4d6d069be669719d51ccbc</id>
<content type='text'>
memory datum is used for both input and output instead of using
matching constraints.
</content>
</entry>
<entry>
<title>Wrap GNUish asm() code in #ifdef __GNUC__</title>
<updated>2002-09-21T19:12:59Z</updated>
<author>
<name>Mark Murray</name>
<email>markm@FreeBSD.org</email>
</author>
<published>2002-09-21T19:12:59Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=0a7d7bdc0252b1e371926461f84e611183464ac6'/>
<id>urn:sha1:0a7d7bdc0252b1e371926461f84e611183464ac6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>- Apparently, the Alpha ABI mandates that arguments be passed sign-extended</title>
<updated>2002-05-17T05:45:39Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2002-05-17T05:45:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=ae3f633bae373644db1ecd18f88c2446274949e2'/>
<id>urn:sha1:ae3f633bae373644db1ecd18f88c2446274949e2</id>
<content type='text'>
  regardless of if they are signed or unsigned since it is easier to work
  with sign-extended values.  Thus, remove the disabled zapnot to
  zero-extend the sign-extended value we read from *p in atomic_cmpset_32()
  since the cmpval we are comparing against should already be
  sign-extended.
- To ensure that the compiler knows to sign-extend the upper 32 bits of
  cmpval rather than leaving garbage in there, cast the appropriately in
  the constraints section.

Help from:	Richard Henderson &lt;rth@redhat.com&gt;
</content>
</entry>
<entry>
<title>Temporarily disable Jeff's fix for atomic_cmpset_32() to zero-extend the</title>
<updated>2002-05-11T04:27:39Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2002-05-11T04:27:39Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=8f0dda1601843d245b3d4b270ba44dfe89d0cd0e'/>
<id>urn:sha1:8f0dda1601843d245b3d4b270ba44dfe89d0cd0e</id>
<content type='text'>
value we load from memory.  gcc3.1 passes in the u_int32_t old value to
compare against as a _sign_-extended 64-bit value for some reason (bug?).
This is a temporary workaround so kernels work again on alpha.
</content>
</entry>
<entry>
<title>zapnot the signed bits in atomic_cmpset_32.  Previously this did not work with</title>
<updated>2002-05-08T05:19:56Z</updated>
<author>
<name>Jeff Roberson</name>
<email>jeff@FreeBSD.org</email>
</author>
<published>2002-05-08T05:19:56Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=c4b689f10af0284bf66260bcbee105712438abc0'/>
<id>urn:sha1:c4b689f10af0284bf66260bcbee105712438abc0</id>
<content type='text'>
negative values because the original value was sign extended but the compared
value was not.
</content>
</entry>
<entry>
<title>Be conservative and always perform an mb after an atomic_cmpset operation.</title>
<updated>2001-06-22T21:13:20Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2001-06-22T21:13:20Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=49f886f5d3e9767a967e2607e713215be5dff3da'/>
<id>urn:sha1:49f886f5d3e9767a967e2607e713215be5dff3da</id>
<content type='text'>
</content>
</entry>
<entry>
<title>- Fix memory barriers in atomic operations so that the barriers are always</title>
<updated>2001-04-17T02:50:05Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2001-04-17T02:50:05Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=2bec909c3d18b5e8f57c9d6133b168f945352476'/>
<id>urn:sha1:2bec909c3d18b5e8f57c9d6133b168f945352476</id>
<content type='text'>
  "inside" of locked regions.  That is, an acquire atomic operation will
  always enforce a memory barrier after the atomic operation and a release
  operation will always enforce a memory barrier before the atomic
  operation.
- Explicitly use 'mb' instead of 'wmb' in release atomic operations.  The
  'wmb' memory barrier is not strong enough to guarantee coherence with
  other processors.  This is effectively a nop since alpha_wmb() actually
  performs a 'mb' and not a 'wmb', but I wanted the code to be more
  correct since at some point in the future alpha_wmb()'s implementation
  may switch to being a real 'wmb'.
</content>
</entry>
</feed>
