Mercurial > projects > ldc
comparison gen/binops.cpp @ 104:4d1e9eb001e0 trunk
[svn r108] Now basic suppport for complex types. =,+,-,*,/ are supported.
author | lindquist |
---|---|
date | Mon, 19 Nov 2007 02:58:58 +0100 |
parents | fd32135dca3e |
children | 7816aafeea3c |
comparison
equal
deleted
inserted
replaced
103:855adfdb8d38 | 104:4d1e9eb001e0 |
---|---|
1 #include "gen/llvm.h" | 1 #include "gen/llvm.h" |
2 | 2 |
3 #include "declaration.h" | 3 #include "declaration.h" |
4 | 4 |
5 #include "gen/irstate.h" | 5 #include "gen/irstate.h" |
6 #include "gen/tollvm.h" | |
6 #include "gen/dvalue.h" | 7 #include "gen/dvalue.h" |
8 | |
9 ////////////////////////////////////////////////////////////////////////////// | |
7 | 10 |
8 DValue* DtoBinAdd(DValue* lhs, DValue* rhs) | 11 DValue* DtoBinAdd(DValue* lhs, DValue* rhs) |
9 { | 12 { |
10 llvm::Value* v = gIR->ir->CreateAdd(lhs->getRVal(), rhs->getRVal(), "tmp"); | 13 llvm::Value* v = gIR->ir->CreateAdd(lhs->getRVal(), rhs->getRVal(), "tmp"); |
11 return new DImValue( lhs->getType(), v ); | 14 return new DImValue( lhs->getType(), v ); |
12 } | 15 } |
13 | 16 |
17 ////////////////////////////////////////////////////////////////////////////// | |
18 | |
14 DValue* DtoBinSub(DValue* lhs, DValue* rhs) | 19 DValue* DtoBinSub(DValue* lhs, DValue* rhs) |
15 { | 20 { |
16 llvm::Value* v = gIR->ir->CreateSub(lhs->getRVal(), rhs->getRVal(), "tmp"); | 21 llvm::Value* v = gIR->ir->CreateSub(lhs->getRVal(), rhs->getRVal(), "tmp"); |
17 return new DImValue( lhs->getType(), v ); | 22 return new DImValue( lhs->getType(), v ); |
18 } | 23 } |
19 | 24 |
25 ////////////////////////////////////////////////////////////////////////////// | |
26 | |
20 DValue* DtoBinMul(DValue* lhs, DValue* rhs) | 27 DValue* DtoBinMul(DValue* lhs, DValue* rhs) |
21 { | 28 { |
22 llvm::Value* v = gIR->ir->CreateMul(lhs->getRVal(), rhs->getRVal(), "tmp"); | 29 llvm::Value* v = gIR->ir->CreateMul(lhs->getRVal(), rhs->getRVal(), "tmp"); |
23 return new DImValue( lhs->getType(), v ); | 30 return new DImValue( lhs->getType(), v ); |
24 } | 31 } |
32 | |
33 ////////////////////////////////////////////////////////////////////////////// | |
25 | 34 |
26 DValue* DtoBinDiv(DValue* lhs, DValue* rhs) | 35 DValue* DtoBinDiv(DValue* lhs, DValue* rhs) |
27 { | 36 { |
28 Type* t = lhs->getType(); | 37 Type* t = lhs->getType(); |
29 llvm::Value *l, *r; | 38 llvm::Value *l, *r; |
37 else | 46 else |
38 res = gIR->ir->CreateUDiv(l, r, "tmp"); | 47 res = gIR->ir->CreateUDiv(l, r, "tmp"); |
39 return new DImValue( lhs->getType(), res ); | 48 return new DImValue( lhs->getType(), res ); |
40 } | 49 } |
41 | 50 |
51 ////////////////////////////////////////////////////////////////////////////// | |
52 | |
42 DValue* DtoBinRem(DValue* lhs, DValue* rhs) | 53 DValue* DtoBinRem(DValue* lhs, DValue* rhs) |
43 { | 54 { |
44 Type* t = lhs->getType(); | 55 Type* t = lhs->getType(); |
45 llvm::Value *l, *r; | 56 llvm::Value *l, *r; |
46 l = lhs->getRVal(); | 57 l = lhs->getRVal(); |