[ARM] Add ARMv8.2-A FP16 scalar instructions
authorOliver Stannard <oliver.stannard@arm.com>
Wed, 16 Dec 2015 11:35:44 +0000 (11:35 +0000)
committerOliver Stannard <oliver.stannard@arm.com>
Wed, 16 Dec 2015 11:35:44 +0000 (11:35 +0000)
commit8fb8da13e0d028aabf152edb15b31559ee278d97
treea8a7b7d880faa54d5bb375d0a8ea55ebce888c7b
parent586219957f81f6dfb53f65847aee9838d2977716
[ARM] Add ARMv8.2-A FP16 scalar instructions

ARMv8.2-A adds 16-bit floating point versions of all existing VFP
floating-point instructions. This is an optional extension, so all of
these instructions require the FeatureFullFP16 subtarget feature.

The assembly for these instructions uses S registers (AArch32 does not
have H registers), but the instructions have ".f16" type specifiers
rather than ".f32" or ".f64". The top 16 bits of each source register
are ignored, and the top 16 bits of the destination register are set to
zero.

These instructions are mostly the same as the 32- and 64-bit versions,
but they use coprocessor 9 rather than 10 and 11.

Two new instructions, VMOVX and VINS, have been added to allow packing
and extracting two 16-bit floats stored in the top and bottom halves of
an S register.

New fixup kinds have been added for the PC-relative load and store
instructions, but no ELF relocations have been added as they have a
range of 512 bytes.

Differential Revision: http://reviews.llvm.org/D15038

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255762 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
lib/Target/ARM/ARMInstrFormats.td
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrVFP.td
lib/Target/ARM/ARMSchedule.td
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
lib/Target/ARM/Disassembler/ARMDisassembler.cpp
lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
lib/Target/ARM/InstPrinter/ARMInstPrinter.h
lib/Target/ARM/MCTargetDesc/ARMAddressingModes.h
lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
lib/Target/ARM/MCTargetDesc/ARMFixupKinds.h
lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
test/MC/ARM/fullfp16-neg.s [new file with mode: 0644]
test/MC/ARM/fullfp16.s [new file with mode: 0644]
test/MC/Disassembler/ARM/fullfp16-arm-neg.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/fullfp16-arm.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/fullfp16-thumb-neg.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/fullfp16-thumb.txt [new file with mode: 0644]