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