From 109d5599794e73a7e7c88d834c4708fcddb367ad Mon Sep 17 00:00:00 2001
From: log2 <logtwo2@gmail.com>
Date: Mon, 10 Nov 2014 19:02:51 +0100
Subject: [PATCH] Reduced computational weight of bytecode generation by moving
 reflection upon constructor in ByteCode's constructor (was in
 newInstruction() method)

---
 .../internal/instruction/InstructionSet.java  | 24 ++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/instruction/InstructionSet.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/instruction/InstructionSet.java
index 4faf88df..976ef32d 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/instruction/InstructionSet.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/instruction/InstructionSet.java
@@ -629,6 +629,8 @@ public class InstructionSet{
 
       private StoreSpec storeSpec;
 
+      private Constructor<?> constructor;
+
       private ByteCode(Class<?> _class, LoadSpec _loadSpec, StoreSpec _storeSpec, ImmediateSpec _immediate, PopSpec _pop,
             PushSpec _push, Operator _operator) {
          clazz = _class;
@@ -639,6 +641,21 @@ public class InstructionSet{
 
          loadSpec = _loadSpec;
          storeSpec = _storeSpec;
+         if (clazz != null) {
+
+            try {
+               constructor = clazz.getDeclaredConstructor(MethodModel.class, ByteReader.class, boolean.class);
+            } catch (final SecurityException e) {
+               // TODO Auto-generated catch block
+               e.printStackTrace();
+            } catch (final NoSuchMethodException e) {
+               // TODO Auto-generated catch block
+               e.printStackTrace();
+            } catch (final IllegalArgumentException e) {
+               // TODO Auto-generated catch block
+               e.printStackTrace();
+            }
+         }
       }
 
       private ByteCode(Class<?> _class, ImmediateSpec _immediate) {
@@ -731,18 +748,13 @@ public class InstructionSet{
 
       public Instruction newInstruction(MethodModel _methodModel, ByteReader byteReader, boolean _isWide) {
          Instruction newInstruction = null;
-         if (clazz != null) {
-
+         if (constructor != null) {
             try {
-               final Constructor<?> constructor = clazz.getDeclaredConstructor(MethodModel.class, ByteReader.class, boolean.class);
                newInstruction = (Instruction) constructor.newInstance(_methodModel, byteReader, _isWide);
                newInstruction.setLength(byteReader.getOffset() - newInstruction.getThisPC());
             } catch (final SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
-            } catch (final NoSuchMethodException e) {
-               // TODO Auto-generated catch block
-               e.printStackTrace();
             } catch (final IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
-- 
GitLab