mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-16 04:43:14 +01:00
[svn r66] Added support for imaginary floating point types
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "removing old objects"
|
||||
mkdir obj
|
||||
mkdir -p obj
|
||||
rm -f obj/*.bc
|
||||
rm -f ../lib/*.bc
|
||||
|
||||
|
||||
12
lphobos/typeinfo1/ti_idouble.d
Normal file
12
lphobos/typeinfo1/ti_idouble.d
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
// idouble
|
||||
|
||||
module typeinfo1.ti_idouble;
|
||||
|
||||
private import typeinfo1.ti_double;
|
||||
|
||||
class TypeInfo_p : TypeInfo_d
|
||||
{
|
||||
char[] toString() { return "idouble"; }
|
||||
}
|
||||
|
||||
12
lphobos/typeinfo1/ti_ifloat.d
Normal file
12
lphobos/typeinfo1/ti_ifloat.d
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
// ifloat
|
||||
|
||||
module typeinfo1.ti_ifloat;
|
||||
|
||||
private import typeinfo1.ti_float;
|
||||
|
||||
class TypeInfo_o : TypeInfo_f
|
||||
{
|
||||
char[] toString() { return "ifloat"; }
|
||||
}
|
||||
|
||||
12
lphobos/typeinfo1/ti_ireal.d
Normal file
12
lphobos/typeinfo1/ti_ireal.d
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
// ireal
|
||||
|
||||
module typeinfo1.ti_ireal;
|
||||
|
||||
private import typeinfo1.ti_real;
|
||||
|
||||
class TypeInfo_j : TypeInfo_e
|
||||
{
|
||||
char[] toString() { return "ireal"; }
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ class TypeInfo_Ad : TypeInfo
|
||||
}
|
||||
|
||||
// idouble[]
|
||||
version(none)
|
||||
|
||||
class TypeInfo_Ap : TypeInfo_Ad
|
||||
{
|
||||
char[] toString() { return "idouble[]"; }
|
||||
|
||||
@@ -99,7 +99,7 @@ class TypeInfo_Af : TypeInfo
|
||||
}
|
||||
|
||||
// ifloat[]
|
||||
version(none)
|
||||
|
||||
class TypeInfo_Ao : TypeInfo_Af
|
||||
{
|
||||
char[] toString() { return "ifloat[]"; }
|
||||
|
||||
@@ -101,7 +101,7 @@ class TypeInfo_Ae : TypeInfo
|
||||
}
|
||||
|
||||
// ireal[]
|
||||
version(none)
|
||||
|
||||
class TypeInfo_Aj : TypeInfo_Ae
|
||||
{
|
||||
char[] toString() { return "ireal[]"; }
|
||||
|
||||
@@ -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
7
test/imag1.d
Normal file
@@ -0,0 +1,7 @@
|
||||
module imag1;
|
||||
|
||||
void main()
|
||||
{
|
||||
ifloat f = 1.0i;
|
||||
auto x = 2.0i*f;
|
||||
}
|
||||
Reference in New Issue
Block a user