Files

133 lines
3.3 KiB
Plaintext
Executable File
Vendored

//*
//* $Id: //DAILEO/Columbus/IPCamera/source/iNfinity/iNfinity_ROM/source/include/arm.include#1 $
//* $Header: //DAILEO/Columbus/IPCamera/source/iNfinity/iNfinity_ROM/source/include/arm.include#1 $
//* $Date: 2015/05/27 $
//* $DateTime: 2015/05/27 17:11:47 $
//* $Change: 1236156 $
//* $File: //DAILEO/Columbus/IPCamera/source/iNfinity/iNfinity_ROM/source/include/arm.include $
//* $Revision: #1 $
//*
//=======================
//ARM modes
//=======================
.equ MODE_USR_32, 0x10 //USR mode
.equ MODE_FIQ_32, 0x11 //FIQ mode
.equ MODE_IRQ_32, 0x12 //IRQ mode
.equ MODE_SVC_32, 0x13 //SVC mode
.equ MODE_ABT_32, 0x17 //ABORT mode
.equ MODE_UND_32, 0x1B //UNDEF mode
.equ MODE_SYS_32, 0x1F
.equ Mode_mask, 0x1F // mask to handle the processor modes
.equ Mode_IRQ_MIRQ, 0x92 // Mode IRQ and Mask IRQ
.equ Mode_SVC_MIRQ, 0x93 // Mode SVC and Mask IRQ
.equ Mode_SVC_UIRQ, 0x13 // Mode SVC and UnMask IRQ
.equ Mode_SVC_MIRQ_MFIQ,0xD3 // Mode SVC, Mask IRQ, Mask FIQ
.equ Mode_SVC, 0x13 // SVC mode
.equ MODE_BITS, 0x1F
.equ TBIT, 0x20
.equ FBIT, 0x40
.equ IBIT, 0x80
.equ T_Bit, 0x20 // Thumb enable bit
.equ I_Bit, 0x80 // IRQ disable bit
.equ F_Bit, 0x40 // FIQ disable bit
//=======================
//ARM interrupts
//=======================
.equ INTERRUPT_BITS, 0xC0
.equ ENABLE_IRQ, 0x0
.equ ENABLE_FIQ, 0x0
.equ DISABLE_FIQ, 0x40
.equ DISABLE_IRQ, 0x80
//=======================
//ARM fLAGs
//=======================
.equ FLAG_BITS, 0xF0000000
.equ NFLAG, 0x80000000
.equ ZFLAG, 0x40000000
.equ CFLAG, 0x20000000
.equ VFLAG, 0x10000000
.equ SVC_SWI, 0x00 // SWI to enter in SVC mode
.equ ERROR_UNDEF, 0x01
.equ ERROR_SWI, 0x02
.equ ERROR_PREFETCH, 0x03
.equ ERROR_ABT, 0x04
.equ ERROR_IRQ, 0x05
.equ ERROR_FIQ, 0x06
.equ ERROR_BOOT_FAIL, 0x07
#ifdef __ELF__
# define _C_LABEL(x) x
#else
# ifdef __STDC__
# define _C_LABEL(x) _ ## x
# else
# define _C_LABEL(x) _/**/x
# endif
#endif
#define _ASM_LABEL(x) x
#ifdef __STDC__
# define __CONCAT(x,y) x ## y
# define __STRING(x) #x
#else
# define __CONCAT(x,y) x/**/y
# define __STRING(x) "x"
#endif
#ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 0
#endif
/*
* gas/arm uses @ as a single comment character and thus cannot be used here
* Instead it recognised the # instead of an @ symbols in .type directives
* We define a couple of macros so that assembly code will not be dependant
* on one or the other.
*/
#define _ASM_TYPE_FUNCTION #function
#define _ASM_TYPE_OBJECT #object
#define _ENTRY(x) \
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .fnstart
#define _ASM_SIZE(x) .size x, .-x;
#define _END(x) \
.fnend; \
_ASM_SIZE(x)
#ifdef GPROF
# ifdef __ELF__
# define _PROF_PROLOGUE \
mov ip, lr; bl __mcount
# else
# define _PROF_PROLOGUE \
mov ip,lr; bl mcount
# endif
#else
# define _PROF_PROLOGUE
#endif
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
#define END(y) _END(_C_LABEL(y))
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
#define ASEND(y) _END(_ASM_LABEL(y))