Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dbbb04b

Browse filesBrowse files
committed
add bytecodeGen for relational and logic
1 parent caf8282 commit dbbb04b
Copy full SHA for dbbb04b

File tree

Expand file treeCollapse file tree

17 files changed

+509
-53
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

17 files changed

+509
-53
lines changed
Open diff view settings
Collapse file

‎src/lambdacloud/core/lang/LCBuilder.java‎

Copy file name to clipboardExpand all lines: src/lambdacloud/core/lang/LCBuilder.java
+6-6Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,31 +75,31 @@ public CloudSD declareCloudSD(String name) {
7575
return new CloudSD(name);
7676
}
7777

78-
public LCVar declareInt(String name) {
78+
public LCInt declareInt(String name) {
7979
return new LCInt(name);
8080
}
8181

82-
public LCVar declareLong(String name) {
82+
public LCLong declareLong(String name) {
8383
return new LCLong(name);
8484
}
8585

86-
public LCVar declareFloat(String name) {
86+
public LCFloat declareFloat(String name) {
8787
return new LCFloat(name);
8888
}
8989

90-
public LCVar declareDouble(String name) {
90+
public LCDouble declareDouble(String name) {
9191
return new LCDouble(name);
9292
}
9393

94-
public LCVar declareShort(String name) {
94+
public LCShort declareShort(String name) {
9595
return new LCShort(name);
9696
}
9797

9898
public LCVar declareChar(String name) {
9999
return new LCChar(name);
100100
}
101101

102-
public LCVar declareByte(String name) {
102+
public LCByte declareByte(String name) {
103103
return new LCByte(name);
104104
}
105105

Collapse file

‎src/lambdacloud/core/lang/LCIf.java‎

Copy file name to clipboardExpand all lines: src/lambdacloud/core/lang/LCIf.java
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Map;
66

77
import lambdacloud.core.CloudSD;
8+
import symjava.logic.Logic;
89
import symjava.relational.Eq;
910
import symjava.relational.Ge;
1011
import symjava.relational.Gt;
@@ -18,6 +19,8 @@
1819
import com.sun.org.apache.bcel.internal.generic.GOTO;
1920
import com.sun.org.apache.bcel.internal.generic.IFGE;
2021
import com.sun.org.apache.bcel.internal.generic.IFLE;
22+
import com.sun.org.apache.bcel.internal.generic.IF_ICMPGT;
23+
import com.sun.org.apache.bcel.internal.generic.IF_ICMPLE;
2124
import com.sun.org.apache.bcel.internal.generic.IF_ICMPNE;
2225
import com.sun.org.apache.bcel.internal.generic.InstructionConstants;
2326
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
@@ -81,8 +84,36 @@ public InstructionHandle bytecodeGen(String clsName, MethodGen mg,
8184
ConstantPoolGen cp, InstructionFactory factory,
8285
InstructionList il, Map<String, Integer> argsMap, int argsStartPos,
8386
Map<Expr, Integer> funcRefsMap) {
87+
if(condition instanceof Logic) {
88+
il.append(InstructionConstants.ICONST_1);
89+
InstructionHandle startPos = condition.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
90+
91+
InstructionHandle trueBranchStart = null;
92+
for(Expr te : trueStmts) {
93+
InstructionHandle pos = te.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
94+
if(trueBranchStart == null)
95+
trueBranchStart = pos;
96+
}
97+
if(trueBranchStart == null) trueBranchStart = il.append(InstructionConstants.NOP);
98+
99+
InstructionHandle falseBranchStart = null;
100+
for(Expr fe : falseStmts) {
101+
InstructionHandle pos = fe.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
102+
if(falseBranchStart == null)
103+
falseBranchStart = pos;
104+
}
105+
if(falseBranchStart == null) falseBranchStart = il.append(InstructionConstants.NOP);
106+
107+
InstructionHandle endPos = il.append(InstructionConstants.NOP);
108+
109+
il.insert(trueBranchStart, new IF_ICMPGT(falseBranchStart));
110+
il.insert(falseBranchStart, new GOTO(endPos));
111+
return startPos;
112+
}
113+
84114
if(!(condition instanceof Relation))
85115
throw new RuntimeException();
116+
86117
Relation cond = (Relation)condition;
87118
InstructionHandle startPos = null;
88119
InstructionHandle endPos = null;
Collapse file

‎src/lambdacloud/test/TestLCBuilder.java‎

Copy file name to clipboardExpand all lines: src/lambdacloud/test/TestLCBuilder.java
+97-44Lines changed: 97 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import lambdacloud.core.CloudFunc;
99
import lambdacloud.core.CloudSD;
1010
import lambdacloud.core.lang.LCIf;
11+
import lambdacloud.core.lang.LCInt;
1112
import lambdacloud.core.lang.LCLoop;
1213
import lambdacloud.core.lang.LCVar;
1314
import lambdacloud.core.lang.LCBuilder;
@@ -96,10 +97,12 @@ public static void test() {
9697
}
9798

9899
public static void main(String[] args) {
99-
testOverWriteArgs();
100-
testReturn();
101-
testLoopAsignReturn();
102-
100+
//testOverWriteArgs();
101+
//testReturn();
102+
//testLoopAsignReturn();
103+
//MonteCarloImplement2();
104+
//MTest1();
105+
MTest2();
103106
}
104107

105108

@@ -137,44 +140,94 @@ public static void main(String[] args) {
137140
// System.out.println(result.get(0));
138141
// }
139142
//
140-
// public static void MonteCarloImplement2() {
141-
// LC cloudTask = new LC("server");
142-
//
143-
// CloudVar x = cloudTask.localVar("x");
144-
// CloudVar y = cloudTask.localVar("y");
145-
// CSD result = cloudTask.globalVar("result");
146-
//
147-
// CloudVar i = cloudTask.localVar("i");
148-
// CloudVar sum = cloudTask.localVar("sum");
149-
// CloudVar counter = cloudTask.localVar("counter");
150-
//
151-
// int N = 1000;
152-
// // for(i=0; i<N; i++) {
153-
// CloudLoop loop = cloudTask.forLoop(i.assign(0), Lt.apply(i, N), i.assign(i+1));
154-
// // x = random(); //0.0~1.0
155-
// // y = random(); //0.0~1.0
156-
// loop.appendBody(x.assign(random()));
157-
// loop.appendBody(y.assign(random()));
158-
//
159-
// Expr eq = (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5);
160-
// // if( a^2 <= (x-1/2)^2 + (y-1/2)^2 <= b^2 or c^2 <= (x-1/2)^2 + (y-1/2)^2 <= d^2 ) {
161-
// Expr domain = ( Ge.apply(eq, a*a) & Le.apply(eq, b*b) ) | ( Ge.apply(eq, c*c) & Le.apply(eq, d*d) );
162-
// CloudIf ifBranch = cloudTask.If(domain);
163-
// // sum = sum + sin(sqrt(log(x+y+1))))
164-
// ifBranch.appendTrue( sum.assign(sum + sin(sqrt(log(x+y+1)))) );
165-
// // counter = counter + 1
166-
// ifBranch.appendTrue( counter.assign(counter+1) );
167-
// // } //end fi
168-
// loop.appendBody(ifBranch);
169-
// //} end for
170-
//
171-
// double squareArea = 1.0;
172-
// Expr area = (counter/N)*squareArea; // area of domain
173-
// cloudTask.append(result.assign((sum/counter)*area));
174-
//
175-
// cloudTask.run();
176-
//
177-
// result.fetchToLocal();
178-
// System.out.println(result.get(0));
179-
// }
143+
144+
public static void MTest1() {
145+
LCBuilder task = new LCBuilder("local");
146+
LCVar x = task.declareDouble("x");
147+
LCVar y = task.declareDouble("y");
148+
LCVar a = task.declareDouble("a");
149+
LCVar b = task.declareDouble("b");
150+
LCVar c = task.declareDouble("c");
151+
LCVar d = task.declareDouble("d");
152+
Expr eq = (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5);
153+
Expr domain = ( Ge.apply(eq, a*a) & Le.apply(eq, b*b) ) | ( Ge.apply(eq, c*c) & Le.apply(eq, d*d) );
154+
//Expr domain = Ge.apply(eq, a*a) & Le.apply(eq, b*b);
155+
//CloudFunc func = new CloudFunc("MTest1",new LCVar[]{x,y,a,b,c,d}, domain);
156+
task.Return(domain);
157+
CloudFunc func = task.build(new LCVar[]{x,y,a,b,c,d});
158+
}
159+
160+
public static void MTest2() {
161+
LCBuilder task = new LCBuilder("local");
162+
LCVar x = task.declareDouble("x");
163+
LCVar y = task.declareDouble("y");
164+
LCVar a = task.declareDouble("a");
165+
LCVar b = task.declareDouble("b");
166+
LCVar c = task.declareDouble("c");
167+
LCVar d = task.declareDouble("d");
168+
LCVar sum = task.declareDouble("sum");
169+
LCVar counter = task.declareInt("counter");
170+
LCVar ret = task.declareInt("ret");
171+
Expr eq = (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5);
172+
Expr domain = Ge.apply(1, a*a);
173+
LCIf ifBranch = task.If(domain);
174+
// sum = sum + sin(sqrt(log(x+y+1))))
175+
//ifBranch.appendTrue( sum.assign(sum + sin(sqrt(log(x+y+1)))) );
176+
ifBranch.appendTrue( sum.assign(sum + x) );
177+
// counter = counter + 1
178+
ifBranch.appendTrue( counter.assign(counter+1) );
179+
// } //end if
180+
//CloudFunc func = new CloudFunc("MTest1",new LCVar[]{x,y,a,b,c,d}, domain);
181+
task.Return(domain);
182+
CloudFunc func = task.build(new LCVar[]{x,y,a,b,c,d});
183+
}
184+
185+
public static void MonteCarloImplement2() {
186+
LCBuilder task = new LCBuilder("local");
187+
188+
LCVar x = task.declareDouble("x");
189+
LCVar y = task.declareDouble("y");
190+
LCVar a = task.declareDouble("a");
191+
LCVar b = task.declareDouble("b");
192+
LCVar c = task.declareDouble("c");
193+
LCVar d = task.declareDouble("d");
194+
195+
LCInt i = task.declareInt("i");
196+
LCVar sum = task.declareDouble("sum");
197+
LCVar counter = task.declareInt("counter");
198+
LCVar ret = task.declareInt("ret");
199+
200+
int N = 1000;
201+
202+
LCLoop loop = task.For(i.assign(0),
203+
Lt.apply(i, N), i.inc()); // for(i=0; i<N; i++) {
204+
loop.appendBody(x.assign(random())); // x = random(); //0.0~1.0
205+
loop.appendBody(y.assign(random())); // y = random(); //0.0~1.0
206+
207+
Expr eq = (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5);
208+
// if( a^2 <= (x-1/2)^2 + (y-1/2)^2 <= b^2 or c^2 <= (x-1/2)^2 + (y-1/2)^2 <= d^2 ) {
209+
//Expr domain = ( Ge.apply(eq, a*a) & Le.apply(eq, b*b) ) | ( Ge.apply(eq, c*c) & Le.apply(eq, d*d) );
210+
Expr domain = Ge.apply(1, a*a);
211+
LCIf ifBranch = task.If(domain);
212+
// sum = sum + sin(sqrt(log(x+y+1))))
213+
//ifBranch.appendTrue( sum.assign(sum + sin(sqrt(log(x+y+1)))) );
214+
ifBranch.appendTrue( sum.assign(sum + x) );
215+
// counter = counter + 1
216+
ifBranch.appendTrue( counter.assign(counter+1) );
217+
// } //end if
218+
loop.appendBody(ifBranch);
219+
//} end for
220+
221+
double squareArea = 1.0;
222+
Expr area = (counter/N)*squareArea; // area of domain
223+
task.append(ret.assign((sum/counter)*area));
224+
task.Return(ret);
225+
226+
CloudFunc func = task.build(new LCVar[]{x,y,a,b,c,d});
227+
CloudSD result = new CloudSD("result").resize(1);
228+
func.apply(result, result);
229+
230+
result.fetchToLocal();
231+
System.out.println(result.getData(0));
232+
}
180233
}
Collapse file

‎src/symjava/bytecode/TestBytecode.java‎

Copy file name to clipboardExpand all lines: src/symjava/bytecode/TestBytecode.java
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public static void main(String[] args) {
101101
double d=1;
102102
double e=1;
103103
int s = 0;
104-
if(i>j) s = 0;
104+
if(i>j && d>e) s = 0;
105105
else s = 1;
106106

107107
if(d>e) s = 0;
Collapse file

‎src/symjava/logic/And.java‎

Copy file name to clipboardExpand all lines: src/symjava/logic/And.java
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
package symjava.logic;
22

3+
import java.util.Map;
4+
5+
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
6+
import com.sun.org.apache.bcel.internal.generic.DCMPL;
7+
import com.sun.org.apache.bcel.internal.generic.GOTO;
8+
import com.sun.org.apache.bcel.internal.generic.IAND;
9+
import com.sun.org.apache.bcel.internal.generic.IFLE;
10+
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
11+
import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
12+
import com.sun.org.apache.bcel.internal.generic.InstructionList;
13+
import com.sun.org.apache.bcel.internal.generic.MethodGen;
14+
import com.sun.org.apache.bcel.internal.generic.NOP;
15+
import com.sun.org.apache.bcel.internal.generic.PUSH;
16+
317
import symjava.symbolic.Expr;
18+
import symjava.symbolic.Expr.TYPE;
419
import symjava.symbolic.arity.BinaryOp;
520

621
public class And extends BinaryOp implements Logic {
@@ -29,4 +44,20 @@ public Expr diff(Expr expr) {
2944
public static Expr simplifiedIns(Expr lhs, Expr rhs) {
3045
return new And(lhs, rhs);
3146
}
47+
48+
public InstructionHandle bytecodeGen(String clsName, MethodGen mg,
49+
ConstantPoolGen cp, InstructionFactory factory,
50+
InstructionList il, Map<String, Integer> argsMap, int argsStartPos,
51+
Map<Expr, Integer> funcRefsMap) {
52+
InstructionHandle startPos = arg1.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
53+
arg2.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
54+
il.append(new IAND());
55+
return startPos;
56+
}
57+
58+
@Override
59+
public TYPE getType() {
60+
return TYPE.INT;
61+
}
62+
3263
}
Collapse file

‎src/symjava/logic/Not.java‎

Copy file name to clipboardExpand all lines: src/symjava/logic/Not.java
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
package symjava.logic;
22

3+
import java.util.Map;
4+
5+
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
6+
import com.sun.org.apache.bcel.internal.generic.DCMPL;
7+
import com.sun.org.apache.bcel.internal.generic.GOTO;
8+
import com.sun.org.apache.bcel.internal.generic.IFLE;
9+
import com.sun.org.apache.bcel.internal.generic.IXOR;
10+
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
11+
import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
12+
import com.sun.org.apache.bcel.internal.generic.InstructionList;
13+
import com.sun.org.apache.bcel.internal.generic.MethodGen;
14+
import com.sun.org.apache.bcel.internal.generic.NOP;
15+
import com.sun.org.apache.bcel.internal.generic.PUSH;
16+
317
import symjava.symbolic.Expr;
18+
import symjava.symbolic.Expr.TYPE;
419
import symjava.symbolic.arity.UnaryOp;
520

621
public class Not extends UnaryOp implements Logic {
@@ -29,4 +44,20 @@ public Expr diff(Expr expr) {
2944
public static Expr simplifiedIns(Expr expr) {
3045
return new Not(expr);
3146
}
47+
48+
public InstructionHandle bytecodeGen(String clsName, MethodGen mg,
49+
ConstantPoolGen cp, InstructionFactory factory,
50+
InstructionList il, Map<String, Integer> argsMap, int argsStartPos,
51+
Map<Expr, Integer> funcRefsMap) {
52+
InstructionHandle startPos = arg.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
53+
il.append(new PUSH(cp, 1));
54+
il.append(new IXOR());
55+
return startPos;
56+
}
57+
58+
@Override
59+
public TYPE getType() {
60+
return TYPE.INT;
61+
}
62+
3263
}
Collapse file

‎src/symjava/logic/Or.java‎

Copy file name to clipboardExpand all lines: src/symjava/logic/Or.java
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
package symjava.logic;
22

3+
import java.util.Map;
4+
5+
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
6+
import com.sun.org.apache.bcel.internal.generic.DCMPL;
7+
import com.sun.org.apache.bcel.internal.generic.GOTO;
8+
import com.sun.org.apache.bcel.internal.generic.IFLE;
9+
import com.sun.org.apache.bcel.internal.generic.IOR;
10+
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
11+
import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
12+
import com.sun.org.apache.bcel.internal.generic.InstructionList;
13+
import com.sun.org.apache.bcel.internal.generic.MethodGen;
14+
import com.sun.org.apache.bcel.internal.generic.NOP;
15+
import com.sun.org.apache.bcel.internal.generic.PUSH;
16+
317
import symjava.symbolic.Expr;
18+
import symjava.symbolic.Expr.TYPE;
419
import symjava.symbolic.arity.BinaryOp;
520

621
public class Or extends BinaryOp implements Logic {
@@ -28,4 +43,20 @@ public Expr diff(Expr expr) {
2843
public static Expr simplifiedIns(Expr lhs, Expr rhs) {
2944
return new Or(lhs, rhs);
3045
}
46+
47+
public InstructionHandle bytecodeGen(String clsName, MethodGen mg,
48+
ConstantPoolGen cp, InstructionFactory factory,
49+
InstructionList il, Map<String, Integer> argsMap, int argsStartPos,
50+
Map<Expr, Integer> funcRefsMap) {
51+
InstructionHandle startPos = arg1.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
52+
arg2.bytecodeGen(clsName, mg, cp, factory, il, argsMap, argsStartPos, funcRefsMap);
53+
il.append(new IOR());
54+
return startPos;
55+
}
56+
57+
@Override
58+
public TYPE getType() {
59+
return TYPE.INT;
60+
}
61+
3162
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.