This is an archive of the discontinued LLVM Phabricator instance.

[ARM] Add initial support for Custom Datapath Extension (CDE)
ClosedPublic

Authored by miyuki on Feb 5 2020, 5:33 AM.

Details

Summary

This patch adds assembly-level support for a new Arm M-profile
architecture extension, Custom Datapath Extension (CDE).

A brief description of the extension is available at
https://developer.arm.com/architectures/instruction-sets/custom-instructions

The latest specification for CDE is currently a beta release and is
available at
https://static.docs.arm.com/ddi0607/aa/DDI0607A_a_armv8m_arm_supplement_cde.pdf

CDE allows chip vendors to add custom CPU instructions. The CDE
instructions re-use the same encoding space as existing coprocessor
instructions (such as MRC, MCR, CDP etc.). Each coprocessor in range
cp0-cp7 can be configured as either general purpose (GCP) or custom
datapath (CDEv1). This configuration is defined by the CPU vendor and
is provided to LLVM using 8 subtarget features: cdecp0 ... cdecp7.

The semantics of CDE instructions are implementation-defined, but the
instructions are guaranteed to be pure (that is, they are stateless,
they do not access memory or any registers except their explicit
inputs/outputs).

CDE requires the CPU to support at least Armv8.0-M mainline
architecture. CDE includes 3 sets of instructions:

  • Instructions that operate on general purpose registers and NZCV flags
  • Instructions that operate on the S or D register file (require either FP or MVE extension)
  • Instructions that operate on the Q register file, require MVE

The user-facing names that can be specified on the command line are
the same as the 8 subtarget feature names. For example:

$ clang -target arm-none-none-eabi -march=armv8m.main+cdecp0+cdecp3

tells the compiler that the coprocessors 0 and 3 are configured as
CDEv1 and the remaining coprocessors are configured as GCP (which is
the default).

Diff Detail

Event Timeline

miyuki created this revision.Feb 5 2020, 5:33 AM
Herald added projects: Restricted Project, Restricted Project. · View Herald TranscriptFeb 5 2020, 5:33 AM
miyuki updated this revision to Diff 243902.Feb 11 2020, 9:22 AM

Added IT and VPT predication.

simon_tatham accepted this revision.Feb 17 2020, 7:14 AM
This revision is now accepted and ready to land.Feb 17 2020, 7:14 AM
This revision was automatically updated to reflect the committed changes.
SjoerdMeijer added inline comments.
clang/test/Driver/arm-cde.c
13

Probably good to add a test for v8.1-M too, and also with MVE

llvm/lib/Target/ARM/ARMInstrCDE.td
2

This file needs the copyright header

llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
8086

clang-format this?

@SjoerdMeijer, thanks for the heads up. Will fix in a followup patch.