1# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s 2# Hexagon Programmer's Reference Manual 11.10.4 XTYPE/FP 3 4# Floating point addition 5# CHECK: 11 df 15 eb 6r17 = sfadd(r21, r31) 7 8# Classify floating-point value 9# CHECK: 03 d5 f1 85 10p3 = sfclass(r17, #21) 11# CHECK: b3 c2 90 dc 12p3 = dfclass(r17:16, #21) 13 14# Compare floating-point value 15# CHECK: 03 d5 f1 c7 16p3 = sfcmp.ge(r17, r21) 17# CHECK: 23 d5 f1 c7 18p3 = sfcmp.uo(r17, r21) 19# CHECK: 63 d5 f1 c7 20p3 = sfcmp.eq(r17, r21) 21# CHECK: 83 d5 f1 c7 22p3 = sfcmp.gt(r17, r21) 23# CHECK: 03 d4 f0 d2 24p3 = dfcmp.eq(r17:16, r21:20) 25# CHECK: 23 d4 f0 d2 26p3 = dfcmp.gt(r17:16, r21:20) 27# CHECK: 43 d4 f0 d2 28p3 = dfcmp.ge(r17:16, r21:20) 29# CHECK: 63 d4 f0 d2 30p3 = dfcmp.uo(r17:16, r21:20) 31 32# Convert floating-point value to other format 33# CHECK: 10 c0 95 84 34r17:16 = convert_sf2df(r21) 35# CHECK: 31 c0 14 88 36r17 = convert_df2sf(r21:20) 37 38# Convert integer to floating-point value 39# CHECK: 50 c0 f4 80 40r17:16 = convert_ud2df(r21:20) 41# CHECK: 70 c0 f4 80 42r17:16 = convert_d2df(r21:20) 43# CHECK: 30 c0 95 84 44r17:16 = convert_uw2df(r21) 45# CHECK: 50 c0 95 84 46r17:16 = convert_w2df(r21) 47# CHECK: 31 c0 34 88 48r17 = convert_ud2sf(r21:20) 49# CHECK: 31 c0 54 88 50r17 = convert_d2sf(r21:20) 51# CHECK: 11 c0 35 8b 52r17 = convert_uw2sf(r21) 53# CHECK: 11 c0 55 8b 54r17 = convert_w2sf(r21) 55 56# Convert floating-point value to integer 57# CHECK: 10 c0 f4 80 58r17:16 = convert_df2d(r21:20) 59# CHECK: 30 c0 f4 80 60r17:16 = convert_df2ud(r21:20) 61# CHECK: d0 c0 f4 80 62r17:16 = convert_df2d(r21:20):chop 63# CHECK: f0 c0 f4 80 64r17:16 = convert_df2ud(r21:20):chop 65# CHECK: 70 c0 95 84 66r17:16 = convert_sf2ud(r21) 67# CHECK: 90 c0 95 84 68r17:16 = convert_sf2d(r21) 69# CHECK: b0 c0 95 84 70r17:16 = convert_sf2ud(r21):chop 71# CHECK: d0 c0 95 84 72r17:16 = convert_sf2d(r21):chop 73# CHECK: 31 c0 74 88 74r17 = convert_df2uw(r21:20) 75# CHECK: 31 c0 94 88 76r17 = convert_df2w(r21:20) 77# CHECK: 31 c0 b4 88 78r17 = convert_df2uw(r21:20):chop 79# CHECK: 31 c0 f4 88 80r17 = convert_df2w(r21:20):chop 81# CHECK: 11 c0 75 8b 82r17 = convert_sf2uw(r21) 83# CHECK: 31 c0 75 8b 84r17 = convert_sf2uw(r21):chop 85# CHECK: 11 c0 95 8b 86r17 = convert_sf2w(r21) 87# CHECK: 31 c0 95 8b 88r17 = convert_sf2w(r21):chop 89 90# Floating point extreme value assistance 91# CHECK: 11 c0 b5 8b 92r17 = sffixupr(r21) 93# CHECK: 11 df d5 eb 94r17 = sffixupn(r21, r31) 95# CHECK: 31 df d5 eb 96r17 = sffixupd(r21, r31) 97 98# Floating point fused multiply-add 99# CHECK: 91 df 15 ef 100r17 += sfmpy(r21, r31) 101# CHECK: b1 df 15 ef 102r17 -= sfmpy(r21, r31) 103 104# Floating point fused multiply-add with scaling 105# CHECK: f1 df 75 ef 106r17 += sfmpy(r21, r31, p3):scale 107 108# Floating point reciprocal square root approximation 109# CHECK: 71 c0 f5 8b 110r17, p3 = sfinvsqrta(r21) 111 112# Floating point fused multiply-add for library routines 113# CHECK: d1 df 15 ef 114r17 += sfmpy(r21, r31):lib 115# CHECK: f1 df 15 ef 116r17 -= sfmpy(r21, r31):lib 117 118# Create floating-point constant 119# CHECK: b1 c2 00 d6 120r17 = sfmake(#21):pos 121# CHECK: b1 c2 40 d6 122r17 = sfmake(#21):neg 123# CHECK: b0 c2 00 d9 124r17:16 = dfmake(#21):pos 125# CHECK: b0 c2 40 d9 126r17:16 = dfmake(#21):neg 127 128# Floating point maximum 129# CHECK: 11 df 95 eb 130r17 = sfmax(r21, r31) 131 132# Floating point minimum 133# CHECK: 31 df 95 eb 134r17 = sfmin(r21, r31) 135 136# Floating point multiply 137# CHECK: 11 df 55 eb 138r17 = sfmpy(r21, r31) 139 140# Floating point reciprocal approximation 141# CHECK: f1 df f5 eb 142r17, p3 = sfrecipa(r21, r31) 143 144# Floating point subtraction 145# CHECK: 31 df 15 eb 146r17 = sfsub(r21, r31) 147