diff options
author | xueliang.zhong <xueliang.zhong@linaro.org> | 2016-11-04 09:23:32 +0000 |
---|---|---|
committer | xueliang.zhong <xueliang.zhong@linaro.org> | 2016-11-24 11:39:20 +0000 |
commit | f51bc62a1d89a35fabaaf7e766d49502881fd591 (patch) | |
tree | eadb80d9e842476ed599a129a3babad27f7d2167 /compiler/driver/compiler_driver_test.cc | |
parent | 8f3435981e67e4b78caf0130f81dcd9a87af531e (diff) |
ARM: VIXL32: Improve codegen on CBZ/CBNZ
This patch improves codegen on CBZ/CBNZ.
CompareAndBranchIfZero/CompareAndBranchIfNonZero are introduced.
These two functions can generate CMP+Bcc or Cbz/Cbnz.
CMP+Bcc are generated by default.
If a hint is given (is_far_target = false) and rn and label
can all fit into Cbz/Cbnz, then Cbz/Cbnz is generated.
Prefer these two interfaces to using vixl32::MacroAssembler::Cbz/Cbnz.
In T32, Cbz/Cbnz instructions have following limitations:
- Far targets, which are over 126 bytes away, are not supported.
- Only low registers can be encoded.
- Backward branches are not supported.
Test: ART_USE_VIXL_ARM_BACKEND=true m test-art-host
Test: ART_USE_VIXL_ARM_BACKEND=true m test-art-target
Change-Id: I5d2ada19ea4f83dab78baf0cf78c72e99e58d946
Diffstat (limited to 'compiler/driver/compiler_driver_test.cc')
0 files changed, 0 insertions, 0 deletions