/* { dg-do run } */
/* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
/* { dg-add-options arm_v8_2a_fp16_neon } */
/* { dg-skip-if "" { arm*-*-* } } */

#include <arm_neon.h>
#include "arm-neon-ref.h"
#include "compute-ref-data.h"

#define FP16_C(a) ((__fp16) a)
#define A0 FP16_C (123.4)
#define A1 FP16_C (-5.8)
#define A2 FP16_C (-0.0)
#define A3 FP16_C (10)
#define A4 FP16_C (123412.43)
#define A5 FP16_C (-5.8)
#define A6 FP16_C (90.8)
#define A7 FP16_C (24)

#define B0 FP16_C (23.4)
#define B1 FP16_C (-5.8)
#define B2 FP16_C (8.9)
#define B3 FP16_C (4.0)
#define B4 FP16_C (3.4)
#define B5 FP16_C (-550.8)
#define B6 FP16_C (-31.8)
#define B7 FP16_C (20000.0)

/* Expected results for vfma_n.  */
VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 4) []
  = { 0x613E /* A0 + B0 * B0.  */,
      0xD86D /* A1 + B1 * B0.  */,
      0x5A82 /* A2 + B2 * B0.  */,
      0x567A /* A3 + B3 * B0.  */ };

VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 4) []
  = { 0xCA33 /* A0 + B0 * B1.  */,
      0x4EF6 /* A1 + B1 * B1.  */,
      0xD274 /* A2 + B2 * B1.  */,
      0xCA9A /* A3 + B3 * B1.  */ };

VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 4) []
  = { 0x5D2F /* A0 + B0 * B2.  */,
      0xD32D /* A1 + B1 * B2.  */,
      0x54F3 /* A2 + B2 * B2.  */,
      0x51B3 /* A3 + B3 * B2.  */ };

VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 4) []
  = { 0x5AC8 /* A0 + B0 * B3.  */,
      0xCF40 /* A1 + B1 * B3.  */,
      0x5073 /* A2 + B2 * B3.  */,
      0x4E80 /* A3 + B3 * B3.  */ };

VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 8) []
  = { 0x613E /* A0 + B0 * B0.  */,
      0xD86D /* A1 + B1 * B0.  */,
      0x5A82 /* A2 + B2 * B0.  */,
      0x567A /* A3 + B3 * B0.  */,
      0x7C00 /* A4 + B4 * B0.  */,
      0xF24D /* A5 + B5 * B0.  */,
      0xE11B /* A6 + B6 * B0.  */,
      0x7C00 /* A7 + B7 * B0.  */ };

VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 8) []
  = { 0xCA33 /* A0 + B0 * B1.  */,
      0x4EF6 /* A1 + B1 * B1.  */,
      0xD274 /* A2 + B2 * B1.  */,
      0xCA9A /* A3 + B3 * B1.  */,
      0x7C00 /* A4 + B4 * B1.  */,
      0x6A3B /* A5 + B5 * B1.  */,
      0x5C4D /* A6 + B6 * B1.  */,
      0xFC00 /* A7 + B7 * B1.  */ };

VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 8) []
  = { 0x5D2F /* A0 + B0 * B2.  */,
      0xD32D /* A1 + B1 * B2.  */,
      0x54F3 /* A2 + B2 * B2.  */,
      0x51B3 /* A3 + B3 * B2.  */,
      0x7C00 /* A4 + B4 * B2.  */,
      0xECCB /* A5 + B5 * B2.  */,
      0xDA01 /* A6 + B6 * B2.  */,
      0x7C00 /* A7 + B7 * B2.  */ };

VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 8) []
  = { 0x5AC8 /* A0 + B0 * B3.  */,
      0xCF40 /* A1 + B1 * B3.  */,
      0x5073 /* A2 + B2 * B3.  */,
      0x4E80 /* A3 + B3 * B3.  */,
      0x7C00 /* A4 + B4 * B3.  */,
      0xE851 /* A5 + B5 * B3.  */,
      0xD08C /* A6 + B6 * B3.  */,
      0x7C00 /* A7 + B7 * B3.  */ };

VECT_VAR_DECL (expected_fma4_static, hfloat, 16, 8) []
  = { 0x5A58 /* A0 + B0 * B4.  */,
      0xCE62 /* A1 + B1 * B4.  */,
      0x4F91 /* A2 + B2 * B4.  */,
      0x4DE6 /* A3 + B3 * B4.  */,
      0x7C00 /* A4 + B4 * B4.  */,
      0xE757 /* A5 + B5 * B4.  */,
      0xCC54 /* A6 + B6 * B4.  */,
      0x7C00 /* A7 + B7 * B4.  */ };

