Mercurial > hg > truffle
comparison graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiKind.java @ 5456:a5e43a18ac52
added computation of array base offset and index scaling into CiKind and used it to remove a hard coded assumption in canonicalization of LoadIndexedNode
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 30 May 2012 18:34:11 +0200 |
parents | ab31310d4af9 |
children | d89b20486d87 |
comparison
equal
deleted
inserted
replaced
5455:271e83dcfcef | 5456:a5e43a18ac52 |
---|---|
342 | 342 |
343 public final char signatureChar() { | 343 public final char signatureChar() { |
344 return Character.toUpperCase(typeChar); | 344 return Character.toUpperCase(typeChar); |
345 } | 345 } |
346 | 346 |
347 public final int arrayBaseOffset() { | |
348 switch(this) { | |
349 case Boolean: | |
350 return Unsafe.ARRAY_BOOLEAN_BASE_OFFSET; | |
351 case Byte: | |
352 return Unsafe.ARRAY_BYTE_BASE_OFFSET; | |
353 case Char: | |
354 return Unsafe.ARRAY_CHAR_BASE_OFFSET; | |
355 case Short: | |
356 return Unsafe.ARRAY_SHORT_BASE_OFFSET; | |
357 case Int: | |
358 return Unsafe.ARRAY_INT_BASE_OFFSET; | |
359 case Long: | |
360 return Unsafe.ARRAY_LONG_BASE_OFFSET; | |
361 case Float: | |
362 return Unsafe.ARRAY_FLOAT_BASE_OFFSET; | |
363 case Double: | |
364 return Unsafe.ARRAY_DOUBLE_BASE_OFFSET; | |
365 case Object: | |
366 return Unsafe.ARRAY_OBJECT_BASE_OFFSET; | |
367 default: | |
368 assert false : "unexpected kind: " + this; | |
369 return -1; | |
370 } | |
371 } | |
372 | |
373 public final int arrayIndexScale() { | |
374 switch(this) { | |
375 case Boolean: | |
376 return Unsafe.ARRAY_BOOLEAN_INDEX_SCALE; | |
377 case Byte: | |
378 return Unsafe.ARRAY_BYTE_INDEX_SCALE; | |
379 case Char: | |
380 return Unsafe.ARRAY_CHAR_INDEX_SCALE; | |
381 case Short: | |
382 return Unsafe.ARRAY_SHORT_INDEX_SCALE; | |
383 case Int: | |
384 return Unsafe.ARRAY_INT_INDEX_SCALE; | |
385 case Long: | |
386 return Unsafe.ARRAY_LONG_INDEX_SCALE; | |
387 case Float: | |
388 return Unsafe.ARRAY_FLOAT_INDEX_SCALE; | |
389 case Double: | |
390 return Unsafe.ARRAY_DOUBLE_INDEX_SCALE; | |
391 case Object: | |
392 return Unsafe.ARRAY_OBJECT_INDEX_SCALE; | |
393 default: | |
394 assert false : "unexpected kind: " + this; | |
395 return -1; | |
396 } | |
397 } | |
398 | |
347 public CiConstant readUnsafeConstant(Object value, long displacement) { | 399 public CiConstant readUnsafeConstant(Object value, long displacement) { |
348 assert value != null; | 400 assert value != null; |
349 Unsafe u = Unsafe.getUnsafe(); | 401 Unsafe u = Unsafe.getUnsafe(); |
350 switch(this) { | 402 switch(this) { |
351 case Boolean: | 403 case Boolean: |