 |
Changeset 4172
- Timestamp:
- 12/15/08 12:05:57
(3 years ago)
- Author:
- fawzi
- Message:
LDC patch refs #1212
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r3901 |
r4172 |
|
| 171 | 171 | */ |
|---|
| 172 | 172 | uint outpl( uint port_address, uint value ); |
|---|
| | 173 | } |
|---|
| | 174 | else version( LDC ) |
|---|
| | 175 | { |
|---|
| | 176 | public import ldc.bitmanip; |
|---|
| 173 | 177 | } |
|---|
| 174 | 178 | else |
|---|
| r4147 |
r4172 |
|
| 274 | 274 | body |
|---|
| 275 | 275 | { |
|---|
| 276 | | version( D_InlineAsm_X86 ) |
|---|
| | 276 | version( LDC) |
|---|
| | 277 | { |
|---|
| | 278 | version(X86) |
|---|
| | 279 | { |
|---|
| | 280 | uint eax,ecx,edx,ebx,ebp,esi,edi; |
|---|
| | 281 | asm |
|---|
| | 282 | { |
|---|
| | 283 | mov eax[EBP], EAX ; |
|---|
| | 284 | mov ecx[EBP], ECX ; |
|---|
| | 285 | mov edx[EBP], EDX ; |
|---|
| | 286 | mov ebx[EBP], EBX ; |
|---|
| | 287 | mov ebp[EBP], EBP ; |
|---|
| | 288 | mov esi[EBP], ESI ; |
|---|
| | 289 | mov edi[EBP], EDI ; |
|---|
| | 290 | } |
|---|
| | 291 | } |
|---|
| | 292 | else version (X86_64) |
|---|
| | 293 | { |
|---|
| | 294 | ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15; |
|---|
| | 295 | asm |
|---|
| | 296 | { |
|---|
| | 297 | movq rax[RBP], RAX ; |
|---|
| | 298 | movq rbx[RBP], RBX ; |
|---|
| | 299 | movq rcx[RBP], RCX ; |
|---|
| | 300 | movq rdx[RBP], RDX ; |
|---|
| | 301 | movq rbp[RBP], RBP ; |
|---|
| | 302 | movq rsi[RBP], RSI ; |
|---|
| | 303 | movq rdi[RBP], RDI ; |
|---|
| | 304 | movq rsp[RBP], RSP ; |
|---|
| | 305 | movq r10[RBP], R10 ; |
|---|
| | 306 | movq r11[RBP], R11 ; |
|---|
| | 307 | movq r12[RBP], R12 ; |
|---|
| | 308 | movq r13[RBP], R13 ; |
|---|
| | 309 | movq r14[RBP], R14 ; |
|---|
| | 310 | movq r15[RBP], R15 ; |
|---|
| | 311 | } |
|---|
| | 312 | } |
|---|
| | 313 | else |
|---|
| | 314 | { |
|---|
| | 315 | static assert( false, "Architecture not supported." ); |
|---|
| | 316 | } |
|---|
| | 317 | } |
|---|
| | 318 | else version( D_InlineAsm_X86 ) |
|---|
| 277 | 319 | { |
|---|
| 278 | 320 | asm |
|---|
| … | … | |
| 331 | 373 | } |
|---|
| 332 | 374 | |
|---|
| 333 | | version( D_InlineAsm_X86 ) |
|---|
| | 375 | version( LDC) |
|---|
| | 376 | { |
|---|
| | 377 | // nothing to pop |
|---|
| | 378 | } |
|---|
| | 379 | else version( D_InlineAsm_X86 ) |
|---|
| 334 | 380 | { |
|---|
| 335 | 381 | asm |
|---|
| … | … | |
| 2348 | 2394 | version = AsmPPC_Posix; |
|---|
| 2349 | 2395 | } |
|---|
| | 2396 | version( LLVM_InlineAsm_X86 ) |
|---|
| | 2397 | { |
|---|
| | 2398 | version( Win32 ) |
|---|
| | 2399 | version = LLVM_AsmX86_Win32; |
|---|
| | 2400 | else version( Posix ) |
|---|
| | 2401 | version = LLVM_AsmX86_Posix; |
|---|
| | 2402 | } |
|---|
| | 2403 | else version( LLVM_InlineAsm_X86_64 ) |
|---|
| | 2404 | { |
|---|
| | 2405 | version( Posix ) |
|---|
| | 2406 | version = LLVM_AsmX86_64_Posix; |
|---|
| | 2407 | } |
|---|
| 2350 | 2408 | |
|---|
| 2351 | 2409 | version( Posix ) |
|---|
| … | … | |
| 2358 | 2416 | version( AsmX86_Posix ) {} else |
|---|
| 2359 | 2417 | version( AsmPPC_Posix ) {} else |
|---|
| | 2418 | version( LLVM_AsmX86_Win32 ) {} else |
|---|
| | 2419 | version( LLVM_AsmX86_Posix ) {} else |
|---|
| | 2420 | //TODO: Enable when x86-64 Posix supports fibers |
|---|
| | 2421 | // version( LLVM_AsmX86_64_Posix ) {} else |
|---|
| 2360 | 2422 | { |
|---|
| 2361 | 2423 | // NOTE: The ucontext implementation requires architecture specific |
|---|
| … | … | |
| 2511 | 2573 | } |
|---|
| 2512 | 2574 | } |
|---|
| | 2575 | else version( LLVM_AsmX86_Posix ) |
|---|
| | 2576 | { |
|---|
| | 2577 | asm |
|---|
| | 2578 | { |
|---|
| | 2579 | // clobber registers to save |
|---|
| | 2580 | inc EBX; |
|---|
| | 2581 | inc ESI; |
|---|
| | 2582 | inc EDI; |
|---|
| | 2583 | |
|---|
| | 2584 | // store oldp again with more accurate address |
|---|
| | 2585 | mov EAX, oldp; |
|---|
| | 2586 | mov [EAX], ESP; |
|---|
| | 2587 | // load newp to begin context switch |
|---|
| | 2588 | mov ESP, newp; |
|---|
| | 2589 | } |
|---|
| | 2590 | } |
|---|
| | 2591 | /+ |
|---|
| | 2592 | version( LLVM_AsmX86_64_Posix ) |
|---|
| | 2593 | { |
|---|
| | 2594 | //TODO: Fiber implementation here |
|---|
| | 2595 | } |
|---|
| | 2596 | +/ |
|---|
| 2513 | 2597 | else static if( is( ucontext_t ) ) |
|---|
| 2514 | 2598 | { |
|---|
| … | … | |
| 2522 | 2606 | } |
|---|
| 2523 | 2607 | } |
|---|
| 2524 | | |
|---|
| 2525 | 2608 | |
|---|
| 2526 | 2609 | //////////////////////////////////////////////////////////////////////////////// |
|---|
| … | … | |
| 3256 | 3339 | push( 0x00000000 ); // EDI |
|---|
| 3257 | 3340 | } |
|---|
| | 3341 | else version( LLVM_AsmX86_Posix ) |
|---|
| | 3342 | { |
|---|
| | 3343 | push( cast(size_t) &fiber_entryPoint ); // EIP |
|---|
| | 3344 | push( 0x00000000 ); // newp |
|---|
| | 3345 | push( 0x00000000 ); // oldp |
|---|
| | 3346 | push( 0x00000000 ); // EBP |
|---|
| | 3347 | push( 0x00000000 ); // EBX |
|---|
| | 3348 | push( 0x00000000 ); // ESI |
|---|
| | 3349 | push( 0x00000000 ); // EDI |
|---|
| | 3350 | } |
|---|
| | 3351 | //TODO: Implement x86-64 fibers |
|---|
| | 3352 | /+ |
|---|
| | 3353 | else version( LLVM_AsmX86_Posix ) |
|---|
| | 3354 | { |
|---|
| | 3355 | } |
|---|
| | 3356 | +/ |
|---|
| 3258 | 3357 | else version( AsmPPC_Posix ) |
|---|
| 3259 | 3358 | { |
|---|
| r4094 |
r4172 |
|
| 40 | 40 | // use the unoptimized version |
|---|
| 41 | 41 | } |
|---|
| | 42 | else version(LDC) |
|---|
| | 43 | { |
|---|
| | 44 | // ditto |
|---|
| | 45 | } |
|---|
| 42 | 46 | else version (D_InlineAsm_X86) |
|---|
| 43 | 47 | { |
|---|
| r4095 |
r4172 |
|
| 66 | 66 | |
|---|
| 67 | 67 | |
|---|
| | 68 | struct BlkInfo |
|---|
| | 69 | { |
|---|
| | 70 | void* base; |
|---|
| | 71 | size_t size; |
|---|
| | 72 | uint attr; |
|---|
| | 73 | } |
|---|
| | 74 | |
|---|
| 68 | 75 | private |
|---|
| 69 | 76 | { |
|---|
| … | … | |
| 74 | 81 | NO_MOVE = 0b0000_0100, |
|---|
| 75 | 82 | ALL_BITS = 0b1111_1111 |
|---|
| 76 | | } |
|---|
| 77 | | |
|---|
| 78 | | struct BlkInfo |
|---|
| 79 | | { |
|---|
| 80 | | void* base; |
|---|
| 81 | | size_t size; |
|---|
| 82 | | uint attr; |
|---|
| 83 | 83 | } |
|---|
| 84 | 84 | |
|---|
| … | … | |
| 2179 | 2179 | sp = & sp; |
|---|
| 2180 | 2180 | } |
|---|
| | 2181 | else version(LDC) |
|---|
| | 2182 | { |
|---|
| | 2183 | version(X86) |
|---|
| | 2184 | { |
|---|
| | 2185 | uint eax,ecx,edx,ebx,ebp,esi,edi; |
|---|
| | 2186 | asm |
|---|
| | 2187 | { |
|---|
| | 2188 | mov eax[EBP], EAX ; |
|---|
| | 2189 | mov ecx[EBP], ECX ; |
|---|
| | 2190 | mov edx[EBP], EDX ; |
|---|
| | 2191 | mov ebx[EBP], EBX ; |
|---|
| | 2192 | mov ebp[EBP], EBP ; |
|---|
| | 2193 | mov esi[EBP], ESI ; |
|---|
| | 2194 | mov edi[EBP], EDI ; |
|---|
| | 2195 | mov sp[EBP],ESP ; |
|---|
| | 2196 | } |
|---|
| | 2197 | } |
|---|
| | 2198 | else version (X86_64) |
|---|
| | 2199 | { |
|---|
| | 2200 | ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15; |
|---|
| | 2201 | asm |
|---|
| | 2202 | { |
|---|
| | 2203 | movq rax[RBP], RAX ; |
|---|
| | 2204 | movq rbx[RBP], RBX ; |
|---|
| | 2205 | movq rcx[RBP], RCX ; |
|---|
| | 2206 | movq rdx[RBP], RDX ; |
|---|
| | 2207 | movq rbp[RBP], RBP ; |
|---|
| | 2208 | movq rsi[RBP], RSI ; |
|---|
| | 2209 | movq rdi[RBP], RDI ; |
|---|
| | 2210 | movq rsp[RBP], RSP ; |
|---|
| | 2211 | movq r10[RBP], R10 ; |
|---|
| | 2212 | movq r11[RBP], R11 ; |
|---|
| | 2213 | movq r12[RBP], R12 ; |
|---|
| | 2214 | movq r13[RBP], R13 ; |
|---|
| | 2215 | movq r14[RBP], R14 ; |
|---|
| | 2216 | movq r15[RBP], R15 ; |
|---|
| | 2217 | } |
|---|
| | 2218 | } |
|---|
| | 2219 | else |
|---|
| | 2220 | { |
|---|
| | 2221 | static assert( false, "Architecture not supported." ); |
|---|
| | 2222 | } |
|---|
| | 2223 | } |
|---|
| 2181 | 2224 | else |
|---|
| 2182 | 2225 | { |
|---|
| … | … | |
| 2189 | 2232 | result = fullcollect(sp); |
|---|
| 2190 | 2233 | version (GNU) |
|---|
| | 2234 | { |
|---|
| | 2235 | // nothing to do |
|---|
| | 2236 | } |
|---|
| | 2237 | else version(LDC) |
|---|
| 2191 | 2238 | { |
|---|
| 2192 | 2239 | // nothing to do |
|---|
Download in other formats:
|
 |