- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
#if defined(REG_R1) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R1,REG_R1)
#else
# define R1 (BaseReg->rR1)
#endif
#if defined(REG_R2) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R2,REG_R2)
#else
# define R2 (BaseReg->rR2)
#endif
#if defined(REG_R3) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R3,REG_R3)
#else
# define R3 (BaseReg->rR3)
#endif
#if defined(REG_R4) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R4,REG_R4)
#else
# define R4 (BaseReg->rR4)
#endif
#if defined(REG_R5) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R5,REG_R5)
#else
# define R5 (BaseReg->rR5)
#endif
#if defined(REG_R6) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R6,REG_R6)
#else
# define R6 (BaseReg->rR6)
#endif
#if defined(REG_R7) && !defined(NO_GLOBAL_REG_DECLS)
GLOBAL_REG_DECL(StgUnion,R7,REG_R7)
#else
# define R7 (BaseReg->rR7)
#endif
...
учите системщину.
альтернатива: не учите системщину (здоровее будете) НО и не смотрите в сырцы осей/компилеров/системных библиотек.
ЗЫ и к слову, самый портабельный вариант, который работает так же и на платформах лишенных счастья м4, это писать кодогенерацию на том же языке что и проект: 100% гарантия что скомпилится и запустится.
Второе: Если код нагенерированный, надо писать что-то вроде "Automatically generated by blablabla", такого там нет.
По-моему код получился менее укуренным, чем оригинальный.
Ты очевидно забыл "[/sarcasm]".
dnl можно не писать, поскольку лишние строки нас не заботят, да и волосатость уменьшить, убрав экранирование там, где оно не нужно. Хотя что-то ещё не так... Наверное, я отформатировал код неудачно.
Зато я могу написать: loop(100500)
P.S. И правда работает, даже стек не переполняется.
А ещё можно выполнять сплайсинг и перетасовку с помощью divert. В общем, счастливой отладки, суки!
Явно отключают кеш через MTRRPAT для конкретной страницы?
Делают какой-то FLUSH?
Привязываются к конкретному ядру?
З.Ы. У интела тоже раздельные кеши для данных и кода, как бы.
Я уже понял что надо ставить FENCE (который появился примерно во времена P III, ну видимо до него кеш был общий) а еще (как говорят) можно вызвать CPUID которая тоже сериализует доступ:)