OSDN Git Service

ART: Special-case cb(n)z even for in-reg constant
authorAndreas Gampe <agampe@google.com>
Sat, 26 Jul 2014 08:40:39 +0000 (01:40 -0700)
committerAndreas Gampe <agampe@google.com>
Sat, 26 Jul 2014 19:58:38 +0000 (12:58 -0700)
commit0237ac84b1459cb1718dce23f3572ae2fe1bd77e
treed868e18ba3038cf3dd199e2810d11dd9683b29df
parentf071e86c901a230f55e76bc6b55e19cca16a74cb
ART: Special-case cb(n)z even for in-reg constant

Call out to OpCmpImmBranch in GenCompareAndBranch if the constant
is zero and we are testing == or !=, even when zero has been loaded
to a register already. This avoids a register size mismatch on 64b
architectures when basically doing a null check, and generally
squashes a cmp + branch to a cbz or cbnz on Arm and Mips. X86 is
not degraded.

Bug: 16562601

(cherry picked from commit b07c1f9f4d6088ca2d4c1a10819e57b19acf7f22)

Change-Id: I42701e827feb848470aa991297755d808fa0a077
compiler/dex/quick/gen_common.cc