;
; jsimdext.inc - common declarations
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
; Copyright (C) 2010, 2016, 2019, D. R. Commander.
; Copyright (C) 2018, Matthieu Darbois.
;
; Based on the x86 SIMD extension for IJG JPEG library - version 1.02
;
; Copyright (C) 1999-2006, MIYASAKA Masaru.
;
; This software is provided 'as-is', without any express or implied
; warranty.  In no event will the authors be held liable for any damages
; arising from the use of this software.
;
; Permission is granted to anyone to use this software for any purpose,
; including commercial applications, and to alter it and redistribute it
; freely, subject to the following restrictions:
;
; 1. The origin of this software must not be misrepresented; you must not
;    claim that you wrote the original software. If you use this software
;    in a product, an acknowledgment in the product documentation would be
;    appreciated but is not required.
; 2. Altered source versions must be plainly marked as such, and must not be
;    misrepresented as being the original software.
; 3. This notice may not be removed or altered from any source distribution.

; ==========================================================================
;  System-dependent configurations

%ifdef WIN32    ; ----(nasm -fwin32 -DWIN32 ...)--------
; * Microsoft Visual C++
; * MinGW (Minimalist GNU for Windows)
; * CygWin
; * LCC-Win32

; -- segment definition --
;
%ifdef __YASM_VER__
%define SEG_TEXT   .text  align=32
%define SEG_CONST  .rdata align=32
%else
%define SEG_TEXT   .text  align=32 public use32 class=CODE
%define SEG_CONST  .rdata align=32 public use32 class=CONST
%endif

%elifdef WIN64  ; ----(nasm -fwin64 -DWIN64 ...)--------
; * Microsoft Visual C++

; -- segment definition --
;
%ifdef __YASM_VER__
%define SEG_TEXT    .text  align=32
%define SEG_CONST   .rdata align=32
%else
%define SEG_TEXT    .text  align=32 public use64 class=CODE
%define SEG_CONST   .rdata align=32 public use64 class=CONST
%endif
%define EXTN(name)  name                ; foo() -> foo

%elifdef OBJ32  ; ----(nasm -fobj -DOBJ32 ...)----------
; * Borland C++ (Win32)

; -- segment definition --
;
%define SEG_TEXT   _text align=32 public use32 class=CODE
%define SEG_CONST  _data align=32 public use32 class=DATA

%elifdef ELF    ; ----(nasm -felf[64] -DELF ...)------------
; * Linux
; * *BSD family Unix using elf format
; * Unix System V, including Solaris x86, UnixWare and SCO Unix

; mark stack as non-executable
section .note.GNU-stack noalloc noexec nowrite progbits

; -- segment definition --
;
%ifdef __x86_64__
%define SEG_TEXT   .text   progbits align=32
%define SEG_CONST  .rodata progbits align=32
%else
%define SEG_TEXT   .text   progbits alloc exec   nowrite align=32
%define SEG_CONST  .rodata progbits alloc noexec nowrite align=32
%endif

; To make the code position-independent, append -DPIC to the commandline
;
%define GOT_SYMBOL  _GLOBAL_OFFSET_TABLE_  ; ELF supports PIC
%define EXTN(name)  name                   ; foo() -> foo

%elifdef AOUT   ; ----(nasm -faoutb/aout -DAOUT ...)----
; * Older Linux using a.out format  (nasm -f aout -DAOUT ...)
; * *BSD family Unix using a.out format  (nasm -f aoutb -DAOUT ...)

; -- segment definition --
;
%define SEG_TEXT   .text
%define SEG_CONST  .data

; To make the code position-independent, append -DPIC to the commandline
;
%define GOT_SYMBOL  __GLOBAL_OFFSET_TABLE_  ; BSD-style a.out supports PIC

%elifdef MACHO  ; ----(nasm -fmacho -DMACHO ...)--------
; * NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (Mach-O format)

; -- segment definition --
;
%define SEG_TEXT   .text  ;align=32     ; nasm doesn't accept align=32. why?
%define SEG_CONST  .rodata align=32

; The generation of position-independent code (PIC) is the default on Darwin.
;
%define PIC
%define GOT_SYMBOL  _MACHO_PIC_         ; Mach-O style code-relative addressing

