I is the base integer instructions
M is integer multiplication
A is atomic
F is single precision float
D is double precision
G is shorthand for all of the above + 2 others that I honestly have no idea what they do
I is the base integer instructions
M is integer multiplication
A is atomic
F is single precision float
D is double precision
G is shorthand for all of the above + 2 others that I honestly have no idea what they do
The original RV32I and RV64I required some control registers for high frequency counters and instruction counters. You also needed the instructions to access these registers. This proved to be too complex for the simplest implementations, so recently (five years ago?) this functionality has been moved to their own extensions.
Including these extensions in G makes the current G have the same functionality as the original G.
i.e. features have not been removed after ratification.
CSR (i.e. status) register and instruction fence extensions. Instruction fences are most useful in cases where you modify text section during runtime (e.g. JIT or code hot reload) such that you need to ensure the consistency of code across different harts