diff options
author | Lulu Cheng <chenglulu@loongson.cn> | 2023-08-31 19:11:23 +0800 |
---|---|---|
committer | Lulu Cheng <chenglulu@loongson.cn> | 2023-09-04 09:34:46 +0800 |
commit | 26aa5d9017104ee3a72de418e9a0a1e5c1e30313 (patch) | |
tree | 39243c07dad638b879d47cff8fad369fb714930a /gcc/tree-inline.h | |
parent | 124749a0f681cc20f7977708d5010174a20eb92e (diff) | |
download | gcc-26aa5d9017104ee3a72de418e9a0a1e5c1e30313.zip gcc-26aa5d9017104ee3a72de418e9a0a1e5c1e30313.tar.gz gcc-26aa5d9017104ee3a72de418e9a0a1e5c1e30313.tar.bz2 |
LoongArch: Optimize fixed-point and floating-point conversion operations.
Before optimization, the operation of taking fixed-point numbers from memory
and then forcing type conversion needs to be loaded into fixed-point registers
before conversion. After the optimization is completed, the fixed-point value
is directly transferred to the floating-point register for type conversion.
eg:
extern int a;
float
test(void)
{
return (float)a;
}
Assembly code before optimization:
pcalau12i $r12,%got_pc_hi20(a)
ld.d $r12,$r12,%got_pc_lo12(a)
ldptr.w $r12,$r12,0
movgr2fr.w $f0,$r12
ffint.s.w $f0,$f0
Optimized assembly code:
pcalau12i $r12,%got_pc_hi20(a)
ld.d $r12,$r12,%got_pc_lo12(a)
fld.s $f0,$r12,0
ffint.s.w $f0,$f0
gcc/ChangeLog:
* config/loongarch/loongarch.md: Allows fixed-point values to be loaded
from memory into floating-point registers.
gcc/testsuite/ChangeLog:
* gcc.target/loongarch/float-load.c: New test.
Diffstat (limited to 'gcc/tree-inline.h')
0 files changed, 0 insertions, 0 deletions