16df3ef80SGreg Tucker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 28dc5d913SGreg Tucker; Copyright(c) 2011-2019 Intel Corporation All rights reserved. 36df3ef80SGreg Tucker; 46df3ef80SGreg Tucker; Redistribution and use in source and binary forms, with or without 56df3ef80SGreg Tucker; modification, are permitted provided that the following conditions 66df3ef80SGreg Tucker; are met: 76df3ef80SGreg Tucker; * Redistributions of source code must retain the above copyright 86df3ef80SGreg Tucker; notice, this list of conditions and the following disclaimer. 96df3ef80SGreg Tucker; * Redistributions in binary form must reproduce the above copyright 106df3ef80SGreg Tucker; notice, this list of conditions and the following disclaimer in 116df3ef80SGreg Tucker; the documentation and/or other materials provided with the 126df3ef80SGreg Tucker; distribution. 136df3ef80SGreg Tucker; * Neither the name of Intel Corporation nor the names of its 146df3ef80SGreg Tucker; contributors may be used to endorse or promote products derived 156df3ef80SGreg Tucker; from this software without specific prior written permission. 166df3ef80SGreg Tucker; 176df3ef80SGreg Tucker; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186df3ef80SGreg Tucker; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196df3ef80SGreg Tucker; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206df3ef80SGreg Tucker; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216df3ef80SGreg Tucker; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226df3ef80SGreg Tucker; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236df3ef80SGreg Tucker; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246df3ef80SGreg Tucker; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256df3ef80SGreg Tucker; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266df3ef80SGreg Tucker; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276df3ef80SGreg Tucker; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286df3ef80SGreg Tucker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 296df3ef80SGreg Tucker 306df3ef80SGreg Tucker%ifndef _REG_SIZES_ASM_ 316df3ef80SGreg Tucker%define _REG_SIZES_ASM_ 326df3ef80SGreg Tucker 338dc5d913SGreg Tucker%ifndef AS_FEATURE_LEVEL 348dc5d913SGreg Tucker%define AS_FEATURE_LEVEL 4 358dc5d913SGreg Tucker%endif 368dc5d913SGreg Tucker 376df3ef80SGreg Tucker%define EFLAGS_HAS_CPUID (1<<21) 386df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_CLMUL (1<<1) 396df3ef80SGreg Tucker%define FLAG_CPUID1_EDX_SSE2 (1<<26) 406df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_SSE3 (1) 416df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_SSE4_1 (1<<19) 426df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_SSE4_2 (1<<20) 436df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_POPCNT (1<<23) 446df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_AESNI (1<<25) 456df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_OSXSAVE (1<<27) 466df3ef80SGreg Tucker%define FLAG_CPUID1_ECX_AVX (1<<28) 476df3ef80SGreg Tucker%define FLAG_CPUID1_EBX_AVX2 (1<<5) 486df3ef80SGreg Tucker 496df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX2 (1<<5) 506df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512F (1<<16) 516df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512DQ (1<<17) 526df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512IFMA (1<<21) 536df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512PF (1<<26) 546df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512ER (1<<27) 556df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512CD (1<<28) 5630604006SXiaodong Liu%define FLAG_CPUID7_EBX_SHA (1<<29) 576df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512BW (1<<30) 586df3ef80SGreg Tucker%define FLAG_CPUID7_EBX_AVX512VL (1<<31) 598dc5d913SGreg Tucker 606df3ef80SGreg Tucker%define FLAG_CPUID7_ECX_AVX512VBMI (1<<1) 618dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_AVX512VBMI2 (1 << 6) 628dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_GFNI (1 << 8) 638dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_VAES (1 << 9) 648dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_VPCLMULQDQ (1 << 10) 658dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_VNNI (1 << 11) 668dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_BITALG (1 << 12) 678dc5d913SGreg Tucker%define FLAG_CPUID7_ECX_VPOPCNTDQ (1 << 14) 686df3ef80SGreg Tucker 69dcce8ecbSGreg Tucker%define FLAGS_CPUID7_EBX_AVX512_G1 (FLAG_CPUID7_EBX_AVX512F | FLAG_CPUID7_EBX_AVX512VL | FLAG_CPUID7_EBX_AVX512BW | FLAG_CPUID7_EBX_AVX512CD | FLAG_CPUID7_EBX_AVX512DQ) 708dc5d913SGreg Tucker%define FLAGS_CPUID7_ECX_AVX512_G2 (FLAG_CPUID7_ECX_AVX512VBMI2 | FLAG_CPUID7_ECX_GFNI | FLAG_CPUID7_ECX_VAES | FLAG_CPUID7_ECX_VPCLMULQDQ | FLAG_CPUID7_ECX_VNNI | FLAG_CPUID7_ECX_BITALG | FLAG_CPUID7_ECX_VPOPCNTDQ) 716df3ef80SGreg Tucker 726df3ef80SGreg Tucker%define FLAG_XGETBV_EAX_XMM (1<<1) 736df3ef80SGreg Tucker%define FLAG_XGETBV_EAX_YMM (1<<2) 746df3ef80SGreg Tucker%define FLAG_XGETBV_EAX_XMM_YMM 0x6 756df3ef80SGreg Tucker%define FLAG_XGETBV_EAX_ZMM_OPM 0xe0 766df3ef80SGreg Tucker 776df3ef80SGreg Tucker%define FLAG_CPUID1_EAX_AVOTON 0x000406d0 786df3ef80SGreg Tucker%define FLAG_CPUID1_EAX_STEP_MASK 0xfffffff0 796df3ef80SGreg Tucker 806df3ef80SGreg Tucker; define d and w variants for registers 816df3ef80SGreg Tucker 826df3ef80SGreg Tucker%define raxd eax 836df3ef80SGreg Tucker%define raxw ax 846df3ef80SGreg Tucker%define raxb al 856df3ef80SGreg Tucker 866df3ef80SGreg Tucker%define rbxd ebx 876df3ef80SGreg Tucker%define rbxw bx 886df3ef80SGreg Tucker%define rbxb bl 896df3ef80SGreg Tucker 906df3ef80SGreg Tucker%define rcxd ecx 916df3ef80SGreg Tucker%define rcxw cx 926df3ef80SGreg Tucker%define rcxb cl 936df3ef80SGreg Tucker 946df3ef80SGreg Tucker%define rdxd edx 956df3ef80SGreg Tucker%define rdxw dx 966df3ef80SGreg Tucker%define rdxb dl 976df3ef80SGreg Tucker 986df3ef80SGreg Tucker%define rsid esi 996df3ef80SGreg Tucker%define rsiw si 1006df3ef80SGreg Tucker%define rsib sil 1016df3ef80SGreg Tucker 1026df3ef80SGreg Tucker%define rdid edi 1036df3ef80SGreg Tucker%define rdiw di 1046df3ef80SGreg Tucker%define rdib dil 1056df3ef80SGreg Tucker 1066df3ef80SGreg Tucker%define rbpd ebp 1076df3ef80SGreg Tucker%define rbpw bp 1086df3ef80SGreg Tucker%define rbpb bpl 1096df3ef80SGreg Tucker 11017ef3263SRoy Oursler%define zmm0x xmm0 11117ef3263SRoy Oursler%define zmm1x xmm1 11217ef3263SRoy Oursler%define zmm2x xmm2 11317ef3263SRoy Oursler%define zmm3x xmm3 11417ef3263SRoy Oursler%define zmm4x xmm4 11517ef3263SRoy Oursler%define zmm5x xmm5 11617ef3263SRoy Oursler%define zmm6x xmm6 11717ef3263SRoy Oursler%define zmm7x xmm7 11817ef3263SRoy Oursler%define zmm8x xmm8 11917ef3263SRoy Oursler%define zmm9x xmm9 12017ef3263SRoy Oursler%define zmm10x xmm10 12117ef3263SRoy Oursler%define zmm11x xmm11 12217ef3263SRoy Oursler%define zmm12x xmm12 12317ef3263SRoy Oursler%define zmm13x xmm13 12417ef3263SRoy Oursler%define zmm14x xmm14 12517ef3263SRoy Oursler%define zmm15x xmm15 12617ef3263SRoy Oursler%define zmm16x xmm16 12717ef3263SRoy Oursler%define zmm17x xmm17 12817ef3263SRoy Oursler%define zmm18x xmm18 12917ef3263SRoy Oursler%define zmm19x xmm19 13017ef3263SRoy Oursler%define zmm20x xmm20 13117ef3263SRoy Oursler%define zmm21x xmm21 13217ef3263SRoy Oursler%define zmm22x xmm22 13317ef3263SRoy Oursler%define zmm23x xmm23 13417ef3263SRoy Oursler%define zmm24x xmm24 13517ef3263SRoy Oursler%define zmm25x xmm25 13617ef3263SRoy Oursler%define zmm26x xmm26 13717ef3263SRoy Oursler%define zmm27x xmm27 13817ef3263SRoy Oursler%define zmm28x xmm28 13917ef3263SRoy Oursler%define zmm29x xmm29 14017ef3263SRoy Oursler%define zmm30x xmm30 14117ef3263SRoy Oursler%define zmm31x xmm31 14217ef3263SRoy Oursler 1431638fd0eSGreg Tucker%define ymm0x xmm0 1441638fd0eSGreg Tucker%define ymm1x xmm1 1451638fd0eSGreg Tucker%define ymm2x xmm2 1461638fd0eSGreg Tucker%define ymm3x xmm3 1471638fd0eSGreg Tucker%define ymm4x xmm4 1481638fd0eSGreg Tucker%define ymm5x xmm5 1491638fd0eSGreg Tucker%define ymm6x xmm6 1501638fd0eSGreg Tucker%define ymm7x xmm7 1511638fd0eSGreg Tucker%define ymm8x xmm8 1521638fd0eSGreg Tucker%define ymm9x xmm9 1531638fd0eSGreg Tucker%define ymm10x xmm10 1541638fd0eSGreg Tucker%define ymm11x xmm11 1551638fd0eSGreg Tucker%define ymm12x xmm12 1561638fd0eSGreg Tucker%define ymm13x xmm13 1571638fd0eSGreg Tucker%define ymm14x xmm14 1581638fd0eSGreg Tucker%define ymm15x xmm15 1591638fd0eSGreg Tucker%define ymm16x xmm16 1601638fd0eSGreg Tucker%define ymm17x xmm17 1611638fd0eSGreg Tucker%define ymm18x xmm18 1621638fd0eSGreg Tucker%define ymm19x xmm19 1631638fd0eSGreg Tucker%define ymm20x xmm20 1641638fd0eSGreg Tucker%define ymm21x xmm21 1651638fd0eSGreg Tucker%define ymm22x xmm22 1661638fd0eSGreg Tucker%define ymm23x xmm23 1671638fd0eSGreg Tucker%define ymm24x xmm24 1681638fd0eSGreg Tucker%define ymm25x xmm25 1691638fd0eSGreg Tucker%define ymm26x xmm26 1701638fd0eSGreg Tucker%define ymm27x xmm27 1711638fd0eSGreg Tucker%define ymm28x xmm28 1721638fd0eSGreg Tucker%define ymm29x xmm29 1731638fd0eSGreg Tucker%define ymm30x xmm30 1741638fd0eSGreg Tucker%define ymm31x xmm31 1751638fd0eSGreg Tucker 1761638fd0eSGreg Tucker%define xmm0x xmm0 1771638fd0eSGreg Tucker%define xmm1x xmm1 1781638fd0eSGreg Tucker%define xmm2x xmm2 1791638fd0eSGreg Tucker%define xmm3x xmm3 1801638fd0eSGreg Tucker%define xmm4x xmm4 1811638fd0eSGreg Tucker%define xmm5x xmm5 1821638fd0eSGreg Tucker%define xmm6x xmm6 1831638fd0eSGreg Tucker%define xmm7x xmm7 1841638fd0eSGreg Tucker%define xmm8x xmm8 1851638fd0eSGreg Tucker%define xmm9x xmm9 1861638fd0eSGreg Tucker%define xmm10x xmm10 1871638fd0eSGreg Tucker%define xmm11x xmm11 1881638fd0eSGreg Tucker%define xmm12x xmm12 1891638fd0eSGreg Tucker%define xmm13x xmm13 1901638fd0eSGreg Tucker%define xmm14x xmm14 1911638fd0eSGreg Tucker%define xmm15x xmm15 1921638fd0eSGreg Tucker%define xmm16x xmm16 1931638fd0eSGreg Tucker%define xmm17x xmm17 1941638fd0eSGreg Tucker%define xmm18x xmm18 1951638fd0eSGreg Tucker%define xmm19x xmm19 1961638fd0eSGreg Tucker%define xmm20x xmm20 1971638fd0eSGreg Tucker%define xmm21x xmm21 1981638fd0eSGreg Tucker%define xmm22x xmm22 1991638fd0eSGreg Tucker%define xmm23x xmm23 2001638fd0eSGreg Tucker%define xmm24x xmm24 2011638fd0eSGreg Tucker%define xmm25x xmm25 2021638fd0eSGreg Tucker%define xmm26x xmm26 2031638fd0eSGreg Tucker%define xmm27x xmm27 2041638fd0eSGreg Tucker%define xmm28x xmm28 2051638fd0eSGreg Tucker%define xmm29x xmm29 2061638fd0eSGreg Tucker%define xmm30x xmm30 2071638fd0eSGreg Tucker%define xmm31x xmm31 2081638fd0eSGreg Tucker 20917ef3263SRoy Oursler%define zmm0y ymm0 21017ef3263SRoy Oursler%define zmm1y ymm1 21117ef3263SRoy Oursler%define zmm2y ymm2 21217ef3263SRoy Oursler%define zmm3y ymm3 21317ef3263SRoy Oursler%define zmm4y ymm4 21417ef3263SRoy Oursler%define zmm5y ymm5 21517ef3263SRoy Oursler%define zmm6y ymm6 21617ef3263SRoy Oursler%define zmm7y ymm7 21717ef3263SRoy Oursler%define zmm8y ymm8 21817ef3263SRoy Oursler%define zmm9y ymm9 21917ef3263SRoy Oursler%define zmm10y ymm10 22017ef3263SRoy Oursler%define zmm11y ymm11 22117ef3263SRoy Oursler%define zmm12y ymm12 22217ef3263SRoy Oursler%define zmm13y ymm13 22317ef3263SRoy Oursler%define zmm14y ymm14 22417ef3263SRoy Oursler%define zmm15y ymm15 22517ef3263SRoy Oursler%define zmm16y ymm16 22617ef3263SRoy Oursler%define zmm17y ymm17 22717ef3263SRoy Oursler%define zmm18y ymm18 22817ef3263SRoy Oursler%define zmm19y ymm19 22917ef3263SRoy Oursler%define zmm20y ymm20 23017ef3263SRoy Oursler%define zmm21y ymm21 23117ef3263SRoy Oursler%define zmm22y ymm22 23217ef3263SRoy Oursler%define zmm23y ymm23 23317ef3263SRoy Oursler%define zmm24y ymm24 23417ef3263SRoy Oursler%define zmm25y ymm25 23517ef3263SRoy Oursler%define zmm26y ymm26 23617ef3263SRoy Oursler%define zmm27y ymm27 23717ef3263SRoy Oursler%define zmm28y ymm28 23817ef3263SRoy Oursler%define zmm29y ymm29 23917ef3263SRoy Oursler%define zmm30y ymm30 24017ef3263SRoy Oursler%define zmm31y ymm31 24117ef3263SRoy Oursler 2421638fd0eSGreg Tucker%define xmm0y ymm0 2431638fd0eSGreg Tucker%define xmm1y ymm1 2441638fd0eSGreg Tucker%define xmm2y ymm2 2451638fd0eSGreg Tucker%define xmm3y ymm3 2461638fd0eSGreg Tucker%define xmm4y ymm4 2471638fd0eSGreg Tucker%define xmm5y ymm5 2481638fd0eSGreg Tucker%define xmm6y ymm6 2491638fd0eSGreg Tucker%define xmm7y ymm7 2501638fd0eSGreg Tucker%define xmm8y ymm8 2511638fd0eSGreg Tucker%define xmm9y ymm9 2521638fd0eSGreg Tucker%define xmm10y ymm10 2531638fd0eSGreg Tucker%define xmm11y ymm11 2541638fd0eSGreg Tucker%define xmm12y ymm12 2551638fd0eSGreg Tucker%define xmm13y ymm13 2561638fd0eSGreg Tucker%define xmm14y ymm14 2571638fd0eSGreg Tucker%define xmm15y ymm15 2581638fd0eSGreg Tucker%define xmm16y ymm16 2591638fd0eSGreg Tucker%define xmm17y ymm17 2601638fd0eSGreg Tucker%define xmm18y ymm18 2611638fd0eSGreg Tucker%define xmm19y ymm19 2621638fd0eSGreg Tucker%define xmm20y ymm20 2631638fd0eSGreg Tucker%define xmm21y ymm21 2641638fd0eSGreg Tucker%define xmm22y ymm22 2651638fd0eSGreg Tucker%define xmm23y ymm23 2661638fd0eSGreg Tucker%define xmm24y ymm24 2671638fd0eSGreg Tucker%define xmm25y ymm25 2681638fd0eSGreg Tucker%define xmm26y ymm26 2691638fd0eSGreg Tucker%define xmm27y ymm27 2701638fd0eSGreg Tucker%define xmm28y ymm28 2711638fd0eSGreg Tucker%define xmm29y ymm29 2721638fd0eSGreg Tucker%define xmm30y ymm30 2731638fd0eSGreg Tucker%define xmm31y ymm31 2741638fd0eSGreg Tucker 2751638fd0eSGreg Tucker%define xmm0z zmm0 2761638fd0eSGreg Tucker%define xmm1z zmm1 2771638fd0eSGreg Tucker%define xmm2z zmm2 2781638fd0eSGreg Tucker%define xmm3z zmm3 2791638fd0eSGreg Tucker%define xmm4z zmm4 2801638fd0eSGreg Tucker%define xmm5z zmm5 2811638fd0eSGreg Tucker%define xmm6z zmm6 2821638fd0eSGreg Tucker%define xmm7z zmm7 2831638fd0eSGreg Tucker%define xmm8z zmm8 2841638fd0eSGreg Tucker%define xmm9z zmm9 2851638fd0eSGreg Tucker%define xmm10z zmm10 2861638fd0eSGreg Tucker%define xmm11z zmm11 2871638fd0eSGreg Tucker%define xmm12z zmm12 2881638fd0eSGreg Tucker%define xmm13z zmm13 2891638fd0eSGreg Tucker%define xmm14z zmm14 2901638fd0eSGreg Tucker%define xmm15z zmm15 2911638fd0eSGreg Tucker%define xmm16z zmm16 2921638fd0eSGreg Tucker%define xmm17z zmm17 2931638fd0eSGreg Tucker%define xmm18z zmm18 2941638fd0eSGreg Tucker%define xmm19z zmm19 2951638fd0eSGreg Tucker%define xmm20z zmm20 2961638fd0eSGreg Tucker%define xmm21z zmm21 2971638fd0eSGreg Tucker%define xmm22z zmm22 2981638fd0eSGreg Tucker%define xmm23z zmm23 2991638fd0eSGreg Tucker%define xmm24z zmm24 3001638fd0eSGreg Tucker%define xmm25z zmm25 3011638fd0eSGreg Tucker%define xmm26z zmm26 3021638fd0eSGreg Tucker%define xmm27z zmm27 3031638fd0eSGreg Tucker%define xmm28z zmm28 3041638fd0eSGreg Tucker%define xmm29z zmm29 3051638fd0eSGreg Tucker%define xmm30z zmm30 3061638fd0eSGreg Tucker%define xmm31z zmm31 3071638fd0eSGreg Tucker 3081638fd0eSGreg Tucker%define ymm0z zmm0 3091638fd0eSGreg Tucker%define ymm1z zmm1 3101638fd0eSGreg Tucker%define ymm2z zmm2 3111638fd0eSGreg Tucker%define ymm3z zmm3 3121638fd0eSGreg Tucker%define ymm4z zmm4 3131638fd0eSGreg Tucker%define ymm5z zmm5 3141638fd0eSGreg Tucker%define ymm6z zmm6 3151638fd0eSGreg Tucker%define ymm7z zmm7 3161638fd0eSGreg Tucker%define ymm8z zmm8 3171638fd0eSGreg Tucker%define ymm9z zmm9 3181638fd0eSGreg Tucker%define ymm10z zmm10 3191638fd0eSGreg Tucker%define ymm11z zmm11 3201638fd0eSGreg Tucker%define ymm12z zmm12 3211638fd0eSGreg Tucker%define ymm13z zmm13 3221638fd0eSGreg Tucker%define ymm14z zmm14 3231638fd0eSGreg Tucker%define ymm15z zmm15 3241638fd0eSGreg Tucker%define ymm16z zmm16 3251638fd0eSGreg Tucker%define ymm17z zmm17 3261638fd0eSGreg Tucker%define ymm18z zmm18 3271638fd0eSGreg Tucker%define ymm19z zmm19 3281638fd0eSGreg Tucker%define ymm20z zmm20 3291638fd0eSGreg Tucker%define ymm21z zmm21 3301638fd0eSGreg Tucker%define ymm22z zmm22 3311638fd0eSGreg Tucker%define ymm23z zmm23 3321638fd0eSGreg Tucker%define ymm24z zmm24 3331638fd0eSGreg Tucker%define ymm25z zmm25 3341638fd0eSGreg Tucker%define ymm26z zmm26 3351638fd0eSGreg Tucker%define ymm27z zmm27 3361638fd0eSGreg Tucker%define ymm28z zmm28 3371638fd0eSGreg Tucker%define ymm29z zmm29 3381638fd0eSGreg Tucker%define ymm30z zmm30 3391638fd0eSGreg Tucker%define ymm31z zmm31 3401638fd0eSGreg Tucker 3416df3ef80SGreg Tucker%define DWORD(reg) reg %+ d 3426df3ef80SGreg Tucker%define WORD(reg) reg %+ w 3436df3ef80SGreg Tucker%define BYTE(reg) reg %+ b 3446df3ef80SGreg Tucker 3456df3ef80SGreg Tucker%define XWORD(reg) reg %+ x 3461638fd0eSGreg Tucker%define YWORD(reg) reg %+ y 3471638fd0eSGreg Tucker%define ZWORD(reg) reg %+ z 3486df3ef80SGreg Tucker 349*99d3b449SH.J. Lu%ifdef INTEL_CET_ENABLED 350*99d3b449SH.J. Lu %ifdef __NASM_VER__ 351*99d3b449SH.J. Lu %if AS_FEATURE_LEVEL >= 10 352*99d3b449SH.J. Lu %ifidn __OUTPUT_FORMAT__,elf32 353*99d3b449SH.J. Lusection .note.gnu.property note alloc noexec align=4 354*99d3b449SH.J. LuDD 0x00000004,0x0000000c,0x00000005,0x00554e47 355*99d3b449SH.J. LuDD 0xc0000002,0x00000004,0x00000003 356*99d3b449SH.J. Lu %endif 357*99d3b449SH.J. Lu %ifidn __OUTPUT_FORMAT__,elf64 358*99d3b449SH.J. Lusection .note.gnu.property note alloc noexec align=8 359*99d3b449SH.J. LuDD 0x00000004,0x00000010,0x00000005,0x00554e47 360*99d3b449SH.J. LuDD 0xc0000002,0x00000004,0x00000003,0x00000000 361*99d3b449SH.J. Lu %endif 362*99d3b449SH.J. Lu %endif 363*99d3b449SH.J. Lu %endif 364*99d3b449SH.J. Lu%endif 365*99d3b449SH.J. Lu 3666df3ef80SGreg Tucker%ifidn __OUTPUT_FORMAT__,elf32 3676df3ef80SGreg Tuckersection .note.GNU-stack noalloc noexec nowrite progbits 3686df3ef80SGreg Tuckersection .text 3696df3ef80SGreg Tucker%endif 3706df3ef80SGreg Tucker%ifidn __OUTPUT_FORMAT__,elf64 3714fd7bb37SGreg Tucker %define __x86_64__ 3726df3ef80SGreg Tuckersection .note.GNU-stack noalloc noexec nowrite progbits 3736df3ef80SGreg Tuckersection .text 3746df3ef80SGreg Tucker%endif 3754fd7bb37SGreg Tucker%ifidn __OUTPUT_FORMAT__,win64 3764fd7bb37SGreg Tucker %define __x86_64__ 3774fd7bb37SGreg Tucker%endif 3784fd7bb37SGreg Tucker%ifidn __OUTPUT_FORMAT__,macho64 3794fd7bb37SGreg Tucker %define __x86_64__ 3804fd7bb37SGreg Tucker%endif 38144e8c537SXiaodong Liu 3827f8ce0f8SJohn Kariuki%ifdef __x86_64__ 3837f8ce0f8SJohn Kariuki %define endbranch db 0xf3, 0x0f, 0x1e, 0xfa 3847f8ce0f8SJohn Kariuki%else 3857f8ce0f8SJohn Kariuki %define endbranch db 0xf3, 0x0f, 0x1e, 0xfb 3867f8ce0f8SJohn Kariuki%endif 3877f8ce0f8SJohn Kariuki 38844e8c537SXiaodong Liu%ifdef REL_TEXT 38944e8c537SXiaodong Liu %define WRT_OPT 39044e8c537SXiaodong Liu%elifidn __OUTPUT_FORMAT__, elf64 39144e8c537SXiaodong Liu %define WRT_OPT wrt ..plt 39244e8c537SXiaodong Liu%else 39344e8c537SXiaodong Liu %define WRT_OPT 39444e8c537SXiaodong Liu%endif 39544e8c537SXiaodong Liu 3960e4f088aSGreg Tucker%macro mk_global 1-3 3970e4f088aSGreg Tucker %ifdef __NASM_VER__ 3980e4f088aSGreg Tucker %ifidn __OUTPUT_FORMAT__, macho64 3990e4f088aSGreg Tucker global %1 4000e4f088aSGreg Tucker %elifidn __OUTPUT_FORMAT__, win64 4010e4f088aSGreg Tucker global %1 4020e4f088aSGreg Tucker %else 4030e4f088aSGreg Tucker global %1:%2 %3 4040e4f088aSGreg Tucker %endif 4050e4f088aSGreg Tucker %else 4060e4f088aSGreg Tucker global %1:%2 %3 4070e4f088aSGreg Tucker %endif 4080e4f088aSGreg Tucker%endmacro 4090e4f088aSGreg Tucker 4100e4f088aSGreg Tucker 4110e4f088aSGreg Tucker; Fixes for nasm lack of MS proc helpers 4120e4f088aSGreg Tucker%ifdef __NASM_VER__ 4130e4f088aSGreg Tucker %ifidn __OUTPUT_FORMAT__, win64 4140e4f088aSGreg Tucker %macro alloc_stack 1 4150e4f088aSGreg Tucker sub rsp, %1 4160e4f088aSGreg Tucker %endmacro 4170e4f088aSGreg Tucker 4180e4f088aSGreg Tucker %macro proc_frame 1 4190e4f088aSGreg Tucker %1: 4200e4f088aSGreg Tucker %endmacro 4210e4f088aSGreg Tucker 4220e4f088aSGreg Tucker %macro save_xmm128 2 4230e4f088aSGreg Tucker movdqa [rsp + %2], %1 4240e4f088aSGreg Tucker %endmacro 4250e4f088aSGreg Tucker 4260e4f088aSGreg Tucker %macro save_reg 2 4270e4f088aSGreg Tucker mov [rsp + %2], %1 4280e4f088aSGreg Tucker %endmacro 4290e4f088aSGreg Tucker 4300e4f088aSGreg Tucker %macro rex_push_reg 1 4310e4f088aSGreg Tucker push %1 4320e4f088aSGreg Tucker %endmacro 4330e4f088aSGreg Tucker 4340e4f088aSGreg Tucker %macro push_reg 1 4350e4f088aSGreg Tucker push %1 4360e4f088aSGreg Tucker %endmacro 4370e4f088aSGreg Tucker 4380e4f088aSGreg Tucker %define end_prolog 4390e4f088aSGreg Tucker %endif 4400e4f088aSGreg Tucker 4410e4f088aSGreg Tucker %define endproc_frame 4420e4f088aSGreg Tucker%endif 4430e4f088aSGreg Tucker 4446df3ef80SGreg Tucker%ifidn __OUTPUT_FORMAT__, macho64 4456df3ef80SGreg Tucker %define elf64 macho64 4468dc5d913SGreg Tucker mac_equ equ 1 4476df3ef80SGreg Tucker%endif 4486df3ef80SGreg Tucker 4496df3ef80SGreg Tucker%macro slversion 4 4506df3ef80SGreg Tucker section .text 4516df3ef80SGreg Tucker global %1_slver_%2%3%4 4526df3ef80SGreg Tucker global %1_slver 4536df3ef80SGreg Tucker %1_slver: 4546df3ef80SGreg Tucker %1_slver_%2%3%4: 4556df3ef80SGreg Tucker dw 0x%4 4566df3ef80SGreg Tucker db 0x%3, 0x%2 4576df3ef80SGreg Tucker%endmacro 4586df3ef80SGreg Tucker 4596df3ef80SGreg Tucker%endif ; ifndef _REG_SIZES_ASM_ 460