5.1.8 · D3 · HinglishInstruction Set Architecture (ISA)

Worked examplesRISC-V extensions (M, A, F, D, V, C)

4,400 words20 min read↑ Read in English

5.1.8 · D3 · Hardware › Instruction Set Architecture (ISA) › RISC-V extensions (M, A, F, D, V, C)

Yeh deep dive the parent topic on RISC-V extensions ke under aati hai. Parent note ne tumhe bataya tha ki M, A, F aur D extensions kya karte hain. Yahan hum prove karte hain ki tum har case survive kar sako jo yeh instructions throw kar sakti hain — har sign, har zero, har overflow, har rounding trap.

Shuru karne se pehle, ek rule: jab bhi koi symbol aaye, pehle hum plain words mein batayenge ki uska matlab kya hai.


Scenario matrix

In chaar extensions ke har trap ka ek cell hota hai. Neeche diye examples par cell label laga hai, taki tum check kar sako ki kuch chhuta toh nahi.

# Cell (case class) Extension Kyun baith sakti hai galti
C1 Positive × positive, dono halves chahiye M 32×32 se 64 bits banta hai; MULH bhoolne se top half kho jaata hai
C2 Signed × signed, ek negative M sign bits upper half mein propagate karte hain
C3 Dono negative (product positive) M bit level par naive "do negatives" reasoning
C4 Mixed signed × unsigned M MULHSU — exam favourite
C5 Divide-by-zero / signed overflow M RISC-V trap nahi karta; defined values return karta hai
C6 Atomic increment, contended A LR/SC retry loop
C7 Atomic compare-and-swap A LR/SC se CAS banana
C8 Exact float add (power-of-two operands) F koi rounding nahi — "clean" case
C9 Inexact float add (0.1 + 0.2) F rounding error, classic bug
C10 Single vs double precision drift F/D kai adds ke baad accumulation
C11 Degenerate float: zero, aur F do zeros, ek value

Prerequisites jo tumhare paas khule reh sakte hain: 5.1.07-RISC-V-base-ISA, 5.2.03-IEEE-754-floating-point, 3.3.06-Instruction-encoding, 6.4.02-Cache-coherence-protocols.

Figure — RISC-V extensions (M, A, F, D, V, C)

Map padho (figure s01). Top row mein teen families hain: lavender M box ek 64-bit product ko do halves mein split karta hai, mint A box reservation dance dikhata hai, butter F/D box align-add-round pipeline dikhata hai. Har top box se ek arrow neeche jaata hai ek coral box ki taraf jisme exact case numbers hain (C1–C5, C6–C7, C8–C11) jinhe hum chalenge. Ise apni checklist ki tarah use karo — har coral cell ka apna worked example neeche hai.


M Extension worked examples

Ek multiply ko do instructions kyun chahiye?

Figure — RISC-V extensions (M, A, F, D, V, C)

Multiplier picture padho (figure s02). Do lavender 32-bit inputs rs1 aur rs2 mint "multiplier array" ko feed karte hain; uska arrow neeche ek butter bar ki taraf jaata hai jis par "full 64-bit product" likha hai. Us bar se do arrows nikalte hain: left wala coral MULH box ki taraf (bits [63:32]) aur right wala lavender MUL box ki taraf (bits [31:0]). Upar ki line, product = 2^32 * MULH + MUL, woh ek hi equation hai jo tumhe har M example ke liye chahiye — picture sirf dikhati hai ki har half physically kahan se aata hai.







A Extension worked examples

Is poore section ko drive karne wale do acronyms hain, toh koi bhi code se pehle inhe pin karte hain:

Code mein do RISC-V pseudo-instructions bhi milenge:

Figure — RISC-V extensions (M, A, F, D, V, C)

Reservation timeline padho (figure s03). Top coral row core A ki timeline hai, bottom lavender row core B ki, time mein left se right. Dono lr.w -> 5 se start karte hain (dono counter value 5 padhte hain aur address reserve karte hain). Core A ka sc.w 6 OK pehle fire karta hai; core B ki row par girta hua vertical "invalidate" arrow key moment hai — woh store core B ka reservation kill kar deta hai. Toh core B ka sc.w FAIL box kuch nahi karta, aur mint boxes dikhate hain core B loop karta hua: lr.w -> 6 (ab fresh value) phir sc.w 7 OK. Bottom mein butter bar, counter: 5 -> 6 -> 7, moral hai: koi update lose nahi hua.



F / D Extension worked examples

Parent note aur 5.2.03-IEEE-754-floating-point se single-precision layout yaad karo: jahan sign bit hai, 23-bit mantissa hai, 8-bit biased exponent hai.

Figure — RISC-V extensions (M, A, F, D, V, C)

Float pipeline padho (figure s04). Char boxes left se right flow karte hain, har ek agले se arrow se juda: lavender unpack (har number ko mein split karo), mint align (chote number ka mantissa shift karo taki dono ek exponent share karein), butter add mantissas, coral normalize + pack (sum ko wapas form mein daalo aur bits 0x3FE00000 likho). Neeche caption, "no bits fall off the shift → no rounding → exact", batata hai ki yeh particular example (C8) clean kyun hai: mint box ka align step kuch lose nahi karta.





Recall Self-test

M — MULH ki zaroorat kyun hai? ::: Ek 32×32 product 64 bits tak hota hai; MUL low 32 deta hai, MULH high 32. M — DIVU x, 0 RISC-V par kya return karta hai? ::: 0xFFFFFFFF (sab ones); koi trap nahi. A — LR/SC ka full form kya hai? ::: Load-Reserved / Store-Conditional. A — Core A ke store ke baad core B ka sc.w fail kyun hota hai? ::: Core A ki write ne us line par core B ka reservation invalidate kar diya. A — CAS ka kya matlab hai? ::: Compare-And-Swap: overwrite tab hi karo jab memory abhi bhi expected value hold karti ho. F — kya 1.5 + 0.25 exact hai? ::: Haan, dono aur unka sum two ke powers ke finite sums hain. F — kya 0.1 + 0.2 == 0.3? ::: Nahi; 0.1 aur 0.2 binary mein exact nahi hain, toh rounding alag hoti hai. F — ULP kya hota hai? ::: Ek representable float aur uske agले waale ke beech gap; lowest mantissa bit flip karne se sabse choti change. F — kya +0 aur -0 compare equal karte hain? ::: Haan, numerically equal; bits alag hain.