00001
00021 #ifndef _MACRO_H_
00022 #define _MACRO_H_
00023
00031 #define SETBIT( sregister, bitname ) \
00032 __asm__( "st.w sp++, r7\n" \
00033 "mfsr r7, %0\n" \
00034 "sbr r7, %1\n" \
00035 "mtsr %0, r7\n" \
00036 "ld.w r7, --sp\n" \
00037 : \
00038 :"X"(sregister), "g"(bitname) )
00039
00040
00041
00049 #define CLEARBIT( sregister, bitname ) \
00050 __asm__( "st.w sp++, r7\n" \
00051 "mfsr r7, %0\n" \
00052 "cbr r7, %1\n" \
00053 "mtsr %0, r7\n" \
00054 "ld.w r7, --sp\n" \
00055 : \
00056 :"X"(sregister), "g"(bitname) )
00057
00058 #define CLRBIT(sregister, bitname) CLEARBIT(sregister, bitname)
00059
00060
00061
00069 #define TOGGLEBIT( sregister, bitname ) \
00070 __asm__( "st.w sp++, r7\n" \
00071 "st.w sp++, r6\n" \
00072 "mfsr r7, %0\n" \
00073 "mov r6, 0\n" \
00074 "sbr r6, %1\n" \
00075 "eor r7, r6\n" \
00076 "mtsr %0, r7\n" \
00077 "ld.w r6, --sp\n" \
00078 "ld.w r7, --sp\n" \
00079 : \
00080 :"X"(sregister), "g"(bitname) )
00081
00082 #define TGLBIT(sregister, bitname) TOGGLEBIT(sregister, bitname)
00083
00084
00085
00092 #define READBITS(sregister, return_value) \
00093 __asm__ __volatile__( "st.w sp++, r6\n" \
00094 "mfsr r6, %1\n" \
00095 "st.w %0, r6\n" \
00096 "ld.w r6, --sp\n" \
00097 : "=g"(return_value) \
00098 :"X"(sregister) )
00099
00100 #define GETBITS(sregister, return_value) READBITS(sregister, return_value)
00101
00102 #endif