%else           ; ----(Other case)----------------------

; -- segment definition --
;
%define SEG_TEXT   .text
%define SEG_CONST  .data

%endif          ; ----------------------------------------------

; ==========================================================================

; --------------------------------------------------------------------------
;  Common types
;
%ifdef __x86_64__
%define POINTER         qword           ; general pointer type
%define SIZEOF_POINTER  SIZEOF_QWORD    ; sizeof(POINTER)
%define POINTER_BIT     QWORD_BIT       ; sizeof(POINTER)*BYTE_BIT
%else
%define POINTER         dword           ; general pointer type
%define SIZEOF_POINTER  SIZEOF_DWORD    ; sizeof(POINTER)
%define POINTER_BIT     DWORD_BIT       ; sizeof(POINTER)*BYTE_BIT
%endif

%define INT             dword           ; signed integer type
%define SIZEOF_INT      SIZEOF_DWORD    ; sizeof(INT)
%define INT_BIT         DWORD_BIT       ; sizeof(INT)*BYTE_BIT

%define FP32            dword           ; IEEE754 single
%define SIZEOF_FP32     SIZEOF_DWORD    ; sizeof(FP32)
%define FP32_BIT        DWORD_BIT       ; sizeof(FP32)*BYTE_BIT

%define MMWORD          qword           ; int64  (MMX register)
%define SIZEOF_MMWORD   SIZEOF_QWORD    ; sizeof(MMWORD)
%define MMWORD_BIT      QWORD_BIT       ; sizeof(MMWORD)*BYTE_BIT

; NASM is buggy and doesn't properly handle operand sizes for SSE
; instructions, so for now we have to define XMMWORD as blank.
%define XMMWORD                         ; int128 (SSE register)
%define SIZEOF_XMMWORD  SIZEOF_OWORD    ; sizeof(XMMWORD)
%define XMMWORD_BIT     OWORD_BIT       ; sizeof(XMMWORD)*BYTE_BIT

%define YMMWORD                         ; int256 (AVX register)
%define SIZEOF_YMMWORD  SIZEOF_YWORD    ; sizeof(YMMWORD)
%define YMMWORD_BIT     YWORD_BIT       ; sizeof(YMMWORD)*BYTE_BIT

; Similar hacks for when we load a dword or MMWORD into an xmm# register
%define XMM_DWORD
%define XMM_MMWORD

%define SIZEOF_BYTE   1                 ; sizeof(byte)
%define SIZEOF_WORD   2                 ; sizeof(word)
%define SIZEOF_DWORD  4                 ; sizeof(dword)
%define SIZEOF_QWORD  8                 ; sizeof(qword)
%define SIZEOF_OWORD  16                ; sizeof(oword)
%define SIZEOF_YWORD  32                ; sizeof(yword)

%define BYTE_BIT      8                 ; CHAR_BIT in C
%define WORD_BIT      16                ; sizeof(word)*BYTE_BIT
%define DWORD_BIT     32                ; sizeof(dword)*BYTE_BIT
%define QWORD_BIT     64                ; sizeof(qword)*BYTE_BIT
%define OWORD_BIT     128               ; sizeof(oword)*BYTE_BIT
%define YWORD_BIT     256               ; sizeof(yword)*BYTE_BIT

; --------------------------------------------------------------------------
;  External Symbol Name
;
%ifndef EXTN
%define EXTN(name)  _ %+ name           ; foo() -> _foo
%endif

; --------------------------------------------------------------------------
;  Hidden symbols
;
%ifdef ELF      ; ----(nasm -felf[64] -DELF ...)--------
%define GLOBAL_FUNCTION(name)  global EXTN(name):function hidden
%define GLOBAL_DATA(name)      global EXTN(name):data hidden
%elifdef MACHO  ; ----(nasm -fmacho -DMACHO ...)--------
%ifdef __YASM_VER__
%define GLOBAL_FUNCTION(name)  global EXTN(name):private_extern
%define GLOBAL_DATA(name)      global EXTN(name):private_extern
%else
%if __NASM_VERSION_ID__ >= 0x020E0000
%define GLOBAL_FUNCTION(name)  global EXTN(name):private_extern
%define GLOBAL_DATA(name)      global EXTN(name):private_extern
%endif
%endif
%endif

