LoongArch: TFmode is not allowed to be stored in the float register.
PR target/115752 gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_hard_regno_mode_ok_uncached): Replace UNITS_PER_FPVALUE with UNITS_PER_HWFPVALUE. * config/loongarch/loongarch.h (UNITS_PER_FPVALUE): Delete. gcc/testsuite/ChangeLog: * gcc.target/loongarch/pr115752.c: New test.
This commit is contained in:
parent
d7318f4cf8
commit
abeb6c8a62
3 changed files with 9 additions and 8 deletions
|
@ -6763,7 +6763,7 @@ loongarch_hard_regno_mode_ok_uncached (unsigned int regno, machine_mode mode)
|
|||
if (mclass == MODE_FLOAT
|
||||
|| mclass == MODE_COMPLEX_FLOAT
|
||||
|| mclass == MODE_VECTOR_FLOAT)
|
||||
return size <= UNITS_PER_FPVALUE;
|
||||
return size <= UNITS_PER_HWFPVALUE;
|
||||
|
||||
/* Allow integer modes that fit into a single register. We need
|
||||
to put integers into FPRs when using instructions like CVT
|
||||
|
|
|
@ -146,13 +146,6 @@ along with GCC; see the file COPYING3. If not see
|
|||
#define UNITS_PER_HWFPVALUE \
|
||||
(TARGET_SOFT_FLOAT ? 0 : UNITS_PER_FP_REG)
|
||||
|
||||
/* The largest size of value that can be held in floating-point
|
||||
registers. */
|
||||
#define UNITS_PER_FPVALUE \
|
||||
(TARGET_SOFT_FLOAT ? 0 \
|
||||
: TARGET_SINGLE_FLOAT ? UNITS_PER_FP_REG \
|
||||
: LA_LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT)
|
||||
|
||||
/* The number of bytes in a double. */
|
||||
#define UNITS_PER_DOUBLE (TYPE_PRECISION (double_type_node) / BITS_PER_UNIT)
|
||||
|
||||
|
|
8
gcc/testsuite/gcc.target/loongarch/pr115752.c
Normal file
8
gcc/testsuite/gcc.target/loongarch/pr115752.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
long double
|
||||
test (long double xx)
|
||||
{
|
||||
__asm ("" :: "f"(xx)); /* { dg-error "inconsistent operand constraints in an 'asm'" } */
|
||||
return xx + 1;
|
||||
}
|
Loading…
Add table
Reference in a new issue