Avoid flushing the icache unnecessarily when updating target addresses in code.
authorrmcilroy@chromium.org <rmcilroy@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 20 May 2014 09:21:45 +0000 (09:21 +0000)
committerrmcilroy@chromium.org <rmcilroy@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 20 May 2014 09:21:45 +0000 (09:21 +0000)
commit63199d0bfe7692138701cb5d155f1dc715689534
treec583587b8b726a30b54f93b9e23e0e67b6328ad4
parent9d9fa6af31ec8da9aa2cd504a15ef3dd5c674d73
Avoid flushing the icache unnecessarily when updating target addresses in code.

This CL updates RelocInfo update operations and set_target_address_at to enable
skipping of the icache flush if it going to be batched up later.
Code::CopyFrom and Code::Relocate are modified to avoid individual icache
flushes since the whole code area will be flushed after the reloc info is
updated.

These changes reduce a regression when enabling the OOL constant pool on Arm,
since this change can cause MovT/MovW instructions for relocatable targets
if the constant pool is full.

Scores for Mandreel latency on a Nexus 5:
 - OOL CP disabled: 3533
 - OOL CP enabled, without this CL: 1825
 - OOL CP enabled, with change: 3015

R=rodolph.perfetta@arm.com, ulan@chromium.org

Review URL: https://codereview.chromium.org/284153004

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21380 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
src/arm/assembler-arm-inl.h
src/arm/assembler-arm.h
src/arm64/assembler-arm64-inl.h
src/arm64/assembler-arm64.h
src/assembler.h
src/ia32/assembler-ia32-inl.h
src/ia32/assembler-ia32.h
src/objects.cc
src/x64/assembler-x64-inl.h
src/x64/assembler-x64.h