     vec3 output_vec3[MASM_OUTPUT_CHUNK_SIZE];
     vec4 output_vec4[MASM_OUTPUT_CHUNK_SIZE];
 
+    int jump_stack[MASM_JUMP_STACK_SIZE];
+    int jump_stack_pointer = 0;
+
     int target = 0;
     int source = 0;
     int temp1 = 0;

#define MASM_DIRECTIVE_POW_VEC2_FLOAT 28
#define MASM_DIRECTIVE_POW_VEC3_FLOAT 29
#define MASM_DIRECTIVE_POW_VEC4_FLOAT 30
#define MASM_TARGET_DIFFUSECOLOR 0
#define MASM_TARGET_NORMAL 1

#define MASM_OUTPUT_CHUNK_SIZE 4
#define MASM_REGISTER_CHUNK_SIZE 16


                target = AsmProgram[i++];
                memory_vec4[target] = pow(memory_vec4[temp1], vec4(memory_float[temp2]));
            break;
            //################################################################//
            case MASM_DIRECTIVE_JUMP_ABSOLUTE:
                temp1 = AsmProgram[i++]; // raw address into the assembly
                jump_stack[jump_stack_pointer++] = i;
                i = temp1;
            break;
            case MASM_DIRECTIVE_JUMP_RELATIVE:
                temp1 = AsmProgram[i++];
                jump_stack[jump_stack_pointer++] = i;
                i += temp1;
            break;
            case MASM_DIRECTIVE_JUMP_BACK:
                i = jump_stack[--jump_stack_pointer]; // beautiful!
            break;
        }
    }
    mo.diffuseColor = output_vec3[MASM_TARGET_DIFFUSECOLOR];
