| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 #import("../../../lib/compiler/implementation/ssa/ssa.dart"); |
| 6 #import("../../../lib/compiler/implementation/leg.dart"); |
| 7 |
| 8 Value instructionValue = new InstructionValue(new HReturn(null)); |
| 9 Value lengthValue = new LengthValue(new HReturn(null)); |
| 10 |
| 11 Range createSingleRange(Value value) => new Range(value, value); |
| 12 Range createSingleIntRange(int value) => createSingleRange(new IntValue(value)); |
| 13 Range createSingleInstructionRange() => createSingleRange(instructionValue); |
| 14 Range createSingleLengthRange() => createSingleRange(lengthValue); |
| 15 Range createIntRange(int lower, int upper) { |
| 16 return new Range(new IntValue(lower), new IntValue(upper)); |
| 17 } |
| 18 Range createLengthRange(int lower) { |
| 19 return new Range(new IntValue(lower), lengthValue); |
| 20 } |
| 21 Range createInstructionRange(int lower) { |
| 22 return new Range(new IntValue(lower), instructionValue); |
| 23 } |
| 24 |
| 25 Range instruction = createSingleInstructionRange(); |
| 26 Range FF = createSingleIntRange(0xFF); |
| 27 Range FA = createSingleIntRange(0xFA); |
| 28 Range nFF = createSingleIntRange(-0xFF); |
| 29 Range length = createSingleLengthRange(); |
| 30 Range _FA_FF = createIntRange(0xFA, 0xFF); |
| 31 Range _0_FF = createIntRange(0, 0xFF); |
| 32 Range _nFF_FF = createIntRange(-0xFF, 0xFF); |
| 33 Range _nFF_0 = createIntRange(-0xFF, 0); |
| 34 Range _0_length = createLengthRange(0); |
| 35 Range _0_instruction = createInstructionRange(0); |
| 36 |
| 37 checkAndRange(Range one, Range two, lower, upper) { |
| 38 if (lower is num) lower = new IntValue(lower); |
| 39 if (upper is num) upper = new IntValue(upper); |
| 40 Range range = new Range(lower, upper); |
| 41 Expect.equals(range, one & two); |
| 42 } |
| 43 |
| 44 checkSubRange(Range one, Range two, [lower, upper]) { |
| 45 if (lower == null) { |
| 46 lower = new OperationValue(one.lower, two.upper, const SubtractOperation()); |
| 47 } else if (lower is num) { |
| 48 lower = new IntValue(lower); |
| 49 } |
| 50 if (upper == null) { |
| 51 upper = new OperationValue(one.upper, two.lower, const SubtractOperation()); |
| 52 } else if (upper is num) { |
| 53 upper = new IntValue(upper); |
| 54 } |
| 55 |
| 56 Expect.equals(new Range(lower, upper), one - two); |
| 57 } |
| 58 |
| 59 testAnd() { |
| 60 checkAndRange( |
| 61 instruction, instruction, const MinIntValue(), const MaxIntValue()); |
| 62 checkAndRange(instruction, FF, 0, 0xFF); |
| 63 checkAndRange(instruction, FA, 0, 0xFA); |
| 64 checkAndRange(instruction, nFF, const MinIntValue(), const MaxIntValue()); |
| 65 checkAndRange(instruction, length, 0, length.upper); |
| 66 checkAndRange(instruction, _FA_FF, 0, 0xFF); |
| 67 checkAndRange(instruction, _0_FF, 0, 0xFF); |
| 68 checkAndRange(instruction, _nFF_FF, const MinIntValue(), const MaxIntValue()); |
| 69 checkAndRange(instruction, _nFF_0, const MinIntValue(), const MaxIntValue()); |
| 70 checkAndRange(instruction, _0_length, 0, _0_length.upper); |
| 71 checkAndRange(instruction, _0_instruction, 0, _0_instruction.upper); |
| 72 |
| 73 checkAndRange(length, FF, 0, 0xFF); |
| 74 checkAndRange(length, FA, 0, 0xFA); |
| 75 checkAndRange(length, nFF, 0, length.upper); |
| 76 checkAndRange(length, length, 0, length.upper); |
| 77 checkAndRange(length, _FA_FF, 0, 0xFF); |
| 78 checkAndRange(length, _0_FF, 0, 0xFF); |
| 79 checkAndRange(length, _nFF_FF, 0, length.upper); |
| 80 checkAndRange(length, _nFF_0, 0, length.upper); |
| 81 checkAndRange(length, _0_length, 0, length.upper); |
| 82 checkAndRange(length, _0_instruction, 0, const MaxIntValue()); |
| 83 |
| 84 checkAndRange(FF, FF, 0xFF, 0xFF); |
| 85 checkAndRange(FF, FA, 0xFA, 0xFA); |
| 86 checkAndRange(FF, nFF, 1, 1); |
| 87 checkAndRange(FF, length, 0, 0xFF); |
| 88 checkAndRange(FF, _FA_FF, 0, 0xFF); |
| 89 checkAndRange(FF, _0_FF, 0, 0xFF); |
| 90 checkAndRange(FF, _nFF_FF, 0, 0xFF); |
| 91 checkAndRange(FF, _nFF_0, 0, 0xFF); |
| 92 checkAndRange(FF, _0_length, 0, 0xFF); |
| 93 checkAndRange(FF, _0_instruction, 0, 0xFF); |
| 94 |
| 95 checkAndRange(FA, FF, 0xFA, 0xFA); |
| 96 checkAndRange(FA, FA, 0xFA, 0xFA); |
| 97 checkAndRange(FA, nFF, 0, 0); |
| 98 checkAndRange(FA, length, 0, 0xFA); |
| 99 checkAndRange(FA, _FA_FF, 0, 0xFA); |
| 100 checkAndRange(FA, _0_FF, 0, 0xFA); |
| 101 checkAndRange(FA, _nFF_FF, 0, 0xFA); |
| 102 checkAndRange(FA, _nFF_0, 0, 0xFA); |
| 103 checkAndRange(FA, _0_length, 0, 0xFA); |
| 104 checkAndRange(FA, _0_instruction, 0, 0xFA); |
| 105 |
| 106 checkAndRange(nFF, FF, 1, 1); |
| 107 checkAndRange(nFF, FA, 0, 0); |
| 108 checkAndRange(nFF, nFF, -0xFF, -0xFF); |
| 109 checkAndRange(nFF, length, 0, length.upper); |
| 110 checkAndRange(nFF, _FA_FF, 0, 0xFF); |
| 111 checkAndRange(nFF, _0_FF, 0, 0xFF); |
| 112 checkAndRange(nFF, _nFF_FF, const MinIntValue(), const MaxIntValue()); |
| 113 checkAndRange(nFF, _nFF_0, const MinIntValue(), const MaxIntValue()); |
| 114 checkAndRange(nFF, _0_length, 0, _0_length.upper); |
| 115 checkAndRange(nFF, _0_instruction, 0, _0_instruction.upper); |
| 116 |
| 117 checkAndRange(_FA_FF, FF, 0, 0xFF); |
| 118 checkAndRange(_FA_FF, FA, 0, 0xFA); |
| 119 checkAndRange(_FA_FF, nFF, 0, 0xFF); |
| 120 checkAndRange(_FA_FF, length, 0, 0xFF); |
| 121 checkAndRange(_FA_FF, _FA_FF, 0, 0xFF); |
| 122 checkAndRange(_FA_FF, _0_FF, 0, 0xFF); |
| 123 checkAndRange(_FA_FF, _nFF_FF, 0, 0xFF); |
| 124 checkAndRange(_FA_FF, _nFF_0, 0, 0xFF); |
| 125 checkAndRange(_FA_FF, _0_length, 0, 0xFF); |
| 126 checkAndRange(_FA_FF, _0_instruction, 0, 0xFF); |
| 127 |
| 128 checkAndRange(_0_FF, FF, 0, 0xFF); |
| 129 checkAndRange(_0_FF, FA, 0, 0xFA); |
| 130 checkAndRange(_0_FF, nFF, 0, 0xFF); |
| 131 checkAndRange(_0_FF, length, 0, 0xFF); |
| 132 checkAndRange(_0_FF, _FA_FF, 0, 0xFF); |
| 133 checkAndRange(_0_FF, _0_FF, 0, 0xFF); |
| 134 checkAndRange(_0_FF, _nFF_FF, 0, 0xFF); |
| 135 checkAndRange(_0_FF, _nFF_0, 0, 0xFF); |
| 136 checkAndRange(_0_FF, _0_length, 0, 0xFF); |
| 137 checkAndRange(_0_FF, _0_instruction, 0, 0xFF); |
| 138 |
| 139 checkAndRange(_nFF_FF, FF, 0, 0xFF); |
| 140 checkAndRange(_nFF_FF, FA, 0, 0xFA); |
| 141 checkAndRange(_nFF_FF, nFF, const MinIntValue(), const MaxIntValue()); |
| 142 checkAndRange(_nFF_FF, length, 0, length.upper); |
| 143 checkAndRange(_nFF_FF, _FA_FF, 0, 0xFF); |
| 144 checkAndRange(_nFF_FF, _0_FF, 0, 0xFF); |
| 145 checkAndRange(_nFF_FF, _nFF_FF, const MinIntValue(), const MaxIntValue()); |
| 146 checkAndRange(_nFF_FF, _nFF_0, const MinIntValue(), const MaxIntValue()); |
| 147 checkAndRange(_nFF_FF, _0_length, 0, _0_length.upper); |
| 148 checkAndRange(_nFF_FF, _0_instruction, 0, _0_instruction.upper); |
| 149 |
| 150 checkAndRange(_nFF_0, FF, 0, 0xFF); |
| 151 checkAndRange(_nFF_0, FA, 0, 0xFA); |
| 152 checkAndRange(_nFF_0, nFF, const MinIntValue(), const MaxIntValue()); |
| 153 checkAndRange(_nFF_0, length, 0, length.upper); |
| 154 checkAndRange(_nFF_0, _FA_FF, 0, 0xFF); |
| 155 checkAndRange(_nFF_0, _0_FF, 0, 0xFF); |
| 156 checkAndRange(_nFF_0, _nFF_FF, const MinIntValue(), const MaxIntValue()); |
| 157 checkAndRange(_nFF_0, _nFF_0, const MinIntValue(), const MaxIntValue()); |
| 158 checkAndRange(_nFF_0, _0_length, 0, _0_length.upper); |
| 159 checkAndRange(_nFF_0, _0_instruction, 0, _0_instruction.upper); |
| 160 |
| 161 checkAndRange(_0_length, FF, 0, 0xFF); |
| 162 checkAndRange(_0_length, FA, 0, 0xFA); |
| 163 checkAndRange(_0_length, nFF, 0, _0_length.upper); |
| 164 checkAndRange(_0_length, length, 0, length.upper); |
| 165 checkAndRange(_0_length, _FA_FF, 0, 0xFF); |
| 166 checkAndRange(_0_length, _0_FF, 0, 0xFF); |
| 167 checkAndRange(_0_length, _nFF_FF, 0, _0_length.upper); |
| 168 checkAndRange(_0_length, _nFF_0, 0, _0_length.upper); |
| 169 checkAndRange(_0_length, _0_length, 0, _0_length.upper); |
| 170 checkAndRange(_0_length, _0_instruction, 0, const MaxIntValue()); |
| 171 |
| 172 checkAndRange(_0_instruction, FF, 0, 0xFF); |
| 173 checkAndRange(_0_instruction, FA, 0, 0xFA); |
| 174 checkAndRange(_0_instruction, nFF, 0, _0_instruction.upper); |
| 175 checkAndRange(_0_instruction, length, 0, const MaxIntValue()); |
| 176 checkAndRange(_0_instruction, _FA_FF, 0, 0xFF); |
| 177 checkAndRange(_0_instruction, _0_FF, 0, 0xFF); |
| 178 checkAndRange(_0_instruction, _nFF_FF, 0, _0_instruction.upper); |
| 179 checkAndRange(_0_instruction, _nFF_0, 0, _0_instruction.upper); |
| 180 checkAndRange(_0_instruction, _0_length, 0, const MaxIntValue()); |
| 181 checkAndRange(_0_instruction, _0_instruction, 0, _0_instruction.upper); |
| 182 } |
| 183 |
| 184 testSub() { |
| 185 checkSubRange(instruction, instruction, 0, 0); |
| 186 checkSubRange(instruction, FF); |
| 187 checkSubRange(instruction, FA); |
| 188 checkSubRange(instruction, nFF); |
| 189 checkSubRange(instruction, length); |
| 190 checkSubRange(instruction, _FA_FF); |
| 191 checkSubRange(instruction, _0_FF, null, instruction.upper); |
| 192 checkSubRange(instruction, _nFF_FF); |
| 193 checkSubRange(instruction, _nFF_0, instruction.lower, null); |
| 194 checkSubRange(instruction, _0_length, null, instruction.upper); |
| 195 checkSubRange(instruction, _0_instruction, 0, _0_instruction.upper); |
| 196 |
| 197 checkSubRange(length, FF); |
| 198 checkSubRange(length, FA); |
| 199 checkSubRange(length, nFF); |
| 200 checkSubRange(length, length, 0, 0); |
| 201 checkSubRange(length, _FA_FF); |
| 202 checkSubRange(length, _0_FF, null, length.upper); |
| 203 checkSubRange(length, _nFF_FF); |
| 204 checkSubRange(length, _nFF_0, length.lower, null); |
| 205 checkSubRange(length, _0_length, 0, length.upper); |
| 206 checkSubRange(length, _0_instruction, null, length.upper); |
| 207 |
| 208 checkSubRange(FF, FF, 0, 0); |
| 209 checkSubRange(FF, FA, 0xFF - 0xFA, 0xFF - 0xFA); |
| 210 checkSubRange(FF, nFF, 0xFF + 0xFF, 0xFF + 0xFF); |
| 211 checkSubRange(FF, length); |
| 212 checkSubRange(FF, _FA_FF, 0, 0xFF - 0xFA); |
| 213 checkSubRange(FF, _0_FF, 0, 0xFF); |
| 214 checkSubRange(FF, _nFF_FF, 0, 0xFF + 0xFF); |
| 215 checkSubRange(FF, _nFF_0, 0xFF, 0xFF + 0xFF); |
| 216 checkSubRange(FF, _0_length, null, 0xFF); |
| 217 checkSubRange(FF, _0_instruction, null, 0xFF); |
| 218 |
| 219 checkSubRange(FA, FF, 0xFA - 0xFF, 0xFA - 0xFF); |
| 220 checkSubRange(FA, FA, 0, 0); |
| 221 checkSubRange(FA, nFF, 0xFA + 0xFF, 0xFA + 0xFF); |
| 222 checkSubRange(FA, length); |
| 223 checkSubRange(FA, _FA_FF, 0xFA - 0xFF, 0); |
| 224 checkSubRange(FA, _0_FF, 0xFA - 0xFF, 0xFA); |
| 225 checkSubRange(FA, _nFF_FF, 0xFA - 0xFF, 0xFA + 0xFF); |
| 226 checkSubRange(FA, _nFF_0, 0xFA, 0xFA + 0xFF); |
| 227 checkSubRange(FA, _0_length, null, 0xFA); |
| 228 checkSubRange(FA, _0_instruction, null, 0xFA); |
| 229 |
| 230 checkSubRange(nFF, FF, -0xFF - 0xFF, -0xFF - 0xFF); |
| 231 checkSubRange(nFF, FA, -0xFF - 0xFA, -0xFF - 0xFA); |
| 232 checkSubRange(nFF, nFF, 0, 0); |
| 233 checkSubRange(nFF, length); |
| 234 checkSubRange(nFF, _FA_FF, -0xFF - 0xFF, -0xFF - 0xFA); |
| 235 checkSubRange(nFF, _0_FF, -0xFF - 0xFF, -0xFF); |
| 236 checkSubRange(nFF, _nFF_FF, -0xFF - 0xFF, 0); |
| 237 checkSubRange(nFF, _nFF_0, -0xFF, 0); |
| 238 checkSubRange(nFF, _0_length, null, -0xFF); |
| 239 checkSubRange(nFF, _0_instruction, null, -0xFF); |
| 240 |
| 241 checkSubRange(_FA_FF, FF, 0xFA - 0xFF, 0); |
| 242 checkSubRange(_FA_FF, FA, 0, 0xFF - 0xFA); |
| 243 checkSubRange(_FA_FF, nFF, 0xFA + 0xFF, 0xFF + 0xFF); |
| 244 checkSubRange(_FA_FF, length); |
| 245 checkSubRange(_FA_FF, _FA_FF, 0xFA - 0xFF, 0xFF - 0xFA); |
| 246 checkSubRange(_FA_FF, _0_FF, 0xFA - 0xFF, 0xFF); |
| 247 checkSubRange(_FA_FF, _nFF_FF, 0xFA - 0xFF, 0xFF + 0xFF); |
| 248 checkSubRange(_FA_FF, _nFF_0, 0xFA, 0xFF + 0xFF); |
| 249 checkSubRange(_FA_FF, _0_length, null, 0xFF); |
| 250 checkSubRange(_FA_FF, _0_instruction, null, 0xFF); |
| 251 |
| 252 checkSubRange(_0_FF, FF, -0xFF, 0); |
| 253 checkSubRange(_0_FF, FA, -0xFA, 0xFF - 0xFA); |
| 254 checkSubRange(_0_FF, nFF, 0xFF, 0xFF + 0xFF); |
| 255 checkSubRange(_0_FF, length); |
| 256 checkSubRange(_0_FF, _FA_FF, -0xFF, 0xFF - 0xFA); |
| 257 checkSubRange(_0_FF, _0_FF, -0xFF, 0xFF); |
| 258 checkSubRange(_0_FF, _nFF_FF, -0xFF, 0xFF + 0xFF); |
| 259 checkSubRange(_0_FF, _nFF_0, 0, 0xFF + 0xFF); |
| 260 checkSubRange(_0_FF, _0_length, null, 0xFF); |
| 261 checkSubRange(_0_FF, _0_instruction, null, 0xFF); |
| 262 |
| 263 checkSubRange(_nFF_FF, FF, -0xFF - 0xFF, 0); |
| 264 checkSubRange(_nFF_FF, FA, -0xFF - 0xFA, 0xFF - 0xFA); |
| 265 checkSubRange(_nFF_FF, nFF, 0, 0xFF + 0xFF); |
| 266 checkSubRange(_nFF_FF, length); |
| 267 checkSubRange(_nFF_FF, _FA_FF, -0xFF - 0xFF, 0xFF - 0xFA); |
| 268 checkSubRange(_nFF_FF, _0_FF, -0xFF - 0xFF, 0xFF); |
| 269 checkSubRange(_nFF_FF, _nFF_FF, -0xFF - 0xFF, 0xFF + 0xFF); |
| 270 checkSubRange(_nFF_FF, _nFF_0, -0xFF, 0xFF + 0xFF); |
| 271 checkSubRange(_nFF_FF, _0_length, null, 0xFF); |
| 272 checkSubRange(_nFF_FF, _0_instruction, null, 0xFF); |
| 273 |
| 274 checkSubRange(_nFF_0, FF, -0xFF - 0xFF, -0xFF); |
| 275 checkSubRange(_nFF_0, FA, -0xFF - 0xFA, -0xFA); |
| 276 checkSubRange(_nFF_0, nFF, 0, 0xFF); |
| 277 checkSubRange(_nFF_0, length); |
| 278 checkSubRange(_nFF_0, _FA_FF, -0xFF - 0xFF, -0xFA); |
| 279 checkSubRange(_nFF_0, _0_FF, -0xFF - 0xFF, 0); |
| 280 checkSubRange(_nFF_0, _nFF_FF, -0xFF - 0xFF, 0xFF); |
| 281 checkSubRange(_nFF_0, _nFF_0, -0xFF, 0xFF); |
| 282 checkSubRange(_nFF_0, _0_length, null, 0); |
| 283 checkSubRange(_nFF_0, _0_instruction, null, 0); |
| 284 |
| 285 checkSubRange(_0_length, FF, -0xFF, null); |
| 286 checkSubRange(_0_length, FA, -0xFA, null); |
| 287 checkSubRange(_0_length, nFF, 0xFF, null); |
| 288 checkSubRange(_0_length, length, null, 0); |
| 289 checkSubRange(_0_length, _FA_FF, -0xFF, null); |
| 290 checkSubRange(_0_length, _0_FF, -0xFF, _0_length.upper); |
| 291 checkSubRange(_0_length, _nFF_FF, -0xFF, null); |
| 292 checkSubRange(_0_length, _nFF_0, 0, null); |
| 293 checkSubRange(_0_length, _0_length, null, _0_length.upper); |
| 294 checkSubRange(_0_length, _0_instruction, null, _0_length.upper); |
| 295 |
| 296 checkSubRange(_0_instruction, FF, -0xFF, null); |
| 297 checkSubRange(_0_instruction, FA, -0xFA, null); |
| 298 checkSubRange(_0_instruction, nFF, 0xFF, null); |
| 299 checkSubRange(_0_instruction, length); |
| 300 checkSubRange(_0_instruction, _FA_FF, -0xFF, null); |
| 301 checkSubRange(_0_instruction, _0_FF, -0xFF, _0_instruction.upper); |
| 302 checkSubRange(_0_instruction, _nFF_FF, -0xFF, null); |
| 303 checkSubRange(_0_instruction, _nFF_0, 0, null); |
| 304 checkSubRange(_0_instruction, _0_length, null, _0_instruction.upper); |
| 305 checkSubRange(_0_instruction, _0_instruction, null, _0_instruction.upper); |
| 306 } |
| 307 |
| 308 main() { |
| 309 HInstruction.idCounter = 0; |
| 310 testAnd(); |
| 311 testSub(); |
| 312 } |
| OLD | NEW |