| /* Copyright 2015-2021 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 |