OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [alpha/] [newlib/] [libgloss/] [i960/] [crt0.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
extern int main(int argc, char **argv, char **envp);
2
extern int brk (void *value);
3
 
4
extern char bss_start;
5
extern char end;
6
 
7
char *__env[1] = {0};
8
char **environ = __env;
9
 
10
#define ENABLE_TRACE_MASK 1
11
 
12
__inline static void
13
enable_tracing (void)
14
{
15
    register int mask = ENABLE_TRACE_MASK;
16
    __asm__ volatile ("modpc %0,%0,%0"
17
                      :
18
                      : "d" (mask));
19
}
20
 
21
#define STACK_ALIGN 64
22
 
23
__inline static void *
24
set_stack (void* ptr)
25
{
26
    ptr = (((int)ptr & (STACK_ALIGN-1))==0)
27
        ? (void*)((int)ptr & (~(STACK_ALIGN-1)))
28
        : (void*)((int)ptr & (~(STACK_ALIGN-1)))+STACK_ALIGN;
29
    __asm__ volatile ("mov %0,sp"
30
                      :
31
                      : "d" (ptr));
32
    __asm__ volatile ("mov %0,fp"
33
                      :
34
                      : "d" (ptr));
35
    return ptr;
36
}
37
 
38
__inline static void
39
init_Cregs (void)
40
{
41
    /* set register values gcc like */
42
    register unsigned int mask0=0x3b001000;
43
    register unsigned int mask1=0x00009107;
44
    __asm__ volatile ("mov   %0,g14"
45
                      :                      /* no output */
46
                      : "I" (0));            /* gnu structure pointer */
47
    __asm__ volatile ("modac %1,%0,%0"
48
                      :                      /* no output */
49
                      : "d" (mask0),
50
                        "d" (mask1));        /* fpu control kb */
51
}
52
 
53
void
54
_start(void)
55
{
56
  void *stack;
57
  char *p;
58
 
59
  enable_tracing ();
60
  stack = set_stack (&end + 4096);
61
  init_Cregs ();
62
  brk (stack);
63
  /* clear bss */
64
  memset (&bss_start, 0, &end - &bss_start);
65
  main(0, 0, 0);
66
  _exit(0);
67
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.