diff options
Diffstat (limited to 'llvm/test/MC/AMDGPU')
-rw-r--r-- | llvm/test/MC/AMDGPU/literalv216-err.s | 22 | ||||
-rw-r--r-- | llvm/test/MC/AMDGPU/literalv216.s | 112 | ||||
-rw-r--r-- | llvm/test/MC/AMDGPU/vop3p-err.s | 113 | ||||
-rw-r--r-- | llvm/test/MC/AMDGPU/vop3p.s | 216 |
4 files changed, 463 insertions, 0 deletions
diff --git a/llvm/test/MC/AMDGPU/literalv216-err.s b/llvm/test/MC/AMDGPU/literalv216-err.s new file mode 100644 index 00000000000..09739024e9e --- /dev/null +++ b/llvm/test/MC/AMDGPU/literalv216-err.s @@ -0,0 +1,22 @@ +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx901 -show-encoding %s 2>&1 | FileCheck -check-prefix=GFX9 %s + +v_pk_add_f16 v1, -17, v2 +// GFX9: :19: error: invalid operand for instruction + +v_pk_add_f16 v1, 65, v2 +// GFX9: :18: error: invalid operand for instruction + +v_pk_add_f16 v1, 64.0, v2 +// GFX9: :18: error: invalid operand for instruction + +v_pk_add_f16 v1, -0.15915494, v2 +// GFX9: :19: error: invalid operand for instruction + +v_pk_add_f16 v1, -0.0, v2 +// GFX9: :19: error: invalid operand for instruction + +v_pk_add_f16 v1, -32768, v2 +// GFX9: :19: error: invalid operand for instruction + +v_pk_add_f16 v1, 32767, v2 +// GFX9: :18: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/literalv216.s b/llvm/test/MC/AMDGPU/literalv216.s new file mode 100644 index 00000000000..1ea05d55d75 --- /dev/null +++ b/llvm/test/MC/AMDGPU/literalv216.s @@ -0,0 +1,112 @@ +// RUN: llvm-mc -arch=amdgcn -mcpu=gfx901 -show-encoding %s | FileCheck -check-prefix=GFX9 %s + +v_pk_add_f16 v1, 0, v2 +// GFX9: v_pk_add_f16 v1, 0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x80,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0.0, v2 +// GFX9: v_pk_add_f16 v1, 0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x80,0x04,0x02,0x18] + +v_pk_add_f16 v1, v2, 0 +// GFX9: v_pk_add_f16 v1, v2, 0 ; encoding: [0x01,0x00,0x8f,0xd3,0x02,0x01,0x01,0x18] + +v_pk_add_f16 v1, v2, 0.0 +// GFX9: v_pk_add_f16 v1, v2, 0 ; encoding: [0x01,0x00,0x8f,0xd3,0x02,0x01,0x01,0x18] + +v_pk_add_f16 v1, 1.0, v2 +// GFX9: v_pk_add_f16 v1, 1.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf2,0x04,0x02,0x18] + +v_pk_add_f16 v1, -1.0, v2 +// GFX9: v_pk_add_f16 v1, -1.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf3,0x04,0x02,0x18] + +v_pk_add_f16 v1, -0.5, v2 +// GFX9: v_pk_add_f16 v1, -0.5, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf1,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0.5, v2 +// GFX9: v_pk_add_f16 v1, 0.5, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf0,0x04,0x02,0x18] + +v_pk_add_f16 v1, 2.0, v2 +// GFX9: v_pk_add_f16 v1, 2.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf4,0x04,0x02,0x18] + +v_pk_add_f16 v1, -2.0, v2 +// GFX9: v_pk_add_f16 v1, -2.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf5,0x04,0x02,0x18] + +v_pk_add_f16 v1, 4.0, v2 +// GFX9: v_pk_add_f16 v1, 4.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf6,0x04,0x02,0x18] + +v_pk_add_f16 v1, -4.0, v2 +// GFX9: v_pk_add_f16 v1, -4.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf7,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0.15915494, v2 +// GFX9: v_pk_add_f16 v1, 0.15915494, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf8,0x04,0x02,0x18] + +v_pk_add_f16 v1, -1, v2 +// GFX9: v_pk_add_f16 v1, -1, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc1,0x04,0x02,0x18] + +v_pk_add_f16 v1, -2, v2 +// GFX9: v_pk_add_f16 v1, -2, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc2,0x04,0x02,0x18] + +v_pk_add_f16 v1, -3, v2 +// GFX9: v_pk_add_f16 v1, -3, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc3,0x04,0x02,0x18] + +v_pk_add_f16 v1, -16, v2 +// GFX9: v_pk_add_f16 v1, -16, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xd0,0x04,0x02,0x18] + +v_pk_add_f16 v1, 1, v2 +// GFX9: v_pk_add_f16 v1, 1, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x81,0x04,0x02,0x18] + +v_pk_add_f16 v1, 2, v2 +// GFX9: v_pk_add_f16 v1, 2, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x82,0x04,0x02,0x18] + +v_pk_add_f16 v1, 3, v2 +// GFX9: v_pk_add_f16 v1, 3, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x83,0x04,0x02,0x18] + +v_pk_add_f16 v1, 4, v2 +// GFX9: v_pk_add_f16 v1, 4, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x84,0x04,0x02,0x18] + +v_pk_add_f16 v1, 15, v2 +// GFX9: v_pk_add_f16 v1, 15, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x8f,0x04,0x02,0x18] + +v_pk_add_f16 v1, 16, v2 +// GFX9: v_pk_add_f16 v1, 16, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x90,0x04,0x02,0x18] + +v_pk_add_f16 v1, 63, v2 +// GFX9: v_pk_add_f16 v1, 63, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xbf,0x04,0x02,0x18] + +v_pk_add_f16 v1, 64, v2 +// GFX9: v_pk_add_f16 v1, 64, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc0,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x0001, v2 +// GFX9: v_pk_add_f16 v1, 1, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0x81,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0xffff, v2 +// GFX9: v_pk_add_f16 v1, -1, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc1,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x3c00, v2 +// GFX9: v_pk_add_f16 v1, 1.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf2,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0xbc00, v2 +// GFX9: v_pk_add_f16 v1, -1.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf3,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x3800, v2 +// GFX9: v_pk_add_f16 v1, 0.5, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf0,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0xb800, v2 +// GFX9: v_pk_add_f16 v1, -0.5, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf1,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x4000, v2 +// GFX9: v_pk_add_f16 v1, 2.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf4,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0xc000, v2 +// GFX9: v_pk_add_f16 v1, -2.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf5,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x4400, v2 +// GFX9: v_pk_add_f16 v1, 4.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf6,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0xc400, v2 +// GFX9: v_pk_add_f16 v1, -4.0, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf7,0x04,0x02,0x18] + +v_pk_add_f16 v1, 0x3118, v2 +// GFX9: v_pk_add_f16 v1, 0.15915494, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xf8,0x04,0x02,0x18] + +v_pk_add_f16 v1, 65535, v2 +// GFX9: v_pk_add_f16 v1, -1, v2 ; encoding: [0x01,0x00,0x8f,0xd3,0xc1,0x04,0x02,0x18] diff --git a/llvm/test/MC/AMDGPU/vop3p-err.s b/llvm/test/MC/AMDGPU/vop3p-err.s new file mode 100644 index 00000000000..4cfc21762b0 --- /dev/null +++ b/llvm/test/MC/AMDGPU/vop3p-err.s @@ -0,0 +1,113 @@ +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx901 -show-encoding %s 2>&1 | FileCheck -check-prefix=GFX9 %s + +// GFX9: 31: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel + +// GFX9: 32: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel: + +// GFX9: 33: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[ + +// GFX9: 33: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[] + +// GFX9: 34: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[,] + +// XXGFX9: 34: error: failed parsing operand. +// v_pk_add_u16 v1, v2, v3 op_sel:[0] + +// GFX9: 35: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[0,] + +// XXGFX9: 36: error: failed parsing operand. +// v_pk_add_u16 v1, v2, v3 op_sel:[,0] + +// GFX9: 36: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[0,2] + +// GFX9: 35: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[2,0] + +// GFX9: 33: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[-1,0] + +// GFX9: 35: error: failed parsing operand. +v_pk_add_u16 v1, v2, v3 op_sel:[0,-1] + +// GFX9: 40: error: not a valid operand. +v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0] + +// XXGFX9: invalid operand for instruction +v_pk_add_u16 v1, v2, v3 neg_lo:[0,0] + +// +// Regular modifiers on packed instructions +// + +// FIXME: should be invalid operand for instruction +// GFX9: :18: error: not a valid operand. +v_pk_add_f16 v1, |v2|, v3 + +// GFX9: :21: error: not a valid operand. +v_pk_add_f16 v1, abs(v2), v3 + +// GFX9: :22: error: not a valid operand. +v_pk_add_f16 v1, v2, |v3| + +// GFX9: :25: error: not a valid operand. +v_pk_add_f16 v1, v2, abs(v3) + +// GFX9: :19: error: invalid operand for instruction +v_pk_add_f16 v1, -v2, v3 + +// GFX9: :23: error: invalid operand for instruction +v_pk_add_f16 v1, v2, -v3 + +// GFX9: :21: error: not a valid operand. +v_pk_add_u16 v1, abs(v2), v3 + +// GFX9: :19: error: invalid operand for instruction +v_pk_add_u16 v1, -v2, v3 + + +// +// Packed operands on the non-packed VOP3P instructions +// + +// GFX9: invalid operand for instruction +v_mad_mix_f32 v1, v2, v3, v4 op_sel:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mix_f32 v1, v2, v3, v4 op_sel_hi:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mix_f32 v1, v2, v3, v4 neg_lo:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mix_f32 v1, v2, v3, v4 neg_hi:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixlo_f16 v1, v2, v3, v4 op_sel:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixlo_f16 v1, v2, v3, v4 op_sel_hi:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixlo_f16 v1, v2, v3, v4 neg_lo:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixlo_f16 v1, v2, v3, v4 neg_hi:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixhi_f16 v1, v2, v3, v4 op_sel:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixhi_f16 v1, v2, v3, v4 op_sel_hi:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixhi_f16 v1, v2, v3, v4 neg_lo:[0,0,0] + +// GFX9: invalid operand for instruction +v_mad_mixhi_f16 v1, v2, v3, v4 neg_hi:[0,0,0] diff --git a/llvm/test/MC/AMDGPU/vop3p.s b/llvm/test/MC/AMDGPU/vop3p.s new file mode 100644 index 00000000000..c9eda69e13d --- /dev/null +++ b/llvm/test/MC/AMDGPU/vop3p.s @@ -0,0 +1,216 @@ +// RUN: llvm-mc -arch=amdgcn -mcpu=gfx901 -show-encoding %s | FileCheck -check-prefix=GFX9 %s + +// +// Test op_sel/op_sel_hi +// + +v_pk_add_u16 v1, v2, v3 +// GFX9: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,0] +// GFX9: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,1] +// GFX9: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,0] op_sel_hi:[1,1] +// GFX9: v_pk_add_u16 v1, v2, v3 ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0] ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x00] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,0] op_sel_hi:[0,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,0] ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x00] + +v_pk_add_u16 v1, v2, v3 op_sel:[1,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] ; encoding: [0x01,0x08,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] ; encoding: [0x01,0x10,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel:[1,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,1] ; encoding: [0x01,0x18,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel_hi:[0,1] ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x10] + +v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel_hi:[1,0] ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x08] + +v_pk_add_u16 v1, v2, v3 op_sel:[1,1] op_sel_hi:[1,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,1] ; encoding: [0x01,0x18,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[1,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[1,0] ; encoding: [0x01,0x08,0x8a,0xd3,0x02,0x07,0x02,0x08] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[0,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[0,1] ; encoding: [0x01,0x10,0x8a,0xd3,0x02,0x07,0x02,0x10] + +v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[0,1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] op_sel_hi:[0,1] ; encoding: [0x01,0x08,0x8a,0xd3,0x02,0x07,0x02,0x10] + +v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[1,0] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[0,1] op_sel_hi:[1,0] ; encoding: [0x01,0x10,0x8a,0xd3,0x02,0x07,0x02,0x08] + +// +// Test src2 op_sel/op_sel_hi +// + +v_pk_fma_f16 v8, v0, s0, v1 +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,0] neg_hi:[0,0,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[1,1,1] neg_lo:[0,0,0] neg_hi:[0,0,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[1,1,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,0] op_sel_hi:[0,0,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 op_sel_hi:[0,0,0] ; encoding: [0x08,0x00,0x8e,0xd3,0x00,0x01,0x04,0x04] + +v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,1] op_sel_hi:[0,0,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 op_sel:[0,0,1] op_sel_hi:[0,0,1] ; encoding: [0x08,0x60,0x8e,0xd3,0x00,0x01,0x04,0x04] + +// +// Test neg_lo/neg_hi +// + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0xfc] + +v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,1,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,1,1] ; encoding: [0x08,0x47,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] neg_hi:[1,1,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,1,1] neg_hi:[1,1,1] ; encoding: [0x08,0x47,0x8e,0xd3,0x00,0x01,0x04,0xfc] + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,0,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[1,0,0] ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x3c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,1,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,1,0] ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x5c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_lo:[0,0,1] ; encoding: [0x08,0x40,0x8e,0xd3,0x00,0x01,0x04,0x9c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,0,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[1,0,0] ; encoding: [0x08,0x41,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,1,0] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,1,0] ; encoding: [0x08,0x42,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,0,1] +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 neg_hi:[0,0,1] ; encoding: [0x08,0x44,0x8e,0xd3,0x00,0x01,0x04,0x1c] + + +// Test clamp +v_pk_fma_f16 v8, v0, s0, v1 clamp +// GFX9: v_pk_fma_f16 v8, v0, s0, v1 clamp ; encoding: [0x08,0xc0,0x8e,0xd3,0x00,0x01,0x04,0x1c] + +v_pk_add_u16 v1, v2, v3 clamp +// GFX9: v_pk_add_u16 v1, v2, v3 clamp ; encoding: [0x01,0x80,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_min_i16 v0, v1, v2 clamp +// GFX9: v_pk_min_i16 v0, v1, v2 clamp ; encoding: [0x00,0x80,0x88,0xd3,0x01,0x05,0x02,0x18] + +// +// Instruction tests: +// + +v_pk_mul_lo_u16 v0, v1, v2 +// GFX9: v_pk_mul_lo_u16 v0, v1, v2 ; encoding: [0x00,0x00,0x81,0xd3,0x01,0x05,0x02,0x18] + +v_pk_add_i16 v0, v1, v2 +// GFX9: v_pk_add_i16 v0, v1, v2 ; encoding: [0x00,0x00,0x82,0xd3,0x01,0x05,0x02,0x18] + +v_pk_sub_i16 v0, v1, v2 +// GFX9: v_pk_sub_i16 v0, v1, v2 ; encoding: [0x00,0x00,0x83,0xd3,0x01,0x05,0x02,0x18] + +v_pk_lshlrev_b16 v0, v1, v2 +// GFX9: v_pk_lshlrev_b16 v0, v1, v2 ; encoding: [0x00,0x00,0x84,0xd3,0x01,0x05,0x02,0x18] + +v_pk_lshrrev_b16 v0, v1, v2 +// GFX9: v_pk_lshrrev_b16 v0, v1, v2 ; encoding: [0x00,0x00,0x85,0xd3,0x01,0x05,0x02,0x18] + +v_pk_ashrrev_i16 v0, v1, v2 +// GFX9: v_pk_ashrrev_i16 v0, v1, v2 ; encoding: [0x00,0x00,0x86,0xd3,0x01,0x05,0x02,0x18] + +v_pk_max_i16 v0, v1, v2 +// GFX9: v_pk_max_i16 v0, v1, v2 ; encoding: [0x00,0x00,0x87,0xd3,0x01,0x05,0x02,0x18] + +v_pk_min_i16 v0, v1, v2 +// GFX9: v_pk_min_i16 v0, v1, v2 ; encoding: [0x00,0x00,0x88,0xd3,0x01,0x05,0x02,0x18] + +v_pk_add_u16 v0, v1, v2 +// GFX9: v_pk_add_u16 v0, v1, v2 ; encoding: [0x00,0x00,0x8a,0xd3,0x01,0x05,0x02,0x18] + +v_pk_max_u16 v0, v1, v2 +// GFX9: v_pk_max_u16 v0, v1, v2 ; encoding: [0x00,0x00,0x8c,0xd3,0x01,0x05,0x02,0x18] + +v_pk_min_u16 v0, v1, v2 +// GFX9: v_pk_min_u16 v0, v1, v2 ; encoding: [0x00,0x00,0x8d,0xd3,0x01,0x05,0x02,0x18] + +v_pk_fma_f16 v0, v1, v2, v3 +// GFX9: v_pk_fma_f16 v0, v1, v2, v3 ; encoding: [0x00,0x40,0x8e,0xd3,0x01,0x05,0x0e,0x1c] + +v_pk_add_f16 v0, v1, v2 +// GFX9: v_pk_add_f16 v0, v1, v2 ; encoding: [0x00,0x00,0x8f,0xd3,0x01,0x05,0x02,0x18] + +v_pk_mul_f16 v0, v1, v2 +// GFX9: v_pk_mul_f16 v0, v1, v2 ; encoding: [0x00,0x00,0x90,0xd3,0x01,0x05,0x02,0x18] + +v_pk_min_f16 v0, v1, v2 +// GFX9: v_pk_min_f16 v0, v1, v2 ; encoding: [0x00,0x00,0x91,0xd3,0x01,0x05,0x02,0x18] + +v_pk_max_f16 v0, v1, v2 +// GFX9: v_pk_max_f16 v0, v1, v2 ; encoding: [0x00,0x00,0x92,0xd3,0x01,0x05,0x02,0x18] + +v_mad_mix_f32 v0, v1, v2, v3 +// GFX9: v_mad_mix_f32 v0, v1, v2, v3 ; encoding: [0x00,0x00,0xa0,0xd3,0x01,0x05,0x0e,0x04] + +v_mad_mixlo_f16 v0, v1, v2, v3 +// GFX9: v_mad_mixlo_f16 v0, v1, v2, v3 ; encoding: [0x00,0x00,0xa1,0xd3,0x01,0x05,0x0e,0x04] + +v_mad_mixhi_f16 v0, v1, v2, v3 +// GFX9: v_mad_mixhi_f16 v0, v1, v2, v3 ; encoding: [0x00,0x00,0xa2,0xd3,0x01,0x05,0x0e,0x04] + + +// +// Regular source modifiers on non-packed instructions +// + +v_mad_mix_f32 v0, abs(v1), v2, v3 +// GFX9: v_mad_mix_f32 v0, |v1|, v2, v3 ; encoding: [0x00,0x01,0xa0,0xd3,0x01,0x05,0x0e,0x04] + +v_mad_mix_f32 v0, v1, abs(v2), v3 +// GFX9: v_mad_mix_f32 v0, v1, |v2|, v3 ; encoding: [0x00,0x02,0xa0,0xd3,0x01,0x05,0x0e,0x04] + +v_mad_mix_f32 v0, v1, v2, abs(v3) +// GFX9: v_mad_mix_f32 v0, v1, v2, |v3| ; encoding: [0x00,0x04,0xa0,0xd3,0x01,0x05,0x0e,0x04] + +v_mad_mix_f32 v0, -v1, v2, v3 +// GFX9: v_mad_mix_f32 v0, -v1, v2, v3 ; encoding: [0x00,0x00,0xa0,0xd3,0x01,0x05,0x0e,0x24] + +v_mad_mix_f32 v0, v1, -v2, v3 +// GFX9: v_mad_mix_f32 v0, v1, -v2, v3 ; encoding: [0x00,0x00,0xa0,0xd3,0x01,0x05,0x0e,0x44] + +v_mad_mix_f32 v0, v1, v2, -v3 +// GFX9: v_mad_mix_f32 v0, v1, v2, -v3 ; encoding: [0x00,0x00,0xa0,0xd3,0x01,0x05,0x0e,0x84] + +v_mad_mix_f32 v0, -abs(v1), v2, v3 +// GFX9: v_mad_mix_f32 v0, -|v1|, v2, v3 ; encoding: [0x00,0x01,0xa0,0xd3,0x01,0x05,0x0e,0x24] + +v_mad_mix_f32 v0, v1, -abs(v2), v3 +// GFX9: v_mad_mix_f32 v0, v1, -|v2|, v3 ; encoding: [0x00,0x02,0xa0,0xd3,0x01,0x05,0x0e,0x44] + +v_mad_mix_f32 v0, v1, v2, -abs(v3) +// GFX9: v_mad_mix_f32 v0, v1, v2, -|v3| ; encoding: [0x00,0x04,0xa0,0xd3,0x01,0x05,0x0e,0x84] + +v_mad_mixlo_f16 v0, abs(v1), -v2, abs(v3) +// GFX9: v_mad_mixlo_f16 v0, |v1|, -v2, |v3| ; encoding: [0x00,0x05,0xa1,0xd3,0x01,0x05,0x0e,0x44] + +v_mad_mixhi_f16 v0, -v1, abs(v2), -abs(v3) +// GFX9: v_mad_mixhi_f16 v0, -v1, |v2|, -|v3| ; encoding: [0x00,0x06,0xa2,0xd3,0x01,0x05,0x0e,0xa4] |