97 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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)
 |