[svn r66] Added support for imaginary floating point types

This commit is contained in:
Tomas Lindquist Olsen
2007-10-25 09:48:36 +02:00
parent 8e49b3c389
commit 1f13dbd766
11 changed files with 63 additions and 7 deletions

View File

@@ -328,10 +328,11 @@ llvm::Constant* RealExp::toConstElem(IRState* p)
{
Logger::print("RealExp::toConstElem: %s | %s\n", toChars(), type->toChars());
LOG_SCOPE;
const llvm::Type* fty = LLVM_DtoType(type);
if (type->ty == Tfloat32)
Type* t = LLVM_DtoDType(type);
const llvm::Type* fty = LLVM_DtoType(t);
if (t->ty == Tfloat32 || t->ty == Timaginary32)
return llvm::ConstantFP::get(fty,float(value));
else if (type->ty == Tfloat64 || type->ty == Tfloat80)
else if (t->ty == Tfloat64 || t->ty == Timaginary64 || t->ty == Tfloat80 || t->ty == Timaginary80)
return llvm::ConstantFP::get(fty,double(value));
assert(0);
return NULL;

View File

@@ -65,11 +65,20 @@ const llvm::Type* LLVM_DtoType(Type* t)
// floats
case Tfloat32:
case Timaginary32:
return llvm::Type::FloatTy;
case Tfloat64:
case Timaginary64:
case Tfloat80:
case Timaginary80:
return llvm::Type::DoubleTy;
// complex
case Tcomplex32:
case Tcomplex64:
case Tcomplex80:
assert(0 && "complex number types not yet implemented");
// pointers
case Tpointer: {
assert(t->next);

View File

@@ -1,7 +1,7 @@
#!/bin/bash
echo "removing old objects"
mkdir obj
mkdir -p obj
rm -f obj/*.bc
rm -f ../lib/*.bc

View File

@@ -0,0 +1,12 @@
// idouble
module typeinfo1.ti_idouble;
private import typeinfo1.ti_double;
class TypeInfo_p : TypeInfo_d
{
char[] toString() { return "idouble"; }
}

View File

@@ -0,0 +1,12 @@
// ifloat
module typeinfo1.ti_ifloat;
private import typeinfo1.ti_float;
class TypeInfo_o : TypeInfo_f
{
char[] toString() { return "ifloat"; }
}

View File

@@ -0,0 +1,12 @@
// ireal
module typeinfo1.ti_ireal;
private import typeinfo1.ti_real;
class TypeInfo_j : TypeInfo_e
{
char[] toString() { return "ireal"; }
}

View File

@@ -100,7 +100,7 @@ class TypeInfo_Ad : TypeInfo
}
// idouble[]
version(none)
class TypeInfo_Ap : TypeInfo_Ad
{
char[] toString() { return "idouble[]"; }

View File

@@ -99,7 +99,7 @@ class TypeInfo_Af : TypeInfo
}
// ifloat[]
version(none)
class TypeInfo_Ao : TypeInfo_Af
{
char[] toString() { return "ifloat[]"; }

View File

@@ -101,7 +101,7 @@ class TypeInfo_Ae : TypeInfo
}
// ireal[]
version(none)
class TypeInfo_Aj : TypeInfo_Ae
{
char[] toString() { return "ireal[]"; }

View File

@@ -7,7 +7,10 @@ typeinfo1.ti_delegate,
typeinfo1.ti_dchar,
typeinfo1.ti_double,
typeinfo1.ti_float,
typeinfo1.ti_ifloat,
typeinfo1.ti_idouble,
typeinfo1.ti_int,
typeinfo1.ti_ireal,
typeinfo1.ti_long,
typeinfo1.ti_ptr,
typeinfo1.ti_real,

7
test/imag1.d Normal file
View File

@@ -0,0 +1,7 @@
module imag1;
void main()
{
ifloat f = 1.0i;
auto x = 2.0i*f;
}