Staging
v0.8.1
https://github.com/torvalds/linux
Raw File
Tip revision: a351e9b9fc24e982ec2f0e76379a49826036da12 authored by Linus Torvalds on 01 May 2017, 02:47:48 UTC
Linux 4.11
Tip revision: a351e9b
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