Announcement

Collapse
No announcement yet.

Technique with a FASTPROC to use SSE2 Instructions

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Technique with a FASTPROC to use SSE2 Instructions

    Use the 128 bit XMM registers with 64 bit Scalar Double instructions. The "loadsd" macro addresses loading an immediate FP value via a DOUBLE variable as XMM registers can only be loaded via another XMM register or a 64 bit DOUBLE memory operand.

    Code:
    ' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
        MACRO loadsd(sse2reg,immval)    ' load a 64 bit immediate into an SSE register
        MACROTEMP valdbl
          LOCAL valdbl as DOUBLE
          valdbl = immval
          ! movsd sse2reg, valdbl
        END MACRO
    
        MACRO FUNCTION SseRtn           ' load an SSE register into a DOUBLE value
        MACROTEMP valdbl
          LOCAL valdbl as DOUBLE
          ! movsd valdbl, xmm0
        END MACRO = valdbl
    
    ' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
     FUNCTION PBmain as LONG
    
        loadsd(xmm0,1000.0)             ' load an immediate FP value via a DOUBLE into xmm0
        loadsd(xmm1,10.0)               ' load another FP DOUBLE immediate into xmm1
        ! call sse2                     ' call the FASTPROC
    
        Msgbox format$(SseRtn)          ' display value as string via FORMAT$
    
     End FUNCTION
    
    ' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
    FASTPROC sse2
    
        PREFIX "!"
    
        mulsd xmm0, xmm1                ' xmm0 is the return value
    
        END PREFIX
    
    END FASTPROC
    
    ' ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    hutch at movsd dot com
    The MASM Forum - SLL Modules and PB Libraries

    http://www.masm32.com/board/index.php?board=69.0
Working...
X
😀
🥰
🤢
😎
😡
👍
👎