brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 65a2618 Raw
71 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-apple-macosx %s -o - | FileCheck %s --check-prefix=CHECK-SOFT3; RUN: llc -mtriple=x86_64-apple-macosx -mattr=+f16c %s -o - | FileCheck %s --check-prefix=CHECK-F16C4 5define void @extendhfxf(ptr %outptr, ptr %inptr) nounwind {6; CHECK-SOFT-LABEL: extendhfxf:7; CHECK-SOFT:       ## %bb.0:8; CHECK-SOFT-NEXT:    pushq %rbx9; CHECK-SOFT-NEXT:    subq $16, %rsp10; CHECK-SOFT-NEXT:    movq %rdi, %rbx11; CHECK-SOFT-NEXT:    movzwl (%rsi), %edi12; CHECK-SOFT-NEXT:    callq ___extendhfsf213; CHECK-SOFT-NEXT:    movss %xmm0, {{[0-9]+}}(%rsp)14; CHECK-SOFT-NEXT:    flds {{[0-9]+}}(%rsp)15; CHECK-SOFT-NEXT:    fstpt (%rbx)16; CHECK-SOFT-NEXT:    addq $16, %rsp17; CHECK-SOFT-NEXT:    popq %rbx18; CHECK-SOFT-NEXT:    retq19;20; CHECK-F16C-LABEL: extendhfxf:21; CHECK-F16C:       ## %bb.0:22; CHECK-F16C-NEXT:    vpinsrw $0, (%rsi), %xmm0, %xmm023; CHECK-F16C-NEXT:    vcvtph2ps %xmm0, %xmm024; CHECK-F16C-NEXT:    vmovss %xmm0, -{{[0-9]+}}(%rsp)25; CHECK-F16C-NEXT:    flds -{{[0-9]+}}(%rsp)26; CHECK-F16C-NEXT:    fstpt (%rdi)27; CHECK-F16C-NEXT:    retq28  %in = load half, ptr %inptr29  %fp80 = fpext half %in to x86_fp8030  store x86_fp80 %fp80, ptr %outptr31  ret void32}33 34; FIXME: We don't currently provide __truncxfhf2, but we can't lower this as35; successive fptruncs (like we do fpext) because of double rounding.36; We also don't currently soft-float this call, like we do e.g., __truncsfhf2:37; the latter long predates the fp16 parameter passing ABI, so can't change.38; If we ever add a __truncxfhf2, we're not bound by existing ABI.39define void @truncxfhf(ptr %outptr, ptr %inptr) nounwind {40; CHECK-SOFT-LABEL: truncxfhf:41; CHECK-SOFT:       ## %bb.0:42; CHECK-SOFT-NEXT:    pushq %rbx43; CHECK-SOFT-NEXT:    subq $16, %rsp44; CHECK-SOFT-NEXT:    movq %rdi, %rbx45; CHECK-SOFT-NEXT:    fldt (%rsi)46; CHECK-SOFT-NEXT:    fstpt (%rsp)47; CHECK-SOFT-NEXT:    callq ___truncxfhf248; CHECK-SOFT-NEXT:    pextrw $0, %xmm0, %eax49; CHECK-SOFT-NEXT:    movw %ax, (%rbx)50; CHECK-SOFT-NEXT:    addq $16, %rsp51; CHECK-SOFT-NEXT:    popq %rbx52; CHECK-SOFT-NEXT:    retq53;54; CHECK-F16C-LABEL: truncxfhf:55; CHECK-F16C:       ## %bb.0:56; CHECK-F16C-NEXT:    pushq %rbx57; CHECK-F16C-NEXT:    subq $16, %rsp58; CHECK-F16C-NEXT:    movq %rdi, %rbx59; CHECK-F16C-NEXT:    fldt (%rsi)60; CHECK-F16C-NEXT:    fstpt (%rsp)61; CHECK-F16C-NEXT:    callq ___truncxfhf262; CHECK-F16C-NEXT:    vpextrw $0, %xmm0, (%rbx)63; CHECK-F16C-NEXT:    addq $16, %rsp64; CHECK-F16C-NEXT:    popq %rbx65; CHECK-F16C-NEXT:    retq66  %in = load x86_fp80, ptr %inptr67  %half = fptrunc x86_fp80 %in to half68  store half %half, ptr %outptr69  ret void70}71