⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amd3dx.h

📁 这是一组DCT和iDCT的代码
💻 H
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************

 Copyright (c) 1999 Advanced Micro Devices, Inc.

 LIMITATION OF LIABILITY:  THE MATERIALS ARE PROVIDED *AS IS* WITHOUT ANY
 EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY,
 NONINFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY, OR FITNESS FOR ANY
 PARTICULAR PURPOSE.  IN NO EVENT SHALL AMD OR ITS SUPPLIERS BE LIABLE FOR ANY
 DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS,
 BUSINESS INTERRUPTION, LOSS OF INFORMATION) ARISING OUT OF THE USE OF OR
 INABILITY TO USE THE MATERIALS, EVEN IF AMD HAS BEEN ADVISED OF THE POSSIBILITY
 OF SUCH DAMAGES.  BECAUSE SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION
 OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY
 NOT APPLY TO YOU.

 AMD does not assume any responsibility for any errors which may appear in the
 Materials nor any responsibility to support or update the Materials.  AMD retains
 the right to make changes to its test specifications at any time, without notice.

 NO SUPPORT OBLIGATION: AMD is not obligated to furnish, support, or make any
 further information, software, technical information, know-how, or show-how
 available to you.

 So that all may benefit from your experience, please report  any  problems
 or  suggestions about this software to 3dsdk.support@amd.com

 AMD Developer Technologies, M/S 585
 Advanced Micro Devices, Inc.
 5900 E. Ben White Blvd.
 Austin, TX 78741
 3dsdk.support@amd.com

*******************************************************************************

 AMD3DX.H

 MACRO FORMAT
 ============
 This file contains inline assembly macros that
 generate AMD-3D instructions in binary format.
 Therefore, C or C++ programmer can use AMD-3D instructions
 without any penalty in their C or C++ source code.

 The macro's name and format conventions are as follow:


 1. First argument of macro is a destination and
    second argument is a source operand.
      ex) _asm PFCMPEQ (mm3, mm4)
                         |    |
                        dst  src

 2. The destination operand can be m0 to m7 only.
    The source operand can be any one of the register
    m0 to m7 or _eax, _ecx, _edx, _ebx, _esi, or _edi
    that contains effective address.
      ex) _asm PFRCP    (MM7, MM6)
      ex) _asm PFRCPIT2 (mm0, mm4)
      ex) _asm PFMUL    (mm3, _edi)

  3. The prefetch(w) takes one src operand _eax, ecx, _edx,
     _ebx, _esi, or _edi that contains effective address.
      ex) _asm PREFETCH (_edi)

 For WATCOM C/C++ users, when using #pragma aux instead if 
 _asm, all macro names should be prefixed by a p_ or P_. 
 Macros should not be enclosed in quotes.
              ex) p_pfrcp (MM7,MM6)

 NOTE: Not all instruction macros, nor all possible
       combinations of operands have been explicitely
       tested. If any errors are found, please report
       them.

 EXAMPLE
 =======
 Following program doesn't do anything but it shows you
 how to use inline assembly AMD-3D instructions in C.
 Note that this will only work in flat memory model which
 segment registers cs, ds, ss and es point to the same
 linear address space total less than 4GB.

 Used Microsoft VC++ 5.0

 #include <stdio.h>
 #include "amd3d.h"

 void main ()
 {
      float x = (float)1.25;
      float y = (float)1.25;
      float z, zz;

     _asm {
              movd mm1, x
              movd mm2, y
              pfmul (mm1, mm2)
              movd z, mm1
              femms
      }

      printf ("value of z = %f\n", z);

      //
      // Demonstration of using the memory instead of
      // multimedia register
      //
      _asm {
              movd mm3, x
              lea esi, y   // load effective address of y
              pfmul (mm3, _esi)
              movd zz, mm3
              femms
      }

      printf ("value of zz = %f\n", zz);
  }

 #pragma aux EXAMPLE with WATCOM C/C++ v11.x
 ===========================================

    extern void Add(float *__Dest, float *__A, float *__B);
    #pragma aux Add =               \
            p_femms                 \
            "movd mm6,[esi]"        \
            p_pfadd(mm6,_edi)       \
            "movd [ebx],mm6"        \
            p_femms                 \
            parm [ebx] [esi] [edi];

*******************************************************************************/

