+static
+void* __builtin_newarray(s4 base_size,
+ s4 size,
+ bool references,
+ int elementsize,
+ int arraytype)
+{
+ java_arrayheader *a;
+#ifdef SIZE_FROM_CLASSINFO
+ s4 alignedsize = align_size(base_size + (size-1) * elementsize);
+ a = heap_allocate ( alignedsize, true, NULL );
+#else
+ a = heap_allocate ( sizeof(java_objectarray) + (size-1) * elementsize,
+ references,
+ NULL);
+#endif
+ if (!a) return NULL;
+
+#ifdef SIZE_FROM_CLASSINFO
+ memset(a, 0, alignedsize);
+#else
+ memset(a, 0, base_size + (size-1) * elementsize);
+#endif
+
+ a -> objheader.vftbl = class_array -> vftbl;
+ a -> size = size;
+#ifdef SIZE_FROM_CLASSINFO
+ a -> alignedsize = alignedsize;
+#endif
+ a -> arraytype = arraytype;
+
+ return a;
+}
+
+