Mercurial > pub > Jint1
comparison Jint.Runtime/Main.cs @ 5:cb13da6e3349
simple loop test
author | cin |
---|---|
date | Mon, 28 Oct 2013 00:49:15 +0400 |
parents | aced2ae9957f |
children |
comparison
equal
deleted
inserted
replaced
4:1ae5b10f7a10 | 5:cb13da6e3349 |
---|---|
10 { | 10 { |
11 public static void Main(string[] args) | 11 public static void Main(string[] args) |
12 { | 12 { |
13 RuntimeContext runtime = new RuntimeContext(); | 13 RuntimeContext runtime = new RuntimeContext(); |
14 runtime.DefineBinaryOperation<int>(Codes.Add, (x, y) => x + y); | 14 runtime.DefineBinaryOperation<int>(Codes.Add, (x, y) => x + y); |
15 runtime.DefineCompareOperation<int>((x, y) => x.CompareTo(y)); | |
15 | 16 |
16 var frame = new Frame(4,runtime); | 17 var frame = new Frame(5,runtime); |
18 frame.SetValue(1, 10000000); | |
17 frame.SetValue(2,0); | 19 frame.SetValue(2,0); |
18 frame.SetValue(3,1); | 20 frame.SetValue(3,1); |
19 | 21 |
20 var op = new BinaryOp(Codes.Add, 2, 3, 2); | 22 |
23 var code = new LteCmp(2, 1, 4); | |
24 var body = new BinaryOp(Codes.Add, 2, 3, 2); | |
25 body.Chain(code); | |
26 code.Chain( | |
27 new ConditionOp( | |
28 4, | |
29 body, | |
30 null | |
31 ) | |
32 ); | |
33 | |
21 | 34 |
22 var t = Environment.TickCount; | 35 var t = Environment.TickCount; |
23 | 36 |
24 /* | 37 /* |
25 * mov r1, 10 000 000 | 38 * mov r1, 10 000 000 |
26 * mov r2, 0 | 39 * mov r2, 0 |
27 * mov r3, 1 | 40 * mov r3, 1 |
28 * loop | 41 * lte r2, r1, r4 |
29 * condition: | 42 * cmp: |
30 * gte r2, r1 | 43 * test r4 { success => body, fail => end } |
31 * body: | 44 * body: |
32 * add r2,r3,r2 | 45 * add r2,r3,r2 |
46 * goto cmp | |
47 * end: | |
33 */ | 48 */ |
34 | 49 |
35 for (int i = 0; i < 10000000; i++) | 50 for (IInstruction op = code; op != null; op = op.Invoke(frame)) |
36 op.Invoke(frame); | 51 ; |
37 | 52 |
38 Console.WriteLine ("vm: {0}, int {1} ms", frame.GetValue<int>(2), Environment.TickCount - t ); | 53 Console.WriteLine ("vm: {0}, int {1} ms", frame.GetConverted<int>(2), Environment.TickCount - t ); |
39 | 54 |
40 t = Environment.TickCount; | 55 t = Environment.TickCount; |
41 | 56 |
42 /* | 57 object count = 0, inc = 1, max = 10000000; |
43 * mov r1, 10 000 000 | |
44 * mov r2, 0 | |
45 * mov r3, 1 | |
46 * loop | |
47 * condition: | |
48 * gte r2, r1 | |
49 * body: | |
50 * add r2,r3,r2 | |
51 */ | |
52 object count = 0, inc = 1; | |
53 | 58 |
54 for (int i = 0; i < 10000000; i++) | 59 while(Compare(count,max) <= 0) |
55 count = Add(count,inc); | 60 count = Add(count,inc); |
56 | 61 |
57 Console.WriteLine("native: {0}, int {1} ms", frame.GetValue<int>(2), Environment.TickCount - t); | 62 Console.WriteLine("native: {0}, int {1} ms", frame.GetValue<int>(2), Environment.TickCount - t); |
58 | 63 |
59 t = Environment.TickCount; | 64 } |
65 | |
66 public static int Compare(object arg1, object arg2) { | |
67 return ((int)arg1).CompareTo((int)arg2); | |
60 } | 68 } |
61 | 69 |
62 public static object Add(object arg1, object arg2) { | 70 public static object Add(object arg1, object arg2) { |
63 return (int)arg1 + (int)arg2; | 71 return (int)arg1 + (int)arg2; |
64 } | 72 } |