b03819c7fafd0f602d18cc38397f49cb7cb0a72e
[external/binutils.git] / gdb / testsuite / gdb.arch / s390-vregs.S
1 /* Copyright 2015-2016 Free Software Foundation, Inc.
2
3    This file is part of GDB.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18         .text
19
20         /* 'check_vx': Yield SIGILL unless vector support is
21         available.  Have a "pit stop" breakpoint here.  */
22
23         .align  8
24         .type   check_vx, @function
25 check_vx:
26         .cfi_startproc
27         /* vlr  %v0,%v0 */
28         .byte 0xe7,0x00,0x00,0x00,0x00,0x56
29         br      %r14
30         .cfi_endproc
31         .size   check_vx, .-check_vx
32
33
34         /* 'store_vrs': Store vector registers in save_area.  */
35
36         .align 8
37         .type   store_vrs, @function
38 store_vrs:
39         .cfi_startproc
40         larl    %r1,save_area
41         /* vstm %v0,%v15,0(%r1) */
42         .byte 0xe7,0x0f,0x10,0x00,0x00,0x3e
43         /* vstm %v16,%v31,256(%r1) */
44         .byte 0xe7,0x0f,0x11,0x00,0x0c,0x3e
45         br      %r14
46         .cfi_endproc
47         .size   store_vrs, .-store_vrs
48
49
50         /* 'change_vrs': Manipulate vector registers according to a
51         simple algorithm.  */
52
53         .align 8
54         .type   change_vrs, @function
55 change_vrs:
56         .cfi_startproc
57         lghi    %r1,16
58         lghi    %r3,0xff
59 1:      .insn   ril,0xc60000000000,%r3,2f /* exrl */
60         .insn   ril,0xc60000000000,%r3,1f /* exrl */
61         aghi    %r3,-0x11
62         brctg   %r1,1b
63         br      %r14
64         .cfi_endproc
65         /* vmlf %v0,%v0,%v0 */
66 1:      .byte   0xe7,0x00,0x00,0x00,0x20,0xa2
67         /* vmlf %v16,%v16,%v0 */
68 2:      .byte   0xe7,0x00,0x00,0x00,0x2c,0xa2
69
70
71         /* 'main': Perform actions according to test case logic.
72         Invoke check_vx whenever a pit stop is required.  */
73
74         .section        .text.startup,"ax",@progbits
75         .align  8
76 .globl main
77         .type   main, @function
78 main:
79         .cfi_startproc
80         stmg    %r14,%r15,112(%r15)
81         aghi    %r15,-160
82         bras    %r14,check_vx
83         bras    %r14,store_vrs
84         bras    %r14,check_vx
85         bras    %r14,change_vrs
86         bras    %r14,check_vx
87         lmg     %r14,%r15,272(%r15)
88         lghi    %r2,0
89         br      %r14
90         .cfi_endproc
91         .size   main, .-main
92
93         .local  save_area
94         .comm   save_area,512,16
95
96         .section        .note.GNU-stack,"",@progbits