| /* |
| * Copyright 2015, Cyril Bur, IBM Corp. |
| * |
| * 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 |
| * 2 of the License, or (at your option) any later version. |
| */ |
| |
| #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) |