%ifndef GLOBAL_FUNCTION
%define GLOBAL_FUNCTION(name)  global EXTN(name)
%endif
%ifndef GLOBAL_DATA
%define GLOBAL_DATA(name)      global EXTN(name)
%endif

; --------------------------------------------------------------------------
;  Macros for position-independent code (PIC) support
;
%ifndef GOT_SYMBOL
%undef PIC
%endif

%ifdef PIC  ; -------------------------------------------

%ifidn GOT_SYMBOL, _MACHO_PIC_  ; --------------------

; At present, nasm doesn't seem to support PIC generation for Mach-O.
; The PIC support code below is a little tricky.

    SECTION     SEG_CONST
const_base:

%define GOTOFF(got, sym)  (got) + (sym) - const_base

%imacro get_GOT 1
    ; NOTE: this macro destroys ecx resister.
    call        %%geteip
    add         ecx, byte (%%ref - $)
    jmp         short %%adjust
%%geteip:
    mov         ecx, POINTER [esp]
    ret
%%adjust:
    push        ebp
    xor         ebp, ebp                ; ebp = 0
%ifidni %1, ebx  ; (%1 == ebx)
    ; db 0x8D,0x9C + jmp near const_base =
    ;   lea ebx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,9C,E9,(offset32)
    db          0x8D, 0x9C              ; 8D,9C
    jmp         near const_base         ; E9,(const_base-%%ref)
%%ref:
%else  ; (%1 != ebx)
    ; db 0x8D,0x8C + jmp near const_base =
    ;   lea ecx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,8C,E9,(offset32)
    db          0x8D, 0x8C              ; 8D,8C
    jmp         near const_base         ; E9,(const_base-%%ref)
%%ref:
    mov         %1, ecx
%endif  ; (%1 == ebx)
    pop         ebp
%endmacro

%else     ; GOT_SYMBOL != _MACHO_PIC_ ----------------

%define GOTOFF(got, sym)  (got) + (sym) wrt ..gotoff

%imacro get_GOT 1
    extern      GOT_SYMBOL
    call        %%geteip
    add         %1, GOT_SYMBOL + $$ - $ wrt ..gotpc
    jmp         short %%done
%%geteip:
    mov         %1, POINTER [esp]
    ret
%%done:
%endmacro

%endif    ; GOT_SYMBOL == _MACHO_PIC_ ----------------

%imacro pushpic 1.nolist
    push        %1
%endmacro
%imacro poppic  1.nolist
    pop         %1
%endmacro
%imacro movpic  2.nolist
    mov         %1, %2
%endmacro

%else    ; !PIC -----------------------------------------

%define GOTOFF(got, sym)  (sym)

%imacro get_GOT 1.nolist
%endmacro
%imacro pushpic 1.nolist
%endmacro
%imacro poppic  1.nolist
%endmacro
%imacro movpic  2.nolist
%endmacro

%endif   ;  PIC -----------------------------------------

; --------------------------------------------------------------------------
;  Align the next instruction on {2,4,8,16,..}-byte boundary.
;  ".balign n,,m" in GNU as
;
%define MSKLE(x, y)  (~(((y) & 0xFFFF) - ((x) & 0xFFFF)) >> 16)
%define FILLB(b, n)  (($$-(b)) & ((n)-1))

%imacro alignx 1-2.nolist 0xFFFF
%%bs: \
  times MSKLE(FILLB(%%bs, %1), %2) & MSKLE(16, FILLB($, %1)) & FILLB($, %1) \
        db 0x90                                      ; nop
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 9 \
        db 0x8D, 0x9C, 0x23, 0x00, 0x00, 0x00, 0x00  ; lea ebx,[ebx+0x00000000]
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 7 \
        db 0x8D, 0xAC, 0x25, 0x00, 0x00, 0x00, 0x00  ; lea ebp,[ebp+0x00000000]
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 6 \
        db 0x8D, 0xAD, 0x00, 0x00, 0x00, 0x00        ; lea ebp,[ebp+0x00000000]
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 4 \
        db 0x8D, 0x6C, 0x25, 0x00                    ; lea ebp,[ebp+0x00]
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 3 \
        db 0x8D, 0x6D, 0x00                          ; lea ebp,[ebp+0x00]
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 2 \
        db 0x8B, 0xED                                ; mov ebp,ebp
  times MSKLE(FILLB(%%bs, %1), %2) & FILLB($, %1) / 1 \
        db 0x90                                      ; nop
