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