00001
00038 #ifndef ASSEMBLER_IAR_H_INCLUDED
00039 #define ASSEMBLER_IAR_H_INCLUDED
00040
00041 ld_addr MACRO reg, sym
00042 mov reg, LWRD sym
00043 orh reg, HWRD sym
00044 ENDM
00045
00046 call MACRO sym
00047 rcall sym
00048 ENDM
00049
00050 iar_begin_func MACRO name, sect, is_public, is_weak
00051 MODULE name
00052 RSEG CODE:CODE
00053 IF is_weak == 1
00054 PUBWEAK name
00055 ELSEIF is_public
00056 PUBLIC name
00057 ENDIF
00058 name:
00059 ENDM
00060
00061
00062 iar_weak_alias MACRO name, strong_name
00063 PUBWEAK name
00064 name:
00065 rjmp strong_name
00066 ENDM
00067
00068 #define lo(x) LWRD x
00069 #define hi(x) HWRD x
00070
00071 #define REPEAT(count) REPT count
00072 #define END_REPEAT() ENDR
00073 #define SET_LOC(offset) ORG offset
00074 #define END_FILE() END
00075
00076 #define FILL_BYTES(count) DS8 count
00077
00078 #define L(name) name
00079 #define EXTERN_SYMBOL(name) EXTERN name
00080 #define FUNCTION(name) iar_begin_func name, text_##name, 0, 0
00081 #define PUBLIC_FUNCTION(name) iar_begin_func name, text_##name, 1, 0
00082 #define WEAK_FUNCTION(name) iar_begin_func name, text_##name, 1, 1
00083 #define WEAK_FUNCTION_ALIAS(name, strong_name) \
00084 iar_weak_alias name, strong_name
00085 #define END_FUNC(name) ENDMOD
00086
00087 #define TEXT_SECTION(name) RSEG name:CODE:NOROOT
00088 #define RODATA_SECTION(name) RSEG name:CONST:NOROOT
00089 #define DATA_SECTION(name) RSEG name:DATA:NOROOT
00090 #define BSS_SECTION(name) RSEG name:DATA:NOROOT
00091
00092
00093 #include <arch/assembler-iar.h>
00094
00095 #endif