OSDN Git Service

Optimizing String.Equals as an intrinsic (x86)
authoragicsaki <agicsaki@google.com>
Mon, 27 Jul 2015 17:25:10 +0000 (10:25 -0700)
committeragicsaki <agicsaki@google.com>
Fri, 31 Jul 2015 22:51:35 +0000 (15:51 -0700)
commit8ab7bd6c8b10ad58758c33a1dc9326212bd200e9
tree14b01d701a3bce6fd86d8e968f29cb51ad56caf2
parent8433bb8a3120d064de97a692d98341d9bc29a985
Optimizing String.Equals as an intrinsic (x86)

The third implementation of String.Equals.  I added an intrinsic
in x86 which is similar to the original java implementation of
String.equals: an instanceof check, null check, length check, and
reference equality check followed by a loop comparing strings
character by character.

Interesting Benchmarking Values:

Optimizing Compiler on Nexus Player
Intrinsic 15-30 Character Strings: 177 ns
Original 15-30 Character Strings: 275 ns
Intrinsic Null Argument: 59 ns
Original Null Argument: 137 ns
Intrinsic 100-1000 Character Strings: 1812 ns
Original 100-1000 Character Strings: 6334 ns

Bug: 21481923
Change-Id: Ia386e19b9dbfe0dac688b20ec93d8f90f67af47e
compiler/dex/quick/dex_file_method_inliner.cc
compiler/dex/quick/dex_file_method_inliner.h
compiler/optimizing/intrinsics.cc
compiler/optimizing/intrinsics_arm.cc
compiler/optimizing/intrinsics_arm64.cc
compiler/optimizing/intrinsics_list.h
compiler/optimizing/intrinsics_x86.cc
compiler/optimizing/intrinsics_x86_64.cc
runtime/quick/inline_method_analyser.h