Mercurial > projects > ldc
annotate tango-0.99.9.patch @ 1642:f49cb50c6064
Revert 1637 because it breaks HelloWorld with Tangos Stdout. There may be another way to fix this so that Deewiants case works, as well as Tango.
author | Kelly Wilson <wilsonk cpsc.ucalgary.ca> |
---|---|
date | Mon, 08 Mar 2010 23:10:26 -0700 |
parents | 5c0cebff9be8 |
children | 40bd4a0d4870 |
rev | line source |
---|---|
1633
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
1 Index: tango/core/rt/compiler/ldc/rt/lifetime.d |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
2 =================================================================== |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
3 --- tango/core/rt/compiler/ldc/rt/lifetime.d (revision 5368) |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
4 +++ tango/core/rt/compiler/ldc/rt/lifetime.d (working copy) |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
5 @@ -786,6 +786,7 @@ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
6 return *cast(long*)px; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
7 } |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
8 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
9 ++/ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
10 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
11 /** |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
12 * |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
13 @@ -849,10 +850,11 @@ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
14 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
15 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
16 /** |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
17 - * |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
18 + * Appends a single element to an array. |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
19 */ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
20 -extern (C) byte[] _d_arrayappendcT(TypeInfo ti, ref byte[] x, ...) |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
21 +extern (C) byte[] _d_arrayappendcT(TypeInfo ti, void* array, void* element) |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
22 { |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
23 + auto x = cast(byte[]*)array; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
24 auto sizeelem = ti.next.tsize(); // array element size |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
25 auto info = gc_query(x.ptr); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
26 auto length = x.length; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
27 @@ -879,16 +881,16 @@ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
28 assert(newcap >= newlength * sizeelem); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
29 newdata = cast(byte *)gc_malloc(newcap + 1, info.attr); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
30 memcpy(newdata, x.ptr, length * sizeelem); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
31 - (cast(void**)(&x))[1] = newdata; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
32 + (cast(void**)x)[1] = newdata; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
33 } |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
34 L1: |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
35 - byte *argp = cast(byte *)(&ti + 2); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
36 + byte *argp = cast(byte *)element; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
37 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
38 - *cast(size_t *)&x = newlength; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
39 + *cast(size_t *)x = newlength; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
40 x.ptr[length * sizeelem .. newsize] = argp[0 .. sizeelem]; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
41 assert((cast(size_t)x.ptr & 15) == 0); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
42 assert(gc_sizeOf(x.ptr) > x.length * sizeelem); |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
43 - return x; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
44 + return *x; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
45 } |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
46 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
47 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
48 @@ -1128,6 +1130,7 @@ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
49 return result; |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
50 } |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
51 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
52 +/+ |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
53 |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
54 /** |
5c0cebff9be8
Improve array append performance.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
55 * |