93 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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)
 |