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
SGDK
inc
asm.h
Generated by
1.13.2