@@ -110,28 +110,39 @@ pub const VSAInstruction = struct {
110110// VSA VM
111111// ═══════════════════════════════════════════════════════════════════════════════
112112
113+ // Import JIT engine for accelerated operations
114+ const vsa_jit = @import ("vsa_jit.zig" );
115+
113116pub const VSAVM = struct {
114117 registers : VSARegisters ,
115118 program : std .ArrayList (VSAInstruction ),
116119 halted : bool = false ,
117120 allocator : std.mem.Allocator ,
118121 cycle_count : u64 = 0 ,
119122
123+ // JIT engine for accelerated VSA operations
124+ jit_engine : ? vsa_jit.JitVSAEngine = null ,
125+ jit_enabled : bool = true ,
126+
120127 pub fn init (allocator : std.mem.Allocator ) VSAVM {
121128 return VSAVM {
122129 .registers = .{},
123- .program = std . ArrayList ( VSAInstruction ). init ( allocator ) ,
130+ .program = .empty ,
124131 .allocator = allocator ,
132+ .jit_engine = vsa_jit .JitVSAEngine .init (allocator ),
125133 };
126134 }
127135
128136 pub fn deinit (self : * VSAVM ) void {
129- self .program .deinit ();
137+ self .program .deinit (self .allocator );
138+ if (self .jit_engine ) | * engine | {
139+ engine .deinit ();
140+ }
130141 }
131142
132143 pub fn loadProgram (self : * VSAVM , instructions : []const VSAInstruction ) ! void {
133144 self .program .clearRetainingCapacity ();
134- try self .program .appendSlice (instructions );
145+ try self .program .appendSlice (self . allocator , instructions );
135146 self .registers .pc = 0 ;
136147 self .halted = false ;
137148 self .cycle_count = 0 ;
@@ -258,6 +269,20 @@ pub const VSAVM = struct {
258269 fn execVDot (self : * VSAVM , inst : VSAInstruction ) void {
259270 var src1 = self .getVReg (inst .src1 ).* ;
260271 var src2 = self .getVReg (inst .src2 ).* ;
272+
273+ // Try JIT-accelerated dot product if enabled
274+ if (self .jit_enabled ) {
275+ if (self .jit_engine ) | * engine | {
276+ if (engine .dotProduct (& src1 , & src2 )) | result | {
277+ self .registers .s0 = result ;
278+ return ;
279+ } else | _ | {
280+ // JIT failed, fall through to scalar
281+ }
282+ }
283+ }
284+
285+ // Scalar fallback
261286 self .registers .s0 = src1 .dotProduct (& src2 );
262287 }
263288
@@ -345,6 +370,32 @@ pub const VSAVM = struct {
345370 dst .* = src1 .add (& permuted );
346371 }
347372
373+ // ═══════════════════════════════════════════════════════════════════════════
374+ // JIT CONTROL
375+ // ═══════════════════════════════════════════════════════════════════════════
376+
377+ /// Enable or disable JIT acceleration
378+ pub fn setJitEnabled (self : * VSAVM , enabled : bool ) void {
379+ self .jit_enabled = enabled ;
380+ }
381+
382+ /// Get JIT statistics (null if JIT not initialized)
383+ pub fn getJitStats (self : * const VSAVM ) ? vsa_jit.JitVSAEngine.Stats {
384+ if (self .jit_engine ) | * engine | {
385+ return engine .getStats ();
386+ }
387+ return null ;
388+ }
389+
390+ /// Print JIT statistics
391+ pub fn printJitStats (self : * const VSAVM ) void {
392+ if (self .jit_engine ) | * engine | {
393+ engine .printStats ();
394+ } else {
395+ std .debug .print ("JIT engine not initialized\n " , .{});
396+ }
397+ }
398+
348399 // ═══════════════════════════════════════════════════════════════════════════
349400 // DEBUG
350401 // ═══════════════════════════════════════════════════════════════════════════
@@ -369,6 +420,15 @@ pub const VSAVM = struct {
369420 std .debug .print ("║ pc: {}, cycles: {} ║\n " , .{ self .registers .pc , self .cycle_count });
370421 std .debug .print ("║ halted: {} ║\n " , .{self .halted });
371422 std .debug .print ("║ total memory: {} bytes ║\n " , .{self .registers .total_packed_bytes });
423+ std .debug .print ("╠══════════════════════════════════════════╣\n " , .{});
424+ std .debug .print ("║ JIT ACCELERATION: ║\n " , .{});
425+ std .debug .print ("║ enabled: {} ║\n " , .{self .jit_enabled });
426+ if (self .jit_engine ) | * engine | {
427+ const stats = engine .getStats ();
428+ std .debug .print ("║ ops: {}, hits: {}, rate: {d:.1}% ║\n " , .{ stats .total_ops , stats .jit_hits , stats .hit_rate });
429+ } else {
430+ std .debug .print ("║ engine: not initialized ║\n " , .{});
431+ }
372432 std .debug .print ("╚══════════════════════════════════════════╝\n\n " , .{});
373433 }
374434};
0 commit comments