1*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker# Hexagon Programmer's Reference Manual 11.4 J 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker# Call subroutine 5*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 00 5a 6*9880d681SAndroid Build Coastguard Workercall 0 7*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 00 5d 8*9880d681SAndroid Build Coastguard Workerif (p3) call 0 9*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 20 5d 10*9880d681SAndroid Build Coastguard Workerif (!p3) call 0 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker# Compare and jump 13*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 89 11 14*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:nt 0 } 15*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 89 11 16*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:nt 0 } 17*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 89 11 18*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (p0.new) jump:nt 0 } 19*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 89 11 20*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:t 0 } 21*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 89 11 22*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:t 0 } 23*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 89 11 24*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (p0.new) jump:t 0 } 25*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 c9 11 26*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:nt 0 } 27*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 c9 11 28*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:nt 0 } 29*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 c9 11 30*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (!p0.new) jump:nt 0 } 31*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 c9 11 32*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:t 0 } 33*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 c9 11 34*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:t 0 } 35*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 c9 11 36*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (!p0.new) jump:t 0 } 37*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 10 38*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (p0.new) jump:nt 0 } 39*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 10 40*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (p0.new) jump:t 0 } 41*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 10 42*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:nt 0 } 43*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 10 44*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:t 0 } 45*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 89 10 46*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (p0.new) jump:nt 0 } 47*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 89 10 48*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (p0.new) jump:t 0 } 49*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 c9 10 50*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:nt 0 } 51*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 c9 10 52*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:t 0 } 53*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 11 54*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:nt 0 } 55*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 11 56*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:t 0 } 57*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 11 58*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:nt 0 } 59*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 11 60*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:t 0 } 61*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 89 13 62*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:nt 0 } 63*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 89 13 64*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:nt 0 } 65*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 89 13 66*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (p1.new) jump:nt 0 } 67*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 89 13 68*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:t 0 } 69*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 89 13 70*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:t 0 } 71*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 89 13 72*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (p1.new) jump:t 0 } 73*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 c9 13 74*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:nt 0 } 75*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 c9 13 76*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:nt 0 } 77*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 c9 13 78*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (!p1.new) jump:nt 0 } 79*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 c9 13 80*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:t 0 } 81*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 c9 13 82*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:t 0 } 83*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 c9 13 84*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (!p1.new) jump:t 0 } 85*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 12 86*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (p1.new) jump:nt 0 } 87*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 12 88*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (p1.new) jump:t 0 } 89*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 12 90*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:nt 0 } 91*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 12 92*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:t 0 } 93*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 89 12 94*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (p1.new) jump:nt 0 } 95*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 89 12 96*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (p1.new) jump:t 0 } 97*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 c9 12 98*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:nt 0 } 99*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 c9 12 100*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:t 0 } 101*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 13 102*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:nt 0 } 103*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 13 104*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:t 0 } 105*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 13 106*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:nt 0 } 107*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 13 108*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:t 0 } 109*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 09 14 110*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (p0.new) jump:nt 0 } 111*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 09 14 112*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (p1.new) jump:nt 0 } 113*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 09 14 114*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (p0.new) jump:t 0 } 115*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 09 14 116*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (p1.new) jump:t 0 } 117*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 49 14 118*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:nt 0 } 119*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 49 14 120*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:nt 0 } 121*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 49 14 122*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:t 0 } 123*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 49 14 124*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:t 0 } 125*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 89 14 126*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (p0.new) jump:nt 0 } 127*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 89 14 128*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (p1.new) jump:nt 0 } 129*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 89 14 130*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (p0.new) jump:t 0 } 131*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 89 14 132*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (p1.new) jump:t 0 } 133*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd c9 14 134*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:nt 0 } 135*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd c9 14 136*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:nt 0 } 137*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed c9 14 138*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:t 0 } 139*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd c9 14 140*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:t 0 } 141*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 09 15 142*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:nt 0 } 143*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 09 15 144*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:nt 0 } 145*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 09 15 146*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:t 0 } 147*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 09 15 148*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:t 0 } 149*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 49 15 150*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:nt 0 } 151*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 49 15 152*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:nt 0 } 153*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 49 15 154*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:t 0 } 155*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 49 15 156*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:t 0 } 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker# Jump to address 159*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 00 58 160*9880d681SAndroid Build Coastguard Workerjump 0 161*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 00 5c 162*9880d681SAndroid Build Coastguard Workerif (p3) jump 0 163*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 20 5c 164*9880d681SAndroid Build Coastguard Workerif (!p3) jump 0 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker# Jump to address conditioned on new predicate 167*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85 168*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 cb 00 5c 169*9880d681SAndroid Build Coastguard Worker{ p3 = r5 170*9880d681SAndroid Build Coastguard Worker if (p3.new) jump:nt 0 } 171*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85 172*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 db 00 5c 173*9880d681SAndroid Build Coastguard Worker{ p3 = r5 174*9880d681SAndroid Build Coastguard Worker if (p3.new) jump:t 0 } 175*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85 176*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 cb 20 5c 177*9880d681SAndroid Build Coastguard Worker{ p3 = r5 178*9880d681SAndroid Build Coastguard Worker if (!p3.new) jump:nt 0 } 179*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85 180*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 db 20 5c 181*9880d681SAndroid Build Coastguard Worker{ p3 = r5 182*9880d681SAndroid Build Coastguard Worker if (!p3.new) jump:t 0 } 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker# Jump to address conditioned on register value 185*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 11 61 186*9880d681SAndroid Build Coastguard Workerif (r17!=#0) jump:nt 0 187*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 11 61 188*9880d681SAndroid Build Coastguard Workerif (r17!=#0) jump:t 0 189*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 51 61 190*9880d681SAndroid Build Coastguard Workerif (r17>=#0) jump:nt 0 191*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 51 61 192*9880d681SAndroid Build Coastguard Workerif (r17>=#0) jump:t 0 193*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 91 61 194*9880d681SAndroid Build Coastguard Workerif (r17==#0) jump:nt 0 195*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 91 61 196*9880d681SAndroid Build Coastguard Workerif (r17==#0) jump:t 0 197*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 d1 61 198*9880d681SAndroid Build Coastguard Workerif (r17<=#0) jump:nt 0 199*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 d1 61 200*9880d681SAndroid Build Coastguard Workerif (r17<=#0) jump:t 0 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker# Transfer and jump 203*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 16 204*9880d681SAndroid Build Coastguard Worker{ r17 = #21 ; jump 0} 205*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c9 0d 17 206*9880d681SAndroid Build Coastguard Worker{ r17 = r21 ; jump 0 } 207