aboutsummaryrefslogtreecommitdiff
blob: b03819c7fafd0f602d18cc38397f49cb7cb0a72e (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* Copyright 2015-2016 Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

	.text

	/* 'check_vx': Yield SIGILL unless vector support is
	available.  Have a "pit stop" breakpoint here.  */

	.align	8
	.type	check_vx, @function
check_vx:
	.cfi_startproc
	/* vlr  %v0,%v0 */
	.byte 0xe7,0x00,0x00,0x00,0x00,0x56
	br	%r14
	.cfi_endproc
	.size	check_vx, .-check_vx


	/* 'store_vrs': Store vector registers in save_area.  */

	.align 8
	.type	store_vrs, @function
store_vrs:
	.cfi_startproc
	larl	%r1,save_area
	/* vstm %v0,%v15,0(%r1) */
	.byte 0xe7,0x0f,0x10,0x00,0x00,0x3e
	/* vstm %v16,%v31,256(%r1) */
	.byte 0xe7,0x0f,0x11,0x00,0x0c,0x3e
	br	%r14
	.cfi_endproc
	.size	store_vrs, .-store_vrs


	/* 'change_vrs': Manipulate vector registers according to a
	simple algorithm.  */

	.align 8
	.type	change_vrs, @function
change_vrs:
	.cfi_startproc
	lghi	%r1,16
	lghi	%r3,0xff
1:	.insn	ril,0xc60000000000,%r3,2f /* exrl */
	.insn	ril,0xc60000000000,%r3,1f /* exrl */
	aghi	%r3,-0x11
	brctg	%r1,1b
	br	%r14
	.cfi_endproc
	/* vmlf %v0,%v0,%v0 */
1:	.byte	0xe7,0x00,0x00,0x00,0x20,0xa2
	/* vmlf %v16,%v16,%v0 */
2:	.byte	0xe7,0x00,0x00,0x00,0x2c,0xa2


	/* 'main': Perform actions according to test case logic.
	Invoke check_vx whenever a pit stop is required.  */

	.section	.text.startup,"ax",@progbits
	.align	8
.globl main
	.type	main, @function
main:
	.cfi_startproc
	stmg	%r14,%r15,112(%r15)
	aghi	%r15,-160
	bras	%r14,check_vx
	bras	%r14,store_vrs
	bras	%r14,check_vx
	bras	%r14,change_vrs
	bras	%r14,check_vx
	lmg	%r14,%r15,272(%r15)
	lghi	%r2,0
	br	%r14
	.cfi_endproc
	.size	main, .-main

	.local	save_area
	.comm	save_area,512,16

	.section	.note.GNU-stack,"",@progbits