Sebastian Dröge [Mon, 9 Sep 2019 07:27:32 +0000 (10:27 +0300)]
Back to development
Sebastian Dröge [Mon, 9 Sep 2019 07:21:29 +0000 (10:21 +0300)]
Release 0.4.30
Doug Nazar [Wed, 28 Aug 2019 14:30:12 +0000 (10:30 -0400)]
powerpc: Use extended mnemonic for load immediate
Doug Nazar [Wed, 28 Aug 2019 14:28:39 +0000 (10:28 -0400)]
powerpc: Add double & quad operands for vsx/v2.07 compatible cpus
Doug Nazar [Wed, 28 Aug 2019 14:23:31 +0000 (10:23 -0400)]
powerpc: Fix cpu feature detection
Fix meson cpu family detection.
Actually call cpu detection from progam init.
Add VSX & v2.07 checks for linux with options to diable.
Add display of target flags & cache sizes.
Tim-Philipp Müller [Fri, 19 Apr 2019 23:22:51 +0000 (00:22 +0100)]
Drop support for Autotools as build system
Doug Nazar [Wed, 28 Aug 2019 14:05:21 +0000 (10:05 -0400)]
tests: Allow exec testing of single opcode
Doug Nazar [Wed, 28 Aug 2019 14:00:33 +0000 (10:00 -0400)]
tests: Use correct double/int64 functions for parameters & consts
Doug Nazar [Wed, 28 Aug 2019 13:55:26 +0000 (09:55 -0400)]
executor: x2 union members not endian safe
Doug Nazar [Sun, 25 Aug 2019 19:50:15 +0000 (15:50 -0400)]
powerpc: Pre-load long constants & invariants
PowerPC doesn't have an easy way to load a long constant into a
vector register so we emit the value into the code and then load it.
This moves those values to after the epilogue and then loads them
before starting the outer loop.
Doug Nazar [Sun, 25 Aug 2019 19:41:59 +0000 (15:41 -0400)]
orc: Consolidate orc_program_has_float()
Doug Nazar [Sun, 25 Aug 2019 18:50:11 +0000 (14:50 -0400)]
orc: Make orc_*_emit_invariants() generic
Move mmx/sse emit invariant function to orcompiler so it can
be used on other architectures.
Doug Nazar [Sun, 25 Aug 2019 18:27:23 +0000 (14:27 -0400)]
orccodemem: Mark exec mapping writable if debugging
gdb needs the mapping to be writable to set breakpoints.
Doug Nazar [Sat, 31 Aug 2019 15:08:58 +0000 (11:08 -0400)]
orctest: Fix ULP compare and make compatible with clang
Matthew Waters [Tue, 27 Aug 2019 01:36:49 +0000 (11:36 +1000)]
build: fix werror build with clang
../subprojects/orc/orc-test/orcarray.c:230:47: error: taking the absolute value of unsigned type 'unsigned int' has no effect [-Werror,-Wabsolute-value]
if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint32 *)&a[i] - *(orc_uint32 *)&b[i]) <= 2) continue;
^
../subprojects/orc/orc-test/orcarray.c:230:47: note: remove the call to 'abs' since unsigned values cannot be negative
if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint32 *)&a[i] - *(orc_uint32 *)&b[i]) <= 2) continue;
^~~
../subprojects/orc/orc-test/orcarray.c:247:47: error: taking the absolute value of unsigned type 'unsigned long' has no effect [-Werror,-Wabsolute-value]
if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint64 *)&a[i] - *(orc_uint64 *)&b[i]) <= 2) continue;
^
../subprojects/orc/orc-test/orcarray.c:247:47: note: remove the call to 'abs' since unsigned values cannot be negative
if ((a[i] < 0.0) == (b[i] < 0.0) && abs(*(orc_uint64 *)&a[i] - *(orc_uint64 *)&b[i]) <= 2) continue;
^~~
../subprojects/orc/orc-test/orctest.c:525:63: error: taking the absolute value of unsigned type 'unsigned int' has no effect [-Werror,-Wabsolute-value]
if ((*(float *)ptr1 < 0.0) == (*(float *)ptr2 < 0.0) && abs(*(orc_uint32 *)ptr1 - *(orc_uint32 *)ptr2) <= 2) return TRUE;
^
../subprojects/orc/orc-test/orctest.c:525:63: note: remove the call to 'abs' since unsigned values cannot be negative
if ((*(float *)ptr1 < 0.0) == (*(float *)ptr2 < 0.0) && abs(*(orc_uint32 *)ptr1 - *(orc_uint32 *)ptr2) <= 2) return TRUE;
^~~
../subprojects/orc/orc-test/orctest.c:530:65: error: taking the absolute value of unsigned type 'unsigned long' has no effect [-Werror,-Wabsolute-value]
if ((*(double *)ptr1 < 0.0) == (*(double *)ptr2 < 0.0) && abs(*(orc_uint64 *)ptr1 - *(orc_uint64 *)ptr2) <= 2) return TRUE;
^
../subprojects/orc/orc-test/orctest.c:530:65: note: remove the call to 'abs' since unsigned values cannot be negative
if ((*(double *)ptr1 < 0.0) == (*(double *)ptr2 < 0.0) && abs(*(orc_uint64 *)ptr1 - *(orc_uint64 *)ptr2) <= 2) return TRUE;
^~~
Doug Nazar [Tue, 20 Aug 2019 08:50:56 +0000 (04:50 -0400)]
powerpc: Add little endian support
Doug Nazar [Tue, 20 Aug 2019 08:38:39 +0000 (04:38 -0400)]
powerpc: Fix whitespace
Doug Nazar [Sun, 18 Aug 2019 15:50:44 +0000 (11:50 -0400)]
orc: Add ORC_LIKELY/ORC_UNLIKELY macros
Doug Nazar [Sun, 18 Aug 2019 15:48:10 +0000 (11:48 -0400)]
meson: Fix ppc/ppc64 cpu family detection
Doug Nazar [Sun, 18 Aug 2019 15:47:06 +0000 (11:47 -0400)]
orctest: print_array_val_float return value not used
fanjinke [Tue, 7 May 2019 15:48:37 +0000 (23:48 +0800)]
add Hygon Dhyana processor support
Signed-off-by: fanjinke <fanjinke@hygon.cn>
Doug Nazar [Tue, 13 Aug 2019 19:38:55 +0000 (15:38 -0400)]
tests: Use float constants and parameters when testing float opcodes.
Doug Nazar [Wed, 7 Aug 2019 01:44:02 +0000 (21:44 -0400)]
orcarm: Fix flushing of icache when using dual map
On a codemem_dual_map setup, we need to also flush the PROT_EXEC alias.
Doug Nazar [Wed, 7 Aug 2019 04:11:35 +0000 (00:11 -0400)]
orctest: Switch nearby float comparison to ULP method
Mathieu Duponchelle [Fri, 2 Aug 2019 16:41:52 +0000 (18:41 +0200)]
doc: fix gtkdoc when orc is used as a subproject
meson.source_root() will point to the root of the top level
project, and should not be used to compute paths in the current
project.
Wim Taymans [Fri, 19 Jul 2019 14:18:04 +0000 (16:18 +0200)]
x86: add endbr32 and endbr64 instructions
Issue endbr instructions at the start of generated functions to
make IBT (indirect branch tracking) work.
Resolves #17
Tim-Philipp Müller [Tue, 23 Jul 2019 23:26:32 +0000 (00:26 +0100)]
ci: run tests on windows
Jordan Petridis [Thu, 11 Jul 2019 04:48:08 +0000 (07:48 +0300)]
Add Windows CI for msvc 2017 and msys2
Currently the container is based upon a windows 1607 image
and requires a runner with a server/hyper-v 1607 host
to be able to execute.
There are plan on moving the runner to a 1807 later.
Nirbheek Chauhan [Tue, 7 May 2019 14:48:34 +0000 (20:18 +0530)]
uwp: workaround a false positive in certification of orc
It seems that the Windows App Certification Kit searches all files and
binaries for the regex '\<reg\>' (or something like it) and throws
errors if it exists. Supposedly this is for preventing apps from
running REG.EXE
https://blogs.msdn.microsoft.com/appconsult/2017/08/16/how-to-validate-if-your-application-is-compliant-with-the-windows-store-polices-windows-10-and-windows-10-s/
Xavier Claessens [Fri, 12 Apr 2019 15:34:33 +0000 (11:34 -0400)]
Meson: Do not always generate static library
Since Meson 0.46.0 'default_library' can be set to 'both' when user
wants both shared and static libraries.
Tim-Philipp Müller [Mon, 15 Apr 2019 08:27:24 +0000 (09:27 +0100)]
Back to development
Tim-Philipp Müller [Sun, 14 Apr 2019 22:47:03 +0000 (23:47 +0100)]
Release 0.4.29
Tim-Philipp Müller [Fri, 22 Mar 2019 19:36:24 +0000 (19:36 +0000)]
orc: fix C++ style comment
Tim-Philipp Müller [Tue, 5 Mar 2019 14:21:04 +0000 (14:21 +0000)]
configure.ac: no more bugzilla
Tim-Philipp Müller [Tue, 5 Mar 2019 13:52:54 +0000 (13:52 +0000)]
Update news file for upcoming release
Tim-Philipp Müller [Tue, 5 Mar 2019 11:05:43 +0000 (11:05 +0000)]
Add pkg-config file for orc-test library
Fixes #16
Nirbheek Chauhan [Tue, 5 Feb 2019 13:29:11 +0000 (18:59 +0530)]
Fix warnings with Cerbero's mingw (gcc 4.7)
orcutils.h:59:38: error: "__STDC_VERSION__" is not defined [-Werror=undef]
Seungha Yang [Mon, 28 Jan 2019 13:12:46 +0000 (22:12 +0900)]
meson: Make orcc detectable from other subprojects
If we are a subproject (e.g., gst-build), this can make it possible
to use orcc by other subprojects.
A. Wilcox [Tue, 10 Jul 2018 02:18:07 +0000 (21:18 -0500)]
PowerPC: Support ELFv2 ABI
The ELFv2 ABI does not use function descriptors. This change has been
tested on Power Mac G5, IBM POWER6, and Raptor Talos II, all using the
musl libc on Linux kernel 4.14.
Michel Normand [Mon, 2 Mar 2015 11:14:03 +0000 (12:14 +0100)]
Add support for ppc64le
Fixes https://gitlab.freedesktop.org/gstreamer/orc/issues/6
Tim-Philipp Müller [Wed, 2 Jan 2019 00:47:42 +0000 (00:47 +0000)]
ci: add minimal ci
Edward Hervey [Mon, 17 Dec 2018 10:26:21 +0000 (11:26 +0100)]
orc: Remove dead assignments
All those temporary registry were not used and instead were being
assigned constant values.
Nirbheek Chauhan [Wed, 14 Nov 2018 09:49:42 +0000 (15:19 +0530)]
meson: Maintain macOS ABI compatibility
Need to use the correct dylib versioning.
Tim-Philipp Müller [Sat, 6 Oct 2018 12:04:01 +0000 (13:04 +0100)]
meson: add option to disable orc-test library
https://bugzilla.gnome.org/show_bug.cgi?id=736785
Tim-Philipp Müller [Wed, 3 Oct 2018 09:31:47 +0000 (10:31 +0100)]
meson: rename "enable-backend" option to "orc-backend"
More consistent with the Meson option naming conventions.
Tim-Philipp Müller [Wed, 3 Oct 2018 08:28:53 +0000 (09:28 +0100)]
meson: add options to disable benchmarks, examples, tools
Like we have in other modules.
Tim-Philipp Müller [Wed, 3 Oct 2018 08:13:31 +0000 (09:13 +0100)]
meson: make "tests" option an auto feature option
Consistent with the rest of GStreamer and gst-build.
Tim-Philipp Müller [Mon, 30 Jul 2018 09:06:04 +0000 (10:06 +0100)]
meson: rename 'disable_gtkdoc' option to 'gtk_doc' and make it an auto/feature option
Tim-Philipp Müller [Mon, 30 Jul 2018 08:56:14 +0000 (09:56 +0100)]
meson: rename option disable_tests=false -> tests=true
Bring it in line with convention.
Nicolas Dufresne [Sun, 22 Jul 2018 13:53:39 +0000 (09:53 -0400)]
meson: Bump required version to 0.46
Christoph Reiter [Mon, 21 May 2018 15:06:12 +0000 (17:06 +0200)]
meson: pass the right header when testing for posix_memalign
has_function() needs to know the header to correctly detect the function in
all cases.
This fixes the build under mingw-w64 where posix_memalign was wrongfully being
detected as available.
See this glib bug for a similar fix:
https://bugzilla.gnome.org/show_bug.cgi?id=795876
https://bugzilla.gnome.org/show_bug.cgi?id=796309
Tim-Philipp Müller [Fri, 18 May 2018 08:49:01 +0000 (09:49 +0100)]
Fix MSVC compiler warning
The isnan() macro was redefined to _isnan() on MSVC, but it's
been in math.h since vs2013, so it should be safe to rely on
it unconditionally nowadays, and we have no intention of
supporting ancient vs versions anyway.
Tim-Philipp Müller [Fri, 18 May 2018 08:10:17 +0000 (09:10 +0100)]
orc: fix static build on windows
Orc users mustn't use __declspec(dllimport) when
linking against a static liborc.
Edward Hervey [Fri, 4 May 2018 07:21:16 +0000 (09:21 +0200)]
orctest: Allow enough room for sprintf()
We were writing more than 300 characters in some cases. Thanks gcc
8 for pointing that out :)
Tim-Philipp Müller [Sat, 28 Apr 2018 22:48:39 +0000 (23:48 +0100)]
meson: use add_project_arguments() instead of add_global_arguments()
The latter won't play nice when being used as a subproject.
Tim-Philipp Müller [Sat, 28 Apr 2018 12:06:34 +0000 (13:06 +0100)]
orc: update some generated files
Tim-Philipp Müller [Sat, 28 Apr 2018 12:04:11 +0000 (13:04 +0100)]
orcfunctions.h: include orcutils.h for ORC_API define
Fixes build for users that just include orcfunctions.h
directly instead of orc/orc.h, like libs in gst-plugins-base.
Tim-Philipp Müller [Sat, 28 Apr 2018 00:10:59 +0000 (01:10 +0100)]
orc: remove empty and unused orcrules-x86.c
Tim-Philipp Müller [Fri, 27 Apr 2018 23:37:35 +0000 (00:37 +0100)]
orc: move unusable orc_code_chunk_free() declaration to internal header
Nothing in any public header ever returned or used an OrcCodeChunk.
Tim-Philipp Müller [Fri, 27 Apr 2018 17:42:29 +0000 (18:42 +0100)]
autotools: control symbol visibility via -fvisibility
All symbols are hidden by default unless exported
explicitly via our public API decorators.
Tim-Philipp Müller [Fri, 27 Apr 2018 16:45:23 +0000 (17:45 +0100)]
meson: fix symbol export with MSVC and use -fvisibility elsewhere
Use newly-added ORC_API decorators to export symbols explicitly.
Get rid of orc.map file and the ORC_EXPORT stuff that never did
anything anyway (define was unused).
Tim-Philipp Müller [Fri, 27 Apr 2018 15:56:11 +0000 (16:56 +0100)]
orc: decorate public symbols with ORC_API
We'll use that later to control symbol visibility and
exported symbols.
Tim-Philipp Müller [Fri, 27 Apr 2018 13:00:54 +0000 (14:00 +0100)]
orc-test: decorate public symbols with ORC_TEST_API
We'll use that later to control symbol visibility and
exported symbols.
Tim-Philipp Müller [Fri, 27 Apr 2018 16:02:18 +0000 (17:02 +0100)]
orcc: add --decorator command line argument
So we can add things like FOO_API if the functions are
supposed to be public, for example.
Tim-Philipp Müller [Fri, 27 Apr 2018 11:47:42 +0000 (12:47 +0100)]
meson: use -Bsymbolic-functions when linking if available
cc.has_linker_argument() requires Meson 0.46, so guard
against older Meson versions for now.
Tim-Philipp Müller [Fri, 27 Apr 2018 23:06:03 +0000 (00:06 +0100)]
orc: make more functions static
All of these are only used internally and are
not in any header files, but were still exported
by accident because they start with orc_*.
Tim-Philipp Müller [Fri, 20 Apr 2018 11:34:17 +0000 (12:34 +0100)]
gtk-doc: get rid of templates
gtkdoc-mktmpl was removed in recent gtk-doc versions.
Update gtk-doc.make to 1.27, but modify to generate
xml/version.entities (i.e. add copy in right dir).
All a bit cargo-culted, but seems to work.
James Cowgill [Fri, 6 Apr 2018 14:26:43 +0000 (15:26 +0100)]
orcmips: only enable if the DSPr2 ASE is present
The mips target uses various instructions that a part of the MIPS DSPr2
ASE which is not present on all processors. The easiest solution is to
gate the target on the presense of DSPr2 at runtime.
Unfortunately there isn't a "nice" way to detect if DSPr2 is present, so
resort to parsing /proc/cpuinfo to get the information.
https://bugzilla.gnome.org/show_bug.cgi?id=760834
James Cowgill [Fri, 6 Apr 2018 14:24:47 +0000 (15:24 +0100)]
orcutils: refactor /proc/cpuinfo reading code from orccpu-arm.c
This code will later be used by mips target, so it makes sense
to use a common function instead of duplicating the code.
https://bugzilla.gnome.org/show_bug.cgi?id=760834
Tim-Philipp Müller [Mon, 9 Apr 2018 18:14:05 +0000 (19:14 +0100)]
configure: don't check for functions that aren't used anywhere
And remove some unneeded includes.
James Cowgill [Fri, 6 Apr 2018 14:38:54 +0000 (15:38 +0100)]
meson: fix mips cpu_family test
The cpu family "mipsel" does not exist in meson so the current test to
enable the HAVE_MIPSEL macro is always false. The real cpu family is
"mips" but this also matches big endian platforms so also check that the
endian is little.
https://bugzilla.gnome.org/attachment.cgi?id=370595
Edward Hervey [Wed, 29 Nov 2017 08:19:20 +0000 (09:19 +0100)]
orccpu-arm: Allow 'cpuinfo' fallback on non-android
Reading the cpu flags from cpuinfo is also useful on non-android
ARM platforms which might have mechanisms that prevent /proc/*/auxv
from being read.
Nirbheek Chauhan [Tue, 21 Nov 2017 20:12:23 +0000 (01:42 +0530)]
meson: Always build both shared and static libraries
This reuses objects from the shared library for the static library, so
it should not affect the build time at all.
orc_dep and orc_test_dep will still contain the library selected by
--default-library
Sebastian Dröge [Mon, 20 Nov 2017 17:16:55 +0000 (19:16 +0200)]
Build liborc-test also as a properly versioned library with meson
Sebastian Dröge [Mon, 20 Nov 2017 16:41:01 +0000 (18:41 +0200)]
Add meson configuration for disabling tests and gtk-doc docs
https://bugzilla.gnome.org/show_bug.cgi?id=790626
Sebastian Dröge [Mon, 20 Nov 2017 16:36:20 +0000 (18:36 +0200)]
Allow building shared/static library based on configuration
Before only a shared library was possible
Edward Hervey [Mon, 20 Nov 2017 15:47:00 +0000 (16:47 +0100)]
Back to development
Edward Hervey [Mon, 20 Nov 2017 15:15:58 +0000 (16:15 +0100)]
Release 0.4.28
Edward Hervey [Mon, 20 Nov 2017 14:08:57 +0000 (15:08 +0100)]
orcutils: Use compiler offsetof() when available
The way we were calculating the offset of a structure entry was
undefined behaviour.
Instead, use 'offsetof()' (defined in C89) when available
Edward Hervey [Sun, 19 Nov 2017 17:21:34 +0000 (18:21 +0100)]
orccpu-x86: Fix undefined behaviour compilation issue
runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
Edward Hervey [Sun, 19 Nov 2017 17:19:22 +0000 (18:19 +0100)]
configure.ac: Print configuration after configuration
Makes it easier to spot/review detected flags
Edward Hervey [Sun, 19 Nov 2017 17:18:19 +0000 (18:18 +0100)]
orc: Add a configure option to disable tests
For targets where it doesn't make sense.
Note that this will disable the build of orc-bugreport since it
depends on the the orc_test helper library
Edward Hervey [Sun, 19 Nov 2017 17:15:31 +0000 (18:15 +0100)]
tesuite: Fix some leaks
Edward Hervey [Sat, 21 Oct 2017 07:26:39 +0000 (09:26 +0200)]
orcprogram-c.c: Don't cast constant
Clang compilers would complain with constant-conversion error (trying
to fit a 'int' into another type)
This was introduced to fix a warning in gcc ... which doesn't happen
Edward Hervey [Sat, 21 Oct 2017 07:25:39 +0000 (09:25 +0200)]
orc: Cast maximum constants
Avoids constant-conversion warnings as such:
/src/orc/orc/orcemulateopcodes.c:158:13: error: implicit conversion from 'int' to 'orc_int8' (aka 'signed char') changes value from 255 to -1 [-Werror,-Wconstant-conversion]
var34 = ORC_CLAMP_UB((orc_uint8)var32 + (orc_uint8)var33);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/src/orc/orc/orcemulateopcodes.c:29:48: note: expanded from macro 'ORC_CLAMP_UB'
^~~~~~~~~~
/src/orc/orc/orcemulateopcodes.c:18:20: note: expanded from macro 'ORC_UB_MAX'
^~~
/src/orc/orc/orcemulateopcodes.c:12:55: note: expanded from macro 'ORC_CLAMP'
^
Tim-Philipp Müller [Tue, 18 Jul 2017 11:33:15 +0000 (12:33 +0100)]
Dist meson files with autotools make dist
Tim-Philipp Müller [Mon, 17 Jul 2017 15:42:02 +0000 (16:42 +0100)]
Back to development
Tim-Philipp Müller [Mon, 17 Jul 2017 15:16:35 +0000 (16:16 +0100)]
Release 0.4.27
Tim-Philipp Müller [Tue, 27 Jun 2017 08:43:07 +0000 (09:43 +0100)]
orcc: make coverity happy
Use typedefed enum so static analysis tools like coverity can know
we covered all possibilities in switch/case statements. CID 1413336.
Matej Knopp [Mon, 19 Jun 2017 02:00:31 +0000 (04:00 +0200)]
orc: preserve non volatile sse registers
required for MSVC
https://msdn.microsoft.com/en-us/library/9z1stfyw.aspx
orc already marks these register in compiler->save_regs,
but the actual saving and restoring was not done
https://bugzilla.gnome.org/show_bug.cgi?id=783931
Nirbheek Chauhan [Fri, 23 Sep 2016 11:01:11 +0000 (16:31 +0530)]
meson: Only use --version-script if not using MSVC
Tim-Philipp Müller [Sun, 28 May 2017 18:13:04 +0000 (19:13 +0100)]
meson: use find_library() on compiler object
The old stand-alone find_library() was deprecated.
Tim-Philipp Müller [Thu, 15 Oct 2015 19:29:15 +0000 (20:29 +0100)]
meson: add meson build
Includes contributions from Nirbheek Chauhan <nirbheek@centricular.com>
Igor Rondarev [Tue, 28 Feb 2017 09:23:55 +0000 (12:23 +0300)]
orcx86: Don't hard-code register size to zero in orc_x86_emit_*() functions
Instead use the size passed as argument. Fixes segmentation fault on QNX.
https://bugzilla.gnome.org/show_bug.cgi?id=779319
Jan Schmidt [Fri, 28 Oct 2016 12:37:51 +0000 (23:37 +1100)]
orcx86: use HAVE_AMD64 and HAVE_I386 defines everywhere
Some places were checking for __amd64__ and __i386__ explicitly,
but MSVC doesn't define __amd64__ in 64-bit mode, so use the
define from config.h instead. Fixes incorrect asm generation
on 64-bit Windows
Sebastian Dröge [Wed, 31 Aug 2016 10:13:29 +0000 (13:13 +0300)]
Back to development
Sebastian Dröge [Wed, 31 Aug 2016 10:13:04 +0000 (13:13 +0300)]
Release 0.4.26
Josep Torra [Thu, 25 Aug 2016 13:45:57 +0000 (15:45 +0200)]
pkgconfig: add orc-test path to the -uninstalled .pc file
Expose orc-test library in the uninstalled pkgconfig file.
Wim Taymans [Wed, 24 Aug 2016 08:10:09 +0000 (10:10 +0200)]
use 64bit arithmetic to increment the stride
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=770295
Sebastian Dröge [Wed, 24 Aug 2016 16:11:18 +0000 (19:11 +0300)]
orcx86: Fix generation of ModR/M / SIB bytes for the EBP, R12, R13 registers
See http://wiki.osdev.org/X86-64_Instruction_Encoding#ModR.2FM
ESP and R12 are to be handled exactly the same, that is the addressing is
done with SIB instead of directly.
EBP and R13 have a special case for Mod 00, where they're expecting RIP/EIP
plus 32 bit displacement. If we handle them like all other registers, we would
instead of addressing offset 0, address something relative to the instruction
pointer and make part of the following instruction the 32 bit displacement.
Instead of using Mod 00 for offset 0 like for all other registers, we use Mod
01 and a 8 bit displacement of 0.
On Windows this rather low-level bug caused problems at a rather
high-level in the ORC video conversion code, where a movdqu was eating the
following paddw instruction and tried to load data from a rather random memory
location.
For whatever reason this didn't cause any other big problems in other ORC
generated code, and it also only seemed to have caused problems on Windows.
https://bugzilla.gnome.org/show_bug.cgi?id=765713