| 79 | | @@ -2306,10 +2331,10 @@ |
|---|
| | 79 | @@ -2286,6 +2311,13 @@ |
|---|
| | 80 | version = AsmPPC_Posix; |
|---|
| | 81 | } |
|---|
| | 82 | |
|---|
| | 83 | + version( LLVM_InlineAsm_X86 ) |
|---|
| | 84 | + { |
|---|
| | 85 | + version( Win32 ) |
|---|
| | 86 | + version = LLVM_AsmX86_Win32; |
|---|
| | 87 | + else version( Posix ) |
|---|
| | 88 | + version = LLVM_AsmX86_Posix; |
|---|
| | 89 | + } |
|---|
| | 90 | |
|---|
| | 91 | version( Posix ) |
|---|
| | 92 | { |
|---|
| | 93 | @@ -2296,6 +2328,8 @@ |
|---|
| | 94 | version( AsmX86_Win32 ) {} else |
|---|
| | 95 | version( AsmX86_Posix ) {} else |
|---|
| | 96 | version( AsmPPC_Posix ) {} else |
|---|
| | 97 | + version( LLVM_AsmX86_Win32 ) {} else |
|---|
| | 98 | + version( LLVM_AsmX86_Posix ) {} else |
|---|
| | 99 | { |
|---|
| | 100 | // NOTE: The ucontext implementation requires architecture specific |
|---|
| | 101 | // data definitions to operate so testing for it must be done |
|---|
| | 102 | @@ -2306,10 +2340,10 @@ |
|---|
| | 115 | @@ -2336,7 +2370,7 @@ |
|---|
| | 116 | } |
|---|
| | 117 | } |
|---|
| | 118 | |
|---|
| | 119 | - |
|---|
| | 120 | +extern(C) int printf(char*, ...); |
|---|
| | 121 | //////////////////////////////////////////////////////////////////////////////// |
|---|
| | 122 | // Fiber Entry Point and Context Switch |
|---|
| | 123 | //////////////////////////////////////////////////////////////////////////////// |
|---|
| | 124 | @@ -2450,6 +2484,17 @@ |
|---|
| | 125 | ret; |
|---|
| | 126 | } |
|---|
| | 127 | } |
|---|
| | 128 | + else version( LLVM_AsmX86_Posix ) |
|---|
| | 129 | + { |
|---|
| | 130 | + asm |
|---|
| | 131 | + { |
|---|
| | 132 | + // store oldp again with more accurate address |
|---|
| | 133 | + mov EAX, oldp; |
|---|
| | 134 | + mov [EAX], ESP; |
|---|
| | 135 | + // load newp to begin context switch |
|---|
| | 136 | + mov ESP, newp; |
|---|
| | 137 | + } |
|---|
| | 138 | + } |
|---|
| | 139 | else static if( is( ucontext_t ) ) |
|---|
| | 140 | { |
|---|
| | 141 | Fiber cfib = Fiber.getThis(); |
|---|
| | 142 | @@ -3115,6 +3160,13 @@ |
|---|
| | 143 | push( 0x00000000 ); // ESI |
|---|
| | 144 | push( 0x00000000 ); // EDI |
|---|
| | 145 | } |
|---|
| | 146 | + else version( LLVM_AsmX86_Posix ) |
|---|
| | 147 | + { |
|---|
| | 148 | + push( cast(size_t) &fiber_entryPoint ); // EIP |
|---|
| | 149 | + push( 0x00000000 ); // EBP |
|---|
| | 150 | + push( 0x00000000 ); // newp |
|---|
| | 151 | + push( 0x00000000 ); // oldp |
|---|
| | 152 | + } |
|---|
| | 153 | else version( AsmPPC_Posix ) |
|---|
| | 154 | { |
|---|
| | 155 | version( StackGrowsDown ) |
|---|
| 273 | | Index: tango/text/xml/Document.d |
|---|
| 274 | | =================================================================== |
|---|
| 275 | | --- tango/text/xml/Document.d (revision 3950) |
|---|
| 276 | | +++ tango/text/xml/Document.d (working copy) |
|---|
| 277 | | @@ -1243,7 +1243,8 @@ |
|---|
| 278 | | freeIndex = 0; |
|---|
| 279 | | } |
|---|
| 280 | | |
|---|
| 281 | | - NodeSet set = {this}; |
|---|
| 282 | | + NodeSet set; |
|---|
| 283 | | + set.host = this; |
|---|
| 284 | | auto mark = freeIndex; |
|---|
| 285 | | allocate(root); |
|---|
| 286 | | return set.assign (mark); |
|---|
| 287 | | @@ -1273,7 +1274,8 @@ |
|---|
| 288 | | |
|---|
| 289 | | NodeSet dup () |
|---|
| 290 | | { |
|---|
| 291 | | - NodeSet copy = {host}; |
|---|
| 292 | | + NodeSet copy; |
|---|
| 293 | | + copy.host = host; |
|---|
| 294 | | copy.nodes = nodes.dup; |
|---|
| 295 | | return copy; |
|---|
| 296 | | } |
|---|
| 297 | | @@ -1337,7 +1339,7 @@ |
|---|
| 298 | | |
|---|
| 299 | | NodeSet nth (uint index) |
|---|
| 300 | | { |
|---|
| 301 | | - NodeSet set = {host}; |
|---|
| 302 | | + NodeSet set; set.host = host; |
|---|
| 303 | | auto mark = host.mark; |
|---|
| 304 | | if (index < nodes.length) |
|---|
| 305 | | host.allocate (nodes [index]); |
|---|
| 306 | | @@ -1495,7 +1497,7 @@ |
|---|
| 307 | | |
|---|
| 308 | | NodeSet filter (bool delegate(Node) filter) |
|---|
| 309 | | { |
|---|
| 310 | | - NodeSet set = {host}; |
|---|
| 311 | | + NodeSet set; set.host = host; |
|---|
| 312 | | auto mark = host.mark; |
|---|
| 313 | | |
|---|
| 314 | | foreach (node; nodes) |
|---|
| 315 | | @@ -1514,7 +1516,7 @@ |
|---|
| 316 | | NodeSet child (bool delegate(Node) filter, |
|---|
| 317 | | XmlNodeType type = XmlNodeType.Element) |
|---|
| 318 | | { |
|---|
| 319 | | - NodeSet set = {host}; |
|---|
| 320 | | + NodeSet set; set.host = host; |
|---|
| 321 | | auto mark = host.mark; |
|---|
| 322 | | |
|---|
| 323 | | foreach (parent; nodes) |
|---|
| 324 | | @@ -1534,7 +1536,7 @@ |
|---|
| 325 | | |
|---|
| 326 | | NodeSet attribute (bool delegate(Node) filter) |
|---|
| 327 | | { |
|---|
| 328 | | - NodeSet set = {host}; |
|---|
| 329 | | + NodeSet set; set.host = host; |
|---|
| 330 | | auto mark = host.mark; |
|---|
| 331 | | |
|---|
| 332 | | foreach (node; nodes) |
|---|
| 333 | | @@ -1565,7 +1567,7 @@ |
|---|
| 334 | | } |
|---|
| 335 | | } |
|---|
| 336 | | |
|---|
| 337 | | - NodeSet set = {host}; |
|---|
| 338 | | + NodeSet set; set.host = host; |
|---|
| 339 | | auto mark = host.mark; |
|---|
| 340 | | |
|---|
| 341 | | foreach (node; nodes) |
|---|
| 342 | | @@ -1583,7 +1585,7 @@ |
|---|
| 343 | | |
|---|
| 344 | | NodeSet parent (bool delegate(Node) filter) |
|---|
| 345 | | { |
|---|
| 346 | | - NodeSet set = {host}; |
|---|
| 347 | | + NodeSet set; set.host = host; |
|---|
| 348 | | auto mark = host.mark; |
|---|
| 349 | | |
|---|
| 350 | | foreach (node; nodes) |
|---|
| 351 | | @@ -1613,7 +1615,7 @@ |
|---|
| 352 | | |
|---|
| 353 | | NodeSet ancestor (bool delegate(Node) filter) |
|---|
| 354 | | { |
|---|
| 355 | | - NodeSet set = {host}; |
|---|
| 356 | | + NodeSet set; set.host = host; |
|---|
| 357 | | auto mark = host.mark; |
|---|
| 358 | | |
|---|
| 359 | | void traverse (Node child) |
|---|
| 360 | | @@ -1648,7 +1650,7 @@ |
|---|
| 361 | | NodeSet next (bool delegate(Node) filter, |
|---|
| 362 | | XmlNodeType type = XmlNodeType.Element) |
|---|
| 363 | | { |
|---|
| 364 | | - NodeSet set = {host}; |
|---|
| 365 | | + NodeSet set; set.host = host; |
|---|
| 366 | | auto mark = host.mark; |
|---|
| 367 | | |
|---|
| 368 | | foreach (node; nodes) |
|---|
| 369 | | @@ -1675,7 +1677,7 @@ |
|---|
| 370 | | NodeSet prev (bool delegate(Node) filter, |
|---|
| 371 | | XmlNodeType type = XmlNodeType.Element) |
|---|
| 372 | | { |
|---|
| 373 | | - NodeSet set = {host}; |
|---|
| 374 | | + NodeSet set; set.host = host; |
|---|
| 375 | | auto mark = host.mark; |
|---|
| 376 | | |
|---|
| 377 | | foreach (node; nodes) |
|---|