diff options
author | nikolay serdjuk <nikolay.y.serdjuk@intel.com> | 2015-01-20 17:03:02 +0600 |
---|---|---|
committer | buzbee <buzbee@google.com> | 2015-02-20 09:01:38 -0800 |
commit | 55693289c9f6c616e195e7b4ea3fe8e10c0681a6 (patch) | |
tree | ee43d85c19e61f5fdec76fbe6f26dcb6392b85a7 /test | |
parent | ba6d943827e6df52316a843468691de264ab4aa5 (diff) | |
download | art-55693289c9f6c616e195e7b4ea3fe8e10c0681a6.zip art-55693289c9f6c616e195e7b4ea3fe8e10c0681a6.tar.gz art-55693289c9f6c616e195e7b4ea3fe8e10c0681a6.tar.bz2 |
ART: Some conditions should be stricter in GenInlinedMinMax()
When we inline Min or Max intrinsics of long data type in 32-bit
mode we should care about register overlap cases. I.e. when
result and operands share partially or entirely same registers.
We consider three cases:
a) If result is between two operands, then we fail to inline
because implementation tends to be overcomplicated.
b) Since we always copy the first operand into result, we
should check whether result and the second operand share
same registers. If so, we swap the second with the first one.
c) If operands share same registers then we just copy the
first operand into result and stop.
The algorithm requires many registers. Therefore, we try to
reuse some of them. This also needs check for overlap.
Change-Id: I1e327acedfdc63d9b434b21b41d75bb86c41f1d0
Diffstat (limited to 'test')
0 files changed, 0 insertions, 0 deletions