1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s -check-prefixes=ALL,GP32 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s -check-prefixes=ALL,GP32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \ 4*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP32 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \ 6*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP32 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \ 8*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP32 9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \ 10*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP32 11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \ 12*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 13*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \ 14*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 15*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \ 16*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 17*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \ 18*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 19*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \ 20*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 21*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \ 22*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 23*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \ 24*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,GP64 25*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \ 26*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,MM,MM32 27*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \ 28*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,MM,MM32 29*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips64r6 -target-abi n64 -mattr=+micromips | FileCheck %s \ 30*9880d681SAndroid Build Coastguard Worker; RUN: -check-prefixes=ALL,MM,MM64 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine signext i1 @not_i1(i1 signext %a) { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i1: 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker ; GP64: not $2, $4 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker ; MM: not16 $2, $4 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker %r = xor i1 %a, -1 43*9880d681SAndroid Build Coastguard Worker ret i1 %r 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine signext i8 @not_i8(i8 signext %a) { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i8: 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker ; GP64: not $2, $4 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker ; MM: not16 $2, $4 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker %r = xor i8 %a, -1 57*9880d681SAndroid Build Coastguard Worker ret i8 %r 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine signext i16 @not_i16(i16 signext %a) { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i16: 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker ; GP64: not $2, $4 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker ; MM: not16 $2, $4 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker %r = xor i16 %a, -1 71*9880d681SAndroid Build Coastguard Worker ret i16 %r 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine signext i32 @not_i32(i32 signext %a) { 75*9880d681SAndroid Build Coastguard Workerentry: 76*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i32: 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker ; GP64: not $2, $4 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker ; MM: not16 $2, $4 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker %r = xor i32 %a, -1 85*9880d681SAndroid Build Coastguard Worker ret i32 %r 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine signext i64 @not_i64(i64 signext %a) { 89*9880d681SAndroid Build Coastguard Workerentry: 90*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i64: 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 93*9880d681SAndroid Build Coastguard Worker ; GP32: not $3, $5 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker ; GP64: daddiu $[[T0:[0-9]+]], $zero, -1 96*9880d681SAndroid Build Coastguard Worker ; GP64: xor $2, $4, $[[T0]] 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $2, $4 99*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $3, $5 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker ; MM64: daddiu $[[T0:[0-9]+]], $zero, -1 102*9880d681SAndroid Build Coastguard Worker ; MM64: xor $2, $4, $[[T0]] 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker %r = xor i64 %a, -1 105*9880d681SAndroid Build Coastguard Worker ret i64 %r 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine signext i128 @not_i128(i128 signext %a) { 109*9880d681SAndroid Build Coastguard Workerentry: 110*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: not_i128: 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker ; GP32: not $2, $4 113*9880d681SAndroid Build Coastguard Worker ; GP32: not $3, $5 114*9880d681SAndroid Build Coastguard Worker ; GP32: not $4, $6 115*9880d681SAndroid Build Coastguard Worker ; GP32: not $5, $7 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker ; GP64: daddiu $[[T0:[0-9]+]], $zero, -1 118*9880d681SAndroid Build Coastguard Worker ; GP64: xor $2, $4, $[[T0]] 119*9880d681SAndroid Build Coastguard Worker ; GP64: xor $3, $5, $[[T0]] 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $2, $4 122*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $3, $5 123*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $4, $6 124*9880d681SAndroid Build Coastguard Worker ; MM32: not16 $5, $7 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker ; MM64: daddiu $[[T0:[0-9]+]], $zero, -1 127*9880d681SAndroid Build Coastguard Worker ; MM64: xor $2, $4, $[[T0]] 128*9880d681SAndroid Build Coastguard Worker ; MM64: xor $3, $5, $[[T0]] 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker %r = xor i128 %a, -1 131*9880d681SAndroid Build Coastguard Worker ret i128 %r 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdefine signext i1 @nor_i1(i1 signext %a, i1 signext %b) { 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i1: 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker ; ALL: nor $2, $5, $4 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker %or = or i1 %b, %a 141*9880d681SAndroid Build Coastguard Worker %r = xor i1 %or, -1 142*9880d681SAndroid Build Coastguard Worker ret i1 %r 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdefine signext i8 @nor_i8(i8 signext %a, i8 signext %b) { 146*9880d681SAndroid Build Coastguard Workerentry: 147*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i8: 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker ; ALL: nor $2, $5, $4 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker %or = or i8 %b, %a 152*9880d681SAndroid Build Coastguard Worker %r = xor i8 %or, -1 153*9880d681SAndroid Build Coastguard Worker ret i8 %r 154*9880d681SAndroid Build Coastguard Worker} 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine signext i16 @nor_i16(i16 signext %a, i16 signext %b) { 157*9880d681SAndroid Build Coastguard Workerentry: 158*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i16: 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker ; ALL: nor $2, $5, $4 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker %or = or i16 %b, %a 163*9880d681SAndroid Build Coastguard Worker %r = xor i16 %or, -1 164*9880d681SAndroid Build Coastguard Worker ret i16 %r 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine signext i32 @nor_i32(i32 signext %a, i32 signext %b) { 168*9880d681SAndroid Build Coastguard Workerentry: 169*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i32: 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker ; GP32: nor $2, $5, $4 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker ; GP64: or $[[T0:[0-9]+]], $5, $4 174*9880d681SAndroid Build Coastguard Worker ; GP64: sll $[[T1:[0-9]+]], $[[T0]], 0 175*9880d681SAndroid Build Coastguard Worker ; GP64: not $2, $[[T1]] 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker ; MM32: nor $2, $5, $4 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker ; MM64: or $[[T0:[0-9]+]], $5, $4 180*9880d681SAndroid Build Coastguard Worker ; MM64: sll $[[T1:[0-9]+]], $[[T0]], 0 181*9880d681SAndroid Build Coastguard Worker ; MM64: not16 $2, $[[T1]] 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker %or = or i32 %b, %a 184*9880d681SAndroid Build Coastguard Worker %r = xor i32 %or, -1 185*9880d681SAndroid Build Coastguard Worker ret i32 %r 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine signext i64 @nor_i64(i64 signext %a, i64 signext %b) { 190*9880d681SAndroid Build Coastguard Workerentry: 191*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i64: 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker ; GP32: nor $2, $6, $4 194*9880d681SAndroid Build Coastguard Worker ; GP32: nor $3, $7, $5 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker ; GP64: nor $2, $5, $4 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Worker ; MM32: nor $2, $6, $4 199*9880d681SAndroid Build Coastguard Worker ; MM32: nor $3, $7, $5 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker ; MM64: nor $2, $5, $4 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker %or = or i64 %b, %a 204*9880d681SAndroid Build Coastguard Worker %r = xor i64 %or, -1 205*9880d681SAndroid Build Coastguard Worker ret i64 %r 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Workerdefine signext i128 @nor_i128(i128 signext %a, i128 signext %b) { 209*9880d681SAndroid Build Coastguard Workerentry: 210*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: nor_i128: 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker ; GP32: lw $[[T0:[0-9]+]], 24($sp) 213*9880d681SAndroid Build Coastguard Worker ; GP32: lw $[[T1:[0-9]+]], 20($sp) 214*9880d681SAndroid Build Coastguard Worker ; GP32: lw $[[T2:[0-9]+]], 16($sp) 215*9880d681SAndroid Build Coastguard Worker ; GP32: nor $2, $[[T2]], $4 216*9880d681SAndroid Build Coastguard Worker ; GP32: nor $3, $[[T1]], $5 217*9880d681SAndroid Build Coastguard Worker ; GP32: nor $4, $[[T0]], $6 218*9880d681SAndroid Build Coastguard Worker ; GP32: lw $[[T3:[0-9]+]], 28($sp) 219*9880d681SAndroid Build Coastguard Worker ; GP32: nor $5, $[[T3]], $7 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker ; GP64: nor $2, $6, $4 222*9880d681SAndroid Build Coastguard Worker ; GP64: nor $3, $7, $5 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Worker ; MM32: lw $[[T0:[0-9]+]], 20($sp) 225*9880d681SAndroid Build Coastguard Worker ; MM32: lw $[[T1:[0-9]+]], 16($sp) 226*9880d681SAndroid Build Coastguard Worker ; MM32: nor $2, $[[T1]], $4 227*9880d681SAndroid Build Coastguard Worker ; MM32: nor $3, $[[T0]], $5 228*9880d681SAndroid Build Coastguard Worker ; MM32: lw $[[T2:[0-9]+]], 24($sp) 229*9880d681SAndroid Build Coastguard Worker ; MM32: nor $4, $[[T2]], $6 230*9880d681SAndroid Build Coastguard Worker ; MM32: lw $[[T3:[0-9]+]], 28($sp) 231*9880d681SAndroid Build Coastguard Worker ; MM32: nor $5, $[[T3]], $7 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Worker ; MM64: nor $2, $6, $4 234*9880d681SAndroid Build Coastguard Worker ; MM64: nor $3, $7, $5 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Worker %or = or i128 %b, %a 237*9880d681SAndroid Build Coastguard Worker %r = xor i128 %or, -1 238*9880d681SAndroid Build Coastguard Worker ret i128 %r 239*9880d681SAndroid Build Coastguard Worker} 240