diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2012-12-17 17:44:38 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2012-12-17 17:44:38 +0000 |
commit | 24fb7750f3d54c31fe9daf7a36df73fe40837025 (patch) | |
tree | 279acc2458d7f4eec4a8849f72c7746f2d36e00d /libgloss/bfin/basiccrt.S | |
parent | 301264066b96d4e8d615fa84d2d534aa1dab8a4f (diff) | |
download | cygnal-24fb7750f3d54c31fe9daf7a36df73fe40837025.tar.gz cygnal-24fb7750f3d54c31fe9daf7a36df73fe40837025.tar.bz2 cygnal-24fb7750f3d54c31fe9daf7a36df73fe40837025.zip |
2012-12-17 Stuart Henderson <shenders@gcc.gnu.org>
* bfin/Makefile.in: Add BF60x support.
* bfin/basiccrt.S: Add core1 support.
* bfin/bf606.ld: New file.
* bfin/bf606c0.ld: New file.
* bfin/bf606c1.ld: New file.
* bfin/bf606m.ld: New file.
* bfin/bf607.ld: New file.
* bfin/bf607c0.ld: New file.
* bfin/bf607c1.ld: New file.
* bfin/bf607m.ld: New file.
* bfin/bf608.ld: New file.
* bfin/bf608c0.ld: New file.
* bfin/bf608c1.ld: New file.
* bfin/bf608m.ld: New file.
* bfin/bf609.ld: New file.
* bfin/bf609c0.ld: New file.
* bfin/bf609c1.ld: New file.
* bfin/bf609m.ld: New file.
* bfin/bfin-common-mc0.ld: New file.
* bfin/include/cdefBF606.h : New file.
* bfin/include/cdefBF607.h : New file.
* bfin/include/cdefBF608.h : New file.
* bfin/include/cdefBF609.h : New file.
* bfin/include/defBF606.h : New file.
* bfin/include/defBF607.h : New file.
* bfin/include/defBF608.h : New file.
* bfin/include/defBF609.h : New file.
* bfin/include/sys/_adi_platform.h: Add BF60x support.
* bfin/include/sys/anomaly_macros_rtl.h : Clean up.
Diffstat (limited to 'libgloss/bfin/basiccrt.S')
-rw-r--r-- | libgloss/bfin/basiccrt.S | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/libgloss/bfin/basiccrt.S b/libgloss/bfin/basiccrt.S index d57a38cc8..beecd53f8 100644 --- a/libgloss/bfin/basiccrt.S +++ b/libgloss/bfin/basiccrt.S @@ -66,6 +66,12 @@ .global __coreb_start; .type __coreb_start, STT_FUNC; __coreb_start: +#elif defined(__ADSPBF60x_CORE1__) + .section .1.text,"ax",@progbits + .align 2; + .global __core1_start; + .type __core1_start, STT_FUNC; +__core1_start: #else .text; .align 2; @@ -160,6 +166,9 @@ L$ivt: [P0++] = R1; #ifdef __ADSPBF561_COREB__ SP.L=__coreb_stack_end - 12; SP.H=__coreb_stack_end - 12; +#elif defined(__ADSPBF60x_CORE1__) + SP.L=__core1_stack_end - 12; + SP.H=__core1_stack_end - 12; #else SP.L=__stack_end - 12; SP.H=__stack_end - 12; @@ -187,6 +196,11 @@ L$ivt: [P0++] = R1; R0.H = __coreb_bss_start; R1.L = __coreb_bss_end; R1.H = __coreb_bss_end; +#elif defined(__ADSPBF60x_CORE1__) + R0.L = __core1_bss_start; + R0.H = __core1_bss_start; + R1.L = __core1_bss_end; + R1.H = __core1_bss_end; #else R0.L = __bss_start; R0.H = __bss_start; @@ -198,6 +212,8 @@ L$ivt: [P0++] = R1; R1 = 0; #ifdef __ADSPBF561_COREB__ CALL.X __coreb_memset; +#elif defined(__ADSPBF60x_CORE1__) + CALL.X __core1_memset; #else CALL.X _memset; #endif @@ -269,7 +285,8 @@ L$clock_is_set: #endif #endif /* ADSPLPBLACKFIN */ -#if defined(__ADSPBF561__) || defined(__ADSPBF566__) +#if defined(__ADSPBF561__) || defined(__ADSPBF566__) || defined(__ADSPBF606__) || defined(__ADSPBF607__) || defined(__ADSPBF608__) || defined(__ADSPBF609__) + // Initialise the multi-core data tables. // A dummy function will be called if we are not linking with // -multicore @@ -354,7 +371,7 @@ L$supervisor_mode: CALL.X monstartup; // initialise profiling routines #endif /* PROFCRT */ -#ifndef __ADSPBF561_COREB__ +#if !defined(__ADSPBF561_COREB__) && !defined(__ADSPBF60x_CORE1__) CALL.X __init; R0.L = __fini; @@ -374,6 +391,9 @@ L$supervisor_mode: #ifdef __ADSPBF561_COREB__ R1.L=L$argv_coreb; R1.H=L$argv_coreb; +#elif defined(__ADSPBF60x_CORE1__) + R1.L=L$argv_core1; + R1.H=L$argv_core1; #else R1.L=L$argv; R1.H=L$argv; @@ -384,18 +404,22 @@ L$supervisor_mode: // At long last, call the application program. #ifdef __ADSPBF561_COREB__ CALL.X _coreb_main; +#elif defined(__ADSPBF60x_CORE1__) + CALL.X _core1_main; #else CALL.X _main; #endif #if !defined(_ADI_THREADS) -#ifndef __ADSPBF561_COREB__ +#if !defined(__ADSPBF561_COREB__) && !defined(__ADSPBF60x_CORE1__) CALL.X _exit; // passing in main's return value #endif #endif #ifdef __ADSPBF561_COREB__ .size __coreb_start, .-__coreb_start +#elif defined(__ADSPBF60x_CORE1__) + .size __core1_start, .-__core1_start #else .size __start, .-__start #endif @@ -506,10 +530,16 @@ L$done: #endif #endif /* ADSPLPBLACKFIN */ +#if defined(__ADSPBF561_COREB__) || defined(__ADSPBF60x_CORE1__) #ifdef __ADSPBF561_COREB__ .section .b.text,"ax",@progbits .type __coreb_memset, STT_FUNC __coreb_memset: +#else + .section .1.text,"ax",@progbits + .type __core1_memset, STT_FUNC +__core1_memset: +#endif P0 = R0 ; /* P0 = address */ P2 = R2 ; /* P2 = count */ R3 = R0 + R2; /* end */ @@ -569,7 +599,11 @@ __coreb_memset: B[P0++] = R1; B[P0++] = R1; JUMP .Laligned; +#ifdef __ADSPBF561_COREB__ .size __coreb_memset,.-__coreb_memset +#else +.size __core1_memset,.-__core1_memset +#endif #endif #ifdef __ADSPBF561_COREB__ @@ -579,6 +613,13 @@ __coreb_memset: .size L$argv_coreb, 4 L$argv_coreb: .zero 4 +#elif defined(__ADSPBF60x_CORE1__) + .section .1.bss,"aw",@progbits + .align 4 + .type L$argv_core1, @object + .size L$argv_core1, 4 +L$argv_core1: + .zero 4 #else .local L$argv .comm L$argv,4,4 |