SGDK
A free and open development kit for the Sega Mega Drive
Loading...
Searching...
No Matches
asm.h
Go to the documentation of this file.
1
9
10#ifndef _ASM_H_
11#define _ASM_H_
12
13
14#define VAR2REG_B(var, reg) asm volatile ("move.b %0, %/"reg"" :: "r" (var) : ""reg"");
15#define VAR2REG_W(var, reg) asm volatile ("move.w %0, %/"reg"" :: "r" (var) : ""reg"");
16#define VAR2REG_L(var, reg) asm volatile ("move.l %0, %/"reg"" :: "r" (var) : ""reg"");
17
18#define REG2VAR_B(reg, var) asm volatile ("move.b %/"reg", %0" : "=r" (var));
19#define REG2VAR_W(reg, var) asm volatile ("move.w %/"reg", %0" : "=r" (var));
20#define REG2VAR_L(reg, var) asm volatile ("move.l %/"reg", %0" : "=r" (var));
21
22// enumeration helper for GAS
23#if defined(__ASSEMBLY__) || defined(__ASSEMBLER__)
24
25 .set last_enum_value, 0
26 .macro enum_val name
27 .equiv \name, last_enum_value
28 .set last_enum_value, last_enum_value + 1
29 .endm
30
31 #define ENUM_BEGIN .set last_enum_value, 0
32 #define ENUM_BEGIN_EX(tmpName) .set last_enum_value, 0
33 #define ENUM_BEGIN_SHORT .set last_enum_value, 0
34 #define ENUM_BEGIN_SHORT_EX(tmpName) .set last_enum_value, 0
35 #define ENUM_VAL(name) enum_val name
36 #define ENUM_VALASSIGN(name, value) \
37 .set last_enum_value, value ;\
38 enum_val name
39 #define ENUM_END(enum_name)
40#else
41 #define ENUM_BEGIN typedef enum {
42 #define ENUM_BEGIN_EX(tmpName) typedef enum tmpName {
43 #define ENUM_BEGIN_SHORT typedef enum __attribute__ ((__packed__)) {
44 #define ENUM_BEGIN_SHORT_EX(tmpName) typedef enum __attribute__ ((__packed__)) tmpName {
45 #define ENUM_VAL(name) name,
46 #define ENUM_VALASSIGN(name, value) name = value,
47 #define ENUM_END(enum_name) } enum_name;
48#endif
49
50
51#endif // _ASM_H_
52