Mercurial > projects > ldc
annotate tango-0.99.8.patch @ 1479:4f7d50c744ed
Rewrite `StructLiteralExp::toElem` to store individual fields instead of
generating a constant to fill the entire struct with a single `store`.
This is much more efficient at compile time (fixing #320) and vastly reduces
the size of the emitted code. Since LLVM no longer needs to keep the data for
all fields in "registers" until the store happens, it should also be more
efficient at run time in cases where the fields aren't assigned with constants.
There's also some code clean-up by removing duplicated logic.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 06 Jun 2009 20:16:13 +0200 |
parents | 2a8d4f98b543 |
children |
rev | line source |
---|---|
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
1 Index: object.di |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
2 =================================================================== |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
3 --- object.di (revision 4578) |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
4 +++ object.di (working copy) |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
5 @@ -35,15 +35,17 @@ |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
6 Interface[] interfaces; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
7 ClassInfo base; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
8 void* destructor; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
9 - void(*classInvariant)(Object); |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
10 + void* classInvariant; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
11 uint flags; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
12 // 1: // IUnknown |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
13 // 2: // has no possible pointers into GC memory |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
14 // 4: // has offTi[] member |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
15 // 8: // has constructors |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
16 + // 32: // has typeinfo |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
17 void* deallocator; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
18 OffsetTypeInfo[] offTi; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
19 void* defaultConstructor; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
20 + TypeInfo typeinfo; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
21 |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
22 static ClassInfo find(char[] classname); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
23 Object create(); |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
24 @@ -127,10 +129,11 @@ |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
25 char[] name; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
26 void[] m_init; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
27 |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
28 - uint function(void*) xtoHash; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
29 - int function(void*,void*) xopEquals; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
30 - int function(void*,void*) xopCmp; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
31 - char[] function(void*) xtoString; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
32 + // These are ONLY for use as a delegate.funcptr! |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
33 + hash_t function() xtoHash; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
34 + int function(void*) xopEquals; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
35 + int function(void*) xopCmp; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
36 + char[] function() xtoString; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
37 |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
38 uint m_flags; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
39 } |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
40 Index: lib/common/tango/core/Thread.d |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
41 =================================================================== |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
42 --- lib/common/tango/core/Thread.d (revision 4578) |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
43 +++ lib/common/tango/core/Thread.d (working copy) |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
44 @@ -295,7 +295,7 @@ |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
45 } |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
46 else version (X86_64) |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
47 { |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
48 - ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
49 + ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r8,r9,r10,r11,r12,r13,r14,r15; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
50 asm |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
51 { |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
52 movq rax[RBP], RAX ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
53 @@ -306,6 +306,8 @@ |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
54 movq rsi[RBP], RSI ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
55 movq rdi[RBP], RDI ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
56 movq rsp[RBP], RSP ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
57 + movq r8[RBP], R8 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
58 + movq r9[RBP], R9 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
59 movq r10[RBP], R10 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
60 movq r11[RBP], R11 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
61 movq r12[RBP], R12 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
62 Index: lib/gc/basic/gcx.d |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
63 =================================================================== |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
64 --- lib/gc/basic/gcx.d (revision 4578) |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
65 +++ lib/gc/basic/gcx.d (working copy) |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
66 @@ -2198,7 +2198,7 @@ |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
67 } |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
68 else version (X86_64) |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
69 { |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
70 - ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
71 + ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r8,r9,r10,r11,r12,r13,r14,r15; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
72 asm |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
73 { |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
74 movq rax[RBP], RAX ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
75 @@ -2209,6 +2209,8 @@ |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
76 movq rsi[RBP], RSI ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
77 movq rdi[RBP], RDI ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
78 movq rsp[RBP], RSP ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
79 + movq r8[RBP], R8 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
80 + movq r9[RBP], R9 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
81 movq r10[RBP], R10 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
82 movq r11[RBP], R11 ; |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
83 movq r12[RBP], R12 ; |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
84 Index: tango/text/convert/Layout.d |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
85 =================================================================== |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
86 --- tango/text/convert/Layout.d (revision 4578) |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
87 +++ tango/text/convert/Layout.d (working copy) |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
88 @@ -660,8 +660,12 @@ |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
89 |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
90 case TypeCode.STRUCT: |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
91 auto s = cast(TypeInfo_Struct) type; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
92 - if (s.xtoString) |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
93 - return Utf.fromString8 (s.xtoString(p), result); |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
94 + if (s.xtoString) { |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
95 + char[] delegate() toString; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
96 + toString.ptr = p; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
97 + toString.funcptr = cast(char[] function()) s.xtoString; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
98 + return Utf.fromString8 (toString(), result); |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
99 + } |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
100 goto default; |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
101 |
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
102 case TypeCode.INTERFACE: |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
103 Index: tango/net/Socket.d |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
104 =================================================================== |
1444
2a8d4f98b543
Update patch for Tango 0.99.8
Frits van Bommel <fvbommel wxs.nl>
parents:
1371
diff
changeset
|
105 --- tango/net/Socket.d (revision 4578) |
1371
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
106 +++ tango/net/Socket.d (working copy) |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
107 @@ -1545,10 +1545,10 @@ |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
108 |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
109 abstract class Address |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
110 { |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
111 - protected sockaddr* name(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
112 - protected int nameLen(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
113 - AddressFamily addressFamily(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
114 - char[] toString(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
115 + abstract protected sockaddr* name(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
116 + abstract protected int nameLen(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
117 + abstract AddressFamily addressFamily(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
118 + abstract char[] toString(); |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
119 |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
120 /*********************************************************************** |
967d28b7febe
Add patch for Tango 0.99.8.
Christian Kamm <kamm incasoftware de>
parents:
diff
changeset
|
121 |