cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ptrace-vsx.h (2747B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (C) 2015 Anshuman Khandual, IBM Corporation.
      4 */
      5#define VEC_MAX 128
      6#define VSX_MAX 32
      7#define VMX_MAX 32
      8
      9/*
     10 * unsigned long vsx[32]
     11 * unsigned long load[128]
     12 */
     13int validate_vsx(unsigned long *vsx, unsigned long *load)
     14{
     15	int i;
     16
     17	for (i = 0; i < VSX_MAX; i++) {
     18		if (vsx[i] != load[2 * i + 1]) {
     19			printf("vsx[%d]: %lx load[%d] %lx\n",
     20					i, vsx[i], 2 * i + 1, load[2 * i + 1]);
     21			return TEST_FAIL;
     22		}
     23	}
     24	return TEST_PASS;
     25}
     26
     27/*
     28 * unsigned long vmx[32][2]
     29 * unsigned long load[128]
     30 */
     31int validate_vmx(unsigned long vmx[][2], unsigned long *load)
     32{
     33	int i;
     34
     35	for (i = 0; i < VMX_MAX; i++) {
     36		#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
     37		if ((vmx[i][0] != load[64 + 2 * i]) ||
     38				(vmx[i][1] != load[65 + 2 * i])) {
     39			printf("vmx[%d][0]: %lx load[%d] %lx\n",
     40					i, vmx[i][0], 64 + 2 * i,
     41					load[64 + 2 * i]);
     42			printf("vmx[%d][1]: %lx load[%d] %lx\n",
     43					i, vmx[i][1], 65 + 2 * i,
     44					load[65 + 2 * i]);
     45			return TEST_FAIL;
     46		}
     47		#else  /*
     48			* In LE each value pair is stored in an
     49			* alternate manner.
     50			*/
     51		if ((vmx[i][0] != load[65 + 2 * i]) ||
     52				(vmx[i][1] != load[64 + 2 * i])) {
     53			printf("vmx[%d][0]: %lx load[%d] %lx\n",
     54					i, vmx[i][0], 65 + 2 * i,
     55					load[65 + 2 * i]);
     56			printf("vmx[%d][1]: %lx load[%d] %lx\n",
     57					i, vmx[i][1], 64 + 2 * i,
     58					load[64 + 2 * i]);
     59			return TEST_FAIL;
     60		}
     61		#endif
     62	}
     63	return TEST_PASS;
     64}
     65
     66/*
     67 * unsigned long store[128]
     68 * unsigned long load[128]
     69 */
     70int compare_vsx_vmx(unsigned long *store, unsigned long *load)
     71{
     72	int i;
     73
     74	for (i = 0; i < VSX_MAX; i++) {
     75		if (store[1 + 2 * i] != load[1 + 2 * i]) {
     76			printf("store[%d]: %lx load[%d] %lx\n",
     77					1 + 2 * i, store[i],
     78					1 + 2 * i, load[i]);
     79			return TEST_FAIL;
     80		}
     81	}
     82
     83	#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
     84	for (i = 64; i < VEC_MAX; i++) {
     85		if (store[i] != load[i]) {
     86			printf("store[%d]: %lx load[%d] %lx\n",
     87					i, store[i], i, load[i]);
     88			return TEST_FAIL;
     89		}
     90	}
     91	#else	/* In LE each value pair is stored in an alternate manner */
     92	for (i = 64; i < VEC_MAX; i++) {
     93		if (!(i % 2) && (store[i] != load[i+1])) {
     94			printf("store[%d]: %lx load[%d] %lx\n",
     95					i, store[i], i+1, load[i+1]);
     96			return TEST_FAIL;
     97		}
     98		if ((i % 2) && (store[i] != load[i-1])) {
     99			printf("here store[%d]: %lx load[%d] %lx\n",
    100					i, store[i], i-1, load[i-1]);
    101			return TEST_FAIL;
    102		}
    103	}
    104	#endif
    105	return TEST_PASS;
    106}
    107
    108void load_vsx_vmx(unsigned long *load, unsigned long *vsx,
    109		unsigned long vmx[][2])
    110{
    111	int i;
    112
    113	for (i = 0; i < VSX_MAX; i++)
    114		vsx[i] = load[1 + 2 * i];
    115
    116	for (i = 0; i < VMX_MAX; i++) {
    117		vmx[i][0] = load[64 + 2 * i];
    118		vmx[i][1] = load[65 + 2 * i];
    119	}
    120}
    121
    122void loadvsx(void *p, int tmp);
    123void storevsx(void *p, int tmp);