On 11/24/18 11:29 AM, Christophe Lyon wrote:

> On Thu, 22 Nov 2018 at 18:30, Vladimir Makarov <vmaka...@redhat.com> 
> wrote:
>> The following patch fixes
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87718
>>
>> The patch adds a special treatment for moves with a hard register in
>> register cost and class calculation.
>>
>> The patch was bootstrapped and tested on x86-64 and ppc64.
>>
>> I found two testsuite regressions because of the patch. The expected
>> generated code for PR82361 test is too specific. GCC with the patch
>> generates the same quality code but with a different hard register on
>> x86-64. So I just changed the test for PR82361.
>>
>> Another test is for ppc64. I think the expected generated code for
>> this test is wrong. I'll submit a changed test for a discussion later.
>>
>> Although I spent much time on the solution and I think it is the
>> right one, the patch is in very sensitive area of RA and may affect
>> expected code generation for many targets. I am ready to work on the
>> new regressions as soon as they are found.
>>
>> The patch was committed as rev. 260385.
>>
> Hi,
>
> This patch introduced at least several ICEs on arm targets:
> on arm-none-linux-gnueabi --with-cpu=cortex-a9:
<snip>
> There are other regressions on the same targets, but not ICEs.
> I can report them later.
>
> Thanks,
>
> Christophe

Hi Christophe and Vladimir,

Here are the regressions seen on arm-none-linux-gnueabihf and arm-none-eabi.

FAIL: gcc.target/arm/armv8_2-fp16-move-1.c scan-assembler-times 
ldrh\\tr[0-9]+ 2
FAIL: gcc.target/arm/armv8_2-fp16-move-1.c scan-assembler-times 
vld1\\.16\\t{d[0-9]+\\[[0-9]+\\]}, \\[r[0-9]+\\] 2
FAIL: gcc.target/arm/armv8_2-fp16-move-1.c scan-assembler-times 
vmov\\.f16\\ts[0-9]+, r[0-9]+ 2
FAIL: gcc.target/arm/fp16-aapcs-1.c scan-assembler 
vmov(\\.f16)?\\tr[0-9]+, s[0-9]+
FAIL: gcc.target/arm/fp16-aapcs-1.c scan-assembler vmov(\\.f16)?\\ts0, 
r[0-9]+
FAIL: gcc.target/arm/fp16-aapcs-3.c scan-assembler-times vmov\\tr[0-9]+, 
s[0-2] 2
FAIL: gcc.target/arm/fp16-aapcs-3.c scan-assembler-times vmov\\ts0, 
r[0-9]+ 2

I didn't see a bug report for these, so I will open one.

It is not clear if the test cases should be adjusted because of your 
patch or if they are failing because of incorrect codegen. Attached is 
the code generated for armv8_2-fp16-move-1.c (one of the test files 
failing) with and without your patch.

Full command line used to compile and test armv8_2-fp16-move-1.c:

bin/gcc armv8_2-fp16-move-1.c -fno-diagnostics-show-caret 
-fno-diagnostics-show-line-numbers -fdiagnostics-color=never -O2 
-mfpu=fp-armv8 -march=armv8.2-a+fp16 -mfloat-abi=hard -ffat-lto-objects 
-fno-ident -S -o armv8_2-fp16-move-1.s.



        .arch armv8.2-a
        .eabi_attribute 28, 1
        .eabi_attribute 20, 1
        .eabi_attribute 21, 1
        .eabi_attribute 23, 3
        .eabi_attribute 24, 1
        .eabi_attribute 25, 1
        .eabi_attribute 26, 2
        .eabi_attribute 30, 2
        .eabi_attribute 34, 1
        .eabi_attribute 38, 1
        .eabi_attribute 18, 4
        .file   "armv8_2-fp16-move-1.c"
        .text
        .align  1
        .p2align 2,,3
        .global test_load_1
        .arch armv8.2-a
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_1, %function
test_load_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vld1.16 {d0[0]}, [r0]
        bx      lr
        .size   test_load_1, .-test_load_1
        .align  1
        .p2align 2,,3
        .global test_load_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_2, %function
