Hi Tamar, On 8 June 2017 at 18:50, James Greenhalgh <james.greenha...@arm.com> wrote: > On Wed, Jun 07, 2017 at 12:38:27PM +0100, Tamar Christina wrote: >> Hi All, >> >> This patch allows the inlining of lrint when -fno-math-errno >> assuming that errno does not need to be set when the rounded value >> is not representable as a long. >> >> The case >> >> void f(double *a, long *b, double x) >> { >> *a = __builtin_rint(x); >> *b = __builtin_lrint(x); >> } >> >> now generates with -fno-math-errno: >> >> f: >> frintx d0, d0 >> fcvtzs x2, d0 >> str d0, [x0] >> str x2, [x1] >> ret >> >> When the flag is not used the same function call is emitted as before: >> >> f: >> stp x29, x30, [sp, -32]! >> frintx d1, d0 >> add x29, sp, 0 >> str x19, [sp, 16] >> mov x19, x1 >> str d1, [x0] >> bl lrint >> str x0, [x19] >> ldr x19, [sp, 16] >> ldp x29, x30, [sp], 32 >> ret >> >> Bootstrapped and regtested on aarch64-none-linux-gnu and no regressions. >> The patch also has no regressions on Spec2006. >> >> Ok for trunk? > > OK. > > Thanks, > James > >> >> gcc/ >> 2017-06-07 Tamar Christina <tamar.christ...@arm.com> >> >> * config/aarch64/aarch64.md (lrint<GPF:mode><GPI:mode>2): New. >> >> gcc/testsuite/ >> 2017-06-07 Tamar Christina <tamar.christ...@arm.com> >> >> * gcc.target/aarch64/lrint-matherr.h: New. >> * gcc.target/aarch64/inline-lrint_1.c: New. >> * gcc.target/aarch64/inline-lrint_2.c: New. >> * gcc.target/aarch64/no-inline-lrint_1.c: New. >> * gcc.target/aarch64/no-inline-lrint_2.c: New. > >
The tests gcc.target/aarch64/inline-lrint_1.c scan-assembler-times fcvtzs\tx[0-9]+, d[0-9]+ 3 gcc.target/aarch64/inline-lrint_1.c scan-assembler-times fcvtzs\tx[0-9]+, s[0-9]+ 3 gcc.target/aarch64/inline-lrint_1.c scan-assembler-times frintx\td[0-9]+, d[0-9]+ 3 gcc.target/aarch64/inline-lrint_1.c scan-assembler-times frintx\ts[0-9]+, s[0-9]+ 3 gcc.target/aarch64/no-inline-lrint_1.c scan-assembler-times frintx\td[0-9]+, d[0-9]+ 3 gcc.target/aarch64/no-inline-lrint_1.c scan-assembler-times frintx\ts[0-9]+, s[0-9]+ 3 fail on aarch64 bare-metal targets (and pass on aarch64-linux-gnu)