@@ -449,6 +449,15 @@ The ILP32E calling convention is not compatible with ISAs that have registers
449
449
that require load and store alignments of more than 32 bits. In particular, this
450
450
calling convention must not be used with the D ISA extension.
451
451
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
+
452
461
=== Named ABIs
453
462
454
463
This specification defines the following named ABIs:
@@ -493,10 +502,30 @@ LP64Q:: LP64 with hardware floating-point calling
493
502
convention for ABI_FLEN=128 (i.e. <<ELFCLASS64,ELFCLASS64>> and
494
503
<<EF_RISCV_FLOAT_ABI_QUAD,EF_RISCV_FLOAT_ABI_QUAD>>).
495
504
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.
500
529
501
530
The *F ABIs require the *F ISA extension, the *D ABIs require the *D ISA
502
531
extension, and the LP64Q ABI requires the Q ISA extension.
@@ -535,7 +564,7 @@ There are two conventions for C/{Cpp} type sizes and alignments.
535
564
ILP32, ILP32F, ILP32D, and ILP32E:: Use the following type sizes and
536
565
alignments (based on the ILP32 convention):
537
566
+
538
- .C/{Cpp} type sizes and alignments for RV32
567
+ .C/{Cpp} type sizes and alignments for ILP32
539
568
[cols="4,>2,>3,4"]
540
569
[width=60%]
541
570
|===
@@ -561,7 +590,7 @@ alignments (based on the ILP32 convention):
561
590
LP64, LP64F, LP64D, and LP64Q:: Use the following type sizes and
562
591
alignments (based on the LP64 convention):
563
592
+
564
- .C/{Cpp} type sizes and alignments for RV64
593
+ .C/{Cpp} type sizes and alignments for LP64
565
594
[cols="4,>2,>3,4"]
566
595
[width=60%]
567
596
|===
0 commit comments