YMM aligned proc, save YMM regs above YMM7, work with 16 YMM regs.
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include64\masm64rt.inc
.code
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
entry_point proc
USING r12
SaveRegs
conout "Save and restore YMM registers .",lf,lf
call ymmproc
waitkey
RestoreRegs
.exit
entry_point endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
YMMSTACK ; YMM alignment
ymmproc proc
LOCAL ymmvar1 :YMMWORD ; aligned LOCAL variables
LOCAL ymmvar2 :YMMWORD
LOCAL ymmvar3 :YMMWORD
LOCAL ymmvar4 :YMMWORD
LOCAL ymmvar5 :YMMWORD
LOCAL ymmvar6 :YMMWORD
LOCAL ymmvar7 :YMMWORD
LOCAL ymmvar8 :YMMWORD
vmovntdq ymmvar1, ymm8 ; preserve YMM registers
vmovntdq ymmvar2, ymm9
vmovntdq ymmvar3, ymm10
vmovntdq ymmvar4, ymm11
vmovntdq ymmvar5, ymm12
vmovntdq ymmvar6, ymm13
vmovntdq ymmvar7, ymm14
vmovntdq ymmvar8, ymm15
; -------------------------------------
; just do it here with 16 YMM registers
; -------------------------------------
vmovntdqa ymm8, ymmvar1 ; restore YMM registers
vmovntdqa ymm9, ymmvar2
vmovntdqa ymm10, ymmvar3
vmovntdqa ymm11, ymmvar4
vmovntdqa ymm12, ymmvar5
vmovntdqa ymm13, ymmvar6
vmovntdqa ymm14, ymmvar7
vmovntdqa ymm15, ymmvar8
ret
ymmproc endp
STACKFRAME
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end