On 16 January 2015 at 19:49, Christophe Lyon <christophe.l...@linaro.org> wrote: > On 16 January 2015 at 19:33, Tejas Belagod <tejas.bela...@arm.com> wrote: >> >>> +VECT_VAR_DECL(expected,poly,8,16) [] = { 0x33, 0x33, 0x33, 0x33, >>> + 0x33, 0x33, 0x33, 0x33, >>> + 0x33, 0x33, 0x33, 0x33, >>> + 0x33, 0x33, 0x33, 0x33 }; >>> +VECT_VAR_DECL(expected,poly,16,8) [] = { 0x3333, 0x3333, 0x3333, 0x3333, >>> + 0x3333, 0x3333, 0x3333, 0x3333 }; >>> +VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0x33333333, 0x33333333, >>> + 0x33333333, 0x33333333 }; >>> + >> >> >> No poly or float ops. >> >>> +#define INSN_NAME vpaddl >>> +#define TEST_MSG "VPADDL/VPADDLQ" >>> + >>> +#define FNNAME1(NAME) void exec_ ## NAME (void) >>> +#define FNNAME(NAME) FNNAME1(NAME) >>> + >>> +FNNAME (INSN_NAME) >>> +{ >>> + /* Basic test: y=OP(x), then store the result. */ >>> +#define TEST_VPADDL1(INSN, Q, T1, T2, W, N, W2, N2) \ >>> + VECT_VAR(vector_res, T1, W2, N2) = \ >>> + INSN##Q##_##T2##W(VECT_VAR(vector, T1, W, N)); \ >>> + vst1##Q##_##T2##W2(VECT_VAR(result, T1, W2, N2), \ >>> + VECT_VAR(vector_res, T1, W2, N2)) >>> + >>> +#define TEST_VPADDL(INSN, Q, T1, T2, W, N, W2, N2) \ >>> + TEST_VPADDL1(INSN, Q, T1, T2, W, N, W2, N2) >>> + >>> + /* No need for 64 bits variants. */ >> >> >> These look like 64-bit variants. >> > I mean no vector element of 64 bits. > >>> + DECL_VARIABLE(vector, int, 8, 8); >>> + DECL_VARIABLE(vector, int, 16, 4); >>> + DECL_VARIABLE(vector, int, 32, 2); >>> + DECL_VARIABLE(vector, uint, 8, 8); >>> + DECL_VARIABLE(vector, uint, 16, 4); >>> + DECL_VARIABLE(vector, uint, 32, 2); >>> + DECL_VARIABLE(vector, int, 8, 16); >>> + DECL_VARIABLE(vector, int, 16, 8); >>> + DECL_VARIABLE(vector, int, 32, 4); >>> + DECL_VARIABLE(vector, uint, 8, 16); >>> + DECL_VARIABLE(vector, uint, 16, 8); >>> + DECL_VARIABLE(vector, uint, 32, 4); >>> + >> >> >>> + /* Apply a unary operator named INSN_NAME. */ >> >> Unary op? > > Cut & paste error, again. > Hmm changed my mind: vpaddl takes only one vector as input, although it does add 2 vector elements.
>> >>> + TEST_VPADDL(INSN_NAME, , int, s, 8, 8, 16, 4); >>> + TEST_VPADDL(INSN_NAME, , int, s, 16, 4, 32, 2); >>> + TEST_VPADDL(INSN_NAME, , int, s, 32, 2, 64, 1); >>> + TEST_VPADDL(INSN_NAME, , uint, u, 8, 8, 16, 4); >>> + TEST_VPADDL(INSN_NAME, , uint, u, 16, 4, 32, 2); >>> + TEST_VPADDL(INSN_NAME, , uint, u, 32, 2, 64, 1); >>> + TEST_VPADDL(INSN_NAME, q, int, s, 8, 16, 16, 8); >>> + TEST_VPADDL(INSN_NAME, q, int, s, 16, 8, 32, 4); >>> + TEST_VPADDL(INSN_NAME, q, int, s, 32, 4, 64, 2); >>> + TEST_VPADDL(INSN_NAME, q, uint, u, 8, 16, 16, 8); >>> + TEST_VPADDL(INSN_NAME, q, uint, u, 16, 8, 32, 4); >>> + TEST_VPADDL(INSN_NAME, q, uint, u, 32, 4, 64, 2); >>> + >>> + CHECK_RESULTS (TEST_MSG, ""); >>> +} >>> + >>> +int main (void) >>> +{ >>> + exec_vpaddl (); >>> + return 0; >>> +} >>> >> >> >> Otherwise, LGTM. >> >> Tejas. >>