#ifndef _K3DMACROSINCLUDED_
#define _K3DMACROSINCLUDED_

#if defined (__WATCOMC__)

// The WATCOM C/C++ version of the 3DNow! macros.
//
// The older, combined register style for WATCOM C/C++ macros is not 
// supported.

/* Operand defines for instructions two operands */
#define _k3d_mm0_mm0 0xc0
#define _k3d_mm0_mm1 0xc1
#define _k3d_mm0_mm2 0xc2
#define _k3d_mm0_mm3 0xc3
#define _k3d_mm0_mm4 0xc4
#define _k3d_mm0_mm5 0xc5
#define _k3d_mm0_mm6 0xc6
#define _k3d_mm0_mm7 0xc7
#define _k3d_mm0_eax 0x00
#define _k3d_mm0_ecx 0x01
#define _k3d_mm0_edx 0x02
#define _k3d_mm0_ebx 0x03
#define _k3d_mm0_esi 0x06
#define _k3d_mm0_edi 0x07
#define _k3d_mm1_mm0 0xc8
#define _k3d_mm1_mm1 0xc9
#define _k3d_mm1_mm2 0xca
#define _k3d_mm1_mm3 0xcb
#define _k3d_mm1_mm4 0xcc
#define _k3d_mm1_mm5 0xcd
#define _k3d_mm1_mm6 0xce
#define _k3d_mm1_mm7 0xcf
#define _k3d_mm1_eax 0x08
#define _k3d_mm1_ecx 0x09
#define _k3d_mm1_edx 0x0a
#define _k3d_mm1_ebx 0x0b
#define _k3d_mm1_esi 0x0e
#define _k3d_mm1_edi 0x0f
#define _k3d_mm2_mm0 0xd0
#define _k3d_mm2_mm1 0xd1
#define _k3d_mm2_mm2 0xd2
#define _k3d_mm2_mm3 0xd3
#define _k3d_mm2_mm4 0xd4
#define _k3d_mm2_mm5 0xd5
#define _k3d_mm2_mm6 0xd6
#define _k3d_mm2_mm7 0xd7
#define _k3d_mm2_eax 0x10
#define _k3d_mm2_ecx 0x11
#define _k3d_mm2_edx 0x12
#define _k3d_mm2_ebx 0x13
#define _k3d_mm2_esi 0x16
#define _k3d_mm2_edi 0x17
#define _k3d_mm3_mm0 0xd8
#define _k3d_mm3_mm1 0xd9
#define _k3d_mm3_mm2 0xda
#define _k3d_mm3_mm3 0xdb
#define _k3d_mm3_mm4 0xdc
#define _k3d_mm3_mm5 0xdd
#define _k3d_mm3_mm6 0xde
#define _k3d_mm3_mm7 0xdf
#define _k3d_mm3_eax 0x18
#define _k3d_mm3_ecx 0x19
#define _k3d_mm3_edx 0x1a
#define _k3d_mm3_ebx 0x1b
#define _k3d_mm3_esi 0x1e
#define _k3d_mm3_edi 0x1f
#define _k3d_mm4_mm0 0xe0
#define _k3d_mm4_mm1 0xe1
#define _k3d_mm4_mm2 0xe2
#define _k3d_mm4_mm3 0xe3
#define _k3d_mm4_mm4 0xe4
#define _k3d_mm4_mm5 0xe5
#define _k3d_mm4_mm6 0xe6
#define _k3d_mm4_mm7 0xe7
#define _k3d_mm4_eax 0x20
#define _k3d_mm4_ecx 0x21
#define _k3d_mm4_edx 0x22
#define _k3d_mm4_ebx 0x23
#define _k3d_mm4_esi 0x26
#define _k3d_mm4_edi 0x27
#define _k3d_mm5_mm0 0xe8
#define _k3d_mm5_mm1 0xe9
#define _k3d_mm5_mm2 0xea
#define _k3d_mm5_mm3 0xeb
#define _k3d_mm5_mm4 0xec
#define _k3d_mm5_mm5 0xed
#define _k3d_mm5_mm6 0xee
#define _k3d_mm5_mm7 0xef
#define _k3d_mm5_eax 0x28
#define _k3d_mm5_ecx 0x29
#define _k3d_mm5_edx 0x2a
#define _k3d_mm5_ebx 0x2b
#define _k3d_mm5_esi 0x2e
#define _k3d_mm5_edi 0x2f
#define _k3d_mm6_mm0 0xf0
#define _k3d_mm6_mm1 0xf1
#define _k3d_mm6_mm2 0xf2
#define _k3d_mm6_mm3 0xf3
#define _k3d_mm6_mm4 0xf4
#define _k3d_mm6_mm5 0xf5
#define _k3d_mm6_mm6 0xf6
#define _k3d_mm6_mm7 0xf7
#define _k3d_mm6_eax 0x30
#define _k3d_mm6_ecx 0x31
#define _k3d_mm6_edx 0x32
#define _k3d_mm6_ebx 0x33
#define _k3d_mm6_esi 0x36
#define _k3d_mm6_edi 0x37
#define _k3d_mm7_mm0 0xf8
#define _k3d_mm7_mm1 0xf9
#define _k3d_mm7_mm2 0xfa
#define _k3d_mm7_mm3 0xfb
#define _k3d_mm7_mm4 0xfc
#define _k3d_mm7_mm5 0xfd
#define _k3d_mm7_mm6 0xfe
#define _k3d_mm7_mm7 0xff
#define _k3d_mm7_eax 0x38
#define _k3d_mm7_ecx 0x39
#define _k3d_mm7_edx 0x3a
#define _k3d_mm7_ebx 0x3b
#define _k3d_mm7_esi 0x3e
#define _k3d_mm7_edi 0x3f

