; RUN: not llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding -output-asm-variant=1 < %s 2>%t | FileCheck %s
; RUN: FileCheck %s < %t --check-prefix=NO-FP16
; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon,v8.2a,fullfp16 -show-encoding -output-asm-variant=1 < %s | FileCheck %s --check-prefix=CHECK --check-prefix=FP16
foo:
;-----------------------------------------------------------------------------
; Floating-point arithmetic
;-----------------------------------------------------------------------------
fabs h1, h2
fabs s1, s2
fabs d1, d2
; FP16: fabs h1, h2 ; encoding: [0x41,0xc0,0xe0,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fabs h1, h2
; CHECK: fabs s1, s2 ; encoding: [0x41,0xc0,0x20,0x1e]
; CHECK: fabs d1, d2 ; encoding: [0x41,0xc0,0x60,0x1e]
fadd h1, h2, h3
fadd s1, s2, s3
fadd d1, d2, d3
; FP16: fadd h1, h2, h3 ; encoding: [0x41,0x28,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fadd h1, h2, h3
; CHECK: fadd s1, s2, s3 ; encoding: [0x41,0x28,0x23,0x1e]
; CHECK: fadd d1, d2, d3 ; encoding: [0x41,0x28,0x63,0x1e]
fdiv h1, h2, h3
fdiv s1, s2, s3
fdiv d1, d2, d3
; FP16: fdiv h1, h2, h3 ; encoding: [0x41,0x18,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fdiv h1, h2, h3
; CHECK: fdiv s1, s2, s3 ; encoding: [0x41,0x18,0x23,0x1e]
; CHECK: fdiv d1, d2, d3 ; encoding: [0x41,0x18,0x63,0x1e]
fmadd h1, h2, h3, h4
fmadd s1, s2, s3, s4
fmadd d1, d2, d3, d4
; FP16: fmadd h1, h2, h3, h4 ; encoding: [0x41,0x10,0xc3,0x1f]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmadd h1, h2, h3, h4
; CHECK: fmadd s1, s2, s3, s4 ; encoding: [0x41,0x10,0x03,0x1f]
; CHECK: fmadd d1, d2, d3, d4 ; encoding: [0x41,0x10,0x43,0x1f]
fmax h1, h2, h3
fmax s1, s2, s3
fmax d1, d2, d3
fmaxnm h1, h2, h3
fmaxnm s1, s2, s3
fmaxnm d1, d2, d3
; FP16: fmax h1, h2, h3 ; encoding: [0x41,0x48,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmax h1, h2, h3
; CHECK: fmax s1, s2, s3 ; encoding: [0x41,0x48,0x23,0x1e]
; CHECK: fmax d1, d2, d3 ; encoding: [0x41,0x48,0x63,0x1e]
; FP16: fmaxnm h1, h2, h3 ; encoding: [0x41,0x68,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmaxnm h1, h2, h3
; CHECK: fmaxnm s1, s2, s3 ; encoding: [0x41,0x68,0x23,0x1e]
; CHECK: fmaxnm d1, d2, d3 ; encoding: [0x41,0x68,0x63,0x1e]
fmin h1, h2, h3
fmin s1, s2, s3
fmin d1, d2, d3
fminnm h1, h2, h3
fminnm s1, s2, s3
fminnm d1, d2, d3
; FP16: fmin h1, h2, h3 ; encoding: [0x41,0x58,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmin h1, h2, h3
; CHECK: fmin s1, s2, s3 ; encoding: [0x41,0x58,0x23,0x1e]
; CHECK: fmin d1, d2, d3 ; encoding: [0x41,0x58,0x63,0x1e]
; FP16: fminnm h1, h2, h3 ; encoding: [0x41,0x78,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fminnm h1, h2, h3
; CHECK: fminnm s1, s2, s3 ; encoding: [0x41,0x78,0x23,0x1e]
; CHECK: fminnm d1, d2, d3 ; encoding: [0x41,0x78,0x63,0x1e]
fmsub h1, h2, h3, h4
fmsub s1, s2, s3, s4
fmsub d1, d2, d3, d4
; FP16: fmsub h1, h2, h3, h4 ; encoding: [0x41,0x90,0xc3,0x1f]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmsub h1, h2, h3, h4
; CHECK: fmsub s1, s2, s3, s4 ; encoding: [0x41,0x90,0x03,0x1f]
; CHECK: fmsub d1, d2, d3, d4 ; encoding: [0x41,0x90,0x43,0x1f]
fmul h1, h2, h3
fmul s1, s2, s3
fmul d1, d2, d3
; FP16: fmul h1, h2, h3 ; encoding: [0x41,0x08,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmul h1, h2, h3
; CHECK: fmul s1, s2, s3 ; encoding: [0x41,0x08,0x23,0x1e]
; CHECK: fmul d1, d2, d3 ; encoding: [0x41,0x08,0x63,0x1e]
fneg h1, h2
fneg s1, s2
fneg d1, d2
; FP16: fneg h1, h2 ; encoding: [0x41,0x40,0xe1,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fneg h1, h2
; CHECK: fneg s1, s2 ; encoding: [0x41,0x40,0x21,0x1e]
; CHECK: fneg d1, d2 ; encoding: [0x41,0x40,0x61,0x1e]
fnmadd h1, h2, h3, h4
fnmadd s1, s2, s3, s4
fnmadd d1, d2, d3, d4
; FP16: fnmadd h1, h2, h3, h4 ; encoding: [0x41,0x10,0xe3,0x1f]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fnmadd h1, h2, h3, h4
; CHECK: fnmadd s1, s2, s3, s4 ; encoding: [0x41,0x10,0x23,0x1f]
; CHECK: fnmadd d1, d2, d3, d4 ; encoding: [0x41,0x10,0x63,0x1f]
fnmsub h1, h2, h3, h4
fnmsub s1, s2, s3, s4
fnmsub d1, d2, d3, d4
; FP16: fnmsub h1, h2, h3, h4 ; encoding: [0x41,0x90,0xe3,0x1f]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fnmsub h1, h2, h3, h4
; CHECK: fnmsub s1, s2, s3, s4 ; encoding: [0x41,0x90,0x23,0x1f]
; CHECK: fnmsub d1, d2, d3, d4 ; encoding: [0x41,0x90,0x63,0x1f]
fnmul h1, h2, h3
fnmul s1, s2, s3
fnmul d1, d2, d3
; FP16: fnmul h1, h2, h3 ; encoding: [0x41,0x88,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fnmul h1, h2, h3
; CHECK: fnmul s1, s2, s3 ; encoding: [0x41,0x88,0x23,0x1e]
; CHECK: fnmul d1, d2, d3 ; encoding: [0x41,0x88,0x63,0x1e]
fsqrt h1, h2
fsqrt s1, s2
fsqrt d1, d2
; FP16: fsqrt h1, h2 ; encoding: [0x41,0xc0,0xe1,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fsqrt h1, h2
; CHECK: fsqrt s1, s2 ; encoding: [0x41,0xc0,0x21,0x1e]
; CHECK: fsqrt d1, d2 ; encoding: [0x41,0xc0,0x61,0x1e]
fsub h1, h2, h3
fsub s1, s2, s3
fsub d1, d2, d3
; FP16: fsub h1, h2, h3 ; encoding: [0x41,0x38,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fsub h1, h2, h3
; CHECK: fsub s1, s2, s3 ; encoding: [0x41,0x38,0x23,0x1e]
; CHECK: fsub d1, d2, d3 ; encoding: [0x41,0x38,0x63,0x1e]
;-----------------------------------------------------------------------------
; Floating-point comparison
;-----------------------------------------------------------------------------
fccmp h1, h2, fccmp s1, s2, fccmp d1, d2, fccmpe h1, h2, fccmpe s1, s2, fccmpe d1, d2,
; FP16: fccmp h1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fccmp h1, h2, ; CHECK: fccmp s1, s2, ; CHECK: fccmp d1, d2, ; FP16: fccmpe h1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fccmpe h1, h2, ; CHECK: fccmpe s1, s2, ; CHECK: fccmpe d1, d2,
fcmp h1, h2
fcmp s1, s2
fcmp d1, d2
fcmp h1, fcmp s1, fcmp d1, fcmpe h1, h2
fcmpe s1, s2
fcmpe d1, d2
fcmpe h1, fcmpe s1, fcmpe d1,
; FP16: fcmp h1, h2 ; encoding: [0x20,0x20,0xe2,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcmp h1, h2
; CHECK: fcmp s1, s2 ; encoding: [0x20,0x20,0x22,0x1e]
; CHECK: fcmp d1, d2 ; encoding: [0x20,0x20,0x62,0x1e]
; FP16: fcmp h1, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcmp h1, ; CHECK: fcmp s1, ; CHECK: fcmp d1, ; FP16: fcmpe h1, h2 ; encoding: [0x30,0x20,0xe2,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcmpe h1, h2
; CHECK: fcmpe s1, s2 ; encoding: [0x30,0x20,0x22,0x1e]
; CHECK: fcmpe d1, d2 ; encoding: [0x30,0x20,0x62,0x1e]
; FP16: fcmpe h1, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcmpe h1, ; CHECK: fcmpe s1, ; CHECK: fcmpe d1,
;-----------------------------------------------------------------------------
; Floating-point conditional select
;-----------------------------------------------------------------------------
fcsel h1, h2, h3, eq
fcsel s1, s2, s3, eq
fcsel d1, d2, d3, eq
; FP16: fcsel h1, h2, h3, eq ; encoding: [0x41,0x0c,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcsel h1, h2, h3, eq
; CHECK: fcsel s1, s2, s3, eq ; encoding: [0x41,0x0c,0x23,0x1e]
; CHECK: fcsel d1, d2, d3, eq ; encoding: [0x41,0x0c,0x63,0x1e]
;-----------------------------------------------------------------------------
; Floating-point convert
;-----------------------------------------------------------------------------
fcvt h1, d2
fcvt s1, d2
fcvt d1, h2
fcvt s1, h2
fcvt d1, s2
fcvt h1, s2
; CHECK: fcvt h1, d2 ; encoding: [0x41,0xc0,0x63,0x1e]
; CHECK: fcvt s1, d2 ; encoding: [0x41,0x40,0x62,0x1e]
; CHECK: fcvt d1, h2 ; encoding: [0x41,0xc0,0xe2,0x1e]
; CHECK: fcvt s1, h2 ; encoding: [0x41,0x40,0xe2,0x1e]
; CHECK: fcvt d1, s2 ; encoding: [0x41,0xc0,0x22,0x1e]
; CHECK: fcvt h1, s2 ; encoding: [0x41,0xc0,0x23,0x1e]
fcvtas w1, d2
fcvtas x1, d2
fcvtas w1, s2
fcvtas x1, s2
fcvtas w1, h2
fcvtas x1, h2
; CHECK: fcvtas w1, d2 ; encoding: [0x41,0x00,0x64,0x1e]
; CHECK: fcvtas x1, d2 ; encoding: [0x41,0x00,0x64,0x9e]
; CHECK: fcvtas w1, s2 ; encoding: [0x41,0x00,0x24,0x1e]
; CHECK: fcvtas x1, s2 ; encoding: [0x41,0x00,0x24,0x9e]
; FP16: fcvtas w1, h2 ; encoding: [0x41,0x00,0xe4,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtas w1, h2
; FP16: fcvtas x1, h2 ; encoding: [0x41,0x00,0xe4,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtas x1, h2
fcvtau w1, h2
fcvtau w1, s2
fcvtau w1, d2
fcvtau x1, h2
fcvtau x1, s2
fcvtau x1, d2
; FP16: fcvtau w1, h2 ; encoding: [0x41,0x00,0xe5,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtau w1, h2
; CHECK: fcvtau w1, s2 ; encoding: [0x41,0x00,0x25,0x1e]
; CHECK: fcvtau w1, d2 ; encoding: [0x41,0x00,0x65,0x1e]
; FP16: fcvtau x1, h2 ; encoding: [0x41,0x00,0xe5,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtau x1, h2
; CHECK: fcvtau x1, s2 ; encoding: [0x41,0x00,0x25,0x9e]
; CHECK: fcvtau x1, d2 ; encoding: [0x41,0x00,0x65,0x9e]
fcvtms w1, h2
fcvtms w1, s2
fcvtms w1, d2
fcvtms x1, h2
fcvtms x1, s2
fcvtms x1, d2
; FP16: fcvtms w1, h2 ; encoding: [0x41,0x00,0xf0,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtms w1, h2
; CHECK: fcvtms w1, s2 ; encoding: [0x41,0x00,0x30,0x1e]
; CHECK: fcvtms w1, d2 ; encoding: [0x41,0x00,0x70,0x1e]
; FP16: fcvtms x1, h2 ; encoding: [0x41,0x00,0xf0,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtms x1, h2
; CHECK: fcvtms x1, s2 ; encoding: [0x41,0x00,0x30,0x9e]
; CHECK: fcvtms x1, d2 ; encoding: [0x41,0x00,0x70,0x9e]
fcvtmu w1, h2
fcvtmu w1, s2
fcvtmu w1, d2
fcvtmu x1, h2
fcvtmu x1, s2
fcvtmu x1, d2
; FP16: fcvtmu w1, h2 ; encoding: [0x41,0x00,0xf1,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtmu w1, h2
; CHECK: fcvtmu w1, s2 ; encoding: [0x41,0x00,0x31,0x1e]
; CHECK: fcvtmu w1, d2 ; encoding: [0x41,0x00,0x71,0x1e]
; FP16: fcvtmu x1, h2 ; encoding: [0x41,0x00,0xf1,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtmu x1, h2
; CHECK: fcvtmu x1, s2 ; encoding: [0x41,0x00,0x31,0x9e]
; CHECK: fcvtmu x1, d2 ; encoding: [0x41,0x00,0x71,0x9e]
fcvtns w1, h2
fcvtns w1, s2
fcvtns w1, d2
fcvtns x1, h2
fcvtns x1, s2
fcvtns x1, d2
; FP16: fcvtns w1, h2 ; encoding: [0x41,0x00,0xe0,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtns w1, h2
; CHECK: fcvtns w1, s2 ; encoding: [0x41,0x00,0x20,0x1e]
; CHECK: fcvtns w1, d2 ; encoding: [0x41,0x00,0x60,0x1e]
; FP16: fcvtns x1, h2 ; encoding: [0x41,0x00,0xe0,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtns x1, h2
; CHECK: fcvtns x1, s2 ; encoding: [0x41,0x00,0x20,0x9e]
; CHECK: fcvtns x1, d2 ; encoding: [0x41,0x00,0x60,0x9e]
fcvtnu w1, h2
fcvtnu w1, s2
fcvtnu w1, d2
fcvtnu x1, h2
fcvtnu x1, s2
fcvtnu x1, d2
; FP16: fcvtnu w1, h2 ; encoding: [0x41,0x00,0xe1,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtnu w1, h2
; CHECK: fcvtnu w1, s2 ; encoding: [0x41,0x00,0x21,0x1e]
; CHECK: fcvtnu w1, d2 ; encoding: [0x41,0x00,0x61,0x1e]
; FP16: fcvtnu x1, h2 ; encoding: [0x41,0x00,0xe1,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtnu x1, h2
; CHECK: fcvtnu x1, s2 ; encoding: [0x41,0x00,0x21,0x9e]
; CHECK: fcvtnu x1, d2 ; encoding: [0x41,0x00,0x61,0x9e]
fcvtps w1, h2
fcvtps w1, s2
fcvtps w1, d2
fcvtps x1, h2
fcvtps x1, s2
fcvtps x1, d2
; FP16: fcvtps w1, h2 ; encoding: [0x41,0x00,0xe8,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtps w1, h2
; CHECK: fcvtps w1, s2 ; encoding: [0x41,0x00,0x28,0x1e]
; CHECK: fcvtps w1, d2 ; encoding: [0x41,0x00,0x68,0x1e]
; FP16: fcvtps x1, h2 ; encoding: [0x41,0x00,0xe8,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtps x1, h2
; CHECK: fcvtps x1, s2 ; encoding: [0x41,0x00,0x28,0x9e]
; CHECK: fcvtps x1, d2 ; encoding: [0x41,0x00,0x68,0x9e]
fcvtpu w1, h2
fcvtpu w1, s2
fcvtpu w1, d2
fcvtpu x1, h2
fcvtpu x1, s2
fcvtpu x1, d2
; FP16: fcvtpu w1, h2 ; encoding: [0x41,0x00,0xe9,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtpu w1, h2
; CHECK: fcvtpu w1, s2 ; encoding: [0x41,0x00,0x29,0x1e]
; CHECK: fcvtpu w1, d2 ; encoding: [0x41,0x00,0x69,0x1e]
; FP16: fcvtpu x1, h2 ; encoding: [0x41,0x00,0xe9,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtpu x1, h2
; CHECK: fcvtpu x1, s2 ; encoding: [0x41,0x00,0x29,0x9e]
; CHECK: fcvtpu x1, d2 ; encoding: [0x41,0x00,0x69,0x9e]
fcvtzs w1, h2
fcvtzs w1, h2, fcvtzs w1, s2
fcvtzs w1, s2, fcvtzs w1, d2
fcvtzs w1, d2, fcvtzs x1, h2
fcvtzs x1, h2, fcvtzs x1, s2
fcvtzs x1, s2, fcvtzs x1, d2
fcvtzs x1, d2,
; FP16: fcvtzs w1, h2 ; encoding: [0x41,0x00,0xf8,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzs w1, h2
; FP16: fcvtzs w1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzs w1, h2, ; CHECK: fcvtzs w1, s2 ; encoding: [0x41,0x00,0x38,0x1e]
; CHECK: fcvtzs w1, s2, ; CHECK: fcvtzs w1, d2 ; encoding: [0x41,0x00,0x78,0x1e]
; CHECK: fcvtzs w1, d2, ; FP16: fcvtzs x1, h2 ; encoding: [0x41,0x00,0xf8,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzs x1, h2
; FP16: fcvtzs x1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzs x1, h2, ; CHECK: fcvtzs x1, s2 ; encoding: [0x41,0x00,0x38,0x9e]
; CHECK: fcvtzs x1, s2, ; CHECK: fcvtzs x1, d2 ; encoding: [0x41,0x00,0x78,0x9e]
; CHECK: fcvtzs x1, d2,
fcvtzu w1, h2
fcvtzu w1, h2, fcvtzu w1, s2
fcvtzu w1, s2, fcvtzu w1, d2
fcvtzu w1, d2, fcvtzu x1, h2
fcvtzu x1, h2, fcvtzu x1, s2
fcvtzu x1, s2, fcvtzu x1, d2
fcvtzu x1, d2,
; FP16: fcvtzu w1, h2 ; encoding: [0x41,0x00,0xf9,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzu w1, h2
; FP16: fcvtzu w1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzu w1, h2, ; CHECK: fcvtzu w1, s2 ; encoding: [0x41,0x00,0x39,0x1e]
; CHECK: fcvtzu w1, s2, ; CHECK: fcvtzu w1, d2 ; encoding: [0x41,0x00,0x79,0x1e]
; CHECK: fcvtzu w1, d2, ; FP16: fcvtzu x1, h2 ; encoding: [0x41,0x00,0xf9,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzu x1, h2
; FP16: fcvtzu x1, h2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fcvtzu x1, h2, ; CHECK: fcvtzu x1, s2 ; encoding: [0x41,0x00,0x39,0x9e]
; CHECK: fcvtzu x1, s2, ; CHECK: fcvtzu x1, d2 ; encoding: [0x41,0x00,0x79,0x9e]
; CHECK: fcvtzu x1, d2,
scvtf h1, w2
scvtf h1, w2, scvtf s1, w2
scvtf s1, w2, scvtf d1, w2
scvtf d1, w2, scvtf h1, x2
scvtf h1, x2, scvtf s1, x2
scvtf s1, x2, scvtf d1, x2
scvtf d1, x2,
; FP16: scvtf h1, w2 ; encoding: [0x41,0x00,0xe2,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: scvtf h1, w2
; FP16: scvtf h1, w2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: scvtf h1, w2, ; CHECK: scvtf s1, w2 ; encoding: [0x41,0x00,0x22,0x1e]
; CHECK: scvtf s1, w2, ; CHECK: scvtf d1, w2 ; encoding: [0x41,0x00,0x62,0x1e]
; CHECK: scvtf d1, w2, ; FP16: scvtf h1, x2 ; encoding: [0x41,0x00,0xe2,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: scvtf h1, x2
; FP16: scvtf h1, x2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: scvtf h1, x2, ; CHECK: scvtf s1, x2 ; encoding: [0x41,0x00,0x22,0x9e]
; CHECK: scvtf s1, x2, ; CHECK: scvtf d1, x2 ; encoding: [0x41,0x00,0x62,0x9e]
; CHECK: scvtf d1, x2,
ucvtf h1, w2
ucvtf h1, w2, ucvtf s1, w2
ucvtf s1, w2, ucvtf d1, w2
ucvtf d1, w2, ucvtf h1, x2
ucvtf h1, x2, ucvtf s1, x2
ucvtf s1, x2, ucvtf d1, x2
ucvtf d1, x2,
; FP16: ucvtf h1, w2 ; encoding: [0x41,0x00,0xe3,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: ucvtf h1, w2
; FP16: ucvtf h1, w2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: ucvtf h1, w2, ; CHECK: ucvtf s1, w2 ; encoding: [0x41,0x00,0x23,0x1e]
; CHECK: ucvtf s1, w2, ; CHECK: ucvtf d1, w2 ; encoding: [0x41,0x00,0x63,0x1e]
; CHECK: ucvtf d1, w2, ; FP16: ucvtf h1, x2 ; encoding: [0x41,0x00,0xe3,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: ucvtf h1, x2
; FP16: ucvtf h1, x2, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: ucvtf h1, x2, ; CHECK: ucvtf s1, x2 ; encoding: [0x41,0x00,0x23,0x9e]
; CHECK: ucvtf s1, x2, ; CHECK: ucvtf d1, x2 ; encoding: [0x41,0x00,0x63,0x9e]
; CHECK: ucvtf d1, x2,
;-----------------------------------------------------------------------------
; Floating-point move
;-----------------------------------------------------------------------------
fmov h1, w2
fmov w1, h2
fmov h1, x2
fmov x1, h2
fmov s1, w2
fmov w1, s2
fmov d1, x2
fmov x1, d2
; FP16: fmov h1, w2 ; encoding: [0x41,0x00,0xe7,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h1, w2
; FP16: fmov w1, h2 ; encoding: [0x41,0x00,0xe6,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov w1, h2
; FP16: fmov h1, x2 ; encoding: [0x41,0x00,0xe7,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h1, x2
; FP16: fmov x1, h2 ; encoding: [0x41,0x00,0xe6,0x9e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov x1, h2
; CHECK: fmov s1, w2 ; encoding: [0x41,0x00,0x27,0x1e]
; CHECK: fmov w1, s2 ; encoding: [0x41,0x00,0x26,0x1e]
; CHECK: fmov d1, x2 ; encoding: [0x41,0x00,0x67,0x9e]
; CHECK: fmov x1, d2 ; encoding: [0x41,0x00,0x66,0x9e]
fmov h1, fmov h1, fmov s1, fmov s1, fmov d1, fmov d1, fmov d1, fmov d1, fmov d3, fmov h2, fmov s2, fmov d2,
; FP16: fmov h1, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h1, ; FP16: fmov h1, ; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h1, ; CHECK: fmov s1, ; CHECK: fmov s1, ; CHECK: fmov d1, ; CHECK: fmov d1, ; CHECK: fmov d1, ; CHECK: fmov d1, ; CHECK: fmov d3, ; FP16: fmov h2, wzr ; encoding: [0xe2,0x03,0xe7,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h2, ; CHECK: fmov s2, wzr ; encoding: [0xe2,0x03,0x27,0x1e]
; CHECK: fmov d2, xzr ; encoding: [0xe2,0x03,0x67,0x9e]
fmov h1, h2
fmov s1, s2
fmov d1, d2
; FP16: fmov h1, h2 ; encoding: [0x41,0x40,0xe0,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: fmov h1, h2
; CHECK: fmov s1, s2 ; encoding: [0x41,0x40,0x20,0x1e]
; CHECK: fmov d1, d2 ; encoding: [0x41,0x40,0x60,0x1e]
fmov x2, v5.d[1]
fmov.d x9, v7[1]
fmov v1.d[1], x1
fmov.d v8[1], x6
; CHECK: fmov.d x2, v5[1] ; encoding: [0xa2,0x00,0xae,0x9e]
; CHECK: fmov.d x9, v7[1] ; encoding: [0xe9,0x00,0xae,0x9e]
; CHECK: fmov.d v1[1], x1 ; encoding: [0x21,0x00,0xaf,0x9e]
; CHECK: fmov.d v8[1], x6 ; encoding: [0xc8,0x00,0xaf,0x9e]
;-----------------------------------------------------------------------------
; Floating-point round to integral
;-----------------------------------------------------------------------------
frinta h1, h2
frinta s1, s2
frinta d1, d2
; FP16: frinta h1, h2 ; encoding: [0x41,0x40,0xe6,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frinta h1, h2
; CHECK: frinta s1, s2 ; encoding: [0x41,0x40,0x26,0x1e]
; CHECK: frinta d1, d2 ; encoding: [0x41,0x40,0x66,0x1e]
frinti h1, h2
frinti s1, s2
frinti d1, d2
; FP16: frinti h1, h2 ; encoding: [0x41,0xc0,0xe7,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frinti h1, h2
; CHECK: frinti s1, s2 ; encoding: [0x41,0xc0,0x27,0x1e]
; CHECK: frinti d1, d2 ; encoding: [0x41,0xc0,0x67,0x1e]
frintm h1, h2
frintm s1, s2
frintm d1, d2
; FP16: frintm h1, h2 ; encoding: [0x41,0x40,0xe5,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frintm h1, h2
; CHECK: frintm s1, s2 ; encoding: [0x41,0x40,0x25,0x1e]
; CHECK: frintm d1, d2 ; encoding: [0x41,0x40,0x65,0x1e]
frintn h1, h2
frintn s1, s2
frintn d1, d2
; FP16: frintn h1, h2 ; encoding: [0x41,0x40,0xe4,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frintn h1, h2
; CHECK: frintn s1, s2 ; encoding: [0x41,0x40,0x24,0x1e]
; CHECK: frintn d1, d2 ; encoding: [0x41,0x40,0x64,0x1e]
frintp h1, h2
frintp s1, s2
frintp d1, d2
; FP16: frintp h1, h2 ; encoding: [0x41,0xc0,0xe4,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frintp h1, h2
; CHECK: frintp s1, s2 ; encoding: [0x41,0xc0,0x24,0x1e]
; CHECK: frintp d1, d2 ; encoding: [0x41,0xc0,0x64,0x1e]
frintx h1, h2
frintx s1, s2
frintx d1, d2
; FP16: frintx h1, h2 ; encoding: [0x41,0x40,0xe7,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frintx h1, h2
; CHECK: frintx s1, s2 ; encoding: [0x41,0x40,0x27,0x1e]
; CHECK: frintx d1, d2 ; encoding: [0x41,0x40,0x67,0x1e]
frintz h1, h2
frintz s1, s2
frintz d1, d2
; FP16: frintz h1, h2 ; encoding: [0x41,0xc0,0xe5,0x1e]
; NO-FP16: error: instruction requires:
; NO-FP16-NEXT: frintz h1, h2
; CHECK: frintz s1, s2 ; encoding: [0x41,0xc0,0x25,0x1e]
; CHECK: frintz d1, d2 ; encoding: [0x41,0xc0,0x65,0x1e]
cmhs d0, d0, d0
cmtst d0, d0, d0
; CHECK: cmhs d0, d0, d0 ; encoding: [0x00,0x3c,0xe0,0x7e]
; CHECK: cmtst d0, d0, d0 ; encoding: [0x00,0x8c,0xe0,0x5e]
;-----------------------------------------------------------------------------
; Floating-point extract and narrow
;-----------------------------------------------------------------------------
sqxtn b4, h2
sqxtn h2, s3
sqxtn s9, d2
; CHECK: sqxtn b4, h2 ; encoding: [0x44,0x48,0x21,0x5e]
; CHECK: sqxtn h2, s3 ; encoding: [0x62,0x48,0x61,0x5e]
; CHECK: sqxtn s9, d2 ; encoding: [0x49,0x48,0xa1,0x5e]
sqxtun b4, h2
sqxtun h2, s3
sqxtun s9, d2
; CHECK: sqxtun b4, h2 ; encoding: [0x44,0x28,0x21,0x7e]
; CHECK: sqxtun h2, s3 ; encoding: [0x62,0x28,0x61,0x7e]
; CHECK: sqxtun s9, d2 ; encoding: [0x49,0x28,0xa1,0x7e]
uqxtn b4, h2
uqxtn h2, s3
uqxtn s9, d2
; CHECK: uqxtn b4, h2 ; encoding: [0x44,0x48,0x21,0x7e]
; CHECK: uqxtn h2, s3 ; encoding: [0x62,0x48,0x61,0x7e]
; CHECK: uqxtn s9, d2 ; encoding: [0x49,0x48,0xa1,0x7e]