V4 JIT: save/restore ebx (GOT ptr) on linux/x86.

On linux/x86, ebx is used to store the global offset table. When using
this register for temporary values, we have to save it at the entry of
a generated function, and restore it before doing calls and at the end.

Task-number: QTBUG-36289
Change-Id: I30194be3ce44f58b793ee52f6201906bcb68d46a
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
V4: fix range sorting

When a life-time interval is split from another interval, it has to come
before an interval that starts at the same position but is not split.

This also means that a means that the all ranges in a split interval
are uses, which is important for allocation: all incoming parameters for
an operation need to be allocated before allocating a register for the
result as the result will only start its life "at the end" of the
operation.

This patch fixes a problem register allocation is done in a function
where register pressure is high (e.g. on platforms that have few
registers to start with). Specifically, crypto.js on x86 triggered it.

Change-Id: Iee3e5d82a887b8de573dfc23513844143d0c8073
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
V4 regalloc: fix interval splitting when register pressure is high.

When a register is needed for an interval, but none is available, one
of the used registers will be chosen and spilled to the stack (meaning
it will be split) before the current position. However, if a register
is used at the current position for an incoming parameter, its interval
has to be split after the current position. This patch adds/fixes the
latter case.

This fixes crypto.js on x86. The specific problem there was that the
result of an operation needed a register, and chose the one from one
of the incoming parameters (which then should get spilled/split).
However, this interval was already split, and started exactly at that
the current position. So splitting before the current position did
nothing, resulting in it staying alive and using the same register as
the result. So any subsequent use of would have the invalid value.

Task-number: QTBUG-36430
Change-Id: I228fc210b009aa0b16b08a374fc955fabfbb6d12
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Revert "Skip unstable test"

This reverts commit 8e0c5b59f57b51a0dc80d3d8274202776c6e03df.

This test doesn't fail any more.

Task-number: QTBUG-23976
Change-Id: I77704e7811c4c335cb5836ba7645a8804c13e12d
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Fix backend API, broken since 5.2.0

Without this change, it is not possible to implement a custom context
without also implementing a renderloop.

Change-Id: Iac2aa732251cdf7221b28f665394cdd336a3d846
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Avoid out-of-bound accesses in Qt Quick example code

Task-number: QTBUG-36197

Change-Id: I5545c36a1ce9ea6c2451c92e0e79f65e5ab26c68
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
[Regression] Fix lazy binding evaluation

Commit 04774bb14c81688f86a2b31b8624bde8ebf59062 long time ago introduced the
concept of fixed order binding initialization with lazy evaluation, where a bit
is reserved for each binding that indicates whether it's been initialized the
first time or not. When reading a property on a QObject, we'd check if the
corresponding binding for the property has been initialized or not and flush
(i.e. execute) the binding if necessary.

As part of the V4/V8 clean-up, commit 1eb41200948ab414f1c47d93123b41c547a993df
removed the StoreV8Binding instruction, which made the call for setting the
this-binding-is-not-evaluated-yet bit. Nowadays we only use StoreBinding, for
which this optimization was never implemented (and not needed really). Now that
we have a unified JS code path, we need to set the pending binding bit and also
make sure that we call flushPendingBinding for any JS side property access
(accelerated or not).

Also flushPendingBindingImpl had two bugs:

   * In an attempt of trying to find the binding to flush, it could happen that
     we'd try to flush a previously destroyed binding (m_mePtr is null), so
     the b variable would remain the first binding in the object and we'd flush
     the wrong one (instead of none). Added a missing check to verify that the
     property index matches.
   * Also resetting the mePtr must be done through clear(), to ensure that the
     pointer in bindValues in the VME is also cleared, to avoid re-enabling the
     same binding again in complete();

Task-number: QTBUG-36441

Change-Id: Icdb0c8fb036051fd5d6c4d33b10cd0c0ed9a9d5c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Improve Scene Graph - Simple Material example documentation.

Change-Id: I5b77f7590c9f2cea9305014b8a9d4ab3a387eaa3
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Fix alignment exception in newCallContext on ARM

CallContext::locals was not at multiple of 8, which caused
an alignment exception on ARM. Size for the context is
also increased.

Change-Id: I136418f89945cd3fec74463659107c6dab7cad0a
Reviewed-by: aavit <eirik.aavitsland@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Avoid renderlist rebuilds in the scene graph renderer.

Transform, material, opacity and geometry changes all used to trigger
full rebuilds, which meant that very little geometry could be retained
between frames. For instance, a rotating spinner on top of a gridview
this would cause a full rebuild where nothing is retained.

This change introduces new concept to the renderer: partial rebuilding
based on render order ranges. Since the render order of nodes is
strictly defined by their position in the tree and nothing else, we
should use that for the majority of rebuilds. When a change comes in
for a node, we invalidate its batch and all batches which it has
overlapping render orders with.

Render order rebuilds only happen when nodes are added and removed.

Change-Id: Ib4cb284164892b409e3fff5c492a54d60a5de2d7
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Doc: Merge duplicated example directories

examples/quick/customitems contains all the examples found in
examples/quick/ui-components, plus 2 more (maskedmousearea and
painteditem). There are some very minor differences between the
duplicated files, regarding the "smooth" property. Apart from that, the
examples are identical.

The only file that is unique to examples/quick/ui-components is
example-slideswitch.qdoc. Moving it does not change the generated HTML
filename. The other examples do not produce any documentation.

Change-Id: I507d9064a60fd1f3a1469c1e423d4c0a72c7dc41
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
Fix scenegraph backend API for material shaders.

Without this change, it is not possible to implement a custom renderer
(it has no way to compile or initialize material shaders).

Change-Id: Ie8778f739f3551f88f0d44ccb9769063a87ff276
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Updated documentation for QML Locale.measurementSystem

Added documentation for ImperialUSSystem and ImperialUKSystem.

Change-Id: I1a628121dce4a7566bd8769843c487e28f3dd6fe
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Fix exception thrown in slot without Qml Engine

Don't crash when an exception is thrown in a JS slot but we don't have
a Qml engine.

Change-Id: I1530d5c1c8cb9b9b33b9fdd0d45639fd4a0516f7
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>