Staging
v0.8.1
https://github.com/torvalds/linux
Raw File
Tip revision: 569dbb88e80deb68974ef6fdd6a13edb9d686261 authored by Linus Torvalds on 03 September 2017, 20:56:17 UTC
Linux 4.13
Tip revision: 569dbb8
vmx_asm.h
/*
 * 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)
back to top