- Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
Milestone
Description
Perhaps a heuristic to inline array_apply
/ array_update
/ array_length
when we know the specific array type (reference vs primitive) could do better.
@inline final def hashArray[T](s: Array[T], hashF: T => Unit): Unit = { extend(s.length) var i = 0 while (i < s.length) { hashF(s(i)) i += 1 } }
def hashValueParameters(valueParameters: Array[ParameterList]) = hashArray(valueParameters, hashValueParameterList)
public hashValueParameters([Lxsbti/api/ParameterList;)V // parameter final valueParameters GETSTATIC scala/runtime/ScalaRunTime$.MODULE$ : Lscala/runtime/ScalaRunTime$; ALOAD 1 INVOKEVIRTUAL scala/runtime/ScalaRunTime$.array_length (Ljava/lang/Object;)I ISTORE 3 ALOAD 0 GETSTATIC scala/util/hashing/MurmurHash3$.MODULE$ : Lscala/util/hashing/MurmurHash3$; ALOAD 0 GETFIELD xsbt/api/HashAPI.xsbt$api$HashAPI$$hash : I ILOAD 3 INVOKEVIRTUAL scala/util/hashing/MurmurHash3$.mix (II)I PUTFIELD xsbt/api/HashAPI.xsbt$api$HashAPI$$hash : I ICONST_0 ISTORE 2 L0 ILOAD 2 GETSTATIC scala/runtime/ScalaRunTime$.MODULE$ : Lscala/runtime/ScalaRunTime$; ALOAD 1 INVOKEVIRTUAL scala/runtime/ScalaRunTime$.array_length (Ljava/lang/Object;)I IF_ICMPGE L1 GETSTATIC scala/runtime/ScalaRunTime$.MODULE$ : Lscala/runtime/ScalaRunTime$; ALOAD 1 ILOAD 2 INVOKEVIRTUAL scala/runtime/ScalaRunTime$.array_apply (Ljava/lang/Object;I)Ljava/lang/Object; CHECKCAST xsbti/api/ParameterList ASTORE 4 ALOAD 0 ALOAD 4 INVOKESTATIC xsbt/api/HashAPI.$anonfun$hashValueParameters$1 (Lxsbt/api/HashAPI;Lxsbti/api/ParameterList;)V ILOAD 2 ICONST_1 IADD ISTORE 2 GOTO L0 L1 RETURN MAXSTACK = 4 MAXLOCALS = 5