Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/mep/sim-crt0.S')
-rw-r--r--libgloss/mep/sim-crt0.S499
1 files changed, 0 insertions, 499 deletions
diff --git a/libgloss/mep/sim-crt0.S b/libgloss/mep/sim-crt0.S
deleted file mode 100644
index 02639eb6d..000000000
--- a/libgloss/mep/sim-crt0.S
+++ /dev/null
@@ -1,499 +0,0 @@
-# Copyright (c) 2003 Red Hat, Inc. All rights reserved.
-#
-# This copyrighted material is made available to anyone wishing to use, modify,
-# copy, or redistribute it subject to the terms and conditions of the BSD
-# License. This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY expressed or implied, including the implied
-# warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of
-# this license is available at http://www.opensource.org/licenses. Any Red Hat
-# trademarks that are incorporated in the source code or documentation are not
-# subject to the BSD License and may only be used or replicated with the express
-# permission of Red Hat, Inc.
-#
-# Toshiba Media Processor startup file (crt0.S)
-#
-# Designed for user programs running in the 0-2Mb startup section.
-# Designed for the simulator by default.
-#
-# Exception/Interrupt Handler Locations
-# CFG.EVM CFG.EVA CFG.IVA Exception INTn
-## 0 - - 0x0000_0000 0x0000_0030 rom
-## 1 0 0 0x0020_0000 0x0020_0030 local RAM / local RAM
-## 1 1 0 0x0080_0000 0x0020_0000 ext RAM / local RAM
-## 1 0 1 0x0020_0000 0x0080_0000 local RAM / ext RAM
-## 1 1 1 0x0080_0000 0x0080_0030 ext RAM / ext RAM
-#
-# Exceptions
-# Reset 0x0000_0000
-# NMI 0x0000_0000+4
-# RI (Base Address) +0x08
-# ZDIV (Base Address) +0x0C
-# BRK (Base Address) +0x10
-# SWI (Base Address) +0x14
-# DSP (Base Address) +0x1C
-# COP (Base Address) +0x20
-
- .set _local_ram_base, 0x00200000
- .set _ext_ram_base, 0x00800000
- .set _int_base_offset, 0x30
-
-#include "syscall.h"
-
-.macro if_bitfield_zero reg, start, length, label
- ldc $0, \reg
- srl $0, \start
- and3 $0, $0, (1 << \length) - 1
- beqz $0,\label
-.endm
-
-.macro if_bitfield_notN reg, start, length, N, label
- ldc $0, \reg
- srl $0, \start
- and3 $0, $0, (1 << \length) - 1
- bnei $0,\N, \label
-.endm
-
-.macro if_bitfield_eqN reg, start, length, N, label
- ldc $0, \reg
- srl $0, \start
- and3 $0, $0, (1 << \length) - 1
- beqi $0,\N, \label
-.endm
-
-.macro if_bitfield_ltN reg, start, length, N, label
- ldc $0, \reg
- srl $0, \start
- and3 $0, $0, (1 << \length) - 1
- blti $0,\N, \label
-.endm
-
- .section .hwinit, "ax"
- # CCFG.ICSZ
- if_bitfield_zero reg=$ccfg, start=16, length=7, label=.Lend_enable_icache
-__enable_icache:
- # set ICE(cfg[1])
- ldc $1,$cfg
- or3 $1,$1,2
- stc $1,$cfg
- nop
- nop
- nop
- nop
- nop
-.Lend_enable_icache:
- ret
-
-__enable_dcache:
- # CCFG.DCSZ
- if_bitfield_zero reg=$ccfg, start=0, length=7, label=.Lend_enable_dcache
- # set DCE(cfg[0])
- ldc $1,$cfg
- or3 $1,$1,1
- stc $1,$cfg
- nop
- nop
- nop
- nop
- nop
- ret
-.Lend_enable_dcache:
-
- .text
-
-#ifdef NOVEC
- .global _reset
-_reset:
-#endif
-
- .global _start
-_start:
- mov $fp, 0 # for unwinding
-
- # $sp set
- movh $sp, %uhi(__stack_table)
- or3 $sp, $sp, %lo(__stack_table)
-
- # initialize sp, gp, tp
- # get CPU ID
- ldc $0, $id
- srl $0, 16
-
- # load ID-specific stack pointer
- sl2ad3 $0, $0, $sp # $0 = ($0 << 2) + $sp
- lw $sp,($0) # $sp = *($0)
- mov $0,0xfffffff8
- and $sp, $0
-
-#ifndef NOVEC
- # copy exception vector table
-
- # RCFG.IRSZ
- if_bitfield_zero reg=$rcfg, start=16, length=7, label=.Lend_ev_imem
- # handle imem
- movh $11,%uhi(_local_ram_base)
- or3 $11,$11,%lo(_local_ram_base)
- # clear CFG.EVA ([23])
- ldc $0,$cfg
- movh $1, %uhi(0xff7fffff)
- or3 $1, $1, %lo(0xff7fffff)
- and $0,$1
- stc $0,$cfg
- bra .Ldo_repeat_ev
-.Lend_ev_imem:
-#ifdef UseSDRAM
- movh $11,%uhi(_ext_ram_base)
- or3 $11,$11,%lo(_ext_ram_base)
- # set CFG.EVA ([23])
- ldc $0,$cfg
- movh $1,%uhi(1<<23)
- or3 $1,$1,%lo(1<<23)
- or $0,$1
- stc $0,$cfg
-#else
- # handle ROM
- bra .Lend_ev
-#endif
-.Ldo_repeat_ev:
- # set CFG.EVM ([4])
- ldc $0,$cfg
- or3 $0,$0,(1<<4)
- stc $0,$cfg
- # copy _exception_table to $11
- movh $12,%uhi(_exception_table)
- or3 $12,$12,%lo(_exception_table)
- mov $13,8
- repeat $13,.Lrepeat_ev
- lw $1,0($12)
- add $12,4
-.Lrepeat_ev:
- sw $1,0($11)
- add $11,4
-.Lend_ev:
-
- # copy interrupt vector table
- # RCFG.IRSZ
- if_bitfield_zero reg=$rcfg, start=16, length=7, label=.Lend_iv_imem
- # handle imem
- movh $11,%uhi(_local_ram_base)
- or3 $11,$11,%lo(_int_base_offset)
- # clear CFG.IVA ([22])
- ldc $0,$cfg
- movh $1,%uhi(0xffbfffff) # ~(1<<22)
- or3 $1,$1,%lo(0xffbfffff)
- and $0,$1
- stc $0,$cfg
- bra .Ldo_repeat_iv
-.Lend_iv_imem:
-#ifdef UseSDRAM
- movh $11,%uhi(_ext_ram_base)
- or3 $11,$11,%lo(_int_base_offset)
- # set CFG. IVA ([22])
- ldc $0,$cfg
- movh $1,%uhi(1<<22)
- or3 $1,$1,%lo(1<<22)
- or $0,$1
- stc $0,$cfg
-#else
- # handle ROM
- bra .Lend_iv
-#endif
-.Ldo_repeat_iv:
- # set CFG.IVM ([3])
- ldc $0,$cfg
- or3 $0,$0,(1<<3)
- stc $0,$cfg
- # copy _interrupt_table to $11
- movh $12,%uhi(_interrupt_table)
- or3 $12,$12,%lo(_interrupt_table)
- mov $13,32
- add $13,-1
- and3 $13,$13,127
- repeat $13,.Lrepeat_iv
- lw $1,0($12)
- add $12,4
-.Lrepeat_iv:
- sw $1,0($11)
- add $11,4
-.Lend_iv:
-
- # initialize instruction cache
- # Icache Size CCFG.ICSZ ([22..16]) KByte
- if_bitfield_zero reg=$ccfg, start=16, length=7, label=.Lend_ic
- mov $3,$0 # cache size in KB
- # ID.ID
- if_bitfield_ltN reg=$ID, start=8, length=8, N=3, label=.Lend_mepc3_ic
- # Line Size CCFG.ICSZ ([26..24]) Byte
- if_bitfield_ltN reg=$ccfg, start=24, length=3, N=2, label=.Lend_ic
- bgei $0,5,.Lend_ic
-
- add3 $1,$0,3 # bit width of line size
- mov $0,$3
- # clear tag
- mov $2,10
- sub $2,$1
- sll $0,$2 # *KByte/(line size)
- add $0,-1
- mov $2,1
- sll $2,$1 # line size
- bra .Ldo_repeat_icache
-.Lend_mepc3_ic:
- # ICache: $0 KByte
- mov $0,$3
- # clear tag
- sll $0,(10-5) # *KByte/(32byte=linesize)
- add $0,-1
- mov $2,32
-.Ldo_repeat_icache:
- mov $1,0
- bra 0f
- # Align this code on an 8 byte boundary in order to keep the repeat
- # loop entirely within the instruction fetch buffer.
- .p2align 3
-0:
- movh $3,%hi(0x00310000) # for tag
- repeat $0,.Lrepeat_icache
- add $0,-1
-.Lrepeat_icache:
- sw $1,0($3)
- add3 $3,$3,$2
-.Lenable_icache:
- movh $1,%hi(__enable_icache)
- add3 $1,$1,%lo(__enable_icache)
- jsr $1
-.Lend_ic:
-
- # initialize data cache
- # Dcache Size CCFG.DCSZ ([6..0]) KByte
- if_bitfield_zero reg=$ccfg, start=0, length=7, label=.Lend_dc
- mov $3,$0 # cache size in KB
- # ID.ID
- if_bitfield_ltN reg=$ID, start=8, length=8, N=3, label=.Lend_mepc3_dc
- # Line Size CCFG.DCSZ ([10..8]) Byte
- if_bitfield_ltN reg=$ccfg, start=8, length=3, N=2, label=.Lend_dc
- bgei $0,5,.Lend_dc
-
- add3 $1,$0,3 # bit width of line size
- mov $0,$3
- # clear tag
- mov $2,10
- sub $2,$1
- sll $0,$2 # *KByte/(line size)
- add $0,-1
- mov $2,1
- sll $2,$1 # line size
- bra .Ldo_repeat_dcache
-.Lend_mepc3_dc:
- # DCache: $0 KByte
- mov $0,$3
- # clear tag
- sll $0,(10-5) # *KByte/(32byte=linesize)
- add $0,-1
- mov $2,32
-.Ldo_repeat_dcache:
- mov $1,0
- movh $3,%hi(0x00330000) # for tag
-
- repeat $0,.Lrepeat_dcache
- add $0,-1
-.Lrepeat_dcache:
- sw $1,0($3)
- add3 $3,$3,$2
-.Lenable_dcache:
- movh $1,%hi(__enable_dcache)
- add3 $1,$1,%lo(__enable_dcache)
- jsr $1
-.Lend_dc:
- # NOVEC
-#endif
- mov $0, 0
-
- movh $gp, %uhi(__sdabase)
- or3 $gp, $gp, %lo(__sdabase)
-
- movh $tp, %uhi(__tpbase)
- or3 $tp, $tp, %lo(__tpbase)
-
- # zero out BSS
- movh $1, %uhi(__bss_start)
- or3 $1, $1, %lo(__bss_start)
- mov $2, 0
- movh $3, %uhi(_end)
- or3 $3, $3, %lo(_end)
- sub $3, $1
- bsr memset
-
- movh $1, %uhi(__sbss_start)
- or3 $1, $1, %lo(__sbss_start)
- mov $2, 0
- movh $3, %uhi(__sbss_end)
- or3 $3, $3, %lo(__sbss_end)
- sub $3, $1
- bsr memset
-
- movh $1, %uhi(__farbss_start)
- or3 $1, $1, %lo(__farbss_start)
- mov $2, 0
- movh $3, %uhi(__farbss_end)
- or3 $3, $3, %lo(__farbss_end)
- sub $3, $1
- bsr memset
-
- # enable interrupts
- ei
-
- # construct global class variables
- bsr __invoke_init_section
-
- # invoke main
- mov $1, 0 # argc, argv, envp
- mov $2, 0
- mov $3, 0
- bsr main
- mov $1, $0
- bsr exit
-
- .global _exit
-_exit:
- # Prevent _exit recursion
- movh $3, %uhi(_exit_in_progress)
- or3 $3, $3, %lo(_exit_in_progress)
- lw $5, ($3)
- bnez $5, _skip_fini
- mov $5, 1
- sw $5, ($3)
-
- # We don't need to preserve $5 because we're going to exit anyway.
- mov $5,$1
-
- # destruct global class variables
- bsr __invoke_fini_section
- mov $1,$5
-
-_skip_fini:
-
-#ifdef NOSIM
-_exit_loop:
- bra _exit_loop
-#else
- .2byte 0x7800 | ((SYS_exit & 0xe) << 7) | ((SYS_exit & 1) << 4)
- ret
-#endif
-
- .data
-_exit_in_progress: .word 0
-
-
-
-# For these two, the epilogue is in crtn.S
-
- .section .init
-__invoke_init_section:
- add $sp, -8
- ldc $0, $lp
- sw $0, ($sp)
-
- .section .fini
-__invoke_fini_section:
- add $sp, -8
- ldc $0, $lp
- sw $0, ($sp)
-
-#ifndef NOVEC
- .section .vec, "ax"
- .core
- .org 0x0, 0
- .global _exception_table
-.type _exception_table,@function
-_exception_table:
- .p2align 2
- .org 0x0000, 0
- .global _reset
-_reset:
- jmp _handler_RESET
- .org 0x0004, 0
- jmp _handler_NMI
- .org 0x0008, 0
- jmp _handler_RI
- .org 0x000c, 0
- jmp _handler_ZDIV
- .org 0x0010, 0
- jmp _handler_BRK
- .org 0x0014, 0
- jmp _handler_SWI
- .org 0x0018, 0
- jmp _handler_DEBUG
- .org 0x001c, 0
- jmp _handler_DSP
- .org 0x0020, 0
- jmp _handler_COP
-
- .org 0x30, 0
- .global _interrupt_table
-.type _interrupt_table,@function
-_interrupt_table:
- .org 0x0030
- jmp _handler_INT0
- .org 0x0034
- jmp _handler_INT1
- .org 0x0038
- jmp _handler_INT2
- .org 0x003c
- jmp _handler_INT3
- .org 0x0040
- jmp _handler_INT4
- .org 0x0044
- jmp _handler_INT5
- .org 0x0048
- jmp _handler_INT6
- .org 0x004c
- jmp _handler_INT7
- .org 0x0050
- jmp _handler_INT8
- .org 0x0054
- jmp _handler_INT9
- .org 0x0058
- jmp _handler_INT10
- .org 0x005c
- jmp _handler_INT11
- .org 0x0060
- jmp _handler_INT12
- .org 0x0064
- jmp _handler_INT13
- .org 0x0068
- jmp _handler_INT14
- .org 0x006c
- jmp _handler_INT15
- .org 0x0070
- jmp _handler_INT16
- .org 0x0074
- jmp _handler_INT17
- .org 0x0078
- jmp _handler_INT18
- .org 0x007c
- jmp _handler_INT19
- .org 0x0080
- jmp _handler_INT20
- .org 0x0084
- jmp _handler_INT21
- .org 0x0088
- jmp _handler_INT22
- .org 0x008c
- jmp _handler_INT23
- .org 0x0090
- jmp _handler_INT24
- .org 0x0094
- jmp _handler_INT25
- .org 0x0098
- jmp _handler_INT26
- .org 0x009c
- jmp _handler_INT27
- .org 0x00a0
- jmp _handler_INT28
- .org 0x00a4
- jmp _handler_INT29
- .org 0x00a8
- jmp _handler_INT30
- .org 0x00ac
- jmp _handler_INT31
- # NOVEC
-#endif