summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Garcia <miguelalfredo.garcia@epfl.ch>2012-03-06 12:26:27 +0100
committerMiguel Garcia <miguelalfredo.garcia@epfl.ch>2012-03-06 12:26:27 +0100
commite328d853a6e0e790da01fedd8122e2875c7f1442 (patch)
tree10d1704d5bd909bb80ef7f4b0059ce347ca0a383
parentd9a85b5e67092fba1c37d8facc6dd2d273c26a27 (diff)
downloadscala-e328d853a6e0e790da01fedd8122e2875c7f1442.tar.gz
scala-e328d853a6e0e790da01fedd8122e2875c7f1442.tar.bz2
scala-e328d853a6e0e790da01fedd8122e2875c7f1442.zip
fewer hops to emit ASTORE and ALOAD
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 0c5debacc7..b8ccccb916 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -1275,7 +1275,19 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid with
genConstant(jcode, const)
case LOAD_ARRAY_ITEM(kind) =>
- jcode.emitALOAD(javaType(kind))
+ if(kind.isRefOrArrayType) { jcode.emitAALOAD() }
+ else {
+ (kind: @unchecked) match {
+ case UNIT => throw new IllegalArgumentException("invalid type for aload " + kind)
+ case BOOL | BYTE => jcode.emitBALOAD()
+ case SHORT => jcode.emitSALOAD()
+ case CHAR => jcode.emitCALOAD()
+ case INT => jcode.emitIALOAD()
+ case LONG => jcode.emitLALOAD()
+ case FLOAT => jcode.emitFALOAD()
+ case DOUBLE => jcode.emitDALOAD()
+ }
+ }
case LOAD_LOCAL(local) =>
jcode.emitLOAD(indexOf(local), javaType(local.kind))
@@ -1294,7 +1306,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid with
javaType(field))
case LOAD_MODULE(module) =>
- // assert(module.isModule, "Expected module: " + module)
+ // assert(module.isModule, "Expected module: " + module)
debuglog("generating LOAD_MODULE for: " + module + " flags: " +
Flags.flagsToString(module.flags));
if (clasz.symbol == module.moduleClass && jmethod.getName() != nme.readResolve.toString)
@@ -1305,7 +1317,19 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid with
javaType(module))
case STORE_ARRAY_ITEM(kind) =>
- jcode emitASTORE javaType(kind)
+ if(kind.isRefOrArrayType) { jcode.emitAASTORE() }
+ else {
+ (kind: @unchecked) match {
+ case UNIT => throw new IllegalArgumentException("invalid type for astore " + kind)
+ case BOOL | BYTE => jcode.emitBASTORE()
+ case SHORT => jcode.emitSASTORE()
+ case CHAR => jcode.emitCASTORE()
+ case INT => jcode.emitIASTORE()
+ case LONG => jcode.emitLASTORE()
+ case FLOAT => jcode.emitFASTORE()
+ case DOUBLE => jcode.emitDASTORE()
+ }
+ }
case STORE_LOCAL(local) =>
jcode.emitSTORE(indexOf(local), javaType(local.kind))