VECT_VAR_DECL (expected_fma5_static, hfloat, 16, 8) []
  = { 0xF23D /* A0 + B0 * B5.  */,
      0x6A3B /* A1 + B1 * B5.  */,
      0xECCA /* A2 + B2 * B5.  */,
      0xE849 /* A3 + B3 * B5.  */,
      0x7C00 /* A4 + B4 * B5.  */,
      0x7C00 /* A5 + B5 * B5.  */,
      0x744D /* A6 + B6 * B5.  */,
      0xFC00 /* A7 + B7 * B5.  */ };

VECT_VAR_DECL (expected_fma6_static, hfloat, 16, 8) []
  = { 0xE0DA /* A0 + B0 * B6.  */,
      0x5995 /* A1 + B1 * B6.  */,
      0xDC6C /* A2 + B2 * B6.  */,
      0xD753 /* A3 + B3 * B6.  */,
      0x7C00 /* A4 + B4 * B6.  */,
      0x7447 /* A5 + B5 * B6.  */,
      0x644E /* A6 + B6 * B6.  */,
      0xFC00 /* A7 + B7 * B6.  */ };

VECT_VAR_DECL (expected_fma7_static, hfloat, 16, 8) []
  = { 0x7C00 /* A0 + B0 * B7.  */,
      0xFC00 /* A1 + B1 * B7.  */,
      0x7C00 /* A2 + B2 * B7.  */,
      0x7C00 /* A3 + B3 * B7.  */,
      0x7C00 /* A4 + B4 * B7.  */,
      0xFC00 /* A5 + B5 * B7.  */,
      0xFC00 /* A6 + B6 * B7.  */,
      0x7C00 /* A7 + B7 * B7.  */ };

/* Expected results for vfms_n.  */
VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 4) []
  = { 0xDEA2 /* A0 + (-B0) * B0.  */,
      0x5810 /* A1 + (-B1) * B0.  */,
      0xDA82 /* A2 + (-B2) * B0.  */,
      0xD53A /* A3 + (-B3) * B0.  */ };

VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 4) []
  = { 0x5C0D /* A0 + (-B0) * B1.  */,
      0xD0EE /* A1 + (-B1) * B1.  */,
      0x5274 /* A2 + (-B2) * B1.  */,
      0x5026 /* A3 + (-B3) * B1.  */ };

VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 4) []
  = { 0xD54E /* A0 + (-B0) * B2.  */,
      0x51BA /* A1 + (-B1) * B2.  */,
      0xD4F3 /* A2 + (-B2) * B2.  */,
      0xCE66 /* A3 + (-B3) * B2.  */ };

VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 4) []
  = { 0x4F70 /* A0 + (-B0) * B3.  */,
      0x4C5A /* A1 + (-B1) * B3.  */,
      0xD073 /* A2 + (-B2) * B3.  */,
      0xC600 /* A3 + (-B3) * B3.  */ };

VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 8) []
  = { 0xDEA2 /* A0 + (-B0) * B0.  */,
      0x5810 /* A1 + (-B1) * B0.  */,
      0xDA82 /* A2 + (-B2) * B0.  */,
      0xD53A /* A3 + (-B3) * B0.  */,
      0x7C00 /* A4 + (-B4) * B0.  */,
      0x724B /* A5 + (-B5) * B0.  */,
      0x6286 /* A6 + (-B6) * B0.  */,
      0xFC00 /* A7 + (-B7) * B0.  */ };

VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 8) []
  = { 0x5C0D /* A0 + (-B0) * B1.  */,
      0xD0EE /* A1 + (-B1) * B1.  */,
      0x5274 /* A2 + (-B2) * B1.  */,
      0x5026 /* A3 + (-B3) * B1.  */,
      0x7C00 /* A4 + (-B4) * B1.  */,
      0xEA41 /* A5 + (-B5) * B1.  */,
      0xD5DA /* A6 + (-B6) * B1.  */,
      0x7C00 /* A7 + (-B7) * B1.  */ };

VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 8) []
  = { 0xD54E /* A0 + (-B0) * B2.  */,
      0x51BA /* A1 + (-B1) * B2.  */,
      0xD4F3 /* A2 + (-B2) * B2.  */,
      0xCE66 /* A3 + (-B3) * B2.  */,
      0x7C00 /* A4 + (-B4) * B2.  */,
      0x6CC8 /* A5 + (-B5) * B2.  */,
      0x5DD7 /* A6 + (-B6) * B2.  */,
      0xFC00 /* A7 + (-B7) * B2.  */ };

VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 8) []
  = { 0x4F70 /* A0 + (-B0) * B3.  */,
      0x4C5A /* A1 + (-B1) * B3.  */,
      0xD073 /* A2 + (-B2) * B3.  */,
      0xC600 /* A3 + (-B3) * B3.  */,
      0x7C00 /* A4 + (-B4) * B3.  */,
      0x684B /* A5 + (-B5) * B3.  */,
      0x5AD0 /* A6 + (-B6) * B3.  */,
      0xFC00 /* A7 + (-B7) * B3.  */ };

