Cygwin: /proc/<PID>/stat: set field (18) according to scheduling policy
[newlib-cygwin.git] / libgloss / visium / crt0.S
blobbb1448962491b348f0da998361618f50ffa89478
1 /* crt0.S for the Visium processor.
3    Copyright (c) 2015 Rolls-Royce Controls and Data Services Limited.
4    All rights reserved.
6    Redistribution and use in source and binary forms, with or without
7    modification, are permitted provided that the following conditions are met:
9      * Redistributions of source code must retain the above copyright notice,
10        this list of conditions and the following disclaimer.
11      * Redistributions in binary form must reproduce the above copyright
12        notice, this list of conditions and the following disclaimer in the
13        documentation and/or other materials provided with the distribution.
14      * Neither the name of Rolls-Royce Controls and Data Services Limited nor
15        the names of its contributors may be used to endorse or promote products
16        derived from this software without specific prior written permission.
18    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28    THE POSSIBILITY OF SUCH DAMAGE.  */
30         .weak _get_cmdline
31         .text
32         .align  4
33         .global __start
34 __start:
35         /* Initialize the stack pointer.  */
36         moviu   r1,%u _estack
37         movil   r1,%l _estack
38         move.l  r23,r1
40         /* Terminate the frame chain.  */
41         moviq   r22,0
43         /* Zero the .bss segment.  */
44         moviu   r1,%u __bss_start
45         movil   r1,%l __bss_start
46         moviu   r2,%u __bss_end
47         movil   r2,%l __bss_end
48 .L0:
49         cmp.l   r1,r1
50         brr     eq,.L1
51          nop
52         write.b (r1),r0
53         brr     tr,.L0
54          addi   r1,1
55 .L1:
56         /* Register __fini (destructors) with atexit.  */
57         moviu   r1,%u __fini
58         moviu   r2,%u atexit
59         movil   r2,%l atexit
60         bra     tr,r2,r21
61          movil  r1,%l __fini
63         /* Call __init (constructors).  */
64         moviu   r1,%u __init
65         movil   r1,%l __init
66         bra     tr,r1,r21
67          nop
69         /* Set up argc and argv.  */
70         moviu   r3,%u _get_cmdline
71         movil   r3,%l _get_cmdline
72         cmp.l   r3,r0
73         moviq   r1,0
74         bra     ne,r3,r21
75          moviq  r2,0
77         /* Call the main program.  */
78         moviu   r3,%u main
79         movil   r3,%l main
80         bra     tr,r3,r21
81          nop
83         /* Call exit in case the main program didn't.  */
84         moviu   r2,%u exit
85         movil   r2,%l exit
86         bra     tr,r2,r21
87          nop
88         .end