summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC/Disassembler/Hexagon
diff options
context:
space:
mode:
authorColin LeMahieu <colinl@codeaurora.org>2015-01-30 20:56:54 +0000
committerColin LeMahieu <colinl@codeaurora.org>2015-01-30 20:56:54 +0000
commit16f5e56703827527a8dd19388f8c77c656d29dbe (patch)
treefd9b9a3c9708255847a29f67bea1824919b99611 /llvm/test/MC/Disassembler/Hexagon
parent4cb1a8e52bac7bfdf1505e56901d762a9e1a6203 (diff)
downloadbcm5719-llvm-16f5e56703827527a8dd19388f8c77c656d29dbe.tar.gz
bcm5719-llvm-16f5e56703827527a8dd19388f8c77c656d29dbe.zip
[Hexagon] Adding vector multiplies. Cleaning up tests.
llvm-svn: 227609
Diffstat (limited to 'llvm/test/MC/Disassembler/Hexagon')
-rw-r--r--llvm/test/MC/Disassembler/Hexagon/xtype_fp.txt38
-rw-r--r--llvm/test/MC/Disassembler/Hexagon/xtype_mpy.txt162
2 files changed, 198 insertions, 2 deletions
diff --git a/llvm/test/MC/Disassembler/Hexagon/xtype_fp.txt b/llvm/test/MC/Disassembler/Hexagon/xtype_fp.txt
index 97c072730bd..70074208eda 100644
--- a/llvm/test/MC/Disassembler/Hexagon/xtype_fp.txt
+++ b/llvm/test/MC/Disassembler/Hexagon/xtype_fp.txt
@@ -1,11 +1,17 @@
-# RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
+# Hexagon Programmer's Reference Manual 11.10.4 XTYPE/FP
+# Floating point addition
0x11 0xdf 0x15 0xeb
# CHECK: r17 = sfadd(r21, r31)
+
+# Classify floating-point value
0x03 0xd5 0xf1 0x85
# CHECK: p3 = sfclass(r17, #21)
0xb3 0xc2 0x90 0xdc
# CHECK: p3 = dfclass(r17:16, #21)
+
+# Compare floating-point value
0x03 0xd5 0xf1 0xc7
# CHECK: p3 = sfcmp.ge(r17, r21)
0x23 0xd5 0xf1 0xc7
@@ -22,10 +28,14 @@
# CHECK: p3 = dfcmp.ge(r17:16, r21:20)
0x63 0xd4 0xf0 0xd2
# CHECK: p3 = dfcmp.uo(r17:16, r21:20)
+
+# Convert floating-point value to other format
0x10 0xc0 0x95 0x84
# CHECK: r17:16 = convert_sf2df(r21)
0x31 0xc0 0x14 0x88
# CHECK: r17 = convert_df2sf(r21:20)
+
+# Convert integer to floating-point value
0x50 0xc0 0xf4 0x80
# CHECK: r17:16 = convert_ud2df(r21:20)
0x70 0xc0 0xf4 0x80
@@ -42,6 +52,8 @@
# CHECK: r17 = convert_uw2sf(r21)
0x11 0xc0 0x55 0x8b
# CHECK: r17 = convert_w2sf(r21)
+
+# Convert floating-point value to integer
0x10 0xc0 0xf4 0x80
# CHECK: r17:16 = convert_df2d(r21:20)
0x30 0xc0 0xf4 0x80
@@ -74,22 +86,36 @@
# CHECK: r17 = convert_sf2w(r21)
0x31 0xc0 0x95 0x8b
# CHECK: r17 = convert_sf2w(r21):chop
+
+# Floating point extreme value assistance
0x11 0xc0 0xb5 0x8b
# CHECK: r17 = sffixupr(r21)
0x11 0xdf 0xd5 0xeb
# CHECK: r17 = sffixupn(r21, r31)
0x31 0xdf 0xd5 0xeb
# CHECK: r17 = sffixupd(r21, r31)
+
+# Floating point fused multiply-add
0x91 0xdf 0x15 0xef
# CHECK: r17 += sfmpy(r21, r31)
0xb1 0xdf 0x15 0xef
# CHECK: r17 -= sfmpy(r21, r31)
+
+# Floating point fused multiply-add with scaling
0xf1 0xdf 0x75 0xef
# CHECK: r17 += sfmpy(r21, r31, p3):scale
+
+# Floating point reciprocal square root approximation
+0x71 0xc0 0xf5 0x8b
+# CHECK: r17, p3 = sfinvsqrta(r21)
+
+# Floating point fused multiply-add for library routines
0xd1 0xdf 0x15 0xef
# CHECK: r17 += sfmpy(r21, r31):lib
0xf1 0xdf 0x15 0xef
# CHECK: r17 -= sfmpy(r21, r31):lib
+
+# Create floating-point constant
0xb1 0xc2 0x00 0xd6
# CHECK: r17 = sfmake(#21):pos
0xb1 0xc2 0x40 0xd6
@@ -98,13 +124,23 @@
# CHECK: r17:16 = dfmake(#21):pos
0xb0 0xc2 0x40 0xd9
# CHECK: r17:16 = dfmake(#21):neg
+
+# Floating point maximum
0x11 0xdf 0x95 0xeb
# CHECK: r17 = sfmax(r21, r31)
+
+# Floating point minimum
0x31 0xdf 0x95 0xeb
# CHECK: r17 = sfmin(r21, r31)
+
+# Floating point multiply
0x11 0xdf 0x55 0xeb
# CHECK: r17 = sfmpy(r21, r31)
+
+# Floating point reciprocal approximation
0xf1 0xdf 0xf5 0xeb
# CHECK: r17, p3 = sfrecipa(r21, r31)
+
+# Floating point subtraction
0x31 0xdf 0x15 0xeb
# CHECK: r17 = sfsub(r21, r31)
diff --git a/llvm/test/MC/Disassembler/Hexagon/xtype_mpy.txt b/llvm/test/MC/Disassembler/Hexagon/xtype_mpy.txt
index 429b6482eac..970c379f35f 100644
--- a/llvm/test/MC/Disassembler/Hexagon/xtype_mpy.txt
+++ b/llvm/test/MC/Disassembler/Hexagon/xtype_mpy.txt
@@ -1,5 +1,7 @@
-# RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
+# Hexagon Programmer's Reference Manual 11.10.5 XTYPE/MPY
+# Multiply and use lower result
0xb1 0xdf 0x35 0xd7
# CHECK: r17 = add(#21, mpyi(r21, r31))
0xbf 0xd1 0x35 0xd8
@@ -22,6 +24,44 @@
# CHECK: r17 = mpyi(r21, r31)
0x11 0xdf 0x15 0xef
# CHECK: r17 += mpyi(r21, r31)
+
+# Vector multiply word by signed half (32x16)
+0xb0 0xde 0x14 0xe8
+# CHECK: r17:16 = vmpyweh(r21:20, r31:30):sat
+0xb0 0xde 0x94 0xe8
+# CHECK: r17:16 = vmpyweh(r21:20, r31:30):<<1:sat
+0xf0 0xde 0x14 0xe8
+# CHECK: r17:16 = vmpywoh(r21:20, r31:30):sat
+0xf0 0xde 0x94 0xe8
+# CHECK: r17:16 = vmpywoh(r21:20, r31:30):<<1:sat
+0xb0 0xde 0x34 0xe8
+# CHECK: r17:16 = vmpyweh(r21:20, r31:30):rnd:sat
+0xb0 0xde 0xb4 0xe8
+# CHECK: r17:16 = vmpyweh(r21:20, r31:30):<<1:rnd:sat
+0xf0 0xde 0x34 0xe8
+# CHECK: r17:16 = vmpywoh(r21:20, r31:30):rnd:sat
+0xf0 0xde 0xb4 0xe8
+# CHECK: r17:16 = vmpywoh(r21:20, r31:30):<<1:rnd:sat
+
+# Vector multiply word by unsigned half (32x16)
+0xb0 0xde 0x54 0xe8
+# CHECK: r17:16 = vmpyweuh(r21:20, r31:30):sat
+0xb0 0xde 0xd4 0xe8
+# CHECK: r17:16 = vmpyweuh(r21:20, r31:30):<<1:sat
+0xf0 0xde 0x54 0xe8
+# CHECK: r17:16 = vmpywouh(r21:20, r31:30):sat
+0xf0 0xde 0xd4 0xe8
+# CHECK: r17:16 = vmpywouh(r21:20, r31:30):<<1:sat
+0xb0 0xde 0x74 0xe8
+# CHECK: r17:16 = vmpyweuh(r21:20, r31:30):rnd:sat
+0xb0 0xde 0xf4 0xe8
+# CHECK: r17:16 = vmpyweuh(r21:20, r31:30):<<1:rnd:sat
+0xf0 0xde 0x74 0xe8
+# CHECK: r17:16 = vmpywouh(r21:20, r31:30):rnd:sat
+0xf0 0xde 0xf4 0xe8
+# CHECK: r17:16 = vmpywouh(r21:20, r31:30):<<1:rnd:sat
+
+# Multiply signed halfwords
0x10 0xdf 0x95 0xe4
# CHECK: r17:16 = mpy(r21.l, r31.l):<<1
0x30 0xdf 0x95 0xe4
@@ -118,6 +158,8 @@
# CHECK: r17 -= mpy(r21.h, r31.l):<<1:sat
0xf1 0xdf 0xb5 0xee
# CHECK: r17 -= mpy(r21.h, r31.h):<<1:sat
+
+# Multiply unsigned halfwords
0x10 0xdf 0xd5 0xe4
# CHECK: r17:16 = mpyu(r21.l, r31.l):<<1
0x30 0xdf 0xd5 0xe4
@@ -166,10 +208,32 @@
# CHECK: r17 -= mpyu(r21.h, r31.l):<<1
0x71 0xdf 0xf5 0xee
# CHECK: r17 -= mpyu(r21.h, r31.h):<<1
+
+# Polynomial multiply words
0xf0 0xdf 0x55 0xe5
# CHECK: r17:16 = pmpyw(r21, r31)
0xf0 0xdf 0x35 0xe7
# CHECK: r17:16 ^= pmpyw(r21, r31)
+
+# Vector reduce multiply word by signed half (32x16)
+0x50 0xde 0x34 0xe8
+# CHECK: r17:16 = vrmpywoh(r21:20, r31:30)
+0x50 0xde 0xb4 0xe8
+# CHECK: r17:16 = vrmpywoh(r21:20, r31:30):<<1
+0x90 0xde 0x54 0xe8
+# CHECK: r17:16 = vrmpyweh(r21:20, r31:30)
+0x90 0xde 0xd4 0xe8
+# CHECK: r17:16 = vrmpyweh(r21:20, r31:30):<<1
+0xd0 0xde 0x74 0xea
+# CHECK: r17:16 += vrmpywoh(r21:20, r31:30)
+0xd0 0xde 0xf4 0xea
+# CHECK: r17:16 += vrmpywoh(r21:20, r31:30):<<1
+0xd0 0xde 0x34 0xea
+# CHECK: r17:16 += vrmpyweh(r21:20, r31:30)
+0xd0 0xde 0xb4 0xea
+# CHECK: r17:16 += vrmpyweh(r21:20, r31:30):<<1
+
+# Multiply and use upper result
0x31 0xdf 0x15 0xed
# CHECK: r17 = mpy(r21, r31)
0x31 0xdf 0x35 0xed
@@ -194,6 +258,8 @@
# CHECK: r17 += mpy(r21, r31):<<1:sat
0x31 0xdf 0x75 0xef
# CHECK: r17 -= mpy(r21, r31):<<1:sat
+
+# Multiply and use full result
0x10 0xdf 0x15 0xe5
# CHECK: r17:16 = mpy(r21, r31)
0x10 0xdf 0x55 0xe5
@@ -206,3 +272,97 @@
# CHECK: r17:16 += mpyu(r21, r31)
0x10 0xdf 0x75 0xe7
# CHECK: r17:16 -= mpyu(r21, r31)
+
+# Vector dual multiply
+0x90 0xde 0x14 0xe8
+# CHECK: r17:16 = vdmpy(r21:20, r31:30):sat
+0x90 0xde 0x94 0xe8
+# CHECK: r17:16 = vdmpy(r21:20, r31:30):<<1:sat
+0x90 0xde 0x14 0xea
+# CHECK: r17:16 += vdmpy(r21:20, r31:30):sat
+0x90 0xde 0x94 0xea
+# CHECK: r17:16 += vdmpy(r21:20, r31:30):<<1:sat
+
+# Vector dual multiply with round and pack
+0x11 0xde 0x14 0xe9
+# CHECK: r17 = vdmpy(r21:20, r31:30):rnd:sat
+0x11 0xde 0x94 0xe9
+# CHECK: r17 = vdmpy(r21:20, r31:30):<<1:rnd:sat
+
+# Vector reduce multiply bytes
+0x30 0xde 0x94 0xe8
+# CHECK: r17:16 = vrmpybu(r21:20, r31:30)
+0x30 0xde 0xd4 0xe8
+# CHECK: r17:16 = vrmpybsu(r21:20, r31:30)
+0x30 0xde 0x94 0xea
+# CHECK: r17:16 += vrmpybu(r21:20, r31:30)
+0x30 0xde 0xd4 0xea
+# CHECK: r17:16 += vrmpybsu(r21:20, r31:30)
+
+# Vector dual multiply signed by unsigned bytes
+0x30 0xde 0xb4 0xe8
+# CHECK: r17:16 = vdmpybsu(r21:20, r31:30):sat
+0x30 0xde 0x34 0xea
+# CHECK: r17:16 += vdmpybsu(r21:20, r31:30):sat
+
+# Vector multiply even haldwords
+0xd0 0xde 0x14 0xe8
+# CHECK: r17:16 = vmpyeh(r21:20, r31:30):sat
+0xd0 0xde 0x94 0xe8
+# CHECK: r17:16 = vmpyeh(r21:20, r31:30):<<1:sat
+0x50 0xde 0x34 0xea
+# CHECK: r17:16 += vmpyeh(r21:20, r31:30)
+0xd0 0xde 0x14 0xea
+# CHECK: r17:16 += vmpyeh(r21:20, r31:30):sat
+0xd0 0xde 0x94 0xea
+# CHECK: r17:16 += vmpyeh(r21:20, r31:30):<<1:sat
+
+# Vector multiply halfwords
+0xb0 0xdf 0x15 0xe5
+# CHECK: r17:16 = vmpyh(r21, r31):sat
+0xb0 0xdf 0x95 0xe5
+# CHECK: r17:16 = vmpyh(r21, r31):<<1:sat
+0x30 0xdf 0x35 0xe7
+# CHECK: r17:16 += vmpyh(r21, r31)
+0xb0 0xdf 0x15 0xe7
+# CHECK: r17:16 += vmpyh(r21, r31):sat
+0xb0 0xdf 0x95 0xe7
+# CHECK: r17:16 += vmpyh(r21, r31):<<1:sat
+
+# Vector multiply halfwords with round and pack
+0xf1 0xdf 0x35 0xed
+# CHECK: r17 = vmpyh(r21, r31):rnd:sat
+0xf1 0xdf 0xb5 0xed
+# CHECK: r17 = vmpyh(r21, r31):<<1:rnd:sat
+
+# Vector multiply halfwords signed by unsigned
+0xf0 0xdf 0x15 0xe5
+# CHECK: r17:16 = vmpyhsu(r21, r31):sat
+0xf0 0xdf 0x95 0xe5
+# CHECK: r17:16 = vmpyhsu(r21, r31):<<1:sat
+0xb0 0xdf 0x75 0xe7
+# CHECK: r17:16 += vmpyhsu(r21, r31):sat
+0xb0 0xdf 0xf5 0xe7
+# CHECK: r17:16 += vmpyhsu(r21, r31):<<1:sat
+
+# Vector reduce multiply halfwords
+0x50 0xde 0x14 0xe8
+# CHECK: r17:16 = vrmpyh(r21:20, r31:30)
+0x50 0xde 0x14 0xea
+# CHECK: r17:16 += vrmpyh(r21:20, r31:30)
+
+# Vector multiply bytes
+0x30 0xdf 0x55 0xe5
+# CHECK: r17:16 = vmpybsu(r21, r31)
+0x30 0xdf 0x95 0xe5
+# CHECK: r17:16 = vmpybu(r21, r31)
+0x30 0xdf 0x95 0xe7
+# CHECK: r17:16 += vmpybu(r21, r31)
+0x30 0xdf 0xd5 0xe7
+# CHECK: r17:16 += vmpybsu(r21, r31)
+
+# Vector polynomial multiply halfwords
+0xf0 0xdf 0xd5 0xe5
+# CHECK: r17:16 = vpmpyh(r21, r31)
+0xf0 0xdf 0xb5 0xe7
+# CHECK: r17:16 ^= vpmpyh(r21, r31)
OpenPOWER on IntegriCloud