/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
#ifndef ByValInfo_h
#define ByValInfo_h
-#include <wtf/Platform.h>
-
#if ENABLE(JIT)
#include "ClassInfo.h"
JITDouble,
JITContiguous,
JITArrayStorage,
+ JITDirectArguments,
+ JITScopedArguments,
JITInt8Array,
JITInt16Array,
JITInt32Array,
}
}
+inline bool hasOptimizableIndexingForJSType(JSType type)
+{
+ switch (type) {
+ case DirectArgumentsType:
+ case ScopedArgumentsType:
+ return true;
+ default:
+ return false;
+ }
+}
+
inline bool hasOptimizableIndexingForClassInfo(const ClassInfo* classInfo)
{
- return classInfo->typedArrayStorageType != TypedArrayNone;
+ return isTypedView(classInfo->typedArrayStorageType);
}
inline bool hasOptimizableIndexing(Structure* structure)
{
return isOptimizableIndexingType(structure->indexingType())
+ || hasOptimizableIndexingForJSType(structure->typeInfo().type())
|| hasOptimizableIndexingForClassInfo(structure->classInfo());
}
}
}
+inline JITArrayMode jitArrayModeForJSType(JSType type)
+{
+ switch (type) {
+ case DirectArgumentsType:
+ return JITDirectArguments;
+ case ScopedArgumentsType:
+ return JITScopedArguments;
+ default:
+ RELEASE_ASSERT_NOT_REACHED();
+ return JITContiguous;
+ }
+}
+
inline JITArrayMode jitArrayModeForClassInfo(const ClassInfo* classInfo)
{
switch (classInfo->typedArrayStorageType) {
- case TypedArrayInt8:
+ case TypeInt8:
return JITInt8Array;
- case TypedArrayInt16:
+ case TypeInt16:
return JITInt16Array;
- case TypedArrayInt32:
+ case TypeInt32:
return JITInt32Array;
- case TypedArrayUint8:
+ case TypeUint8:
return JITUint8Array;
- case TypedArrayUint8Clamped:
+ case TypeUint8Clamped:
return JITUint8ClampedArray;
- case TypedArrayUint16:
+ case TypeUint16:
return JITUint16Array;
- case TypedArrayUint32:
+ case TypeUint32:
return JITUint32Array;
- case TypedArrayFloat32:
+ case TypeFloat32:
return JITFloat32Array;
- case TypedArrayFloat64:
+ case TypeFloat64:
return JITFloat64Array;
default:
CRASH();
}
}
+inline bool jitArrayModePermitsPut(JITArrayMode mode)
+{
+ switch (mode) {
+ case JITDirectArguments:
+ case JITScopedArguments:
+ // We could support put_by_val on these at some point, but it's just not that profitable
+ // at the moment.
+ return false;
+ default:
+ return true;
+ }
+}
+
+inline TypedArrayType typedArrayTypeForJITArrayMode(JITArrayMode mode)
+{
+ switch (mode) {
+ case JITInt8Array:
+ return TypeInt8;
+ case JITInt16Array:
+ return TypeInt16;
+ case JITInt32Array:
+ return TypeInt32;
+ case JITUint8Array:
+ return TypeUint8;
+ case JITUint8ClampedArray:
+ return TypeUint8Clamped;
+ case JITUint16Array:
+ return TypeUint16;
+ case JITUint32Array:
+ return TypeUint32;
+ case JITFloat32Array:
+ return TypeFloat32;
+ case JITFloat64Array:
+ return TypeFloat64;
+ default:
+ CRASH();
+ return NotTypedArray;
+ }
+}
+
inline JITArrayMode jitArrayModeForStructure(Structure* structure)
{
if (isOptimizableIndexingType(structure->indexingType()))
return jitArrayModeForIndexingType(structure->indexingType());
+ if (hasOptimizableIndexingForJSType(structure->typeInfo().type()))
+ return jitArrayModeForJSType(structure->typeInfo().type());
+
ASSERT(hasOptimizableIndexingForClassInfo(structure->classInfo()));
return jitArrayModeForClassInfo(structure->classInfo());
}