VECT_VAR_DECL (expected_fms4_static, hfloat, 16, 8) []
  = { 0x5179 /* A0 + (-B0) * B4.  */,
      0x4AF6 /* A1 + (-B1) * B4.  */,
      0xCF91 /* A2 + (-B2) * B4.  */,
      0xC334 /* A3 + (-B3) * B4.  */,
      0x7C00 /* A4 + (-B4) * B4.  */,
      0x674C /* A5 + (-B5) * B4.  */,
      0x5A37 /* A6 + (-B6) * B4.  */,
      0xFC00 /* A7 + (-B7) * B4.  */ };

VECT_VAR_DECL (expected_fms5_static, hfloat, 16, 8) []
  = { 0x725C /* A0 + (-B0) * B5.  */,
      0xEA41 /* A1 + (-B1) * B5.  */,
      0x6CCA /* A2 + (-B2) * B5.  */,
      0x6853 /* A3 + (-B3) * B5.  */,
      0x7C00 /* A4 + (-B4) * B5.  */,
      0xFC00 /* A5 + (-B5) * B5.  */,
      0xF441 /* A6 + (-B6) * B5.  */,
      0x7C00 /* A7 + (-B7) * B5.  */ };

VECT_VAR_DECL (expected_fms6_static, hfloat, 16, 8) []
  = { 0x62C7 /* A0 + (-B0) * B6.  */,
      0xD9F2 /* A1 + (-B1) * B6.  */,
      0x5C6C /* A2 + (-B2) * B6.  */,
      0x584A /* A3 + (-B3) * B6.  */,
      0x7C00 /* A4 + (-B4) * B6.  */,
      0xF447 /* A5 + (-B5) * B6.  */,
      0xE330 /* A6 + (-B6) * B6.  */,
      0x7C00 /* A7 + (-B7) * B6.  */ };

VECT_VAR_DECL (expected_fms7_static, hfloat, 16, 8) []
  = { 0xFC00 /* A0 + (-B0) * B7.  */,
      0x7C00 /* A1 + (-B1) * B7.  */,
      0xFC00 /* A2 + (-B2) * B7.  */,
      0xFC00 /* A3 + (-B3) * B7.  */,
      0x7C00 /* A4 + (-B4) * B7.  */,
      0x7C00 /* A5 + (-B5) * B7.  */,
      0x7C00 /* A6 + (-B6) * B7.  */,
      0xFC00 /* A7 + (-B7) * B7.  */ };

void exec_vfmas_n_f16 (void)
{
#undef TEST_MSG
#define TEST_MSG "VFMA_N (FP16)"
  clean_results ();

  DECL_VARIABLE(vsrc_1, float, 16, 4);
  DECL_VARIABLE(vsrc_2, float, 16, 4);
  VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A0, A1, A2, A3};
  VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {B0, B1, B2, B3};
  VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
  VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
  DECL_VARIABLE (vector_res, float, 16, 4)
    = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B0);

  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma0_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B1);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma1_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B2);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma2_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B3);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma3_static, "");

#undef TEST_MSG
#define TEST_MSG "VFMAQ_N (FP16)"
  clean_results ();

  DECL_VARIABLE(vsrc_1, float, 16, 8);
  DECL_VARIABLE(vsrc_2, float, 16, 8);
  VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A0, A1, A2, A3, A4, A5, A6, A7};
  VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {B0, B1, B2, B3, B4, B5, B6, B7};
  VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
  VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
  DECL_VARIABLE (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B0);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma0_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B1);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma1_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B2);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma2_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B3);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma3_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B4);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma4_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B5);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma5_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B6);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma6_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B7);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma7_static, "");

#undef TEST_MSG
#define TEST_MSG "VFMA_N (FP16)"
  clean_results ();

  VECT_VAR (vector_res, float, 16, 4)
    = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B0);

  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms0_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B1);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms1_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B2);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms2_static, "");

  VECT_VAR (vector_res, float, 16, 4)
    = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
		  VECT_VAR (vsrc_2, float, 16, 4), B3);
  vst1_f16 (VECT_VAR (result, float, 16, 4),
	    VECT_VAR (vector_res, float, 16, 4));

  CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms3_static, "");

#undef TEST_MSG
#define TEST_MSG "VFMAQ_N (FP16)"
  clean_results ();

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B0);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms0_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B1);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms1_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B2);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms2_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B3);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms3_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B4);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms4_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B5);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms5_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B6);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms6_static, "");

  VECT_VAR (vector_res, float, 16, 8)
    = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
		   VECT_VAR (vsrc_2, float, 16, 8), B7);
  vst1q_f16 (VECT_VAR (result, float, 16, 8),
	     VECT_VAR (vector_res, float, 16, 8));

  CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms7_static, "");
}

int
main (void)
{
  exec_vfmas_n_f16 ();
  return 0;
}
