\chapter{RV32/64G Instruction Set Listings} One goal of the RISC-V project is that it be used as a stable software development target. For this purpose, we define a combination of a base ISA (RV32I or RV64I) plus selected standard extensions (IMAFD, Zicsr, Zifencei) as a ``general-purpose'' ISA, and we use the abbreviation G for the IMAFDZicsr\_Zifencei combination of instruction-set extensions. This chapter presents opcode maps and instruction-set listings for RV32G and RV64G. \input{opcode-map} Table~\ref{opcodemap} shows a map of the major opcodes for RVG. Major opcodes with 3 or more lower bits set are reserved for instruction lengths greater than 32 bits. Opcodes marked as {\em reserved} should be avoided for custom instruction-set extensions as they might be used by future standard extensions. Major opcodes marked as {\em custom-0} and {\em custom-1} will be avoided by future standard extensions and are recommended for use by custom instruction-set extensions within the base 32-bit instruction format. The opcodes marked {\em custom-2/rv128} and {\em custom-3/rv128} are reserved for future use by RV128, but will otherwise be avoided for standard extensions and so can also be used for custom instruction-set extensions in RV32 and RV64. We believe RV32G and RV64G provide simple but complete instruction sets for a broad range of general-purpose computing. The optional compressed instruction set described in Chapter~\ref{compressed} can be added (forming RV32GC and RV64GC) to improve performance, code size, and energy efficiency, though with some additional hardware complexity. As we move beyond IMAFDC into further instruction-set extensions, the added instructions tend to be more domain-specific and only provide benefits to a restricted class of applications, e.g., for multimedia or security. Unlike most commercial ISAs, the RISC-V ISA design clearly separates the base ISA and broadly applicable standard extensions from these more specialized additions. Chapter~\ref{extensions} has a more extensive discussion of ways to add extensions to the RISC-V ISA. \input{instr-table} \FloatBarrier Table~\ref{rvgcsrnames} lists the CSRs that have currently been allocated CSR addresses. The timers, counters, and floating-point CSRs are the only CSRs defined in this specification. \begin{table}[htb!] \begin{center} \begin{tabular}{|l|l|l|l|} \hline Number & Privilege & Name & Description \\ \hline \multicolumn{4}{|c|}{Floating-Point Control and Status Registers} \\ \hline \tt 0x001 & Read/write &\tt fflags & Floating-Point Accrued Exceptions. \\ \tt 0x002 & Read/write &\tt frm & Floating-Point Dynamic Rounding Mode. \\ \tt 0x003 & Read/write &\tt fcsr & Floating-Point Control and Status Register ({\tt frm} + {\tt fflags}). \\ \hline \multicolumn{4}{|c|}{Counters and Timers} \\ \hline \tt 0xC00 & Read-only &\tt cycle & Cycle counter for RDCYCLE instruction. \\ \tt 0xC01 & Read-only &\tt time & Timer for RDTIME instruction. \\ \tt 0xC02 & Read-only &\tt instret & Instructions-retired counter for RDINSTRET instruction. \\ \tt 0xC80 & Read-only &\tt cycleh & Upper 32 bits of {\tt cycle}, RV32I only. \\ \tt 0xC81 & Read-only &\tt timeh & Upper 32 bits of {\tt time}, RV32I only. \\ \tt 0xC82 & Read-only &\tt instreth & Upper 32 bits of {\tt instret}, RV32I only. \\ \hline \end{tabular} \end{center} \caption{RISC-V control and status register (CSR) address map.} \label{rvgcsrnames} \end{table}