From 4359e61927866c254bc2d701e3ea4c48de10b79c Mon Sep 17 00:00:00 2001 From: Roland Levillain Date: Wed, 20 Jul 2016 11:32:19 +0100 Subject: 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 --- compiler/optimizing/code_generator.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'compiler/optimizing/code_generator.h') diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index 47e6625d07..5e6e175c67 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -80,7 +80,11 @@ class SlowPathCode : public DeletableArenaObject { virtual void EmitNativeCode(CodeGenerator* codegen) = 0; + // Save live core and floating-point caller-save registers and + // update the stack mask in `locations` for registers holding object + // references. virtual void SaveLiveRegisters(CodeGenerator* codegen, LocationSummary* locations); + // Restore live core and floating-point caller-save registers. virtual void RestoreLiveRegisters(CodeGenerator* codegen, LocationSummary* locations); bool IsCoreRegisterSaved(int reg) const { -- cgit v1.2.3-59-g8ed1b