Changes in / [511aa69a:41a7137]


Ignore:
Location:
src
Files:
2 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • src/examples/Bench.c

    r511aa69a r41a7137  
    8787
    8888struct CoroutineDummy { coroutine c; };
    89 DECL_COROUTINE(CoroutineDummy);
     89DECL_COROUTINE(CoroutineDummy)
    9090void main(CoroutineDummy * this) {}
    9191
     
    122122};
    123123
    124 DECL_COROUTINE(CoroutineResume);
     124DECL_COROUTINE(CoroutineResume)
    125125
    126126void ?{}(CoroutineResume* this, int N) {
     
    151151
    152152struct ThreadDummy { thread t; };
    153 DECL_THREAD(ThreadDummy);
     153DECL_THREAD(ThreadDummy)
    154154void main(ThreadDummy * this) {}
    155155
     
    183183};
    184184
    185 DECL_THREAD(ContextSwitch);
     185DECL_THREAD(ContextSwitch)
    186186
    187187void main(ContextSwitch * this) {   
  • src/libcfa/concurrency/CtxSwitch-x86_64.S

    r511aa69a r41a7137  
    4949        // Save volatile registers on the stack.
    5050
    51         subq   $8,%rsp
    52         stmxcsr 0(%rsp)         // 4 bytes
    53         fnstcw  4(%rsp)         // 2 bytes
    5451        pushq %r15
    5552        pushq %r14
     
    7572        popq %r14
    7673        popq %r15
    77         fldcw   4(%rsp)
    78         ldmxcsr 0(%rsp)
    79         addq $8,%rsp
    8074
    8175        // Return to thread.
  • src/libcfa/concurrency/coroutines

    r511aa69a r41a7137  
    3030};
    3131
    32 #define DECL_COROUTINE(X) static inline coroutine* get_coroutine(X* this) { return &this->c; } void main(X* this)
     32#define DECL_COROUTINE(X) static inline coroutine* get_coroutine(X* this) { return &this->c; } void main(X* this);
    3333
    3434//-----------------------------------------------------------------------------
     
    110110}
    111111
    112 static inline void resume(coroutine * dst) {
    113         coroutine * src = this_coroutine();             // optimization
    114 
    115       // not resuming self ?
    116         if ( src != dst ) {
    117                 assertf( dst->notHalted ,
    118                         "Attempt by coroutine %.256s (%p) to resume terminated coroutine %.256s (%p).\n"
    119                         "Possible cause is terminated coroutine's main routine has already returned.",
    120                         src->name, src, dst->name, dst );
    121 
    122             // set last resumer
    123                 dst->last = src;
    124         } // if
    125 
    126       // always done for performance testing
    127         CoroutineCtxSwitch( src, dst );
    128 }
    129 
    130112#endif //COROUTINES_H
    131113
  • src/libcfa/concurrency/invoke.c

    r511aa69a r41a7137  
    109109      struct FakeStack {
    110110            void *fixedRegisters[5];                    // fixed registers rbx, r12, r13, r14, r15
    111             uint32_t mxcr;                                  // SSE Status and Control bits (control bits are preserved across function calls)
    112             uint16_t fcw;                                   // X97 FPU control word (preserved across function calls)
    113             void *rturn;                                      // where to go on return from uSwitch
     111            void *rturn;                                        // where to go on return from uSwitch
    114112            void *dummyReturn;                          // NULL return address to provide proper alignment
    115113      };
     
    122120      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[0] = this;
    123121      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = invoke;
    124       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520
    125       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F;  //Vol. 1 8-7
    126122#else
    127123      #error Only __i386__ and __x86_64__ is supported for threads in cfa
  • src/libcfa/concurrency/kernel.c

    r511aa69a r41a7137  
    4343};
    4444
    45 DECL_COROUTINE(processorCtx_t);
     45DECL_COROUTINE(processorCtx_t)
    4646
    4747#define KERNEL_STORAGE(T,X) static char X##_storage[sizeof(T)]
  • src/libcfa/concurrency/threads

    r511aa69a r41a7137  
    3232};
    3333
    34 #define DECL_THREAD(X) thread* get_thread(X* this) { return &this->t; } void main(X* this)
     34#define DECL_THREAD(X) thread* get_thread(X* this) { return &this->t; } void main(X* this);
    3535
    3636forall( dtype T | is_thread(T) )
  • src/libcfa/containers/vector

    r511aa69a r41a7137  
    118118}
    119119
    120 // forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
    121 // static inline const T* cbegin(const vector(T, allocator_t)* this)
    122 // {
    123 //      return data(&this->storage);
    124 // }
     120forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
     121static inline const T* cbegin(const vector(T, allocator_t)* this)
     122{
     123        return data(&this->storage);
     124}
    125125
    126126forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
     
    130130}
    131131
    132 // forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
    133 // static inline const T* cend(const vector(T, allocator_t)* this)
    134 // {
    135 //      return data(&this->storage) + this->size;
    136 // }
     132forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
     133static inline const T* cend(const vector(T, allocator_t)* this)
     134{
     135        return data(&this->storage) + this->size;
     136}
    137137
    138138//------------------------------------------------------------------------------
  • src/tests/thread.c

    r511aa69a r41a7137  
    77struct Second { thread t; simple_lock* lock; };
    88
    9 DECL_THREAD(First);
    10 DECL_THREAD(Second);
     9DECL_THREAD(First)
     10DECL_THREAD(Second)
    1111
    1212void ?{}( First * this, simple_lock* lock ) { this->lock = lock; }
Note: See TracChangeset for help on using the changeset viewer.