You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
6.6 KiB
325 lines
6.6 KiB
# RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon --disassemble -output-asm-variant=1 < %s | FileCheck %s
|
|
# RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon,v8.2a,fullfp16 --disassemble -output-asm-variant=1 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=FP16
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point arithmetic
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x41 0xc0 0xe0 0x1e
|
|
0x41 0xc0 0x20 0x1e
|
|
0x41 0xc0 0x60 0x1e
|
|
|
|
# FP16: fabs h1, h2
|
|
# CHECK: fabs s1, s2
|
|
# CHECK: fabs d1, d2
|
|
|
|
0x41 0x28 0xe3 0x1e
|
|
0x41 0x28 0x23 0x1e
|
|
0x41 0x28 0x63 0x1e
|
|
|
|
# FP16: fadd h1, h2, h3
|
|
# CHECK: fadd s1, s2, s3
|
|
# CHECK: fadd d1, d2, d3
|
|
|
|
0x41 0x18 0xe3 0x1e
|
|
0x41 0x18 0x23 0x1e
|
|
0x41 0x18 0x63 0x1e
|
|
|
|
# FP16: fdiv h1, h2, h3
|
|
# CHECK: fdiv s1, s2, s3
|
|
# CHECK: fdiv d1, d2, d3
|
|
|
|
0x41 0x10 0xc3 0x1f
|
|
0x41 0x10 0x03 0x1f
|
|
0x41 0x10 0x43 0x1f
|
|
|
|
# FP16: fmadd h1, h2, h3, h4
|
|
# CHECK: fmadd s1, s2, s3, s4
|
|
# CHECK: fmadd d1, d2, d3, d4
|
|
|
|
0x41 0x48 0xe3 0x1e
|
|
0x41 0x48 0x23 0x1e
|
|
0x41 0x48 0x63 0x1e
|
|
0x41 0x68 0xe3 0x1e
|
|
0x41 0x68 0x23 0x1e
|
|
0x41 0x68 0x63 0x1e
|
|
|
|
# FP16: fmax h1, h2, h3
|
|
# CHECK: fmax s1, s2, s3
|
|
# CHECK: fmax d1, d2, d3
|
|
# FP16: fmaxnm h1, h2, h3
|
|
# CHECK: fmaxnm s1, s2, s3
|
|
# CHECK: fmaxnm d1, d2, d3
|
|
|
|
0x41 0x58 0xe3 0x1e
|
|
0x41 0x58 0x23 0x1e
|
|
0x41 0x58 0x63 0x1e
|
|
0x41 0x78 0xe3 0x1e
|
|
0x41 0x78 0x23 0x1e
|
|
0x41 0x78 0x63 0x1e
|
|
|
|
# FP16: fmin h1, h2, h3
|
|
# CHECK: fmin s1, s2, s3
|
|
# CHECK: fmin d1, d2, d3
|
|
# FP16: fminnm h1, h2, h3
|
|
# CHECK: fminnm s1, s2, s3
|
|
# CHECK: fminnm d1, d2, d3
|
|
|
|
0x41 0x90 0xc3 0x1f
|
|
0x41 0x90 0x03 0x1f
|
|
0x41 0x90 0x43 0x1f
|
|
|
|
# FP16: fmsub h1, h2, h3, h4
|
|
# CHECK: fmsub s1, s2, s3, s4
|
|
# CHECK: fmsub d1, d2, d3, d4
|
|
|
|
0x41 0x08 0xe3 0x1e
|
|
0x41 0x08 0x23 0x1e
|
|
0x41 0x08 0x63 0x1e
|
|
|
|
# FP16: fmul h1, h2, h3
|
|
# CHECK: fmul s1, s2, s3
|
|
# CHECK: fmul d1, d2, d3
|
|
|
|
0x41 0x40 0xe1 0x1e
|
|
0x41 0x40 0x21 0x1e
|
|
0x41 0x40 0x61 0x1e
|
|
|
|
# FP16: fneg h1, h2
|
|
# CHECK: fneg s1, s2
|
|
# CHECK: fneg d1, d2
|
|
|
|
0x41 0x10 0xe3 0x1f
|
|
0x41 0x10 0x23 0x1f
|
|
0x41 0x10 0x63 0x1f
|
|
|
|
# FP16: fnmadd h1, h2, h3, h4
|
|
# CHECK: fnmadd s1, s2, s3, s4
|
|
# CHECK: fnmadd d1, d2, d3, d4
|
|
|
|
0x41 0x90 0xe3 0x1f
|
|
0x41 0x90 0x23 0x1f
|
|
0x41 0x90 0x63 0x1f
|
|
|
|
# FP16: fnmsub h1, h2, h3, h4
|
|
# CHECK: fnmsub s1, s2, s3, s4
|
|
# CHECK: fnmsub d1, d2, d3, d4
|
|
|
|
0x41 0x88 0xe3 0x1e
|
|
0x41 0x88 0x23 0x1e
|
|
0x41 0x88 0x63 0x1e
|
|
|
|
# FP16: fnmul h1, h2, h3
|
|
# CHECK: fnmul s1, s2, s3
|
|
# CHECK: fnmul d1, d2, d3
|
|
|
|
0x41 0xc0 0xe1 0x1e
|
|
0x41 0xc0 0x21 0x1e
|
|
0x41 0xc0 0x61 0x1e
|
|
|
|
# FP16: fsqrt h1, h2
|
|
# CHECK: fsqrt s1, s2
|
|
# CHECK: fsqrt d1, d2
|
|
|
|
0x41 0x38 0xe3 0x1e
|
|
0x41 0x38 0x23 0x1e
|
|
0x41 0x38 0x63 0x1e
|
|
|
|
# FP16: fsub h1, h2, h3
|
|
# CHECK: fsub s1, s2, s3
|
|
# CHECK: fsub d1, d2, d3
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point comparison
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x20 0x04 0xe2 0x1e
|
|
0x20 0x04 0x22 0x1e
|
|
0x20 0x04 0x62 0x1e
|
|
0x30 0x04 0xe2 0x1e
|
|
0x30 0x04 0x22 0x1e
|
|
0x30 0x04 0x62 0x1e
|
|
|
|
# FP16: fccmp h1, h2, #0, eq
|
|
# CHECK: fccmp s1, s2, #0, eq
|
|
# CHECK: fccmp d1, d2, #0, eq
|
|
# FP16: fccmpe h1, h2, #0, eq
|
|
# CHECK: fccmpe s1, s2, #0, eq
|
|
# CHECK: fccmpe d1, d2, #0, eq
|
|
|
|
0x20 0x20 0xe2 0x1e
|
|
0x20 0x20 0x22 0x1e
|
|
0x20 0x20 0x62 0x1e
|
|
0x28 0x20 0xe0 0x1e
|
|
0x28 0x20 0x20 0x1e
|
|
0x28 0x20 0x60 0x1e
|
|
0x30 0x20 0xe2 0x1e
|
|
0x30 0x20 0x22 0x1e
|
|
0x30 0x20 0x62 0x1e
|
|
0x38 0x20 0xe0 0x1e
|
|
0x38 0x20 0x20 0x1e
|
|
0x38 0x20 0x60 0x1e
|
|
|
|
# FP16: fcmp h1, h2
|
|
# CHECK: fcmp s1, s2
|
|
# CHECK: fcmp d1, d2
|
|
# FP16: fcmp h1, #0.0
|
|
# CHECK: fcmp s1, #0.0
|
|
# CHECK: fcmp d1, #0.0
|
|
# FP16: fcmpe h1, h2
|
|
# CHECK: fcmpe s1, s2
|
|
# CHECK: fcmpe d1, d2
|
|
# FP16: fcmpe h1, #0.0
|
|
# CHECK: fcmpe s1, #0.0
|
|
# CHECK: fcmpe d1, #0.0
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point conditional select
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x41 0x0c 0xe3 0x1e
|
|
0x41 0x0c 0x23 0x1e
|
|
0x41 0x0c 0x63 0x1e
|
|
|
|
# FP16: fcsel h1, h2, h3, eq
|
|
# CHECK: fcsel s1, s2, s3, eq
|
|
# CHECK: fcsel d1, d2, d3, eq
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point convert
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x41 0xc0 0x63 0x1e
|
|
0x41 0x40 0x62 0x1e
|
|
0x41 0xc0 0xe2 0x1e
|
|
0x41 0x40 0xe2 0x1e
|
|
0x41 0xc0 0x22 0x1e
|
|
0x41 0xc0 0x23 0x1e
|
|
|
|
# CHECK: fcvt h1, d2
|
|
# CHECK: fcvt s1, d2
|
|
# CHECK: fcvt d1, h2
|
|
# CHECK: fcvt s1, h2
|
|
# CHECK: fcvt d1, s2
|
|
# CHECK: fcvt h1, s2
|
|
|
|
0x41 0x00 0x44 0x1e
|
|
0x41 0x04 0x44 0x1e
|
|
0x41 0x00 0x44 0x9e
|
|
0x41 0x04 0x44 0x9e
|
|
0x41 0x00 0x04 0x1e
|
|
0x41 0x04 0x04 0x1e
|
|
0x41 0x00 0x04 0x9e
|
|
0x41 0x04 0x04 0x9e
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point move
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x41 0x00 0xe7 0x1e
|
|
0x41 0x00 0xe6 0x1e
|
|
0x41 0x00 0x27 0x1e
|
|
0x41 0x00 0x26 0x1e
|
|
0x41 0x00 0x67 0x9e
|
|
0x41 0x00 0x66 0x9e
|
|
|
|
# FP16: fmov h1, w2
|
|
# FP16: fmov w1, h2
|
|
# CHECK: fmov s1, w2
|
|
# CHECK: fmov w1, s2
|
|
# CHECK: fmov d1, x2
|
|
# CHECK: fmov x1, d2
|
|
|
|
0x01 0x10 0xe8 0x1e
|
|
0x01 0x10 0x28 0x1e
|
|
0x01 0x10 0x68 0x1e
|
|
0x01 0xf0 0x7b 0x1e
|
|
0x01 0xf0 0x6b 0x1e
|
|
|
|
# FP16: fmov h1, #0.12500000
|
|
# CHECK: fmov s1, #0.12500000
|
|
# CHECK: fmov d1, #0.12500000
|
|
# CHECK: fmov d1, #-0.48437500
|
|
# CHECK: fmov d1, #0.48437500
|
|
|
|
0x41 0x40 0xe0 0x1e
|
|
0x41 0x40 0x20 0x1e
|
|
0x41 0x40 0x60 0x1e
|
|
|
|
# FP16: fmov h1, h2
|
|
# CHECK: fmov s1, s2
|
|
# CHECK: fmov d1, d2
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Floating-point round to integral
|
|
#-----------------------------------------------------------------------------
|
|
|
|
0x41 0x40 0xe6 0x1e
|
|
0x41 0x40 0x26 0x1e
|
|
0x41 0x40 0x66 0x1e
|
|
|
|
# FP16: frinta h1, h2
|
|
# CHECK: frinta s1, s2
|
|
# CHECK: frinta d1, d2
|
|
|
|
0x41 0xc0 0xe7 0x1e
|
|
0x41 0xc0 0x27 0x1e
|
|
0x41 0xc0 0x67 0x1e
|
|
|
|
# FP16: frinti h1, h2
|
|
# CHECK: frinti s1, s2
|
|
# CHECK: frinti d1, d2
|
|
|
|
0x41 0x40 0xe5 0x1e
|
|
0x41 0x40 0x25 0x1e
|
|
0x41 0x40 0x65 0x1e
|
|
|
|
# FP16: frintm h1, h2
|
|
# CHECK: frintm s1, s2
|
|
# CHECK: frintm d1, d2
|
|
|
|
0x41 0x40 0xe4 0x1e
|
|
0x41 0x40 0x24 0x1e
|
|
0x41 0x40 0x64 0x1e
|
|
|
|
# FP16: frintn h1, h2
|
|
# CHECK: frintn s1, s2
|
|
# CHECK: frintn d1, d2
|
|
|
|
0x41 0xc0 0xe4 0x1e
|
|
0x41 0xc0 0x24 0x1e
|
|
0x41 0xc0 0x64 0x1e
|
|
|
|
# FP16: frintp h1, h2
|
|
# CHECK: frintp s1, s2
|
|
# CHECK: frintp d1, d2
|
|
|
|
0x41 0x40 0xe7 0x1e
|
|
0x41 0x40 0x27 0x1e
|
|
0x41 0x40 0x67 0x1e
|
|
|
|
# FP16: frintx h1, h2
|
|
# CHECK: frintx s1, s2
|
|
# CHECK: frintx d1, d2
|
|
|
|
0x41 0xc0 0xe5 0x1e
|
|
0x41 0xc0 0x25 0x1e
|
|
0x41 0xc0 0x65 0x1e
|
|
|
|
# FP16: frintz h1, h2
|
|
# CHECK: frintz s1, s2
|
|
# CHECK: frintz d1, d2
|
|
|
|
0x00 0x3c 0xe0 0x7e
|
|
0x00 0x8c 0xe0 0x5e
|
|
|
|
# CHECK: cmhs d0, d0, d0
|
|
# CHECK: cmtst d0, d0, d0
|
|
|
|
0x00 0x00 0xaf 0x9e
|
|
0x00 0x00 0xae 0x9e
|
|
|
|
# CHECK: fmov.d v0[1], x0
|
|
# CHECK: fmov.d x0, v0[1]
|
|
|