blob: 7e90feeaba9bfbca705a5ef47115376f39f99911 [file] [log] [blame]
// Copyright 2016 The Fuchsia 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 <lib/arch/asm.h>
.macro check_simd reg1 reg2
fmov x16, \reg1
cbnz x16, .Lexit
fmov x16, \reg2
cbnz x16, .Lexit
.endm
// [[noreturn]] void InitialStateTestThread(uint64_t* ptr, uint64_t value);
// Arguments are in x0, x1.
.function InitialStateTestThread, global
bmi .Lexit
beq .Lexit
bcs .Lexit
bvs .Lexit
cbnz x2, .Lexit
cbnz x3, .Lexit
cbnz x4, .Lexit
cbnz x5, .Lexit
cbnz x6, .Lexit
cbnz x7, .Lexit
cbnz x8, .Lexit
cbnz x9, .Lexit
cbnz x10, .Lexit
cbnz x11, .Lexit
cbnz x12, .Lexit
cbnz x13, .Lexit
cbnz x14, .Lexit
cbnz x15, .Lexit
cbnz x16, .Lexit
cbnz x17, .Lexit
cbnz x18, .Lexit
cbnz x19, .Lexit
cbnz x20, .Lexit
cbnz x21, .Lexit
cbnz x22, .Lexit
cbnz x23, .Lexit
cbnz x24, .Lexit
cbnz x25, .Lexit
cbnz x26, .Lexit
cbnz x27, .Lexit
cbnz x28, .Lexit
cbnz x29, .Lexit
cbnz x30, .Lexit
check_simd d0, v0.D[1]
check_simd d1, v1.D[1]
check_simd d2, v2.D[1]
check_simd d3, v3.D[1]
check_simd d4, v4.D[1]
check_simd d5, v5.D[1]
check_simd d6, v6.D[1]
check_simd d7, v7.D[1]
check_simd d8, v8.D[1]
check_simd d9, v9.D[1]
check_simd d10, v10.D[1]
check_simd d11, v11.D[1]
check_simd d12, v12.D[1]
check_simd d13, v13.D[1]
check_simd d14, v14.D[1]
check_simd d15, v15.D[1]
check_simd d16, v16.D[1]
check_simd d17, v17.D[1]
check_simd d18, v18.D[1]
check_simd d19, v19.D[1]
check_simd d20, v20.D[1]
check_simd d21, v21.D[1]
check_simd d22, v22.D[1]
check_simd d23, v23.D[1]
check_simd d24, v24.D[1]
check_simd d25, v25.D[1]
check_simd d26, v26.D[1]
check_simd d27, v27.D[1]
check_simd d28, v28.D[1]
check_simd d29, v29.D[1]
check_simd d30, v30.D[1]
check_simd d31, v31.D[1]
// Store the expected value at the top of the stack.
movlit x16, 0x1234567890abcdef
// Use a double store to maintain the 16-byte SP alignment for the vDSO call.
stp xzr, x16, [sp, #-16]!
// Store the value from the second argument register to the pointer passed in
// the first argument register, which tests that each had the expected value.
str x1, [x0]
.Lexit:
b zx_thread_exit
.end_function