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: