sgdk
asm.h
Go to the documentation of this file.
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 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines