RISC-V Instruction Set Online Reference

Instructions · Registers · CSRs · ABI

RVOPcode is a developer-focused RISC-V instruction set online reference. Search by mnemonic, extension, function, scenario, register name, CSR name, or topic to quickly find instruction syntax, encodings, examples, pseudo-instruction expansions, ABI rules, and CSR field details.

Try: addi·jalr·mstatus·ra·call·I-type·function call
How To Search

Search directly by mnemonic, ABI name, CSR name, or topic keyword.

InstructionsRegistersCSRTopics↑ ↓ NavigateEnter Open

Recent Searches

No search history yet

Core Entry Points

Browse By Multiple Dimensions

By Scenario
Address & PointerBasic ArithmeticRegister OperationsImmediates & ConstantsBranch & JumpFunction Call & ReturnData LoadingData StoringStack & FrameComparison & DetectionType ConversionNumerical ComputingBit Operations & MasksDebug & MonitoringDevice & IOSystem & PrivilegeNetwork & Byte OrderArrays & Memory AccessPipeline padding and code alignmentReplace disabled instructions (nopout)Placeholder for performance profilingVector OperationsMultiplication & DivisionCrypto & SecurityLogical OperationsMemory OrderingConcurrent SynchronizationRV64-Specific OperationsAtomic & SyncSelf-modifying CodeJIT CompilationDynamic Code GenerationSignal Processing & DSPLoops & IterationResource ManagementCompressed & Code SizeShift & RotateFloating Point BasicCache & HintsInteger ComparisonBranchless SelectionSystem & PrivilegedExtension CompatibilityConcurrency & Multi-corePower OptimizationFloating-Point ConditionsFused Floating PointFloating-Point CompareFloating-Point Bit MoveDebugging Bit PatternsSign OperationsFloating-Point Bit ManipulationFP Type InspectionNaN DetectionSpecial Value HandlingMath LibraryScientific ComputingFloating-Point BasicGeometryFloating-Point MemoryData Load/StoreMachine LearningJavaScript EnginesWebAssemblyModular ArithmeticFloating-Point ConstantsCode Size OptimizationRV32 Double Data MovementFloating-Point RoundingNumeric Format HandlingDeep learning inferenceBF16 model deploymentMemory bandwidth reductionBF16 type promotionBF16↔FP32 interopStack & FunctionsSecurity MechanismsVector AccelerationMulti-precision ArithmeticBig Integer AddVectorized LoopsArray OpsBit MasksLogic OpsSignal ProcessingImage ProcessingSparse CompressionStream CompactionScalingDSPVector Float OpsNumerical AnalysisOutlier DetectionNumeric ConversionMixed PrecisionNormalizationConditional LoopMask TraversalMatrix OpsPolynomial EvalMatrix MultiplyConstant OffsetPolynomial EvaluationThreshold ClippingElement-wise CompareConditional AssignmentTernary OperatorElement-wise ComparisonSeries SummationAlternating SignGain AdjustmentReduction ResultScalar-Vector InterfaceReduction InitScalar to Element 0Vector InitConstant BroadcastPrecision ReductionStorage OptimizationTwo-Step RoundingHigh PrecisionAlternating Add/SubReciprocalDivision OptimizationNewton-RaphsonVector ReductionExtremumMinimumVector SumDot ProductHigh-Perf ReductionVector NormalizationConstant Minus VectorSign CopyAbsolute ValueSign FlipConditional NegateConditional Sign FlipMath OpsVector NormDifferencesHigh-Precision AccumPrecision PromotionHigh-Precision MatrixMixed-Precision MLHigh-Precision SumWidening SumHigh-Precision DifferenceSequence GenLoop CounterGather IndexSparse IndexingCompress HelperConditional GatherMemory LoadArray TraversalMask Save/RestoreContext SwitchSparse AccessIndirect AddressingStrided ArraysUnordered Indirect LoadConvolutionMatrix/TensorMulti-Precision AddBigIntCarry PropagationScale-AccumulateData ClippingThresholdingMask WideningNaN CheckConditional BranchMulti-Precision SubLoop TerminationData-Dependent ExitConditional ExecutionRange CheckGeneral MultiplyFixed-PointFractionalCompiler ShuffleFixed-Point ConversionDifferenceError AccumulationFixed-Point ScalingFlag SettingMask MergingLoop ConditionMask DensityGlobal AggregateConditionModuloCyclic ComputationTable LookupReorderCompress/DecompressLarge Table LookupSparse DataSymmetric RangeComplementContiguous Array WriteStripmining LoopVector LengthVector State RestoreNarrow Data WideningType PromotionData ShiftShift RegisterPower-of-2 MultiplyBitfield OpsSave/restore vector maskContext switchingMask debuggingFixed-point DSPAudio/video processingOverflow-safe computationVector sumDot productStatistical aggregationMask Condition CombineIntersection FilterPredicate LogicFunctionally Complete LogicMask NegationMask ClearCondition FilteringMask DifferenceMask ToggleMask MergeCondition UnionMask Condition SynthesisLogic ImplicationMask EqualityBit MatchPerformanceData ProtectionKey ScheduleHash AlgorithmsChinese National CryptoEndianness conversionBit-order reversalCRC algorithmsForward-edge CFIIndirect call/jump markingSecurity hardeningM-mode handler returnFirmware/SEE returnOS kernel exception/interrupt returnIdle loop power savingLow-power waitingTLB sync after page table modFlush after munmap/mprotectAddress space switchDebugger returnHardware breakpoint resumeVirtualization Memory MgmtHypervisor Page-Table SyncVM SwitchHypervisor Device EmulationGuest Memory AccessVirtualized Instruction SimulationOS InterfaceMemory ManagementTranslation InvalidationTLB ShootdownVirtualizationCode Optimization

Instruction of the Day

Register Quick Reference

RV32 / RV64 Compare
View All →
RegisterABIRoleSaved by
x0zeroZero constantN/A
x1raFunction return addressCaller
x2spStack pointerCallee
x3gpGlobal pointer; unallocatable and not modified by normal procedures.N/A
x4tpThread pointer for accessing thread-local storage (TLS); ordinary procedures should not modify it.N/A
x5t0Temporary / alternate link registerCaller
x10a0Argument / Return valueCaller
x11a1Argument / Return valueCaller