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();