xref: /aosp_15_r20/external/musl/arch/sh/crt_arch.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #ifdef __SH_FDPIC__
2*c9945492SAndroid Build Coastguard Worker 
3*c9945492SAndroid Build Coastguard Worker __asm__(
4*c9945492SAndroid Build Coastguard Worker ".text \n"
5*c9945492SAndroid Build Coastguard Worker ".global " START " \n"
6*c9945492SAndroid Build Coastguard Worker START ": \n"
7*c9945492SAndroid Build Coastguard Worker "	tst r8, r8 \n"
8*c9945492SAndroid Build Coastguard Worker "	bf 1f \n"
9*c9945492SAndroid Build Coastguard Worker "	mov #68, r3 \n"
10*c9945492SAndroid Build Coastguard Worker "	add r3, r3 \n"
11*c9945492SAndroid Build Coastguard Worker "	mov #8, r4 \n"
12*c9945492SAndroid Build Coastguard Worker "	swap.w r4, r4 \n"
13*c9945492SAndroid Build Coastguard Worker "	trapa #31 \n"
14*c9945492SAndroid Build Coastguard Worker "	nop \n"
15*c9945492SAndroid Build Coastguard Worker "	nop \n"
16*c9945492SAndroid Build Coastguard Worker "	nop \n"
17*c9945492SAndroid Build Coastguard Worker "	nop \n"
18*c9945492SAndroid Build Coastguard Worker "1:	nop \n"
19*c9945492SAndroid Build Coastguard Worker #ifndef SHARED
20*c9945492SAndroid Build Coastguard Worker "	mov r8, r4 \n"
21*c9945492SAndroid Build Coastguard Worker "	mova 1f, r0 \n"
22*c9945492SAndroid Build Coastguard Worker "	mov.l 1f, r5 \n"
23*c9945492SAndroid Build Coastguard Worker "	mov.l 1f+4, r6 \n"
24*c9945492SAndroid Build Coastguard Worker "	add r0, r5 \n"
25*c9945492SAndroid Build Coastguard Worker "	mov.l 4f, r1 \n"
26*c9945492SAndroid Build Coastguard Worker "5:	bsrf r1 \n"
27*c9945492SAndroid Build Coastguard Worker "	 add r0, r6 \n"
28*c9945492SAndroid Build Coastguard Worker "	mov r0, r12 \n"
29*c9945492SAndroid Build Coastguard Worker #endif
30*c9945492SAndroid Build Coastguard Worker "	mov r10, r5 \n"
31*c9945492SAndroid Build Coastguard Worker "	mov r15, r4 \n"
32*c9945492SAndroid Build Coastguard Worker "	mov.l r9, @-r15 \n"
33*c9945492SAndroid Build Coastguard Worker "	mov.l r8, @-r15 \n"
34*c9945492SAndroid Build Coastguard Worker "	mov #-16, r0 \n"
35*c9945492SAndroid Build Coastguard Worker "	mov.l 2f, r1 \n"
36*c9945492SAndroid Build Coastguard Worker "3:	bsrf r1 \n"
37*c9945492SAndroid Build Coastguard Worker "	 and r0, r15 \n"
38*c9945492SAndroid Build Coastguard Worker ".align 2 \n"
39*c9945492SAndroid Build Coastguard Worker "1:	.long __ROFIXUP_LIST__@PCREL \n"
40*c9945492SAndroid Build Coastguard Worker "	.long __ROFIXUP_END__@PCREL + 4 \n"
41*c9945492SAndroid Build Coastguard Worker "2:	.long " START "_c@PCREL - (3b+4-.) \n"
42*c9945492SAndroid Build Coastguard Worker #ifndef SHARED
43*c9945492SAndroid Build Coastguard Worker "4:	.long __fdpic_fixup@PCREL - (5b+4-.) \n"
44*c9945492SAndroid Build Coastguard Worker #endif
45*c9945492SAndroid Build Coastguard Worker );
46*c9945492SAndroid Build Coastguard Worker 
47*c9945492SAndroid Build Coastguard Worker #ifndef SHARED
48*c9945492SAndroid Build Coastguard Worker #include "fdpic_crt.h"
49*c9945492SAndroid Build Coastguard Worker #endif
50*c9945492SAndroid Build Coastguard Worker 
51*c9945492SAndroid Build Coastguard Worker #else
52*c9945492SAndroid Build Coastguard Worker 
53*c9945492SAndroid Build Coastguard Worker __asm__(
54*c9945492SAndroid Build Coastguard Worker ".text \n"
55*c9945492SAndroid Build Coastguard Worker ".global " START " \n"
56*c9945492SAndroid Build Coastguard Worker START ": \n"
57*c9945492SAndroid Build Coastguard Worker "	mova 1f, r0 \n"
58*c9945492SAndroid Build Coastguard Worker "	mov.l 1f, r5 \n"
59*c9945492SAndroid Build Coastguard Worker "	add r0, r5 \n"
60*c9945492SAndroid Build Coastguard Worker "	mov r15, r4 \n"
61*c9945492SAndroid Build Coastguard Worker "	mov #-16, r0 \n"
62*c9945492SAndroid Build Coastguard Worker "	mov.l 2f, r1 \n"
63*c9945492SAndroid Build Coastguard Worker "3:	bsrf r1 \n"
64*c9945492SAndroid Build Coastguard Worker "	 and r0, r15 \n"
65*c9945492SAndroid Build Coastguard Worker ".align 2 \n"
66*c9945492SAndroid Build Coastguard Worker ".weak _DYNAMIC \n"
67*c9945492SAndroid Build Coastguard Worker ".hidden _DYNAMIC \n"
68*c9945492SAndroid Build Coastguard Worker "1:	.long _DYNAMIC-. \n"
69*c9945492SAndroid Build Coastguard Worker "2:	.long " START "_c@PCREL - (3b+4-.) \n"
70*c9945492SAndroid Build Coastguard Worker );
71*c9945492SAndroid Build Coastguard Worker 
72*c9945492SAndroid Build Coastguard Worker #endif
73*c9945492SAndroid Build Coastguard Worker 
74*c9945492SAndroid Build Coastguard Worker /* used by gcc for switching the FPU between single and double precision */
75*c9945492SAndroid Build Coastguard Worker #ifdef SHARED
76*c9945492SAndroid Build Coastguard Worker __attribute__((__visibility__("hidden")))
77*c9945492SAndroid Build Coastguard Worker #endif
78*c9945492SAndroid Build Coastguard Worker const unsigned long __fpscr_values[2] = { 0, 0x80000 };
79