OSDN Git Service

Build support for 32-bit armv8-a
authorIsaac Chen <ycchen@google.com>
Mon, 26 Jun 2017 12:23:26 +0000 (20:23 +0800)
committerIsaac Chen <ycchen@google.com>
Mon, 14 Aug 2017 06:05:20 +0000 (06:05 +0000)
commitd544fb7da025b805b6e9dd61c4bfabb9272271b2
treea0314f538ee7e4684b5499602a474fdd4626c547
parent248b5cb672a9eadde695edb7d73e9d1ed5cb0b7f
Build support for 32-bit armv8-a

The assembly in arm's generic strlen implementation contains deprecated
instruction sequence:
    it      eq  ; start of IT block
    ldreq   ... ; 32-bit T32 insruction in IT block deprecated in armv8
This will cause compiler error because of -Winline-asm and -Werror.

The fix here is to change the sequence:
    it      eq
    ldreq   ...
    bne     1f
to equivalent sequence:
    bne     1f
    ldr     ...
The resulted sequence is (1 instruction) shorter.

See ARM for ARMv8 for details:
F6.2 Partial Deprecation of IT
... All uses of IT that apply to instructions other than a single
subsequent 16-bit instruction from a restricted set are deprecated, ...

Bug: 62895439
Test: "bionic-unit-tests-static --gtest_filter=*strlen*" on Nexus 4
      (krait), emulator (armv7), and sailfish (armv8).
      The test binary for the first 2 is built with armv7-a as its
      TARGET_CPU_ARCH; The test binary for the last is built with
      armv8-a as its TARGET_2ND_CPU_ARCH.
      TARGET(_2ND)_CPU_VARIANTs of both binaries are set to "generic".

Change-Id: Ia2208b4e2ba2cad589975bc7b4617688cbb8826a
libc/arch-arm/generic/bionic/strlen.c