Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright (C) 2015 Anshuman Khandual, IBM Corporation.
0004  */
0005 #define VEC_MAX 128
0006 #define VSX_MAX 32
0007 #define VMX_MAX 32
0008 
0009 /*
0010  * unsigned long vsx[32]
0011  * unsigned long load[128]
0012  */
0013 int validate_vsx(unsigned long *vsx, unsigned long *load)
0014 {
0015     int i;
0016 
0017     for (i = 0; i < VSX_MAX; i++) {
0018         if (vsx[i] != load[2 * i + 1]) {
0019             printf("vsx[%d]: %lx load[%d] %lx\n",
0020                     i, vsx[i], 2 * i + 1, load[2 * i + 1]);
0021             return TEST_FAIL;
0022         }
0023     }
0024     return TEST_PASS;
0025 }
0026 
0027 /*
0028  * unsigned long vmx[32][2]
0029  * unsigned long load[128]
0030  */
0031 int validate_vmx(unsigned long vmx[][2], unsigned long *load)
0032 {
0033     int i;
0034 
0035     for (i = 0; i < VMX_MAX; i++) {
0036         #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
0037         if ((vmx[i][0] != load[64 + 2 * i]) ||
0038                 (vmx[i][1] != load[65 + 2 * i])) {
0039             printf("vmx[%d][0]: %lx load[%d] %lx\n",
0040                     i, vmx[i][0], 64 + 2 * i,
0041                     load[64 + 2 * i]);
0042             printf("vmx[%d][1]: %lx load[%d] %lx\n",
0043                     i, vmx[i][1], 65 + 2 * i,
0044                     load[65 + 2 * i]);
0045             return TEST_FAIL;
0046         }
0047         #else  /*
0048             * In LE each value pair is stored in an
0049             * alternate manner.
0050             */
0051         if ((vmx[i][0] != load[65 + 2 * i]) ||
0052                 (vmx[i][1] != load[64 + 2 * i])) {
0053             printf("vmx[%d][0]: %lx load[%d] %lx\n",
0054                     i, vmx[i][0], 65 + 2 * i,
0055                     load[65 + 2 * i]);
0056             printf("vmx[%d][1]: %lx load[%d] %lx\n",
0057                     i, vmx[i][1], 64 + 2 * i,
0058                     load[64 + 2 * i]);
0059             return TEST_FAIL;
0060         }
0061         #endif
0062     }
0063     return TEST_PASS;
0064 }
0065 
0066 /*
0067  * unsigned long store[128]
0068  * unsigned long load[128]
0069  */
0070 int compare_vsx_vmx(unsigned long *store, unsigned long *load)
0071 {
0072     int i;
0073 
0074     for (i = 0; i < VSX_MAX; i++) {
0075         if (store[1 + 2 * i] != load[1 + 2 * i]) {
0076             printf("store[%d]: %lx load[%d] %lx\n",
0077                     1 + 2 * i, store[i],
0078                     1 + 2 * i, load[i]);
0079             return TEST_FAIL;
0080         }
0081     }
0082 
0083     #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
0084     for (i = 64; i < VEC_MAX; i++) {
0085         if (store[i] != load[i]) {
0086             printf("store[%d]: %lx load[%d] %lx\n",
0087                     i, store[i], i, load[i]);
0088             return TEST_FAIL;
0089         }
0090     }
0091     #else   /* In LE each value pair is stored in an alternate manner */
0092     for (i = 64; i < VEC_MAX; i++) {
0093         if (!(i % 2) && (store[i] != load[i+1])) {
0094             printf("store[%d]: %lx load[%d] %lx\n",
0095                     i, store[i], i+1, load[i+1]);
0096             return TEST_FAIL;
0097         }
0098         if ((i % 2) && (store[i] != load[i-1])) {
0099             printf("here store[%d]: %lx load[%d] %lx\n",
0100                     i, store[i], i-1, load[i-1]);
0101             return TEST_FAIL;
0102         }
0103     }
0104     #endif
0105     return TEST_PASS;
0106 }
0107 
0108 void load_vsx_vmx(unsigned long *load, unsigned long *vsx,
0109         unsigned long vmx[][2])
0110 {
0111     int i;
0112 
0113     for (i = 0; i < VSX_MAX; i++)
0114         vsx[i] = load[1 + 2 * i];
0115 
0116     for (i = 0; i < VMX_MAX; i++) {
0117         vmx[i][0] = load[64 + 2 * i];
0118         vmx[i][1] = load[65 + 2 * i];
0119     }
0120 }
0121 
0122 void loadvsx(void *p, int tmp);
0123 void storevsx(void *p, int tmp);