You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.3 KiB
158 lines
3.3 KiB
; Copyright 2002-2019 Intel Corporation.
|
|
;
|
|
; This software is provided to you as Sample Source Code as defined in the accompanying
|
|
; End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
; section 1.L.
|
|
;
|
|
; This software and the related documents are provided as is, with no express or implied
|
|
; warranties, other than those that are expressly stated in the License.
|
|
|
|
include asm_macros.inc
|
|
|
|
PROLOGUE
|
|
|
|
PUBLIC CleanXmms
|
|
PUBLIC SaveXmms
|
|
PUBLIC ScrambleXmms
|
|
PUBLIC DoNothing
|
|
|
|
.code
|
|
|
|
; Set XMM0-7 to 0
|
|
CleanXmms PROC
|
|
|
|
BEGIN_STACK_FRAME
|
|
|
|
xorpd xmm0, xmm0
|
|
xorpd xmm1, xmm1
|
|
xorpd xmm2, xmm2
|
|
xorpd xmm3, xmm3
|
|
xorpd xmm4, xmm4
|
|
xorpd xmm5, xmm5
|
|
xorpd xmm6, xmm6
|
|
xorpd xmm7, xmm7
|
|
|
|
END_STACK_FRAME
|
|
|
|
ret
|
|
CleanXmms ENDP
|
|
|
|
; Store XMM0-7 into buffer pointer by first function argument
|
|
SaveXmms PROC
|
|
|
|
BEGIN_STACK_FRAME
|
|
|
|
mov SCRATCH_REG1, PARAM1
|
|
|
|
movdqu xmmword ptr [SCRATCH_REG1], xmm0
|
|
movdqu xmmword ptr [SCRATCH_REG1]+16, xmm1
|
|
movdqu xmmword ptr [SCRATCH_REG1]+32, xmm2
|
|
movdqu xmmword ptr [SCRATCH_REG1]+48, xmm3
|
|
movdqu xmmword ptr [SCRATCH_REG1]+64, xmm4
|
|
movdqu xmmword ptr [SCRATCH_REG1]+80, xmm5
|
|
movdqu xmmword ptr [SCRATCH_REG1]+96, xmm6
|
|
movdqu xmmword ptr [SCRATCH_REG1]+112, xmm7
|
|
|
|
END_STACK_FRAME
|
|
|
|
ret
|
|
SaveXmms ENDP
|
|
|
|
; Scramble XMM0-7 registers
|
|
ScrambleXmms PROC
|
|
|
|
BEGIN_STACK_FRAME
|
|
IFDEF TARGET_IA32E
|
|
mov SCRATCH_REG1, 0001020304050607h
|
|
mov SCRATCH_REG2, 08090a0b0c0d0e0fh
|
|
pinsrq xmm0, SCRATCH_REG1, 0
|
|
pinsrq xmm0, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm1, SCRATCH_REG1, 0
|
|
pinsrq xmm1, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm2, SCRATCH_REG1, 0
|
|
pinsrq xmm2, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm3, SCRATCH_REG1, 0
|
|
pinsrq xmm3, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm4, SCRATCH_REG1, 0
|
|
pinsrq xmm4, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm5, SCRATCH_REG1, 0
|
|
pinsrq xmm5, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm6, SCRATCH_REG1, 0
|
|
pinsrq xmm6, SCRATCH_REG2, 1
|
|
|
|
pinsrq xmm7, SCRATCH_REG1, 0
|
|
pinsrq xmm7, SCRATCH_REG2, 1
|
|
ELSE
|
|
mov SCRATCH_REG1, 00010203h
|
|
mov SCRATCH_REG2, 04050607h
|
|
mov SCRATCH_REG3, 08090a0bh
|
|
push CALLEE_SAVE_REG1
|
|
mov CALLEE_SAVE_REG1, 0c0d0e0fh
|
|
|
|
movd xmm0, SCRATCH_REG1
|
|
pinsrd xmm0, SCRATCH_REG2, 1
|
|
pinsrd xmm0, SCRATCH_REG3, 2
|
|
pinsrd xmm0, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm1, SCRATCH_REG1
|
|
pinsrd xmm1, SCRATCH_REG2, 1
|
|
pinsrd xmm1, SCRATCH_REG3, 2
|
|
pinsrd xmm1, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm2, SCRATCH_REG1
|
|
pinsrd xmm2, SCRATCH_REG2, 1
|
|
pinsrd xmm2, SCRATCH_REG3, 2
|
|
pinsrd xmm2, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm3, SCRATCH_REG1
|
|
pinsrd xmm3, SCRATCH_REG2, 1
|
|
pinsrd xmm3, SCRATCH_REG3, 2
|
|
pinsrd xmm3, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm4, SCRATCH_REG1
|
|
pinsrd xmm4, SCRATCH_REG2, 1
|
|
pinsrd xmm4, SCRATCH_REG3, 2
|
|
pinsrd xmm4, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm5, SCRATCH_REG1
|
|
pinsrd xmm5, SCRATCH_REG2, 1
|
|
pinsrd xmm5, SCRATCH_REG3, 2
|
|
pinsrd xmm5, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm6, SCRATCH_REG1
|
|
pinsrd xmm6, SCRATCH_REG2, 1
|
|
pinsrd xmm6, SCRATCH_REG3, 2
|
|
pinsrd xmm6, CALLEE_SAVE_REG1, 3
|
|
|
|
movd xmm7, SCRATCH_REG1
|
|
pinsrd xmm7, SCRATCH_REG2, 1
|
|
pinsrd xmm7, SCRATCH_REG3, 2
|
|
pinsrd xmm7, CALLEE_SAVE_REG1, 3
|
|
|
|
pop CALLEE_SAVE_REG1
|
|
ENDIF
|
|
END_STACK_FRAME
|
|
|
|
ret
|
|
ScrambleXmms ENDP
|
|
|
|
; Do nothing
|
|
DoNothing PROC
|
|
|
|
BEGIN_STACK_FRAME
|
|
|
|
nop
|
|
|
|
END_STACK_FRAME
|
|
|
|
ret
|
|
DoNothing ENDP
|
|
|
|
end
|