How do RV32 and RV64 results differ?
RV64 C/Zca writes one 64-bit register. RV32 requires Zclsd and writes an even/odd pair; the lower register receives the low 32 bits regardless of endianness.
RV64 C/Zca: load a 64-bit doubleword from rs1' plus offset; RV32 Zclsd: load into an even/odd register pair.
C.LD uses CL format with base rs1'. The byte offset is 0–248 in multiples of eight, already including scaling; add its zero-extended value to the old base. On RV64 C/Zca, a completed access writes 64 bits to rd'. On RV32 Zclsd, the even destination and following odd register receive the low/high 32 bits. Three-bit rd' and rs1' both select x8–x15.
Shows only official 16-bit fields, address/immediate calculation, and architectural state; it does not simulate a pipeline, cache, endianness implementation, or timing.
RV64 C / Zca
An address divisible by 8 is naturally aligned, so the address-misaligned option does not apply; access faults remain possible. The EEI defines misaligned completion. Memory values are already interpreted using EEI endianness.
RV64 C/Zca: load a 64-bit doubleword from rs1' plus offset; RV32 Zclsd: load into an even/odd register pair.
RV64 C/Zca, x10=0x2000 and mem64[0x2010] = 0x0123456789abcdef, with a completed access: c.ld x8, 16(x10) writes that 64-bit value to x8. On RV32 Zclsd, the same completed access writes x8=0x89abcdef and x9=0x01234567.
RV64 C/Zca writes one 64-bit register. RV32 requires Zclsd and writes an even/odd pair; the lower register receives the low 32 bits regardless of endianness.
RV32 Zclsd makes no such guarantee: the base retains its original value, but other destinations may have been updated. Only a completed load delivers the full pair result.