aboutsummaryrefslogtreecommitdiffstats
path: root/executor/kvm_ppc64le.S
blob: 0a177229c49f65a74ab3aa7e97c67b675529c196 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright 2021 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

// kvm_gen.cc generates machine code from this file and saves it into kvm_ppc64le.S.h.

// +build

#include "kvm.h"

#define LOAD64(rn,name)         \
    lis     rn,name##@highest;  \
    ori     rn,rn,name##@higher;    \
    rldicr  rn,rn,32,31;        \
    oris    rn,rn,name##@h;     \
    ori     rn,rn,name##@l

.global kvm_ppc64_mr, kvm_ppc64_mr_end
kvm_ppc64_mr:
	LOAD64(5, 0xbadc0de)
	mr      4,5
	mr      3,4
kvm_ppc64_mr_end:

.global kvm_ppc64_ld, kvm_ppc64_ld_end
kvm_ppc64_ld:
	LOAD64(15, 0xbadc0de)
	// Last double word of vma[24]
	LOAD64(25, 24 * 0x10000 - 8)
	std	15, 0(25)
	ld	3, 0(25)
kvm_ppc64_ld_end:

.global kvm_ppc64_recharge_dec, kvm_ppc64_recharge_dec_end
kvm_ppc64_recharge_dec:
	LOAD64(20,0x7ffffff)
#define SPRN_DEC        0x016           /* Decrement Register */
	mtspr SPRN_DEC,20
	rfid
kvm_ppc64_recharge_dec_end: