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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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