| /* 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) |