nmpp
macros_fpu.h
1
2#define ALL_FPU( instr ) "fpu 0 " instr "\n\t" \
3 "fpu 1 " instr "\n\t" \
4 "fpu 2 " instr "\n\t" \
5 "fpu 3 " instr "\n\t"
6
7// код для исправления аппаратной ошибки №5 процессора 6407
8// замедляет выполнение процентов на 8, можно отключить для 6408
9#if NMC_CORE_VERSION > NM6407
10#define ALL_FPU_ANTI_MASK
11#else
12#define ALL_FPU_ANTI_MASK "fp0_lmask = fp0_lmask; \n\t" \
13 "fp1_lmask = fp1_lmask; \n\t" \
14 "fp2_lmask = fp2_lmask; \n\t" \
15 "fp3_lmask = fp3_lmask; \n\t"
16#endif
17
18#define DUP(x) x,x
19
20// Запрещаем прерывания и прочее в том же духе, деструктор возвращает обратно
22{
23 static int inst;
24public:
26 {
27 inst++;
28 asm volatile( "pswr clear 01e0h; \n\t" // block interrupts
29// ".int 0xf7990000 \n\t"//set fp_wait
30 );
31 }
33 {
34 if (--inst==0)
35 asm volatile( "pswr set 01e0h; \n\t" // allow interrupts"
36// ".int 0xf7d90000 \n\t"//set fp_branch
37 );
38 }
39};
Definition: macros_fpu.h:22