nrm2_x87_x1.c

来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 72 行

C
72
字号
#include "atlas_asm.h"#if !defined(ATL_GAS_x8632) && !defined(ATL_GAS_x8664)   #error "This kernel requires x86 gas 32 or 64 bit x86 assembler!"#endif#ifdef ATL_GAS_x8664   #define N            %rdi   #define X            %rsi#else   #define N            %eax   #define X            %edx#endif#define pref(mem)       prefetcht0 mem#if defined(ATL_ARCH_HAMMER) && !defined(SREAL)   #define PFDIST 72#else   #define PFDIST 192#endif/*                  rdi/ 4         rsi/ 8          rdx/12TYPE ATL_UNRM2(const int N, const TYPE *X, const int incX)*/        .text.global ATL_asmdecor(ATL_UNRM2)ATL_asmdecor(ATL_UNRM2):   #ifdef ATL_GAS_x8632##       Load operands to registers#        movl    4(%esp), N        movl    8(%esp), X   #endif        fldz   #ifdef SREAL        #define fldl flds        shl     $2, N   #else        shl     $3, N   #endif        add     N, X        neg     NALIGN4LOOP1:        fldl    (X, N)        fmul    %st, %st        faddp        pref(PFDIST(X,N))   #ifdef SREAL        add     $4, N   #else        add     $8, N   #endifALIGN4        jnz     LOOP1        fsqrt##       Put return val in right register and return##ifdef ATL_GAS_x8664   #ifdef SREAL        fstps   -4(%rsp)        movss   -4(%rsp), %xmm0   #else        fstpl   -8(%rsp)        movsd   -8(%rsp), %xmm0   #endif#endif        ret

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?