1 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ 2 3 #include "test_sve_acle.h" 4 5 /* 6 ** raddhnt_u16_tied1: 7 ** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h) 8 ** ret 9 */ 10 TEST_DUAL_Z (raddhnt_u16_tied1, svuint8_t, svuint16_t, 11 z0 = svraddhnt_u16 (z0, z4, z5), 12 z0 = svraddhnt (z0, z4, z5)) 13 14 /* Bad RA choice: no preferred output sequence. */ 15 TEST_DUAL_Z_REV (raddhnt_u16_tied2, svuint8_t, svuint16_t, 16 z0_res = svraddhnt_u16 (z4, z0, z1), 17 z0_res = svraddhnt (z4, z0, z1)) 18 19 /* Bad RA choice: no preferred output sequence. */ 20 TEST_DUAL_Z_REV (raddhnt_u16_tied3, svuint8_t, svuint16_t, 21 z0_res = svraddhnt_u16 (z4, z1, z0), 22 z0_res = svraddhnt (z4, z1, z0)) 23 24 /* 25 ** raddhnt_u16_untied: 26 ** ( 27 ** mov z0\.d, z1\.d 28 ** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h) 29 ** | 30 ** raddhnt z1\.b, (z4\.h, z5\.h|z5\.h, z4\.h) 31 ** mov z0\.d, z1\.d 32 ** ) 33 ** ret 34 */ 35 TEST_DUAL_Z (raddhnt_u16_untied, svuint8_t, svuint16_t, 36 z0 = svraddhnt_u16 (z1, z4, z5), 37 z0 = svraddhnt (z1, z4, z5)) 38 39 /* 40 ** raddhnt_w0_u16_tied1: 41 ** mov (z[0-9]+\.h), w0 42 ** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h) 43 ** ret 44 */ 45 TEST_DUAL_ZX (raddhnt_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t, 46 z0 = svraddhnt_n_u16 (z0, z4, x0), 47 z0 = svraddhnt (z0, z4, x0)) 48 49 /* 50 ** raddhnt_w0_u16_untied: 51 ** mov (z[0-9]+\.h), w0 52 ** ( 53 ** mov z0\.d, z1\.d 54 ** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h) 55 ** | 56 ** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h) 57 ** mov z0\.d, z1\.d 58 ** ) 59 ** ret 60 */ 61 TEST_DUAL_ZX (raddhnt_w0_u16_untied, svuint8_t, svuint16_t, uint16_t, 62 z0 = svraddhnt_n_u16 (z1, z4, x0), 63 z0 = svraddhnt (z1, z4, x0)) 64 65 /* 66 ** raddhnt_11_u16_tied1: 67 ** mov (z[0-9]+\.h), #11 68 ** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h) 69 ** ret 70 */ 71 TEST_DUAL_Z (raddhnt_11_u16_tied1, svuint8_t, svuint16_t, 72 z0 = svraddhnt_n_u16 (z0, z4, 11), 73 z0 = svraddhnt (z0, z4, 11)) 74 75 /* 76 ** raddhnt_11_u16_untied: 77 ** mov (z[0-9]+\.h), #11 78 ** ( 79 ** mov z0\.d, z1\.d 80 ** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h) 81 ** | 82 ** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h) 83 ** mov z0\.d, z1\.d 84 ** ) 85 ** ret 86 */ 87 TEST_DUAL_Z (raddhnt_11_u16_untied, svuint8_t, svuint16_t, 88 z0 = svraddhnt_n_u16 (z1, z4, 11), 89 z0 = svraddhnt (z1, z4, 11)) 90