|  | .. contents:: | 
|  | .. sectnum:: | 
|  |  | 
|  | ========================== | 
|  | Clang implementation notes | 
|  | ========================== | 
|  |  | 
|  | This document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set. | 
|  |  | 
|  | Versions | 
|  | ======== | 
|  |  | 
|  | Clang defined "CPU" versions, where a CPU version of 3 corresponds to the current eBPF ISA. | 
|  |  | 
|  | Clang can select the eBPF ISA version using ``-mcpu=v3`` for example to select version 3. | 
|  |  | 
|  | Arithmetic instructions | 
|  | ======================= | 
|  |  | 
|  | For CPU versions prior to 3, Clang v7.0 and later can enable ``BPF_ALU`` support with | 
|  | ``-Xclang -target-feature -Xclang +alu32``.  In CPU version 3, support is automatically included. | 
|  |  | 
|  | Jump instructions | 
|  | ================= | 
|  |  | 
|  | If ``-O0`` is used, Clang will generate the ``BPF_CALL | BPF_X | BPF_JMP`` (0x8d) | 
|  | instruction, which is not supported by the Linux kernel verifier. | 
|  |  | 
|  | Atomic operations | 
|  | ================= | 
|  |  | 
|  | Clang can generate atomic instructions by default when ``-mcpu=v3`` is | 
|  | enabled. If a lower version for ``-mcpu`` is set, the only atomic instruction | 
|  | Clang can generate is ``BPF_ADD`` *without* ``BPF_FETCH``. If you need to enable | 
|  | the atomics features, while keeping a lower ``-mcpu`` version, you can use | 
|  | ``-Xclang -target-feature -Xclang +alu32``. |