LXMMN xmm5, %1, 1\r
%endmacro\r
\r
+;\r
+; Upper half of YMM10 to save/restore RCX\r
+;\r
+;\r
+; Save RCX to YMM10[128:191]\r
+; Modified: XMM5 and YMM10\r
+;\r
+\r
+%macro SAVE_RCX 0\r
+ LYMMN ymm10, xmm5, 1\r
+ SXMMN xmm5, 0, rcx\r
+ SYMMN ymm10, 1, xmm5\r
+ %endmacro\r
+\r
+;\r
+; Restore RCX from YMM10[128:191]\r
+; Modified: XMM5 and RCX\r
+;\r
+\r
+%macro LOAD_RCX 0\r
+ LYMMN ymm10, xmm5, 1\r
+ movq rcx, xmm5\r
+ %endmacro\r
+\r
;\r
; YMM7[128:191] for calling stack\r
; arg 1:Entry\r
; Use CpuId instruction (CPUID.01H:EDX.SSE[bit 25] = 1) to test\r
; whether the processor supports SSE instruction.\r
;\r
+ mov r10, rcx\r
mov rax, 1\r
cpuid\r
bt rdx, 25\r
;\r
bt ecx, 19\r
jnc SseError\r
+ mov rcx, r10\r
\r
;\r
; Set OSFXSR bit (bit #9) & OSXMMEXCPT bit (bit #10)\r
%endmacro\r
\r
%macro ENABLE_AVX 0\r
+ mov r10, rcx\r
mov eax, 1\r
cpuid\r
and ecx, 10000000h\r
xgetbv ; result in edx:eax\r
or eax, 00000006h ; Set XCR0 bit #1 and bit #2 to enable SSE state and AVX state\r
xsetbv\r
+ mov rcx, r10\r
%endmacro\r
\r