test_load_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        add     r3, r0, r1, lsl #1
        vld1.16 {d0[0]}, [r3]
        bx      lr
        .size   test_load_2, .-test_load_2
        .align  1
        .p2align 2,,3
        .global test_store_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_store_1, %function
test_store_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vst1.16 {d0[0]}, [r0]
        bx      lr
        .size   test_store_1, .-test_store_1
        .align  1
        .p2align 2,,3
        .global test_store_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_store_2, %function
test_store_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vmov.f16        r3, s0  @ __fp16
        strh    r3, [r0, r1, lsl #1]    @ __fp16
        bx      lr
        .size   test_store_2, .-test_store_2
        .align  1
        .p2align 2,,3
        .global test_load_store_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_store_1, %function
test_load_store_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        ldrh    r3, [r2, r1, lsl #1]    @ __fp16
        strh    r3, [r0, r1, lsl #1]    @ __fp16
        bx      lr
        .size   test_load_store_1, .-test_load_store_1
        .align  1
        .p2align 2,,3
        .global test_load_store_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_store_2, %function
test_load_store_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        adds    r1, r1, #2
        add     r3, r2, r1, lsl #1
        add     r0, r0, r1, lsl #1
        vld1.16 {d0[0]}, [r3]
        vmov.f16        r3, s0  @ __fp16
        strh    r3, [r0, #-4]   @ __fp16
        bx      lr
        .size   test_load_store_2, .-test_load_store_2
        .align  1
        .p2align 2,,3
        .global test_select_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_1, %function
test_select_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #0
        vseleq.f16      s0, s1, s0
        bx      lr
        .size   test_select_1, .-test_select_1
        .align  1
        .p2align 2,,3
        .global test_select_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_2, %function
test_select_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #0
        vseleq.f16      s0, s1, s0
        bx      lr
        .size   test_select_2, .-test_select_2
        .align  1
        .p2align 2,,3
        .global test_select_3
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_3, %function
test_select_3:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmp.f32        s15, s14
        vmrs    APSR_nzcv, FPSCR
        vseleq.f16      s0, s1, s2
        bx      lr
        .size   test_select_3, .-test_select_3
        .align  1
        .p2align 2,,3
        .global test_select_4
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_4, %function
test_select_4:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmp.f32        s15, s14
        vmrs    APSR_nzcv, FPSCR
        vseleq.f16      s0, s2, s1
        bx      lr
        .size   test_select_4, .-test_select_4
        .align  1
        .p2align 2,,3
        .global test_select_5
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_5, %function
test_select_5:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s15, s1
        vcmpe.f32       s0, s15
        vmrs    APSR_nzcv, FPSCR
        bmi     .L17
        vmov    s1, s2  @ __fp16
.L17:
        vmov    s0, s1  @ __fp16
        bx      lr
        .size   test_select_5, .-test_select_5
        .align  1
        .p2align 2,,3
        .global test_select_6
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_6, %function
test_select_6:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s15, s1
        vcmpe.f32       s0, s15
        vmrs    APSR_nzcv, FPSCR
        bls     .L19
        vmov    s1, s2  @ __fp16
.L19:
        vmov    s0, s1  @ __fp16
        bx      lr
        .size   test_select_6, .-test_select_6
        .align  1
        .p2align 2,,3
        .global test_select_7
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_7, %function
test_select_7:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmpe.f32       s15, s14
        vmrs    APSR_nzcv, FPSCR
        vselgt.f16      s0, s1, s2
        bx      lr
        .size   test_select_7, .-test_select_7
        .align  1
        .p2align 2,,3
        .global test_select_8
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_8, %function
test_select_8:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmpe.f32       s15, s14
        vmrs    APSR_nzcv, FPSCR
        vselge.f16      s0, s1, s2
        bx      lr
        .size   test_select_8, .-test_select_8
        .align  1
        .p2align 2,,3
        .global test_compare_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_1, %function
test_compare_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmp.f32        s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      ne
        movne   r0, #0
        bx      lr
        .size   test_compare_1, .-test_compare_1
        .align  1
        .p2align 2,,3
        .global test_compare_
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_, %function
test_compare_:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmp.f32        s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      eq
        moveq   r0, #0
        bx      lr
        .size   test_compare_, .-test_compare_
        .align  1
        .p2align 2,,3
        .global test_compare_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_2, %function
test_compare_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      le
        movle   r0, #0
        bx      lr
        .size   test_compare_2, .-test_compare_2
        .align  1
        .p2align 2,,3
        .global test_compare_3
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_3, %function
test_compare_3:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      lt
        movlt   r0, #0
        bx      lr
        .size   test_compare_3, .-test_compare_3
        .align  1
        .p2align 2,,3
        .global test_compare_4
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_4, %function
test_compare_4:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      pl
        movpl   r0, #0
        bx      lr
        .size   test_compare_4, .-test_compare_4
        .align  1
        .p2align 2,,3
        .global test_compare_5
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_5, %function
test_compare_5:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      hi
        movhi   r0, #0
        bx      lr
        .size   test_compare_5, .-test_compare_5
        .section        .note.GNU-stack,"",%progbits
        .arch armv8.2-a
        .eabi_attribute 28, 1
        .eabi_attribute 20, 1
        .eabi_attribute 21, 1
        .eabi_attribute 23, 3
        .eabi_attribute 24, 1
        .eabi_attribute 25, 1
        .eabi_attribute 26, 2
        .eabi_attribute 30, 2
        .eabi_attribute 34, 1
        .eabi_attribute 38, 1
        .eabi_attribute 18, 4
        .file   "armv8_2-fp16-move-1.c"
        .text
        .align  1
        .p2align 2,,3
        .global test_load_1
        .arch armv8.2-a
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_1, %function
test_load_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vld1.16 {d0[0]}, [r0]
        bx      lr
        .size   test_load_1, .-test_load_1
        .align  1
        .p2align 2,,3
        .global test_load_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_2, %function
test_load_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        add     r3, r0, r1, lsl #1
        vld1.16 {d0[0]}, [r3]
        bx      lr
        .size   test_load_2, .-test_load_2
        .align  1
        .p2align 2,,3
        .global test_store_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_store_1, %function
test_store_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vst1.16 {d0[0]}, [r0]
        bx      lr
        .size   test_store_1, .-test_store_1
        .align  1
        .p2align 2,,3
        .global test_store_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_store_2, %function
test_store_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vmov.f16        r3, s0  @ __fp16
        strh    r3, [r0, r1, lsl #1]    @ __fp16
        bx      lr
        .size   test_store_2, .-test_store_2
        .align  1
        .p2align 2,,3
        .global test_load_store_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_store_1, %function
test_load_store_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vmov.f16        s0, r3  @ __fp16
        ldrh    r3, [r2, r1, lsl #1]    @ __fp16
        strh    r3, [r0, r1, lsl #1]    @ __fp16
        bx      lr
        .size   test_load_store_1, .-test_load_store_1
        .align  1
        .p2align 2,,3
        .global test_load_store_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_load_store_2, %function
test_load_store_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        adds    r1, r1, #2
        add     r0, r0, r1, lsl #1
        ldrh    r3, [r2, r1, lsl #1]    @ __fp16
        vmov.f16        s0, r3  @ __fp16
        strh    r3, [r0, #-4]   @ __fp16
        bx      lr
        .size   test_load_store_2, .-test_load_store_2
        .align  1
        .p2align 2,,3
        .global test_select_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_1, %function
test_select_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #0
        vseleq.f16      s0, s1, s0
        bx      lr
        .size   test_select_1, .-test_select_1
        .align  1
        .p2align 2,,3
        .global test_select_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_2, %function
test_select_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        cmp     r0, #0
        vseleq.f16      s0, s1, s0
        bx      lr
        .size   test_select_2, .-test_select_2
        .align  1
        .p2align 2,,3
        .global test_select_3
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_3, %function
test_select_3:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmp.f32        s15, s14
        vmrs    APSR_nzcv, FPSCR
        vseleq.f16      s0, s1, s2
        bx      lr
        .size   test_select_3, .-test_select_3
        .align  1
        .p2align 2,,3
        .global test_select_4
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_4, %function
test_select_4:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmp.f32        s15, s14
        vmrs    APSR_nzcv, FPSCR
        vseleq.f16      s0, s2, s1
        bx      lr
        .size   test_select_4, .-test_select_4
        .align  1
        .p2align 2,,3
        .global test_select_5
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_5, %function
test_select_5:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s14, s1
        vmov    s15, s1 @ __fp16
        vcmpe.f32       s0, s14
        vmrs    APSR_nzcv, FPSCR
        bmi     .L17
        vmov    s15, s2 @ __fp16
.L17:
        vmov    s0, s15 @ __fp16
        bx      lr
        .size   test_select_5, .-test_select_5
        .align  1
        .p2align 2,,3
        .global test_select_6
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_6, %function
test_select_6:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s14, s1
        vmov    s15, s1 @ __fp16
        vcmpe.f32       s0, s14
        vmrs    APSR_nzcv, FPSCR
        bls     .L19
        vmov    s15, s2 @ __fp16
.L19:
        vmov    s0, s15 @ __fp16
        bx      lr
        .size   test_select_6, .-test_select_6
        .align  1
        .p2align 2,,3
        .global test_select_7
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_7, %function
test_select_7:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmpe.f32       s15, s14
        vmrs    APSR_nzcv, FPSCR
        vselgt.f16      s0, s1, s2
        bx      lr
        .size   test_select_7, .-test_select_7
        .align  1
        .p2align 2,,3
        .global test_select_8
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_select_8, %function
test_select_8:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s15, s0
        vcvtb.f32.f16   s14, s1
        vcmpe.f32       s15, s14
        vmrs    APSR_nzcv, FPSCR
        vselge.f16      s0, s1, s2
        bx      lr
        .size   test_select_8, .-test_select_8
        .align  1
        .p2align 2,,3
        .global test_compare_1
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_1, %function
test_compare_1:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmp.f32        s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      ne
        movne   r0, #0
        bx      lr
        .size   test_compare_1, .-test_compare_1
        .align  1
        .p2align 2,,3
        .global test_compare_
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_, %function
test_compare_:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmp.f32        s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      eq
        moveq   r0, #0
        bx      lr
        .size   test_compare_, .-test_compare_
        .align  1
        .p2align 2,,3
        .global test_compare_2
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_2, %function
test_compare_2:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      le
        movle   r0, #0
        bx      lr
        .size   test_compare_2, .-test_compare_2
        .align  1
        .p2align 2,,3
        .global test_compare_3
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_3, %function
test_compare_3:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      lt
        movlt   r0, #0
        bx      lr
        .size   test_compare_3, .-test_compare_3
        .align  1
        .p2align 2,,3
        .global test_compare_4
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_4, %function
test_compare_4:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      pl
        movpl   r0, #0
        bx      lr
        .size   test_compare_4, .-test_compare_4
        .align  1
        .p2align 2,,3
        .global test_compare_5
        .syntax unified
        .thumb
        .thumb_func
        .fpu fp-armv8
        .type   test_compare_5, %function
test_compare_5:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        vcvtb.f32.f16   s0, s0
        vcvtb.f32.f16   s1, s1
        mov     r0, #-1
        vcmpe.f32       s0, s1
        vmrs    APSR_nzcv, FPSCR
        it      hi
        movhi   r0, #0
        bx      lr
        .size   test_compare_5, .-test_compare_5
        .section        .note.GNU-stack,"",%progbits

Reply via email to