                 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];

#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


    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;
