Subversion Repositories Kolibri OS

Rev

Rev 1693 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1693 serge 1
/* default reentrant pointer when multithread enabled */
2
 
3
#include <_ansi.h>
4
#include 
5
#include 
6
 
7
static inline
8
void *user_alloc(int size)
9
{
10
    void  *val;
11
    __asm__ __volatile__(
12
    "int $0x40"
13
    :"=eax"(val)
14
    :"a"(68),"b"(12),"c"(size));
15
    return val;
16
}
17
 
18
void init_reent()
19
{
20
    struct _reent *ent;
21
 
22
    ent = user_alloc(sizeof(struct _reent));
23
 
24
    _REENT_INIT_PTR(ent);
25
 
26
    __asm__ __volatile__(
1906 serge 27
    "movl %0, %%fs:12"
1693 serge 28
    ::"r"(ent));
29
    __sinit(ent);
30
}
31
 
32
 
33
 
34
void __mutex_lock(volatile int *val)
35
{
36
    int tmp;
37
 
38
    __asm__ __volatile__ (
39
"0:\n\t"
40
    "mov %0, %1\n\t"
41
    "testl %1, %1\n\t"
42
    "jz 1f\n\t"
43
 
44
    "movl $68, %%eax\n\t"
45
    "movl $1,  %%ebx\n\t"
46
    "int  $0x40\n\t"
47
    "jmp 0b\n\t"
48
"1:\n\t"
49
    "incl %1\n\t"
50
    "xchgl %0, %1\n\t"
51
    "testl %1, %1\n\t"
52
	"jnz 0b\n"
53
    : "+m" (*val), "=&r"(tmp)
54
    ::"eax","ebx" );
55
}