#define _k3dbo_mm0_eax 0x40
#define _k3dbo_mm0_ecx 0x41
#define _k3dbo_mm0_edx 0x42
#define _k3dbo_mm0_ebx 0x43
#define _k3dbo_mm0_esi 0x46
#define _k3dbo_mm0_edi 0x47
#define _k3dbo_mm1_eax 0x48
#define _k3dbo_mm1_ecx 0x49
#define _k3dbo_mm1_edx 0x4a
#define _k3dbo_mm1_ebx 0x4b
#define _k3dbo_mm1_esi 0x4e
#define _k3dbo_mm1_edi 0x4f
#define _k3dbo_mm2_eax 0x50
#define _k3dbo_mm2_ecx 0x51
#define _k3dbo_mm2_edx 0x52
#define _k3dbo_mm2_ebx 0x53
#define _k3dbo_mm2_esi 0x56
#define _k3dbo_mm2_edi 0x57
#define _k3dbo_mm3_eax 0x58
#define _k3dbo_mm3_ecx 0x59
#define _k3dbo_mm3_edx 0x5a
#define _k3dbo_mm3_ebx 0x5b
#define _k3dbo_mm3_esi 0x5e
#define _k3dbo_mm3_edi 0x5f
#define _k3dbo_mm4_eax 0x60
#define _k3dbo_mm4_ecx 0x61
#define _k3dbo_mm4_edx 0x62
#define _k3dbo_mm4_ebx 0x63
#define _k3dbo_mm4_esi 0x66
#define _k3dbo_mm4_edi 0x67
#define _k3dbo_mm5_eax 0x68
#define _k3dbo_mm5_ecx 0x69
#define _k3dbo_mm5_edx 0x6a
#define _k3dbo_mm5_ebx 0x6b
#define _k3dbo_mm5_esi 0x6e
#define _k3dbo_mm5_edi 0x6f
#define _k3dbo_mm6_eax 0x70
#define _k3dbo_mm6_ecx 0x71
#define _k3dbo_mm6_edx 0x72
#define _k3dbo_mm6_ebx 0x73
#define _k3dbo_mm6_esi 0x76
#define _k3dbo_mm6_edi 0x77
#define _k3dbo_mm7_eax 0x78
#define _k3dbo_mm7_ecx 0x79
#define _k3dbo_mm7_edx 0x7a
#define _k3dbo_mm7_ebx 0x7b
#define _k3dbo_mm7_esi 0x7e
#define _k3dbo_mm7_edi 0x7f

#define _k3d_name_xlat_m0 _mm0
#define _k3d_name_xlat_m1 _mm1
#define _k3d_name_xlat_m2 _mm2
#define _k3d_name_xlat_m3 _mm3
#define _k3d_name_xlat_m4 _mm4
#define _k3d_name_xlat_m5 _mm5

⌨️ 快捷键说明

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