%endmacro

; Align the next data on {2,4,8,16,..}-byte boundary.
;
%imacro alignz 1.nolist
    align       %1, db 0                ; filling zeros
%endmacro

%ifdef __x86_64__

%ifdef WIN64

%imacro collect_args 1
    sub         rsp, SIZEOF_XMMWORD
    movaps      XMMWORD [rsp], xmm6
    sub         rsp, SIZEOF_XMMWORD
    movaps      XMMWORD [rsp], xmm7
    mov         r10, rcx
%if %1 > 1
    mov         r11, rdx
%endif
%if %1 > 2
    push        r12
    mov         r12, r8
%endif
%if %1 > 3
    push        r13
    mov         r13, r9
%endif
%if %1 > 4
    push        r14
    mov         r14, [rax+48]
%endif
%if %1 > 5
    push        r15
    mov         r15, [rax+56]
%endif
    push        rsi
    push        rdi
%endmacro

%imacro uncollect_args 1
    pop         rdi
    pop         rsi
%if %1 > 5
    pop         r15
%endif
%if %1 > 4
    pop         r14
%endif
%if %1 > 3
    pop         r13
%endif
%if %1 > 2
    pop         r12
%endif
    movaps      xmm7, XMMWORD [rsp]
    add         rsp, SIZEOF_XMMWORD
    movaps      xmm6, XMMWORD [rsp]
    add         rsp, SIZEOF_XMMWORD
%endmacro

%imacro push_xmm 1
    sub         rsp, %1 * SIZEOF_XMMWORD
    movaps      XMMWORD [rsp+0*SIZEOF_XMMWORD], xmm8
%if %1 > 1
    movaps      XMMWORD [rsp+1*SIZEOF_XMMWORD], xmm9
%endif
%if %1 > 2
    movaps      XMMWORD [rsp+2*SIZEOF_XMMWORD], xmm10
%endif
%if %1 > 3
    movaps      XMMWORD [rsp+3*SIZEOF_XMMWORD], xmm11
%endif
%endmacro

%imacro pop_xmm 1
    movaps      xmm8, XMMWORD [rsp+0*SIZEOF_XMMWORD]
%if %1 > 1
    movaps      xmm9, XMMWORD [rsp+1*SIZEOF_XMMWORD]
%endif
%if %1 > 2
    movaps      xmm10, XMMWORD [rsp+2*SIZEOF_XMMWORD]
%endif
%if %1 > 3
    movaps      xmm11, XMMWORD [rsp+3*SIZEOF_XMMWORD]
%endif
    add         rsp, %1 * SIZEOF_XMMWORD
%endmacro

%else

%imacro collect_args 1
    push        r10
    mov         r10, rdi
%if %1 > 1
    push        r11
    mov         r11, rsi
%endif
%if %1 > 2
    push        r12
    mov         r12, rdx
%endif
%if %1 > 3
    push        r13
    mov         r13, rcx
%endif
%if %1 > 4
    push        r14
    mov         r14, r8
%endif
%if %1 > 5
    push        r15
    mov         r15, r9
%endif
%endmacro

%imacro uncollect_args 1
%if %1 > 5
    pop         r15
%endif
%if %1 > 4
    pop         r14
%endif
%if %1 > 3
    pop         r13
%endif
%if %1 > 2
    pop         r12
%endif
%if %1 > 1
    pop         r11
%endif
    pop         r10
%endmacro

%imacro push_xmm 1
%endmacro

%imacro pop_xmm 1
%endmacro

%endif

%endif

; --------------------------------------------------------------------------
;  Defines picked up from the C headers
;
%include "jsimdcfg.inc"

; --------------------------------------------------------------------------
