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
Loading
Please sign in to comment