Mercurial > projects > ldc
changeset 1075:34bc1945bc85
Factor out some common code between X86 and X86_64, and supply *_real versions
of all floating point intrinsics that exist whether reals are 80-bit or 64-bit.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 09 Mar 2009 21:38:06 +0100 |
parents | d9820e08bb84 |
children | 39b7c32cd010 |
files | runtime/import/ldc/intrinsics.di |
diffstat | 1 files changed, 47 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/import/ldc/intrinsics.di Mon Mar 09 16:25:45 2009 +0100 +++ b/runtime/import/ldc/intrinsics.di Mon Mar 09 21:38:06 2009 +0100 @@ -19,6 +19,11 @@ static assert(false, "This module is only valid for LDC"); } +version(X86) + version = Reals_80Bit; +else version(X86_64) + version = Reals_80Bit; + // // CODE GENERATOR INTRINSICS // @@ -106,16 +111,17 @@ float llvm_sqrt_f32(float val); pragma(intrinsic, "llvm.sqrt.f64") double llvm_sqrt_f64(double val); -version(X86) + +version(Reals_80Bit) { -pragma(intrinsic, "llvm.sqrt.f80") - real llvm_sqrt_f80(real val); + pragma(intrinsic, "llvm.sqrt.f80") + real llvm_sqrt_f80(real val); + alias llvm_sqrt_f80 llvm_sqrt_real; } - -version(X86_64) +else { -pragma(intrinsic, "llvm.sqrt.f80") - real llvm_sqrt_f80(real val); + pragma(intrinsic, "llvm.sqrt.f64") + real llvm_sqrt_real(real val); } @@ -125,16 +131,17 @@ float llvm_sin_f32(float val); pragma(intrinsic, "llvm.sin.f64") double llvm_sin_f64(double val); -version(X86) + +version(Reals_80Bit) { -pragma(intrinsic, "llvm.sin.f80") - real llvm_sin_f80(real val); + pragma(intrinsic, "llvm.sin.f80") + real llvm_sin_f80(real val); + alias llvm_sin_f80 llvm_sin_real; } - -version(X86_64) +else { -pragma(intrinsic, "llvm.sin.f80") - real llvm_sin_f80(real val); + pragma(intrinsic, "llvm.sin.f64") + real llvm_sin_real(real val); } @@ -144,16 +151,17 @@ float llvm_cos_f32(float val); pragma(intrinsic, "llvm.cos.f64") double llvm_cos_f64(double val); -version(X86) + +version(Reals_80Bit) { -pragma(intrinsic, "llvm.cos.f80") - real llvm_cos_f80(real val); + pragma(intrinsic, "llvm.cos.f80") + real llvm_cos_f80(real val); + alias llvm_cos_f80 llvm_cos_real; } - -version(X86_64) +else { -pragma(intrinsic, "llvm.cos.f80") - real llvm_cos_f80(real val); + pragma(intrinsic, "llvm.cos.f64") + real llvm_cos_real(real val); } @@ -164,17 +172,19 @@ pragma(intrinsic, "llvm.powi.f64") double llvm_powi_f64(double val, int power); -version(X86) + +version(Reals_80Bit) { -pragma(intrinsic, "llvm.powi.f80") - real llvm_powi_f80(real val, int power); + pragma(intrinsic, "llvm.powi.f80") + real llvm_powi_f80(real val, int power); + alias llvm_powi_f80 llvm_powi_real; +} +else +{ + pragma(intrinsic, "llvm.powi.f64") + real llvm_powi_real(real val, int power); } -version(X86_64) -{ -pragma(intrinsic, "llvm.powi.f80") - real llvm_powi_f80(real val, int power); -} // The 'llvm.pow.*' intrinsics return the first operand raised to the specified (positive or negative) power. @@ -183,16 +193,17 @@ pragma(intrinsic, "llvm.pow.f64") double llvm_pow_f64(double val, double power); -version(X86) + +version(Reals_80Bit) { -pragma(intrinsic, "llvm.pow.f80") - real llvm_pow_f80(real val, real power); + pragma(intrinsic, "llvm.pow.f80") + real llvm_pow_f80(real val, real power); + alias llvm_pow_f80 llvm_pow_real; } - -version(X86_64) +else { -pragma(intrinsic, "llvm.pow.f80") - real llvm_pow_f80(real val, real power); + pragma(intrinsic, "llvm.pow.f64") + real llvm_pow_real(real val, real power); }