| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| /* |
| * Copyright 2015, Cyril Bur, IBM Corp. |
| */ |
| |
| #include "basic_asm.h" |
| |
| /* POS MUST BE 16 ALIGNED! */ |
| #define PUSH_VMX(pos,reg) \ |
| li reg,pos; \ |
| stvx v20,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v21,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v22,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v23,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v24,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v25,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v26,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v27,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v28,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v29,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v30,reg,%r1; \ |
| addi reg,reg,16; \ |
| stvx v31,reg,%r1; |
| |
| /* POS MUST BE 16 ALIGNED! */ |
| #define POP_VMX(pos,reg) \ |
| li reg,pos; \ |
| lvx v20,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v21,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v22,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v23,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v24,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v25,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v26,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v27,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v28,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v29,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v30,reg,%r1; \ |
| addi reg,reg,16; \ |
| lvx v31,reg,%r1; |
| |
| /* |
| * Careful this will 'clobber' vmx (by design) |
| * Don't call this from C |
| */ |
| FUNC_START(load_vmx) |
| li r5,0 |
| lvx v20,r5,r3 |
| addi r5,r5,16 |
| lvx v21,r5,r3 |
| addi r5,r5,16 |
| lvx v22,r5,r3 |
| addi r5,r5,16 |
| lvx v23,r5,r3 |
| addi r5,r5,16 |
| lvx v24,r5,r3 |
| addi r5,r5,16 |
| lvx v25,r5,r3 |
| addi r5,r5,16 |
| lvx v26,r5,r3 |
| addi r5,r5,16 |
| lvx v27,r5,r3 |
| addi r5,r5,16 |
| lvx v28,r5,r3 |
| addi r5,r5,16 |
| lvx v29,r5,r3 |
| addi r5,r5,16 |
| lvx v30,r5,r3 |
| addi r5,r5,16 |
| lvx v31,r5,r3 |
| blr |
| FUNC_END(load_vmx) |