Keep up to date with the latest news, updates, and release info from Entropy Wave Open Source
We’re very excited to announce that Entropy Wave has been accepted to join Mozilla’s WebFwd open innovation program. 
There are a number of exceptional companies in the portfolio, and we’re very honored to be included in that group. We’re looking forward to building a greater community around our products, specifically our open source products.
This is what happens when you rush a release. Not only did I forget to post about 0.4.12, but the inclusion of two code generation bugs (both easily caught by the test suite) made a quick follow-up 0.4.13 release a necessity.
0.4.13
======
Fixes two serious code generation bugs in 0.4.12 on SSE and
Altivec. Also added some compatibility code to mitigate
the previous automatic inclusion of stdint.h.
0.4.12
======
This is primarily a bug fixing release.
- Fix gcc-4.6 warnings in generated code
- Codegen fixes for Altivec. Passes regression tests again.
- More error checking for code allocation.
- NEON: floating point improvements
- Removed stdint.h from API. This could theoretically cause
breakage if you depended on orc to include stdint.h.
One new feature is the OrcCode structure, which keeps track of
compiled code. This now allows applications to free unused code.
Internally, x86 code generation was completely refactored to add
an intermediate stage, which will later be used for instruction
reordering. None of this is useful yet.
David Schleef’s presentation on Orc at the GStreamer conference in Cambridge, November 2010 is now available in WebM format on the Free Electrons web site.
Changes:
– Added several simple 64-bit opcodes
– Improved debugging by adding ORC_CODE=emulate
– Allocation of mmap’d areas for code now has several fallback
methods, in order to placate various SELinux configurations.
– Various speed improvements in SSE backend
– Add SSE implementations of ldreslinl and ldresnearl.
– Update Mersenne Twister example
There was a bug in the calculation of maximum loop shift that, when
fixed, increases the speed of certain functions by a factor of two.
However, the fix also triggers a bug in Schroedinger, which is fixed
in the 1.0.10 release.
Changes:
– Lots of specialized new opcodes and opcode prefixes.
– Important fixes for ARM backend
– Improved emulation of programs (much faster)
– Implemented fallback rules for almost all opcodes for
SSE and NEON backends
– Performance improvements for SSE and NEON backends.
– Many fixes to make larger programs compile properly.
– 64-bit data types are now fully implemented, although
there are few operations on them.
Loads and stores are now handled by separate opcodes (loadb,
storeb, etc). For compatibility, these are automatically
included where necessary. This allowed new specialized
loading opcodes, for example, resampling a source array
for use in scaling images.
Opcodes may now be prefixed by “x2″ or “x4″, indicating that
a operation should be done on 2 or 4 parts of a proportionally
larger value. For example, “x4 addusb” performs 4 saturated
unsigned additions on each of the four bytes of 32-bit
quantities. This is useful in pixel operations.
The MMX backend is now (semi-) automatically generated from
the SSE backend.
The orcc tool has a new option “–inline”, which creates inline
versions of the Orc stub functions. The orcc tool also recognizes
a new directive ‘.init’, which instructs the compiler to generate
an initialization function, which when called at application init
time, compiles all the generated functions. This allows the
generated stub functions to avoid checking if the function has
already been compiled. The use of these two features can
dramatically decrease the cost of calling Orc functions.
Known Bugs: Orc generates code that crashes on 64-bit OS/X.
Plans for 0.4.8: (was 2.5 for 4 this time around, not too bad!)
Document all the new features in 0.4.7. Instruction scheduler.
Code and API cleanup.
Changes:
– Various fixes to make Orc more portable
– Major performance improvements to NEON backend
– Minor performance improvements to SSE backend
– Major improvements to ARM backend, now passes regression
tests.
The defaults for floating point operations have been changed
somewhat: NANs are handled more like the IEEE 754 standard,
and denormals in operations are treated as zeros. The NAN
changes causes certain SSE operations to be slightly slower,
but produce less surprising results. Treating denormals as
zero has effects ranging from “slightly faster” to “now possible”.
New tool: orc-bugreport. Mainly this is to provide a limited
testing tool in the field, especially for embedded targets
which would not have access to the testsuite that is not
installed.
The environment variable ORC_CODE can now be used to adjust
some code generation. See orc-bugreport –help for details.
orcc has a new option to generate code that is compatible
with older versions of Orc. For example, if your software
package only uses 0.4.5 features, you can use –compat 0.4.5
to generate code that run on 0.4.5, otherwise it may generate
code that requires 0.4.6. Useful for generating source code
for distribution.
New NEON detection relies on Linux 2.6.29 or later.
Plans for 0.4.7: (not that past predictions have been at all
accurate) New opcodes for FIR filtering, scaling and compositing
of images and video. Instruction scheduler, helpful for non-OOO
CPUs. Minor SSE/NEON improvements. Orcc generation of inline
macros.
I forgot to make an announcement here when 0.4.5 was released a few weeks ago.
0.4.5
=====
This release contains many small improvements related to
converting GStreamer from liboil to Orc.
The major addition in this release is the mainstreaming of
the NEON backend, made possible by Nokia.
There is a new experimental option to ./configure,
--enable-backend, which allows you to choose a single code
generation backend to include in the library. This is mostly
useful for embedded systems, and is not recommended in general.
The upcoming release will focus on improving code generation
for the SSE and NEON backends.
This is almost entirely a cleanup and bug fix release.
- fix register copying on x86-64
- better checking for partial test failures
- fix documention build
- fix build on many systems I don’t personally use
- various fixes to build/run on Win64 (Ramiro Polla)
- add performance tests
Next release will merge in the new pixel compositing opcodes
and the SSE instruction scheduler.
Orc has moved to its new home at code.entropywave.com. The git repository was previously hosted from my home directory at freedesktop.org, and there was no main web page to direct people to. That will be fixed now that it has a real web site. This move has been planned for some time, but the recent power outage and subsequent meltdown of the filesystem at freedesktop.org that contained the repository triggered the action.
The Git clone URI for Orc is now git://code.entropywave.com/git/orc.git