]> granicus.if.org Git - clang/commit
[ARM] Allow passing/returning of __fp16 arguments
authorOliver Stannard <oliver.stannard@arm.com>
Thu, 3 Sep 2015 12:40:58 +0000 (12:40 +0000)
committerOliver Stannard <oliver.stannard@arm.com>
Thu, 3 Sep 2015 12:40:58 +0000 (12:40 +0000)
commit7b8d1668540f8663fdf307bf21e806ee11884851
tree614860e4ea2815e8f093e0a5f8811ee796eeaa65
parent4880d582bdb81db5f300b98c43c8666c0f832515
[ARM] Allow passing/returning of __fp16 arguments

The ACLE (ARM C Language Extensions) 2.0 allows the __fp16 type to be
used as a functon argument or return type (ACLE 1.1 did not).

The current public release of the AAPCS (2.09) states that __fp16 values
should be converted to single-precision before being passed or returned,
but AAPCS 2.10 (to be released shortly) changes this, so that they are
passed in the least-significant 16 bits of either a GPR (for base AAPCS)
or a single-precision register (for AAPCS-VFP). This does not change how
arguments are passed if they get passed on the stack.

This patch brings clang up to compliance with the latest versions of
both of these specs.

We can now set the __ARM_FP16_ARGS ACLE predefine, and we have always
been able to set the __ARM_FP16_FORMAT_IEEE predefine (we do not support
the alternative format).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246764 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Basic/Targets.cpp
lib/CodeGen/TargetInfo.cpp
lib/Driver/Tools.cpp
test/CodeGen/arm-fp16-arguments.c [new file with mode: 0644]
test/Preprocessor/arm-acle-6.5.c
test/Preprocessor/arm-target-features.c