fpu.c
来自「宇航级微处理器LEON2 2.2 VHDL源代码,很难找的.」· C语言 代码 · 共 86 行
C
86 行
#include "leon.h"#include "test.h" #include <math.h> int __errno;fpu_init(){ int tmp; tmp = getpsr(); setpsr(tmp | (1 << 12)); set_fsr(0);}fpu_test(){ if (!((lr->leonconf>>FPU_CONF_BIT)&FPU_CONF_MASK)) return(0); report(FPU_TEST); fpu_init(); fpu_main();}fpu_main(){ volatile double a,c; float b; int tmp; a = sqrt(3.0); if (fabs((a * a) - 3.0) > 1E-15) fail(1); b = sqrt(3.0); if (fabs((b * b) - 3.0) > 1E-7) fail(2); tmp = fpu_pipe(); if (tmp) fail(tmp);}#ifdef __leon__double _f1x = -1.0;double _fq1[2];int _fsr1 = 0x80000000;#elsedouble f1x = -1.0;double fq1[2];int fsr1 = 0x80000000;#endiffpu_pipe(){ asm(" set _fsr1, %o0 ! check ldfsr/stfsr interlock ld [%o0], %fsr st %g0, [%o0] ld [%o0], %fsr st %fsr, [%o0] ld [%o0], %o2 subcc %g0, %o2, %g0 bne,a fail mov 3, %o0 set 0x0f800000, %o1 ! check ldfsr/fpop interlock st %o1, [%o0] ld [%o0], %fsr st %g0, [%o0] set _f1x, %o2 ld [%o2], %f0 nop; nop ld [%o0], %fsr fsqrts %f0, %f1 mov %tbr, %o3 and %o3, 0x0ff0, %o3 subcc %o3, 0x070, %g0 be,a fail mov 4, %o0 mov 0, %o0 nopfail: ");}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?