[AArch64][SVE] Asm: Support for signed/unsigned MIN/MAX/ABD
This patch implements the following varieties:
- Unpredicated signed max, e.g. smax z0.h, z1.h, #-128
- Unpredicated signed min, e.g. smin z0.h, z1.h, #-128
- Unpredicated unsigned max, e.g. umax z0.h, z1.h, #255
- Unpredicated unsigned min, e.g. umin z0.h, z1.h, #255
- Predicated signed max, e.g. smax z0.h, p0/m, z0.h, z1.h
- Predicated signed min, e.g. smin z0.h, p0/m, z0.h, z1.h
- Predicated signed abd, e.g. sabd z0.h, p0/m, z0.h, z1.h
- Predicated unsigned max, e.g. umax z0.h, p0/m, z0.h, z1.h
- Predicated unsigned min, e.g. umin z0.h, p0/m, z0.h, z1.h
- Predicated unsigned abd, e.g. uabd z0.h, p0/m, z0.h, z1.h
llvm-svn: 336317
2018-07-05 15:54:10 +08:00
|
|
|
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s
|
|
|
|
|
|
|
|
umin z0.b, z0.b, #-1
|
|
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255].
|
|
|
|
// CHECK-NEXT: umin z0.b, z0.b, #-1
|
|
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
|
|
|
|
umin z31.b, z31.b, #256
|
|
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 255].
|
|
|
|
// CHECK-NEXT: umin z31.b, z31.b, #256
|
|
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
|
|
|
|
|
|
umin z0.b, p8/m, z0.b, z0.b
|
|
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
|
|
|
|
// CHECK-NEXT: umin z0.b, p8/m, z0.b, z0.b
|
|
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
2018-07-31 00:05:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------//
|
|
|
|
// Negative tests for instructions that are incompatible with movprfx
|
|
|
|
|
|
|
|
movprfx z31.b, p0/z, z6.b
|
|
|
|
umin z31.b, z31.b, #255
|
|
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx
|
|
|
|
// CHECK-NEXT: umin z31.b, z31.b, #255
|
|
|
|
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|