all repos — mgba @ e53135a7b9a67812f1c5518eeea3f3f476bd3905

mGBA Game Boy Advance Emulator

src/arm/emitter-inlines.h (view raw)

  1#ifndef EMITTER_INLINES_H
  2#define EMITTER_INLINES_H
  3
  4#define DO_4(DIRECTIVE) \
  5	DIRECTIVE, \
  6	DIRECTIVE, \
  7	DIRECTIVE, \
  8	DIRECTIVE
  9
 10#define DO_8(DIRECTIVE) \
 11	DIRECTIVE, \
 12	DIRECTIVE, \
 13	DIRECTIVE, \
 14	DIRECTIVE, \
 15	DIRECTIVE, \
 16	DIRECTIVE, \
 17	DIRECTIVE, \
 18	DIRECTIVE
 19
 20#define DO_256(DIRECTIVE) \
 21	DO_4(DO_8(DO_8(DIRECTIVE)))
 22
 23#define DO_INTERLACE(LEFT, RIGHT) \
 24	LEFT, \
 25	RIGHT
 26
 27#define APPLY(F, ...) F(__VA_ARGS__)
 28
 29#define COUNT_CALL_1(EMITTER, PREFIX, ...) \
 30	EMITTER(PREFIX ## 0, 0, __VA_ARGS__) \
 31	EMITTER(PREFIX ## 1, 1, __VA_ARGS__)
 32
 33#define COUNT_CALL_2(EMITTER, PREFIX, ...) \
 34	COUNT_CALL_1(EMITTER, PREFIX, __VA_ARGS__) \
 35	EMITTER(PREFIX ## 2, 2, __VA_ARGS__) \
 36	EMITTER(PREFIX ## 3, 3, __VA_ARGS__)
 37
 38#define COUNT_CALL_3(EMITTER, PREFIX, ...) \
 39	COUNT_CALL_2(EMITTER, PREFIX, __VA_ARGS__) \
 40	EMITTER(PREFIX ## 4, 4, __VA_ARGS__) \
 41	EMITTER(PREFIX ## 5, 5, __VA_ARGS__) \
 42	EMITTER(PREFIX ## 6, 6, __VA_ARGS__) \
 43	EMITTER(PREFIX ## 7, 7, __VA_ARGS__)
 44
 45#define COUNT_CALL_4(EMITTER, PREFIX, ...) \
 46	COUNT_CALL_3(EMITTER, PREFIX, __VA_ARGS__) \
 47	EMITTER(PREFIX ## 8, 8, __VA_ARGS__) \
 48	EMITTER(PREFIX ## 9, 9, __VA_ARGS__) \
 49	EMITTER(PREFIX ## A, 10, __VA_ARGS__) \
 50	EMITTER(PREFIX ## B, 11, __VA_ARGS__) \
 51	EMITTER(PREFIX ## C, 12, __VA_ARGS__) \
 52	EMITTER(PREFIX ## D, 13, __VA_ARGS__) \
 53	EMITTER(PREFIX ## E, 14, __VA_ARGS__) \
 54	EMITTER(PREFIX ## F, 15, __VA_ARGS__)
 55
 56#define COUNT_CALL_5(EMITTER, PREFIX, ...) \
 57	COUNT_CALL_4(EMITTER, PREFIX ## 0, __VA_ARGS__) \
 58	EMITTER(PREFIX ## 10, 16, __VA_ARGS__) \
 59	EMITTER(PREFIX ## 11, 17, __VA_ARGS__) \
 60	EMITTER(PREFIX ## 12, 18, __VA_ARGS__) \
 61	EMITTER(PREFIX ## 13, 19, __VA_ARGS__) \
 62	EMITTER(PREFIX ## 14, 20, __VA_ARGS__) \
 63	EMITTER(PREFIX ## 15, 21, __VA_ARGS__) \
 64	EMITTER(PREFIX ## 16, 22, __VA_ARGS__) \
 65	EMITTER(PREFIX ## 17, 23, __VA_ARGS__) \
 66	EMITTER(PREFIX ## 18, 24, __VA_ARGS__) \
 67	EMITTER(PREFIX ## 19, 25, __VA_ARGS__) \
 68	EMITTER(PREFIX ## 1A, 26, __VA_ARGS__) \
 69	EMITTER(PREFIX ## 1B, 27, __VA_ARGS__) \
 70	EMITTER(PREFIX ## 1C, 28, __VA_ARGS__) \
 71	EMITTER(PREFIX ## 1D, 29, __VA_ARGS__) \
 72	EMITTER(PREFIX ## 1E, 30, __VA_ARGS__) \
 73	EMITTER(PREFIX ## 1F, 31, __VA_ARGS__) \
 74
 75#define COUNT_1(EMITTER, PREFIX) \
 76	EMITTER(PREFIX ## 0) \
 77	EMITTER(PREFIX ## 1)
 78
 79#define COUNT_2(EMITTER, PREFIX) \
 80	COUNT_1(EMITTER, PREFIX) \
 81	EMITTER(PREFIX ## 2) \
 82	EMITTER(PREFIX ## 3)
 83
 84#define COUNT_3(EMITTER, PREFIX) \
 85	COUNT_2(EMITTER, PREFIX) \
 86	EMITTER(PREFIX ## 4) \
 87	EMITTER(PREFIX ## 5) \
 88	EMITTER(PREFIX ## 6) \
 89	EMITTER(PREFIX ## 7)
 90
 91#define COUNT_4(EMITTER, PREFIX) \
 92	COUNT_3(EMITTER, PREFIX) \
 93	EMITTER(PREFIX ## 8) \
 94	EMITTER(PREFIX ## 9) \
 95	EMITTER(PREFIX ## A) \
 96	EMITTER(PREFIX ## B) \
 97	EMITTER(PREFIX ## C) \
 98	EMITTER(PREFIX ## D) \
 99	EMITTER(PREFIX ## E) \
100	EMITTER(PREFIX ## F)
101
102#define COUNT_5(EMITTER, PREFIX) \
103	COUNT_4(EMITTER, PREFIX ## 0) \
104	EMITTER(PREFIX ## 10) \
105	EMITTER(PREFIX ## 11) \
106	EMITTER(PREFIX ## 12) \
107	EMITTER(PREFIX ## 13) \
108	EMITTER(PREFIX ## 14) \
109	EMITTER(PREFIX ## 15) \
110	EMITTER(PREFIX ## 16) \
111	EMITTER(PREFIX ## 17) \
112	EMITTER(PREFIX ## 18) \
113	EMITTER(PREFIX ## 19) \
114	EMITTER(PREFIX ## 1A) \
115	EMITTER(PREFIX ## 1B) \
116	EMITTER(PREFIX ## 1C) \
117	EMITTER(PREFIX ## 1D) \
118	EMITTER(PREFIX ## 1E) \
119	EMITTER(PREFIX ## 1F) \
120
121#define ECHO(...) __VA_ARGS__,
122#define ECHO_4(...) \
123	ECHO(__VA_ARGS__) \
124	ECHO(__VA_ARGS__) \
125	ECHO(__VA_ARGS__) \
126	ECHO(__VA_ARGS__)
127
128#endif