kernel: scheduling fix for ARM
[minix.git] / lib / libc / arch / powerpc64 / sys / cerror.S
blob24ca1355980ad717128309d213e85ce109c0549e
1 /*      $NetBSD: cerror.S,v 1.4 2012/02/27 15:47:11 matt Exp $  */
3 #include <machine/asm.h>
4 #include "SYS.h"
6 #ifndef _REENTRANT
7         .globl  _C_LABEL(errno)
8 #endif
9 #ifdef PIC
10         .protected _C_LABEL(__cerror)
11 #endif
13 ENTRY(__cerror)
14 #ifdef _REENTRANT
15         mflr    %r0
16         stwu    %r1,-16(%r1)            # allocate new stack frame
17         stw     %r0,20(%r1)
18         stw     %r31,8(%r1)
19         mr      %r31,%r3                # stash away in callee-saved register
20         bl      PIC_PLT(_C_LABEL(__errno))
21         stw     %r31,0(%r3)
22         lwz     %r0,20(%r1)
23         lwz     %r31,8(%r1)
24         mtlr    %r0
25         la      %r1,16(%r1)
26 #else
27 #ifdef PIC
28         mflr    %r10
29         bl      _GLOBAL_OFFSET_TABLE_@local-4
30         mflr    %r4
31         lwz     %r4,_C_LABEL(errno)@got(%r4)
32         stw     %r3,0(%r4)
33         mtlr    %r10
34 #else
35         lis     %r4,_C_LABEL(errno)@ha
36         stw     %r3,_C_LABEL(errno)@l(%r4)
37 #endif /* PIC */
38 #endif /* _REENTRANT */
39         li      %r3,-1
40         li      %r4,-1
41         blr