OSDN Git Service

Move caller-saves saving/restoring to ReadBarrierMarkRegX.
authorRoland Levillain <rpl@google.com>
Wed, 20 Jul 2016 10:32:19 +0000 (11:32 +0100)
committerRoland Levillain <rpl@google.com>
Thu, 21 Jul 2016 10:21:20 +0000 (11:21 +0100)
commit4359e61927866c254bc2d701e3ea4c48de10b79c
tree05d274ecd6b5ff6eb890f64cd3bb670c7170bf15
parent2be946bbf995496fe56364d9b7c4957fcb6aeec5
Move caller-saves saving/restoring to ReadBarrierMarkRegX.

Instead of saving/restoring live caller-save registers
before/after the call to read barrier mark entry points
ReadBarrierMarkRegX, have these entry points save/restore
all the caller-save registers themselves (except register
rX, which contains the return value).

Also refactor the assembly code of these entry points
using macros.

* Boot image code size variation on Nexus 5X
  (aosp_bullhead-userdebug build):
  - total ARM64 framework Oat files size change:
    119196792 bytes -> 115575920 bytes (-3.04%)
  - total ARM framework Oat files size change:
    100435212 bytes -> 97621188 bytes (-2.80%)

* Benchmarks (ARM64) score variations on Nexus 5X
  (aosp_bullhead-userdebug build):
  - RitzPerf (lower is better)
    - average score difference: -2.71%
  - CaffeineMark (higher is better)
    - no real difference for most tests
      (absolute variation lower than 1%)
    - better score on the "Method" benchmark:
      score variation 41253 -> 44891 (+8.82%)

Test: ART host and target (ARM, ARM64) tests.
Bug: 29506760
Bug: 12687968
Change-Id: I881bf73139a3f1c2bee9ffc6fc8c00f9a392afa6
14 files changed:
compiler/optimizing/code_generator.h
compiler/optimizing/code_generator_arm.cc
compiler/optimizing/code_generator_arm64.cc
compiler/optimizing/code_generator_x86.cc
compiler/optimizing/code_generator_x86_64.cc
runtime/arch/arm/entrypoints_init_arm.cc
runtime/arch/arm/quick_entrypoints_arm.S
runtime/arch/arm64/entrypoints_init_arm64.cc
runtime/arch/arm64/quick_entrypoints_arm64.S
runtime/arch/x86/entrypoints_init_x86.cc
runtime/arch/x86/quick_entrypoints_x86.S
runtime/arch/x86_64/entrypoints_init_x86_64.cc
runtime/arch/x86_64/quick_entrypoints_x86_64.S
runtime/oat.h