xref: /illumos-gate/usr/src/test/bhyve-tests/tests/inst_emul/payload_inout.S (revision 3fe455549728ac525df3be56130ad8e075d645d7)
1/*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source.  A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12/*
13 * Copyright 2024 Oxide Computer Company
14 */
15
16#include <sys/asm_linkage.h>
17#include "payload_common.h"
18
19ENTRY(start)
20	/*
21	 * `ins` and `outs` access memory through rdi, so reserve a few
22	 * bytes of stack and make rdi point into it so we don't clobber
23	 * something important along the way.
24	 */
25	subq %rsp, 8
26	mov %rsp, %rdi
27	/*
28	 * Port 0x55aa is just a convenient value we can check after the
29	 * exit.
30	 */
31	movw $0x55aa, %dx
32	movl $0x01, %ecx
33	rep insb
34	movl $0x01, %ecx
35	rep outsb
36
37	movw    $IOP_TEST_RESULT, %dx
38	movb    $TEST_RESULT_PASS, %al
39	outb    (%dx)
40	hlt
41SET_SIZE(start)
42