1 // RUN: %clang_cc1 -fsyntax-only -verify=sve,neon,scalar -triple aarch64-arm-none-eabi \ 2 // RUN: -target-feature -fp8 -target-feature +sve -target-feature +neon %s 3 4 // REQUIRES: aarch64-registered-target 5 6 __mfp8 test_static_cast_from_char(char in) { 7 return static_cast<__mfp8>(in); // scalar-error {{static_cast from 'char' to '__mfp8' is not allowed}} 8 } 9 10 char test_static_cast_to_char(__mfp8 in) { 11 return static_cast<char>(in); // scalar-error {{static_cast from '__mfp8' to 'char' is not allowed}} 12 } 13 14 void test(bool b) { 15 __mfp8 mfp8; 16 17 mfp8 + mfp8; // scalar-error {{invalid operands to binary expression ('__mfp8' and '__mfp8')}} 18 mfp8 - mfp8; // scalar-error {{invalid operands to binary expression ('__mfp8' and '__mfp8')}} 19 mfp8 * mfp8; // scalar-error {{invalid operands to binary expression ('__mfp8' and '__mfp8')}} 20 mfp8 / mfp8; // scalar-error {{invalid operands to binary expression ('__mfp8' and '__mfp8')}} 21 ++mfp8; // scalar-error {{cannot increment value of type '__mfp8'}} 22 --mfp8; // scalar-error {{cannot decrement value of type '__mfp8'}} 23 24 char u8; 25 26 mfp8 + u8; // scalar-error {{invalid operands to binary expression ('__mfp8' and 'char')}} 27 u8 + mfp8; // scalar-error {{invalid operands to binary expression ('char' and '__mfp8')}} 28 mfp8 - u8; // scalar-error {{invalid operands to binary expression ('__mfp8' and 'char')}} 29 u8 - mfp8; // scalar-error {{invalid operands to binary expression ('char' and '__mfp8')}} 30 mfp8 * u8; // scalar-error {{invalid operands to binary expression ('__mfp8' and 'char')}} 31 u8 * mfp8; // scalar-error {{invalid operands to binary expression ('char' and '__mfp8')}} 32 mfp8 / u8; // scalar-error {{invalid operands to binary expression ('__mfp8' and 'char')}} 33 u8 / mfp8; // scalar-error {{invalid operands to binary expression ('char' and '__mfp8')}} 34 mfp8 = u8; // scalar-error {{assigning to '__mfp8' from incompatible type 'char'}} 35 u8 = mfp8; // scalar-error {{assigning to 'char' from incompatible type '__mfp8'}} 36 mfp8 + (b ? u8 : mfp8); // scalar-error {{incompatible operand types ('char' and '__mfp8')}} 37 } 38 39 #include <arm_sve.h> 40 void test_vector_sve(svmfloat8_t a, svuint8_t c) { 41 a + c; // sve-error {{cannot convert between vector type 'svuint8_t' (aka '__SVUint8_t') and vector type 'svmfloat8_t' (aka '__SVMfloat8_t') as implicit conversion would cause truncation}} 42 a - c; // sve-error {{cannot convert between vector type 'svuint8_t' (aka '__SVUint8_t') and vector type 'svmfloat8_t' (aka '__SVMfloat8_t') as implicit conversion would cause truncation}} 43 a * c; // sve-error {{cannot convert between vector type 'svuint8_t' (aka '__SVUint8_t') and vector type 'svmfloat8_t' (aka '__SVMfloat8_t') as implicit conversion would cause truncation}} 44 a / c; // sve-error {{cannot convert between vector type 'svuint8_t' (aka '__SVUint8_t') and vector type 'svmfloat8_t' (aka '__SVMfloat8_t') as implicit conversion would cause truncation}} 45 } 46 47 48 #include <arm_neon.h> 49 50 void test_vector(mfloat8x8_t a, mfloat8x16_t b, uint8x8_t c) { 51 a + a; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x8_t')}} 52 a - a; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x8_t')}} 53 a * a; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x8_t')}} 54 a / a; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x8_t')}} 55 56 b + b; // neon-error {{invalid operands to binary expression ('mfloat8x16_t' (vector of 16 'mfloat8_t' values) and 'mfloat8x16_t')}} 57 b - b; // neon-error {{invalid operands to binary expression ('mfloat8x16_t' (vector of 16 'mfloat8_t' values) and 'mfloat8x16_t')}} 58 b * b; // neon-error {{invalid operands to binary expression ('mfloat8x16_t' (vector of 16 'mfloat8_t' values) and 'mfloat8x16_t')}} 59 b / b; // neon-error {{invalid operands to binary expression ('mfloat8x16_t' (vector of 16 'mfloat8_t' values) and 'mfloat8x16_t')}} 60 61 a + b; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 62 a - b; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 63 a * b; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 64 a / b; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 65 66 a + c; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'uint8x8_t' (vector of 8 'uint8_t' values))}} 67 a - c; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'uint8x8_t' (vector of 8 'uint8_t' values))}} 68 a * c; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'uint8x8_t' (vector of 8 'uint8_t' values))}} 69 a / c; // neon-error {{invalid operands to binary expression ('mfloat8x8_t' (vector of 8 'mfloat8_t' values) and 'uint8x8_t' (vector of 8 'uint8_t' values))}} 70 c + b; // neon-error {{invalid operands to binary expression ('uint8x8_t' (vector of 8 'uint8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 71 c - b; // neon-error {{invalid operands to binary expression ('uint8x8_t' (vector of 8 'uint8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 72 c * b; // neon-error {{invalid operands to binary expression ('uint8x8_t' (vector of 8 'uint8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 73 c / b; // neon-error {{invalid operands to binary expression ('uint8x8_t' (vector of 8 'uint8_t' values) and 'mfloat8x16_t' (vector of 16 'mfloat8_t' values))}} 74 } 75