| # 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] |
| |