From 2ec750ca05a87ebc20e358e73cb375a2c844ad59 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 8 May 2018 17:45:51 +0200 Subject: Fix math.nbtheory linkage to asm Don't use extern for templated functions. If the function argument is const, it gets a different mangling. So define a private function for each floatint point length and call it from template. --- arch/x64/linux/math/log.S | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'arch/x64/linux/math/log.S') diff --git a/arch/x64/linux/math/log.S b/arch/x64/linux/math/log.S index 941e399..9c5ed35 100644 --- a/arch/x64/linux/math/log.S +++ b/arch/x64/linux/math/log.S @@ -1,22 +1,29 @@ .text -// logl. - .globl _D5tanya4math8nbtheory9__T2lnTeZ2lnFNaNbNiNfeZe - .type _D5tanya4math8nbtheory9__T2lnTeZ2lnFNaNbNiNfeZe, @function +// logf. + .globl _D5tanya4math8nbtheory4logfFNaNbNiNffZf + .type _D5tanya4math8nbtheory4logfFNaNbNiNffZf, @function + +_D5tanya4math8nbtheory4logfFNaNbNiNffZf: + movss %xmm0, -4(%rsp) // Put the argument onto the stack -_D5tanya4math8nbtheory9__T2lnTeZ2lnFNaNbNiNfeZe: fldln2 // Put lb(e) onto the FPU stack - fldt 8(%rsp) // Put the argument onto the FPU stack + flds -4(%rsp) // Put a float onto the FPU stack fyl2x // %st1 * lb(%st0) + + // The result is on the FPU stack, but returned in %xmm0 + fstps -4(%rsp) + movss -4(%rsp), %xmm0 + ret // log. - .globl _D5tanya4math8nbtheory9__T2lnTdZ2lnFNaNbNiNfdZd - .type _D5tanya4math8nbtheory9__T2lnTdZ2lnFNaNbNiNfdZd, @function + .globl _D5tanya4math8nbtheory3logFNaNbNiNfdZd + .type _D5tanya4math8nbtheory3logFNaNbNiNfdZd, @function -_D5tanya4math8nbtheory9__T2lnTdZ2lnFNaNbNiNfdZd: +_D5tanya4math8nbtheory3logFNaNbNiNfdZd: movsd %xmm0, -8(%rsp) // Put the argument onto the stack fldln2 // Put lb(e) onto the FPU stack @@ -30,19 +37,12 @@ _D5tanya4math8nbtheory9__T2lnTdZ2lnFNaNbNiNfdZd: ret -// logf. - .globl _D5tanya4math8nbtheory9__T2lnTfZ2lnFNaNbNiNffZf - .type _D5tanya4math8nbtheory9__T2lnTfZ2lnFNaNbNiNffZf, @function - -_D5tanya4math8nbtheory9__T2lnTfZ2lnFNaNbNiNffZf: - movss %xmm0, -4(%rsp) // Put the argument onto the stack +// logl. + .globl _D5tanya4math8nbtheory4loglFNaNbNiNfeZe + .type _D5tanya4math8nbtheory4loglFNaNbNiNfeZe, @function +_D5tanya4math8nbtheory4loglFNaNbNiNfeZe: fldln2 // Put lb(e) onto the FPU stack - flds -4(%rsp) // Put a float onto the FPU stack + fldt 8(%rsp) // Put the argument onto the FPU stack fyl2x // %st1 * lb(%st0) - - // The result is on the FPU stack, but returned in %xmm0 - fstps -4(%rsp) - movss -4(%rsp), %xmm0 - ret -- cgit v1.2.3