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

Authored by miyuki on Feb 17 2020, 7:37 AM.


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

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

The latest specification for CDE is currently a beta release and is
available at

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

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).

Reviewers: simon_tatham, ostannard, dmgreen, eli.friedman

Reviewed By: simon_tatham

Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D74044


miyukiFeb 17 2020, 7:39 AM
Differential Revision
D74044: [ARM] Add initial support for Custom Datapath Extension (CDE)
rG5fdc9851d06f: AMDGPU/GlobalISel: Run the localizer pass