mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
Hexagon (tests/tcg/hexagon) Add v68 HVX tests
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Reviewed-by: Anton Johansson <anjo@rev.ng> Message-Id: <20230427224057.3766963-6-tsimpson@quicinc.com>
This commit is contained in:
parent
f128c0fe10
commit
d636fb70b2
|
@ -77,6 +77,7 @@ HEX_TESTS += test_vpmpyh
|
|||
HEX_TESTS += test_vspliceb
|
||||
|
||||
HEX_TESTS += v68_scalar
|
||||
HEX_TESTS += v68_hvx
|
||||
|
||||
TESTS += $(HEX_TESTS)
|
||||
|
||||
|
@ -92,6 +93,8 @@ vector_add_int: CFLAGS += -mhvx -fvectorize
|
|||
hvx_misc: hvx_misc.c hvx_misc.h
|
||||
hvx_misc: CFLAGS += -mhvx
|
||||
hvx_histogram: CFLAGS += -mhvx -Wno-gnu-folding-constant
|
||||
v68_hvx: v68_hvx.c hvx_misc.h v6mpy_ref.c.inc
|
||||
v68_hvx: CFLAGS += -mhvx -Wno-unused-function
|
||||
|
||||
hvx_histogram: hvx_histogram.c hvx_histogram_row.S
|
||||
$(CC) $(CFLAGS) $(CROSS_CC_GUEST_CFLAGS) $^ -o $@ $(LDFLAGS)
|
||||
|
|
90
tests/tcg/hexagon/v68_hvx.c
Normal file
90
tests/tcg/hexagon/v68_hvx.c
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright(c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
int err;
|
||||
|
||||
#include "hvx_misc.h"
|
||||
|
||||
MMVector v6mpy_buffer0[BUFSIZE] __attribute__((aligned(MAX_VEC_SIZE_BYTES)));
|
||||
MMVector v6mpy_buffer1[BUFSIZE] __attribute__((aligned(MAX_VEC_SIZE_BYTES)));
|
||||
|
||||
static void init_v6mpy_buffers(void)
|
||||
{
|
||||
int counter0 = 0;
|
||||
int counter1 = 17;
|
||||
for (int i = 0; i < BUFSIZE; i++) {
|
||||
for (int j = 0; j < MAX_VEC_SIZE_BYTES / 4; j++) {
|
||||
v6mpy_buffer0[i].w[j] = counter0++;
|
||||
v6mpy_buffer1[i].w[j] = counter1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int v6mpy_ref[BUFSIZE][MAX_VEC_SIZE_BYTES / 4] = {
|
||||
#include "v6mpy_ref.c.inc"
|
||||
};
|
||||
|
||||
static void test_v6mpy(void)
|
||||
{
|
||||
void *p00 = buffer0;
|
||||
void *p01 = v6mpy_buffer0;
|
||||
void *p10 = buffer1;
|
||||
void *p11 = v6mpy_buffer1;
|
||||
void *pout = output;
|
||||
|
||||
memset(expect, 0xff, sizeof(expect));
|
||||
memset(output, 0xff, sizeof(expect));
|
||||
|
||||
for (int i = 0; i < BUFSIZE; i++) {
|
||||
asm("v2 = vmem(%0 + #0)\n\t"
|
||||
"v3 = vmem(%1 + #0)\n\t"
|
||||
"v4 = vmem(%2 + #0)\n\t"
|
||||
"v5 = vmem(%3 + #0)\n\t"
|
||||
"v5:4.w = v6mpy(v5:4.ub, v3:2.b, #1):v\n\t"
|
||||
"vmem(%4 + #0) = v4\n\t"
|
||||
: : "r"(p00), "r"(p01), "r"(p10), "r"(p11), "r"(pout)
|
||||
: "v2", "v3", "v4", "v5", "memory");
|
||||
p00 += sizeof(MMVector);
|
||||
p01 += sizeof(MMVector);
|
||||
p10 += sizeof(MMVector);
|
||||
p11 += sizeof(MMVector);
|
||||
pout += sizeof(MMVector);
|
||||
|
||||
for (int j = 0; j < MAX_VEC_SIZE_BYTES / 4; j++) {
|
||||
expect[i].w[j] = v6mpy_ref[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
check_output_w(__LINE__, BUFSIZE);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
init_buffers();
|
||||
init_v6mpy_buffers();
|
||||
|
||||
test_v6mpy();
|
||||
|
||||
puts(err ? "FAIL" : "PASS");
|
||||
return err ? 1 : 0;
|
||||
}
|
161
tests/tcg/hexagon/v6mpy_ref.c.inc
Normal file
161
tests/tcg/hexagon/v6mpy_ref.c.inc
Normal file
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* Copyright(c) 2021-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
{ 0xffffee11, 0xfffffcca, 0xffffc1b3, 0xffffd0cc,
|
||||
0xffffe215, 0xfffff58e, 0xffffaf37, 0xffffc310,
|
||||
0xffffd919, 0xfffff152, 0xffff9fbb, 0xffffb854,
|
||||
0xffffd31d, 0xfffff016, 0xffff933f, 0xffffb098,
|
||||
0xffffd021, 0xfffff1da, 0xffff89c3, 0xffffabdc,
|
||||
0xffffd025, 0xfffff69e, 0xffff8347, 0xffffaa20,
|
||||
0xffffd329, 0xfffffe62, 0xffff7fcb, 0xffffab64,
|
||||
0xffffd92d, 0x00000926, 0xffff7f4f, 0xffffafa8,
|
||||
},
|
||||
{ 0xffffe231, 0x000016ea, 0xffff81d3, 0xffffb6ec,
|
||||
0xffffee35, 0x000027ae, 0xffff8757, 0xffffc130,
|
||||
0xfffffd39, 0x00003b72, 0xffff8fdb, 0xffffce74,
|
||||
0x00000f3d, 0x00005236, 0xffff9b5f, 0xffffdeb8,
|
||||
0x00002441, 0x00006bfa, 0xffffa9e3, 0xfffff1fc,
|
||||
0x00003c45, 0x000088be, 0xffffbb67, 0x00000840,
|
||||
0x00005749, 0x0000a882, 0xffffcfeb, 0xffffe684,
|
||||
0x0000494d, 0x00009a46, 0xffffb16f, 0x000002c8,
|
||||
},
|
||||
{ 0xfffff351, 0x0000440a, 0xffff4af3, 0xffff9c0c,
|
||||
0xffffef55, 0x000044ce, 0xffff4077, 0xffff9650,
|
||||
0xffffee59, 0x00004892, 0xffff38fb, 0xffff9394,
|
||||
0xfffff05d, 0x00004f56, 0xffff347f, 0xffff93d8,
|
||||
0xfffff561, 0x0000591a, 0xffff3303, 0xffff971c,
|
||||
0xfffffd65, 0x000065de, 0xffff3487, 0xffff9d60,
|
||||
0x00000869, 0x000075a2, 0xffff390b, 0xffffa6a4,
|
||||
0x0000166d, 0x00008866, 0xffff408f, 0xffffb2e8,
|
||||
},
|
||||
{ 0x00002771, 0x00009e2a, 0xffff4b13, 0xffffc22c,
|
||||
0x00003b75, 0x0000b6ee, 0xffff5897, 0xffffd470,
|
||||
0x00005279, 0x0000d2b2, 0xffff691b, 0xffffe9b4,
|
||||
0x00006c7d, 0x0000f176, 0xffff7c9f, 0x000001f8,
|
||||
0x00008981, 0x0001133a, 0xffff9323, 0x00001d3c,
|
||||
0x0000a985, 0x000137fe, 0xffffaca7, 0x00003b80,
|
||||
0x0000cc89, 0x00015fc2, 0xffffc92b, 0xffffe1c4,
|
||||
0x0000868d, 0x00011986, 0xffff72af, 0x00000608,
|
||||
},
|
||||
{ 0xfffff891, 0x00008b4a, 0xfffed433, 0xffff674c,
|
||||
0xfffffc95, 0x0000940e, 0xfffed1b7, 0xffff6990,
|
||||
0x00000399, 0x00009fd2, 0xfffed23b, 0xffff6ed4,
|
||||
0x00000d9d, 0x0000ae96, 0xfffed5bf, 0xffff7718,
|
||||
0x00001aa1, 0x0000c05a, 0xfffedc43, 0xffff825c,
|
||||
0x00002aa5, 0x0000d51e, 0xfffee5c7, 0xffff90a0,
|
||||
0x00003da9, 0x0000ece2, 0xfffef24b, 0xffffa1e4,
|
||||
0x000053ad, 0x000107a6, 0xffff01cf, 0xffffb628,
|
||||
},
|
||||
{ 0x00006cb1, 0x0001256a, 0xffff1453, 0xffffcd6c,
|
||||
0x000088b5, 0x0001462e, 0xffff29d7, 0xffffe7b0,
|
||||
0x0000a7b9, 0x000169f2, 0xffff425b, 0x000004f4,
|
||||
0x0000c9bd, 0x000190b6, 0xffff5ddf, 0x00002538,
|
||||
0x0000eec1, 0x0001ba7a, 0xffff7c63, 0x0000487c,
|
||||
0x000116c5, 0x0001e73e, 0xffff9de7, 0x00006ec0,
|
||||
0x000141c9, 0x00021702, 0xffffc26b, 0xffffdd04,
|
||||
0x0000c3cd, 0x000198c6, 0xffff33ef, 0x00000948,
|
||||
},
|
||||
{ 0xfffffdd1, 0x0000d28a, 0xfffe5d73, 0xffff328c,
|
||||
0x000009d5, 0x0000e34e, 0xfffe62f7, 0xffff3cd0,
|
||||
0x000018d9, 0x0000f712, 0xfffe6b7b, 0xffff4a14,
|
||||
0x00002add, 0x00010dd6, 0xfffe76ff, 0xffff5a58,
|
||||
0x00003fe1, 0x0001279a, 0xfffe8583, 0xffff6d9c,
|
||||
0x000057e5, 0x0001445e, 0xfffe9707, 0xffff83e0,
|
||||
0x000072e9, 0x00016422, 0xfffeab8b, 0xffff9d24,
|
||||
0x000090ed, 0x000186e6, 0xfffec30f, 0xffffb968,
|
||||
},
|
||||
{ 0x0000b1f1, 0x0001acaa, 0xfffedd93, 0xffffd8ac,
|
||||
0x0000d5f5, 0x0001d56e, 0xfffefb17, 0xfffffaf0,
|
||||
0x0000fcf9, 0x00020132, 0xffff1b9b, 0x00002034,
|
||||
0x000126fd, 0x00022ff6, 0xffff3f1f, 0x00008b36,
|
||||
0x000093c3, 0x00009d80, 0x00009d6d, 0x0000a78a,
|
||||
0x0000b4d7, 0x0000c354, 0x0000b801, 0x0000c6de,
|
||||
0x0000d4eb, 0x0000e828, 0x0000d195, 0xffffea32,
|
||||
0x00000fff, 0x000022fc, 0xfffffc29, 0x00000f86,
|
||||
},
|
||||
{ 0xffffee13, 0xfffffcd0, 0xffffc1bd, 0xffffd0da,
|
||||
0xffffe327, 0xfffff6a4, 0xffffb051, 0xffffc42e,
|
||||
0xffffd73b, 0xffffef78, 0xffff9de5, 0xffffb682,
|
||||
0xffffd24f, 0xffffef4c, 0xffff9279, 0xffffafd6,
|
||||
0xffffd063, 0xfffff220, 0xffff8a0d, 0xffffac2a,
|
||||
0xffffd177, 0xfffff7f4, 0xffff84a1, 0xffffab7e,
|
||||
0xffffd18b, 0xfffffcc8, 0xffff7e35, 0xffffa9d2,
|
||||
0xffffd89f, 0x0000089c, 0xffff7ec9, 0xffffaf26,
|
||||
},
|
||||
{ 0xffffe2b3, 0x00001770, 0xffff825d, 0xffffb77a,
|
||||
0xffffefc7, 0x00002944, 0xffff88f1, 0xffffc2ce,
|
||||
0xfffffbdb, 0x00003a18, 0xffff8e85, 0xffffcd22,
|
||||
0x00000eef, 0x000051ec, 0xffff9b19, 0xffffde76,
|
||||
0x00002503, 0x00006cc0, 0xffffaaad, 0xfffff2ca,
|
||||
0x00003e17, 0x00008a94, 0xffffbd41, 0x00000a1e,
|
||||
0x0000562b, 0x0000a768, 0xffffced5, 0xffffe572,
|
||||
0x0000493f, 0x00009a3c, 0xffffb169, 0x000002c6,
|
||||
},
|
||||
{ 0xfffff353, 0x00004410, 0xffff4afd, 0xffff9c1a,
|
||||
0xfffff067, 0x000045e4, 0xffff4191, 0xffff976e,
|
||||
0xffffec7b, 0x000046b8, 0xffff3725, 0xffff91c2,
|
||||
0xffffef8f, 0x00004e8c, 0xffff33b9, 0xffff9316,
|
||||
0xfffff5a3, 0x00005960, 0xffff334d, 0xffff976a,
|
||||
0xfffffeb7, 0x00006734, 0xffff35e1, 0xffff9ebe,
|
||||
0x000006cb, 0x00007408, 0xffff3775, 0xffffa512,
|
||||
0x000015df, 0x000087dc, 0xffff4009, 0xffffb266,
|
||||
},
|
||||
{ 0x000027f3, 0x00009eb0, 0xffff4b9d, 0xffffc2ba,
|
||||
0x00003d07, 0x0000b884, 0xffff5a31, 0xffffd60e,
|
||||
0x0000511b, 0x0000d158, 0xffff67c5, 0xffffe862,
|
||||
0x00006c2f, 0x0000f12c, 0xffff7c59, 0x000001b6,
|
||||
0x00008a43, 0x00011400, 0xffff93ed, 0x00001e0a,
|
||||
0x0000ab57, 0x000139d4, 0xffffae81, 0x00003d5e,
|
||||
0x0000cb6b, 0x00015ea8, 0xffffc815, 0xffffe0b2,
|
||||
0x0000867f, 0x0001197c, 0xffff72a9, 0x00000606,
|
||||
},
|
||||
{ 0xfffff893, 0x00008b50, 0xfffed43d, 0xffff675a,
|
||||
0xfffffda7, 0x00009524, 0xfffed2d1, 0xffff6aae,
|
||||
0x000001bb, 0x00009df8, 0xfffed065, 0xffff6d02,
|
||||
0x00000ccf, 0x0000adcc, 0xfffed4f9, 0xffff7656,
|
||||
0x00001ae3, 0x0000c0a0, 0xfffedc8d, 0xffff82aa,
|
||||
0x00002bf7, 0x0000d674, 0xfffee721, 0xffff91fe,
|
||||
0x00003c0b, 0x0000eb48, 0xfffef0b5, 0xffffa052,
|
||||
0x0000531f, 0x0001071c, 0xffff0149, 0xffffb5a6,
|
||||
},
|
||||
{ 0x00006d33, 0x000125f0, 0xffff14dd, 0xffffcdfa,
|
||||
0x00008a47, 0x000147c4, 0xffff2b71, 0xffffe94e,
|
||||
0x0000a65b, 0x00016898, 0xffff4105, 0x000003a2,
|
||||
0x0000c96f, 0x0001906c, 0xffff5d99, 0x000024f6,
|
||||
0x0000ef83, 0x0001bb40, 0xffff7d2d, 0x0000494a,
|
||||
0x00011897, 0x0001e914, 0xffff9fc1, 0x0000709e,
|
||||
0x000140ab, 0x000215e8, 0xffffc155, 0xffffdbf2,
|
||||
0x0000c3bf, 0x000198bc, 0xffff33e9, 0x00000946,
|
||||
},
|
||||
{ 0xfffffdd3, 0x0000d290, 0xfffe5d7d, 0xffff329a,
|
||||
0x00000ae7, 0x0000e464, 0xfffe6411, 0xffff3dee,
|
||||
0x000016fb, 0x0000f538, 0xfffe69a5, 0xffff4842,
|
||||
0x00002a0f, 0x00010d0c, 0xfffe7639, 0xffff5996,
|
||||
0x00004023, 0x000127e0, 0xfffe85cd, 0xffff6dea,
|
||||
0x00005937, 0x000145b4, 0xfffe9861, 0xffff853e,
|
||||
0x0000714b, 0x00016288, 0xfffea9f5, 0xffff9b92,
|
||||
0x0000905f, 0x0001865c, 0xfffec289, 0xffffb8e6,
|
||||
},
|
||||
{ 0x0000b273, 0x0001ad30, 0xfffede1d, 0xffffd93a,
|
||||
0x0000d787, 0x0001d704, 0xfffefcb1, 0xfffffc8e,
|
||||
0x0000fb9b, 0x0001ffd8, 0xffff1a45, 0x00001ee2,
|
||||
0x000126af, 0x00022fac, 0xffff3ed9, 0x00008af4,
|
||||
0x00009485, 0x00009e46, 0x00009e37, 0x0000a858,
|
||||
0x0000b6a9, 0x0000c52a, 0x0000b9db, 0x0000c8bc,
|
||||
0x0000d3cd, 0x0000e70e, 0x0000d07f, 0xffffe920,
|
||||
0x00000ff1, 0x000022f2, 0xfffffc23, 0x00000f84,
|
||||
},
|
Loading…
Reference in a new issue