sgdk
|
00001 00010 #ifndef _ASM_H_ 00011 #define _ASM_H_ 00012 00013 00014 #define VAR2REG_B(var, reg) asm volatile ("move.b %0, %/"reg"" :: "r" (var) : ""reg""); 00015 #define VAR2REG_W(var, reg) asm volatile ("move.w %0, %/"reg"" :: "r" (var) : ""reg""); 00016 #define VAR2REG_L(var, reg) asm volatile ("move.l %0, %/"reg"" :: "r" (var) : ""reg""); 00017 00018 #define REG2VAR_B(reg, var) asm volatile ("move.b %/"reg", %0" : "=r" (var)); 00019 #define REG2VAR_W(reg, var) asm volatile ("move.w %/"reg", %0" : "=r" (var)); 00020 #define REG2VAR_L(reg, var) asm volatile ("move.l %/"reg", %0" : "=r" (var)); 00021 00022 // enumeration helper for GAS 00023 #if defined(__ASSEMBLY__) || defined(__ASSEMBLER__) 00024 00025 .set last_enum_value, 0 00026 .macro enum_val name 00027 .equiv \name, last_enum_value 00028 .set last_enum_value, last_enum_value + 1 00029 .endm 00030 00031 #define ENUM_BEGIN .set last_enum_value, 0 00032 #define ENUM_BEGIN_EX(tmpName) .set last_enum_value, 0 00033 #define ENUM_BEGIN_SHORT .set last_enum_value, 0 00034 #define ENUM_BEGIN_SHORT_EX(tmpName) .set last_enum_value, 0 00035 #define ENUM_VAL(name) enum_val name 00036 #define ENUM_VALASSIGN(name, value) \ 00037 .set last_enum_value, value ;\ 00038 enum_val name 00039 #define ENUM_END(enum_name) 00040 #else 00041 #define ENUM_BEGIN typedef enum { 00042 #define ENUM_BEGIN_EX(tmpName) typedef enum tmpName { 00043 #define ENUM_BEGIN_SHORT typedef enum __attribute__ ((__packed__)) { 00044 #define ENUM_BEGIN_SHORT_EX(tmpName) typedef enum __attribute__ ((__packed__)) tmpName { 00045 #define ENUM_VAL(name) name, 00046 #define ENUM_VALASSIGN(name, value) name = value, 00047 #define ENUM_END(enum_name) } enum_name; 00048 #endif 00049 00050 00051 #endif // _ASM_H_ 00052