@@ -449,6 +449,15 @@ The ILP32E calling convention is not compatible with ISAs that have registers
449449that require load and store alignments of more than 32 bits. In particular, this
450450calling convention must not be used with the D ISA extension.
451451
452+ === RV64ILP32* Calling Convention
453+
454+ IMPORTANT: RV64ILP32* ABIs are experimental.
455+
456+ The RV64ILP32* calling convention is designed to be usable with the RV64* ISA.
457+ These calling conventions are composed of the integer & floating-point & vector
458+ calling conventions. When passed in registers or on the stack, pointer scalars
459+ (32-bit), narrower than XLEN bits (64-bit), are sign-extended to XLEN bits.
460+
452461=== Named ABIs
453462
454463This specification defines the following named ABIs:
@@ -493,10 +502,30 @@ LP64Q:: LP64 with hardware floating-point calling
493502convention for ABI_FLEN=128 (i.e. <<ELFCLASS64,ELFCLASS64>> and
494503<<EF_RISCV_FLOAT_ABI_QUAD,EF_RISCV_FLOAT_ABI_QUAD>>).
495504
496- The ILP32* ABIs are only compatible with RV32* ISAs, and the LP64* ABIs are
497- only compatible with RV64* ISAs. A future version of this specification may
498- define an ILP32 ABI for the RV64 ISA, but currently this is not a supported
499- operating mode.
505+ [[abi-rv64ilp32]]
506+ RV64ILP32:: Integer calling-convention only, hardware
507+ floating-point calling convention is not used (i.e. <<ELFCLASS32,ELFCLASS32>> and
508+ <<EF_RISCV_FLOAT_ABI_SINGLE,EF_RISCV_FLOAT_ABI_SINGLE>>).
509+
510+ [[abi-rv64ilp32f]]
511+ RV64ILP32F:: RV64ILP32 with hardware floating-point calling
512+ convention for ABI_FLEN=32 (i.e. <<ELFCLASS32,ELFCLASS32>> and
513+ <<EF_RISCV_FLOAT_ABI_SINGLE,EF_RISCV_FLOAT_ABI_SINGLE>>).
514+
515+ [[abi-rv64ilp32d]]
516+ RV64ILP32D:: RV64ILP32 with hardware floating-point calling
517+ convention for ABI_FLEN=64 (i.e. <<ELFCLASS32,ELFCLASS32>> and
518+ <<EF_RISCV_FLOAT_ABI_DOUBLE,EF_RISCV_FLOAT_ABI_DOUBLE>>).
519+
520+ [[abi-rv64ilp32q]]
521+ RV64ILP32Q:: RV64ILP32 with hardware floating-point calling
522+ convention for ABI_FLEN=128 (i.e. <<ELFCLASS32,ELFCLASS32>> and
523+ <<EF_RISCV_FLOAT_ABI_QUAD,EF_RISCV_FLOAT_ABI_QUAD>>).
524+
525+ The LP64* ABIs are only compatible with RV64* ISAs. The ILP32* are compatible
526+ with RV32* and RV64* ISAs.
527+
528+ NOTE: RV64ILP32* ABIs are experimental.
500529
501530The *F ABIs require the *F ISA extension, the *D ABIs require the *D ISA
502531extension, and the LP64Q ABI requires the Q ISA extension.
@@ -535,7 +564,7 @@ There are two conventions for C/{Cpp} type sizes and alignments.
535564ILP32, ILP32F, ILP32D, and ILP32E:: Use the following type sizes and
536565alignments (based on the ILP32 convention):
537566+
538- .C/{Cpp} type sizes and alignments for RV32
567+ .C/{Cpp} type sizes and alignments for ILP32
539568[cols="4,>2,>3,4"]
540569[width=60%]
541570|===
@@ -561,7 +590,7 @@ alignments (based on the ILP32 convention):
561590LP64, LP64F, LP64D, and LP64Q:: Use the following type sizes and
562591alignments (based on the LP64 convention):
563592+
564- .C/{Cpp} type sizes and alignments for RV64
593+ .C/{Cpp} type sizes and alignments for LP64
565594[cols="4,>2,>3,4"]
566595[width=60%]
567596|===
0 commit comments