blob: 41d065d91f19386e51143ea24da45bbd8ed874da [file] [log] [blame]
/*
* Copyright 2016 The Native Client Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "native_client/src/include/build_config.h"
#include "native_client/src/include/nacl_asm.h"
#define GLOBAL_SYM(name) .global IDENTIFIER(name); IDENTIFIER(name):
.data
#if NACL_BUILD_SUBARCH == 32
GLOBAL_SYM(no_rewrite_code)
movntq %mm0, (%ebx)
GLOBAL_SYM(no_rewrite_code_end)
GLOBAL_SYM(no_rewrite_code_post_rewrite)
movntq %mm0, (%ebx)
GLOBAL_SYM(no_rewrite_code_post_rewrite_end)
GLOBAL_SYM(movntq_code)
movntq %mm0, (%ebx)
GLOBAL_SYM(movntq_code_end)
GLOBAL_SYM(movntq_code_post_rewrite)
movq %mm0, (%ebx)
GLOBAL_SYM(movntq_code_post_rewrite_end)
GLOBAL_SYM(movntdq_code)
movntdq %xmm0, (%edx)
GLOBAL_SYM(movntdq_code_end)
GLOBAL_SYM(movntdq_code_post_rewrite)
movdqa %xmm0, (%edx)
GLOBAL_SYM(movntdq_code_post_rewrite_end)
GLOBAL_SYM(prefetchnta_code)
prefetchnta (%eax)
GLOBAL_SYM(prefetchnta_code_end)
GLOBAL_SYM(prefetchnta_code_post_rewrite)
nop
nop
nop
GLOBAL_SYM(prefetchnta_code_post_rewrite_end)
#else
GLOBAL_SYM(no_rewrite_code)
mov %edi,%edi
movnti %rax,0x68(%r15,%rdi,1)
GLOBAL_SYM(no_rewrite_code_end)
GLOBAL_SYM(no_rewrite_code_post_rewrite)
mov %edi,%edi
movnti %rax,0x68(%r15,%rdi,1)
GLOBAL_SYM(no_rewrite_code_post_rewrite_end)
GLOBAL_SYM(off_webstore_movnt_code)
mov %ebx,%ebx
movntq %mm0,(%rbx)
GLOBAL_SYM(off_webstore_movnt_code_end)
GLOBAL_SYM(off_webstore_movnt_code_post_rewrite)
mov %ebx,%ebx
movntq %mm0,(%rbx)
GLOBAL_SYM(off_webstore_movnt_code_post_rewrite_end)
GLOBAL_SYM(prefetchnta_code)
mov %edi,%edi
prefetchnta (%r15,%rdi,1)
GLOBAL_SYM(prefetchnta_code_end)
GLOBAL_SYM(prefetchnta_code_post_rewrite)
mov %edi,%edi
nop
nop
nop
nop
nop
GLOBAL_SYM(prefetchnta_code_post_rewrite_end)
GLOBAL_SYM(prefetchnta_rip_relative_code)
mov %edi,%edi
prefetchnta (%rip)
GLOBAL_SYM(prefetchnta_rip_relative_code_end)
GLOBAL_SYM(prefetchnta_rip_relative_code_post_rewrite)
mov %edi,%edi
nop
nop
nop
nop
nop
nop
nop
GLOBAL_SYM(prefetchnta_rip_relative_code_post_rewrite_end)
GLOBAL_SYM(movntq_code)
mov %ebx,%ebx
movntq %mm0,(%r15,%rbx,1)
GLOBAL_SYM(movntq_code_end)
GLOBAL_SYM(movntq_code_post_rewrite)
mov %ebx,%ebx
movq %mm0,(%r15,%rbx,1)
GLOBAL_SYM(movntq_code_post_rewrite_end)
GLOBAL_SYM(movntps_code)
mov %ebx,%ebx
movntps %xmm0,(%r15,%rbx,1)
GLOBAL_SYM(movntps_code_end)
GLOBAL_SYM(movntps_code_post_rewrite)
mov %ebx,%ebx
movaps %xmm0,(%r15,%rbx,1)
GLOBAL_SYM(movntps_code_post_rewrite_end)
GLOBAL_SYM(movnti_code)
mov %edi,%edi
movnti %rax,0x68(%r15,%rdi,1)
GLOBAL_SYM(movnti_code_end)
GLOBAL_SYM(movnti_code_post_rewrite)
mov %edi,%edi
mov %rax,0x68(%r15,%rdi,1)
nop
GLOBAL_SYM(movnti_code_post_rewrite_end)
GLOBAL_SYM(movnti_code2)
mov %edx,%edx
movnti %r9d,(%r15,%rdx,1)
GLOBAL_SYM(movnti_code2_end)
GLOBAL_SYM(movnti_code2_post_rewrite)
mov %edx,%edx
mov %r9d,(%r15,%rdx,1)
nop
GLOBAL_SYM(movnti_code2_post_rewrite_end)
GLOBAL_SYM(movnti_rip_relative_code)
movnti %rax,0x20(%rip)
GLOBAL_SYM(movnti_rip_relative_code_end)
GLOBAL_SYM(movnti_rip_relative_code_post_rewrite)
nop
mov %rax,0x20(%rip)
GLOBAL_SYM(movnti_rip_relative_code_post_rewrite_end)
GLOBAL_SYM(movntdq_code)
mov %edx,%edx
movntdq %xmm0,0x10(%r15,%rdx,1)
GLOBAL_SYM(movntdq_code_end)
GLOBAL_SYM(movntdq_code_post_rewrite)
mov %edx,%edx
movdqa %xmm0,0x10(%r15,%rdx,1)
GLOBAL_SYM(movntdq_code_post_rewrite_end)
GLOBAL_SYM(movntdq_code2)
mov %ecx,%ecx
movntdq %xmm15,(%r15,%rcx,1)
GLOBAL_SYM(movntdq_code2_end)
GLOBAL_SYM(movntdq_code2_post_rewrite)
mov %ecx,%ecx
movdqa %xmm15,(%r15,%rcx,1)
GLOBAL_SYM(movntdq_code2_post_rewrite_end)
GLOBAL_SYM(multiple_movnt_code)
mov %edi,%edi
movnti %rax,0x68(%r15,%rdi,1)
mov %edx,%edx
movntdq %xmm0,0x10(%r15,%rdx,1)
GLOBAL_SYM(multiple_movnt_code_end)
GLOBAL_SYM(multiple_movnt_code_post_rewrite)
mov %edi,%edi
mov %rax,0x68(%r15,%rdi,1)
nop
mov %edx,%edx
movdqa %xmm0,0x10(%r15,%rdx,1)
GLOBAL_SYM(multiple_movnt_code_post_rewrite_end)
/* size = 32 bytes */
GLOBAL_SYM(one_bundle_movnt_code)
mov %ecx,%ecx
movntdq %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movntdq %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movntdq %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movntdq %xmm15,(%r15,%rcx,1)
GLOBAL_SYM(one_bundle_movnt_code_end)
/* size = 32 bytes */
GLOBAL_SYM(one_bundle_movnt_code_post_rewrite)
mov %ecx,%ecx
movdqa %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movdqa %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movdqa %xmm15,(%r15,%rcx,1)
mov %ecx,%ecx
movdqa %xmm15,(%r15,%rcx,1)
GLOBAL_SYM(one_bundle_movnt_code_post_rewrite_end)
GLOBAL_SYM(last_movnti_cross_bundle_by_one)
mov %ecx,%ecx /* offset 0, length 2 */
movntdq %xmm15,(%r15,%rcx,1) /* offset 2, length 6 */
mov %ecx,%ecx /* offset 8, length 2 */
movntdq %xmm15,(%r15,%rcx,1) /* offset 10, length 6 */
mov %ecx,%ecx /* offset 16, length 2 */
movntdq %xmm15,(%r15,%rcx,1) /* offset 18, length 6 */
nop /* offset 24, length 1 */
mov %edx,%edx /* offset 25, length 2 */
/* the last byte of the following instruction is at offset 32 */
movnti %r9d,(%r15,%rdx,1) /* offset 27, length 5 */
GLOBAL_SYM(last_movnti_cross_bundle_by_one_end)
GLOBAL_SYM(last_movnti_cross_bundle_by_one_post_rewrite)
mov %ecx,%ecx /* offset 0, length 2 */
movdqa %xmm15,(%r15,%rcx,1) /* offset 2, length 6 */
mov %ecx,%ecx /* offset 8, length 2 */
movdqa %xmm15,(%r15,%rcx,1) /* offset 10, length 6 */
mov %ecx,%ecx /* offset 16, length 2 */
movdqa %xmm15,(%r15,%rcx,1) /* offset 18, length 6 */
nop /* offset 24, length 1 */
mov %edx,%edx /* offset 25, length 2 */
mov %r9d,(%r15,%rdx,1) /* offset 27, length 4 */
nop /* offset 32, length 1 */
GLOBAL_SYM(last_movnti_cross_bundle_by_one_post_rewrite_end)
#endif