xref: /kvm-unit-tests/s390x/snippets/asm/macros.S (revision e3c5c3ef2524c58023073c0fadde2e8ae3c04ec6)
14c8a99caSJanosch Frank/* SPDX-License-Identifier: GPL-2.0-only */
24c8a99caSJanosch Frank/*
34c8a99caSJanosch Frank * Commonly used assembly macros
44c8a99caSJanosch Frank *
54c8a99caSJanosch Frank * Copyright (c) 2022 IBM Corp
64c8a99caSJanosch Frank *
74c8a99caSJanosch Frank * Authors:
84c8a99caSJanosch Frank *  Janosch Frank <frankja@linux.ibm.com>
94c8a99caSJanosch Frank */
104c8a99caSJanosch Frank#include <asm/asm-offsets.h>
114c8a99caSJanosch Frank
124c8a99caSJanosch Frank/*
134c8a99caSJanosch Frank * Writes a PSW to addr_psw, useful for exception PSWs in lowcore
144c8a99caSJanosch Frank *
154c8a99caSJanosch Frank * reg is the scratch register used for temporary storage, it's NOT restored
164c8a99caSJanosch Frank * The psw address part is defined via psw_new_addr
174c8a99caSJanosch Frank * The psw mask part is always 64 bit
184c8a99caSJanosch Frank */
194c8a99caSJanosch Frank.macro SET_PSW_NEW_ADDR reg, psw_new_addr, addr_psw
204c8a99caSJanosch Franklarl	\reg, psw_mask_64
21*9854a09cSJanosch Frankmvc	\addr_psw(8,%r0), 0(\reg)
224c8a99caSJanosch Franklarl	\reg, \psw_new_addr
234c8a99caSJanosch Frankstg	\reg, \addr_psw + 8
244c8a99caSJanosch Frank.endm
254c8a99caSJanosch Frank
264c8a99caSJanosch Frank.section .rodata
274c8a99caSJanosch Frankpsw_mask_64:
284c8a99caSJanosch Frank	.quad	0x0000000180000000
29