diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 7797e67317a..c7ae6e4da79 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -190,7 +190,7 @@ ASM_MISA_SPEC #define FLOAT_TYPE_SIZE 32 #define DOUBLE_TYPE_SIZE 64 -#define LONG_DOUBLE_TYPE_SIZE 128 +#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 128) /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY BITS_PER_WORD diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index ec792d382a5..4a8f8f77cdd 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -637,3 +637,11 @@ Enum(arcv_mpy_option) String(10c) Value(ARCV_MPY_OPTION_10C) -param=arcv-mpy-option= Target RejectNegative Joined Enum(arcv_mpy_option) Var(arcv_mpy_option) Init(ARCV_MPY_OPTION_2C) The type of MPY unit used by the RMX-100 core (to be used in combination with -mtune=rmx100) (default: 2c). + +mlong-double-64 +Target RejectNegative Negative(mlong-double-128) Mask(LONG_DOUBLE_64) +Use 64-bit long double. + +mlong-double-128 +Target RejectNegative Negative(mlong-double-64) InverseMask(LONG_DOUBLE_64) +Use 128-bit long double. diff --git a/gcc/testsuite/gcc.target/riscv/arcv-long-double-64.c b/gcc/testsuite/gcc.target/riscv/arcv-long-double-64.c new file mode 100644 index 00000000000..d531d3f5756 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arcv-long-double-64.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target rv32 } */ +/* { dg-options "-march=rv32gc -mabi=ilp32d -mlong-double-64" } */ + +int __attribute__((noinline)) +g (long double ld) +{ + return (int)ld; +} + +int +f (int x) +{ + return (long double) 3.141592; +} + +/* { dg-final { scan-assembler-times "__fixtfsi" 0 } } */